Watch the build
Architecture
Overview
Overview
This project takes a pile of loose parts to a bench-verified quadcopter: a hand-built 6-channel Arduino remote, a matching nRF24L01 receiver, and an Arduino Uno flight controller with an MPU-6050 gyro that drives four brushless motors.
It is written as a bring-up log, not just a wiring diagram. Every stage has a small test sketch, an expected result, and the real errors I hit along the way.
What you will learn
- How a 2.4 GHz nRF24L01 radio link carries six stick, switch and knob channels
- How to prove each part works before you connect the next one
- How a receiver's servo-style pulses feed a flight controller
- How to calibrate the flight controller and check motor directions safely
Who this is for: builders comfortable with Arduino sketches and basic wiring. Difficulty is Advanced because it involves a LiPo battery, ESCs and spinning motors.
What this is not: it is not a from-scratch flight controller. The stabilisation firmware is the community YMFC-AL flight controller by Joop Brokking (www.brokking.net). It is not included here — you download it from its author. This project covers the radio side, the test tooling, the wiring, and the debugging that gets that firmware running with a DIY receiver.
In words: the remote reads your controls and sends them over the radio. The receiver turns them back into normal RC pulses. The flight controller reads those pulses, measures how the frame is tilting with the gyro, and adjusts the four motors many times a second to keep the drone stable.
How the radio link works
- Radio: nRF24L01+ at 2.4 GHz, channel 108, 250 kbps, CRC-8, maximum power, same address on both ends.
- Auto-acknowledge is OFF in the flying configuration. The remote streams packets one way and does not wait for a reply. The link-check sketches turn it ON temporarily, only as a diagnostic.
- Each packet is 6 bytes (0–255 each): throttle, yaw, pitch, roll, aux1, aux2.
- The receiver converts each byte to a 1000–2000 µs pulse with the Servo library — the same signal a hobby receiver produces.
- Failsafe: if no packet arrives for about 1 second, the receiver sets throttle to about 1047 µs and re-centres the sticks near 1500 µs.
Channel map
- CH1 roll: right stick X → remote A3 → receiver D9
- CH2 pitch: right stick Y → remote A2 → receiver D2
- CH3 throttle: left stick Y → remote A0 → receiver D3
- CH4 yaw: left stick X → remote A1 → receiver D4
- CH5 aux1: toggle → remote D2 → receiver D5
- CH6 aux2: potentiometer → remote A7 → receiver D6
Only CH1–CH4 go to the flight controller. CH5 and CH6 are free for extras.
FAQ
Can I use an Arduino Uno for the remote? Yes. A7 does not exist on the Uno, so move AUX2 to A5. A ready-made variant is in the downloads.
Why is auto-acknowledge off? The remote streams one-way without waiting for replies, which keeps latency low. Turn it on only for diagnostics.
Can I use this receiver with Betaflight or iNav? Not directly. It outputs six separate PWM signals, while those flight controllers expect one wire (PPM, SBUS and similar). A PPM-output version of the receiver would be the next step.
Can I use a 4S battery? Not with this build. The battery-voltage divider and the firmware are set up for 3S.
Do I need the throttle stick "down" to be the lowest value? Yes. Throttle fully down must read below 1050 µs at the flight controller, or the drone will not arm.
Components & parts list
Everything you need to build this. Links help support the channel at no extra cost to you.
| Part | Qty | Price | ||
|---|---|---|---|---|
Arduino NanoATmega328P, CH340, headers soldered — Transmitter | 1 | ₹310 | Buyad | |
2-Axis Joystick ModuleAnalog thumb joystick | 2 | ₹180 | Buyad | |
10K PotentiometerRotary, with knob | 1 | ₹140 | Buyad | |
Mini Toggle Switch SPDTARM and MODE switches | 1 | ₹130 | Buyad | |
Rocker SwitchMain power on/off | 1 | ₹120 | Buyad | |
Tactile Push ButtonsRoll/pitch/yaw trims | 6 | ₹130 | Buyad | |
2S LiPo 7.4V500–1000 mAh — Transmitter battery | 1 | ₹550 | Buyad | |
5mm LED + 330Ω ResistorPower indicator | 1 | ₹120 | Buyad | |
Perfboard or EnclosureTo mount everything | 1 | ₹150 | Buyad | |
Arduino Nano (Receiver)Same as the transmitter — on the drone | 1 | ₹310 | Buyad | |
Male Header Strip 2.54mm3-pin output header for the 6 channels | 1 | ₹120 | Buyad | |
NRF24L01+ PA+LNA with SMA AntennaLong-range version — one for each side | 2 | ₹420 | Buyad | |
NRF24 3.3V Adapter BoardSocket adapter with onboard regulator | 2 | ₹150 | Buyad | |
Electrolytic Capacitor 100–470µFOne across VCC–GND on each radio | 2 | ₹110 | Buyad | |
F450 Frame with Integrated PCBBottom plate doubles as power distribution | 1 | ₹850 | Buyad | |
A2212 1400KV Motors + 30A ESCs + 1045 PropsCombo set of 4 | 4 sets | ₹3,450 | Buyad | |
Spare 1045 Props (CW + CCW)You will break some | 2–3 pairs | ₹150 | Buyad | |
3S LiPo 11.1V2200–3800 mAh, 20C or higher, XT60 | 1–2 | ₹1,480 | Buyad | |
Arduino UNO R3Flight controller in the YMFC-3D schematic | 1 | ₹490 | Buyad | |
MPU-6050 (GY-521)Gyro and accelerometer | 1 | ₹220 | Buyad | |
Resistors 330Ω, 1kΩ, 1.5kΩLED and battery voltage divider | 1 each | ₹140 | Buyad | |
1N4001 DiodeD1 on the schematic | 1 | ₹100 | Buyad | |
XT60 Connector PigtailBattery to frame | 2 | ₹190 | Buyad | |
LiPo Balance Charger (iMAX B6 type)Essential — nothing else charges the 3S pack safely | 1 | ₹1,550 | Buy | |
LiPo Safe BagFire-safe charging and storage bag | 1 | ₹290 | Buy | |
LiPo Voltage Alarm (1–8S)Low-voltage buzzer alarm | 1 | ₹230 | Buy | |
Battery StrapHolds LiPo to the frame | 2 | ₹150 | Buy | |
Dupont Jumper WiresMale-female assortment | 1 set | ₹210 | Buy | |
Soldering Iron Kit, Heat Shrink, Zip TiesBasic soldering setup | 1 | ₹430 | Buy | |
MultimeterDigital multimeter for debugging | 1 | ₹250 | Buy | |
Vibration Damping Foam for MPU-6050Isolates gyro from motor vibrations | 1 | ₹180 | Buy | |
| Core build total (required parts): | -- | |||
| Total of checked items: | -- | |||
Some links are affiliate links. Prices shown are indicative — check the store for current pricing.
