Old and damaged flight controller transmitter - Futaba 6 - given new life using digital technology. Uses ESP32-S3, NRF24L01 radio and ST7735S 80x160 display with Arduino framework in PlatformIO. Transmitting to Arduino Nano to control servos. Created for my dad.
Case: Old "RipMax M Series Futaba 6" controller (transmitter) case with 5 potentiometers, 3 switches and 1 button. Plus power switch.(Example of ideal state on YT)
Microprocessor: ESP32-S3 N16R8 (obviously overkill, but whatever, dads idea). (Amazon)
Radio: NRF24L01.(Amazon)
Display: ST7735S 80x160.(Amazon)
For now some Arduino Nano with another NRF24L01P is used. No pins listed, no schematic, but photos are fairly simple.
- Project managed by PlatformIO.
- Framework: Arduino. (both transmitter and receiver)
- Libraries:
- Adafruit ST7735 library (and dependencies, like Adafruit GFX) (transmitter only)
- RF24 library (both transmitter and receiver)
- Arduino Servo library (receiver only)
- Transmitter reads state from the controls via potentiometers, using analog inputs. The values are normalized and transformed to precalculated values for receiver use, like number of microseconds to control the servos. That way the receiver doesn't need to be configured - at least for now.
- Transmitter presents user with simple UI on the small display, split into pages which can be changed with the button. Some pages are hidden as "advanced", requiring user to hold the button during power-on to enable them.
- The pages:
- Info - presenting batteries (both transmitter and receiver) and signal strength rating.
- Raw - presenting raw analog values, debug purposes.
- Centered - presenting values with bias/offset, zero in configured position; useful for physical axis calibration.
- Calibrate - allowing to configure analog min/center/max reference values on each control, using microseconds min/center/max for the servos for the receiver.
- Reverse - allowing to reverse the channels.
- Status packet is requested from the receiver in set intervals, to inform the user about battery voltage and signal strength rating.
- There is no clear signal strength value when working with the RF24 chip, so special "rating" value is calculated, taking into the account:
- Count of good/weak probes, using
testRPD()
which returns boolean: whether a signal (carrier or otherwise) greater than or equal to -64dBm is present on the channel. - Count of expected signal packets in given interval.
- Latency/time since last status packet.
- Again: the "rating" value is scuffed and not very useful, but it's better than nothing.
- Count of good/weak probes, using
- EEPROM is used to store some configuration. Default values are specific to my unit.
Interesting:
- https://community.platformio.org/t/new-esp32-s3-n16r8/41568/4
- https://electronoobs.com/eng_robotica_tut4_2.php
- https://github.com/atomic14/esp32-s3-pinouts
- "Hello" packet: transmitter asking for receiver, receiver accepts.
- Automatic raw values calibration (moving stick to get min/max, and use mid as center).
- Update README to be actually useful and nice.
- Get rid of warnings from 3rd party code.