This is probably the smallest ExpressLRS transmitter possible, with Hall Sensor gimbals. It is based on the work by kkbin for his SimpleTX (the gimbal rings are from his design), and the radio runs on an Arduino Nano running my fork of his project - modified for ELRS3.x
https://github.com/dbloemhard/Arduino-Transmitter-for-ELRS3.x
The TX module is a $10 ExpressLRS Nano receiver, one of the ones with a 100mw PA on it. When flashed with a TX firmware, this becomes a tiny little 100mw ELRS transmitter module! There are no bells and whistles on it (like OLED display, ELRS backpack or Bluetooth joystick) but it is fine for general whooping around the house. 100mw should be enough for outdoor flying too, but I have not done any proper range tests.
Total cost for me was under $15 because i had the gimbals lying around, and some switches and wires/plugs. Betafpv sells potentiometer gimbals for $6 each so you should theoretically be able to buy all the parts for this for under $30... But i suspect most of us have lots of these parts lying around.
Wiring for this setup looks messy but if you take it one at a time there isn't that much to it. If you can wire up a flight controller you should be able to do this. I am making a build video but its taking a little more time than i was expecting - will update this Thing when the video is published.
I added wiring diagrams for the various gimbals i have checked - note that they all seem to use unexpected wiring colors (red for ground etc), and this can be confusing. Double and triple check your positive and negative wires against the pictures or you might blow the hall sensors.
For Radiomaster/Betafpv gimbals, it is quite annoying/difficult to split 3.3v and ground into 4 separate outputs. So I used a bit of 1.27mm breadboard to make a power distribution for the gimbals and to put 1.25mm jst plugs (tinywhoop motor plugs!) so the gimbals can plug into that. You can also just solder directly but be careful for wiring proximity to the hall sensors - being this small it is hard to keep the sensors away from the magnetic fields in those power lines.
I did not connect the Receiver (TX module) TX pin to the Arduino as this prevents flashing the arduino for updates. There isn't any need for it anyway, we arent reading telemetry from ELRS (Use your OSD for that info!)
Important note: I have been researching and it seems that Arduinos dont like powering 5v buzzers on their output pins like i am doing on my first build. If its a small buzzer (less than 9mm diameter, 20ma current) it should be fine, but it might be better to leave the buzzer off and just use the LED flash to determine if the battery is flat. This draws 100ma at runtime, so should be good for several hours use even with a 2S 350mah battery. Its more of a spontaneous Geurilla Whoop controller anyway so i doubt you would be flying with it all day!
I have updated the circuit diagrams to show the recommended buzzer wiring. I had some spare mosfets from a brushless ESC repair that were easy enough to solder onto a bit of the breadboard so i could use them to switch the buzzer. This also means i can use a passive buzzer (building my second TinyTX i realised i only had a passive buzzer). But this gives me some room to play with tones... will be updating the code with support for passive buzzers, and startup tones ;-)
There are many ways to flash the receiver (connect to its wifi, connect it to a flight controller and use Betaflight Passthrough, or connecting to a USB-TTL programmer). I used the USB-TTL programmer since i had that available.
Before you flash it, you might want to connect it to a flight controller and confirm it works as a receiver. Then, the first step in flashing it to be a transmitter is to boot up the receiver and wait for it to enable the wifi. Then connect to the receiver's wifi, go to 10.0.0.1/hardware.json and take a backup of this file. This is the configuration of the receiver... its CLI Dump if you want to compare it to Betaflight!
The ExpressLRS configurator does not have the option for flashing DIY devices AFAIK, and who wants to use that big bloated program when there is a nice convenient web flasher: https://expresslrs.github.io/web-flasher/
Select DIY devices, 2.4ghz transmitter, and then "Generic ESP8285 Full-duplex 2.4GHz RX as TX"
Select your chosen flashing method, and then add your bind phrase and wifi configuration settings (dont touch the invert UART setting).
After flashing, wait for it to start wifi again. Then go to 10.0.0.1/hardware.html (note this is slightly different from the previous location!) and upload the json file you saved. Hit Update at the bottom of the page - a message will be shown saying it was successful; this will ensure you have all the power output set correctly on your new 'TX Module'
In my case the RX(TX) needed to be power cycled.
After building it, its time to flash the Arduino. Go to https://github.com/dbloemhard/Arduino-Transmitter-for-ELRS3.x and click the green "Code" button and select download zip (or clone the repository if you know what you are doing there). You really only need the SimpleTX folder in that.
Open Arduino IDE and load SimpleTX/SimpleTX.ino (or double click the .ino file).
Once you have got the flashing bit worked out and assembled the parts into the shell, its time to calibrate the gimbals. Go into SimpleTX.ino line 32/33//#define DEBUG // if not commented out, Serial.print() is active! For debugging only!!
//#define GIMBAL_CALIBRATION // if not commented out, Serial.print() is active! For debugging only!!
And delete the leading "//" for both lines.
Now upload this sketch to your Arduino and show the Serial monitor. It may be hard to read the output here as it is scrolling past really quickly but the process is as follows:
Now you can go back into the SimpleTX.ino, add the "//" back to those lines, and upload this to your Arduino. The gimbals should be calibrated.
Power is on when you plug in a lipo. A 2S lipo should slot into the hole at the bottom of the TX. Once the LED is on the transmitter is ready to use. LED will flash slowly if battery is low. At empty levels the LED will flash quickly and the buzzer will sound if you have one. Also if you dont move the sticks once in 5 minutes, the led will flash/buzzer will beep. So turn it off if you are done flying!
You can use the stick position on the right stick while powering on (plugging in a Lipo) to select 4 different 'modes':
Down left initiates bind from the TX (power cycle to go back to normal)
Down right initiates TX module wifi (power cycle to disable)
Up left is for default 250hz/100mw dynamic power
Up right is for 'long range' 50hz/100mw fixed power
I added a zip file which is an obj export of my design. I did this in Tinkercad, so i cant export step files unfortunately. But if you can use this and improve my simple box design, that would be cool!
Tiny_transmitter.zip | 277.2KB | |
Tiny_transmitter3.stl | 543.3KB | |
Tiny_transmitter3_back.stl | 468.9KB | |
Tiny_transmitter_antenna.stl | 280.2KB | |
Tiny_transmitter_Battery_Tray.stl | 360.9KB | |
Tiny_transmitter_body_with_antenna_hole.stl | 509.0KB | |
Tiny_transmitter_face_plate.stl | 173.7KB | |
Tiny_transmitter_XT30_plug.stl | 26.8KB |