This project is aimed to create a force feedback system for fixed wing RC planes. The actual forces imparted both by the controllers hand on the joystick and the control surfaces against the servos will be measured and summed together to create the feeling that the user is directly pushing or pulling the airplanes control surfaces.
For now on the control side I will be using a 3D printed joystick that is actuated by servo motors. These servo motors will generate the resistance and feedback to the controller. In-line with servo control rods will be force gauges to measure the force being imparted by the controller. On the plane side the servos on the elevator and ailerons will have force gauges in-line with the servos measuring the force of the wind against the surface.
To give the effect of feedback, the force measured on the joystick and the force measured on the plane's control surface will be summed together. The net force from this sum will then be translated into a velocity term for both servos in the joystick and on the plane. This velocity is then integrated into a position and sent to the servos.
Loosely the dynamics are represented as:
v = (force1 + force2)*gain; // gain is a coefficient to tune in how the system reacts x = x + dt*v; // dt is the period the system is running. Target is 60Hz
In general the control surfaces will be acting in the opposite direction of the user input, so the net force will be small or zero (given no violent control commands like aerobatics or such). Thus the servos will not move much as the velocity term will be small. However the user will still need to apply a force to hold the control surface.
Of course to make this whole system work there needs to be a wireless link to ferry data between the plane and the joystick so that the next velocity and position values can be calculated. For now I am planning to use a cheap 433MHz module pair that emulates a serial port. The boards are completely transparent to a connected micro-controller, data is sent to them over a serial port and they handle all communication details. They can be configured via AT commands for parameters such as baud rate, channel used, transmit power, etc. The module used is listed in the components sections.
This is of course a cheap module and the usage will be in a plane with a noisy electrical system and at a significant distance, so if I encounter signal integrity issues I will try to switch over to having serial data carried over a FrSky Taranis X9D.