Wery easy, let's get to the point. Check the last version for more. Let's go step by step and build the ultra low cost drone using some wood sticks, the Arduino, the MPU6050, NRF24 radio modules and the old radio transmitter.
by: ELECTRONOOBS on 2026-08-16

1 x Arduino NANO LINK eBay
1 x NRF24: LINK eBay
4 x brushed coreless DC motors: LINK eBay
4 x plastic gears: LINK eBay
1 x MOU6050: LINK eBay
4 x SI2302: LINK eBay
4 x 1N5819 schottky: LINK eBay
4 x 1K resistor: LINK eBay
1 x 3.7V small lipo: LINK eBay
5 x 100uF capacitor: LINK eBay
1 x second hand controller (this is just an example): LINK eBay
1 x NRF24 + PA: LINK eBay
1 x Arduino NANO LINK eBay
1 x 7.4V battery: LINK eBay
1 x external 3.3V regulator: LINK eBay
Wires LINK eBay
Wire, soldering iron, solder, etc...

The transmitter is the same as in this past tutorial so check that for more information. Just open an old radio controller, and solder the next circuit. Then upload the transmitter code that you could also find below ready to download. Make sure you will send the middle value for each potentiometer which for 8 bits is 127.

Make the connections as below. Before you connect the NRF24 module, make sure the buck converter will give you around 3.3 or 3.4 volts. Then connect the radio module and all the other connections. Connect the battery 7.4V to the Vin of the arduino. Then upload the code you have above. The 2 switches are extra. You could not use those if you want. The battery could be up to 15V.
/*A basic 4 channel transmitter using the nRF24L01 module.*/
/* Like, share and subscribe, ELECTRONOOBS */
/* http://www.youtube/c/electronoobs */
/* First we include the libraries. Download it from
my webpage if you donw have the NRF24 library http://localhost/electronoobs/eng_arduino_NRF24_lib.php*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*Create a unique pipe out. The receiver has to
wear the same unique code*/
const uint64_t pipeOut = 0xE8E8F0F0E1LL;
RF24 radio(9, 10); // select CSN pin
// The sizeof this struct should not exceed 32 bytes
// This gives us up to 32 8 bits channals
struct MyData {
byte throttle;
byte yaw;
byte pitch;
byte roll;
byte AUX1;
byte AUX2;
};
MyData data;
void resetData()
{
//This are the start values of each channal
// Throttle is 0 in order to stop the motors
//127 is the middle value of the 10ADC.
data.throttle = 0;
data.yaw = 127;
data.pitch = 127;
data.roll = 127;
data.AUX1 = 0;
data.AUX2 = 0;
}
void setup()
{
//Start everything up
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipeOut);
resetData();
}
/**************************************************/
// Returns a corrected value for a joystick position that takes into account
// the values of the outer extents and the middle of the joystick range.
int mapJoystickValues(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
// The calibration numbers used here should be measured
// for your joysticks till they send the correct values.
data.throttle = mapJoystickValues( analogRead(A0), 0, 127, 255, true ); //Change this values and calibrate the sent data
data.yaw = mapJoystickValues( analogRead(A1), 0, 127, 255, true ); // true or false in order to invert the joystick direction
data.pitch = mapJoystickValues( analogRead(A2), 0, 127, 255, true ); //0 low value, 127 middle value, 255 top value
data.roll = mapJoystickValues( analogRead(A3), 0, 127, 255, true );
data.AUX1 = digitalRead(7); //These are digital values so 0 and 1 maped in the receiver code to 0 to 255
data.AUX2 = digitalRead(8);
radio.write(&data, sizeof(MyData));
}

The receiver is simple. We won't use a 3.3V voltage regulator. Jsut connect the 3.7V from the LIPO to the NRF24 mdoule and to the 5V pin of the Arduino. Don't worry, the Arduino could work with 3.7V. Also, add a big capacitor at the battery output so we will prevent big current spikes from the motor that could reset the microcontroller. Place the MPU6050 in the position shown below so that will be the front of the drone.

Make sure the propellers will spin in the directions below and that the air will push downwards. If not, just swap the wires for the motors. Remember to share GND with all the components. To upload the code you will ned an FTDI module like this one.

As for the body, try to make it as light as you can. My final version was made using barbeque wood sticks as you can see below. I've glued the sticks to a basla wood plate using hot glue and then I secured in place the PCB. You could also download the STL file for the 3D body below.

In the download links above, you will also find the MultiWii Java platform for 32 and 64 bits. After you uplaod the code to the flight controller, connect the FTDI module to the Arduino Pro Mini and open the Java platform. Open the COM of the drone and calibrate the acdelerometer, change settings, etc.
Now, place the drone flat, put throttle to minimum and yaw to maximum for 3 seconds and activate the motors. Once the motors are armed, increase throttle and see the drone fly.
TO HAVE IN MIND (problems)
- If the Arduino resets itself, add a bigger capacitor at the input.
- If radio connection is bad, I've soldered a thin wire to the NRF24 PCB.
- Try to remove any extra weight.
- Use small 3.7V battery, 200mAh
- Before the flight, test with the Java platform the IMU data, and the received values for each channel.
Leave a comment
Please login in order to comment.