This is a record of how a student team built a research prototype, not a certified product or a guarantee of safe flight. You are responsible for your own build and for testing it safely. Parts marked "to be confirmed by team" still need detail from us.
Stage 00
Safety, tools and LiPo handling
A 450 mm drone with 10-inch propellers and a 60C LiPo can cause serious injury and fire. Set these habits before you touch a part.
You need
Safety glasses, fire-safe LiPo bag, balance charger, LiPo voltage alarm, multimeter, soldering station, thread lock, ST-Link programmer, oscilloscope if you can borrow one
Steps
Read the whole tutorial once before buying anything.
Agree one rule for the team: propellers stay off unless the drone is on a rig or in an open flying area.
Charge only with a balance charger, attended, in a fire-safe bag. Never charge or fly a swollen or damaged pack.
Keep a separate power switch or a clear way to unplug the battery fast.
Check your national drone rules before any outdoor test.
Standard practice
These LiPo and workshop steps are general good practice rather than steps from our report. Follow your charger and battery instructions.
Check before moving on
Stage 01
Parts list and sourcing
Parts must suit each other. The motor, propeller, ESC and battery are one system. Our list came from talking to experienced builders.
Buy the transmitter set: ESP32 Devkit V1, 2 joysticks, ADS1115, 0.96-inch SSD1306 OLED, a second nRF24L01+PA+LNA, an 18650 cell and its charging and regulator parts.
Buy power parts: MP1584 buck converter, a power distribution board, ceramic and electrolytic capacitors, and silicone wire.
Test what you can on arrival. Read each sensor's ID register, because identical-looking boards can contain different chips.
Wire and connector sizes
The report does not list exact wire gauges, connector types or capacitor values. To be confirmed by team
Consider better gimbals from the start
Thumb joysticks are why we could not hold a hover. If you want manual hover, budget for Hall-effect gimbals instead.
A clean power rail is what stops sensors freezing when the motors spin up.
You need
Base PCB or breadboard for early tests, STM32H743VIT6 board, buck converter, capacitors, multimeter. See the schematics and pin tables
Steps
Set the MP1584 output to 5 V with a multimeter before connecting anything to it.
Feed the 5 V rail to the STM32 board and ESP32. Their onboard regulators supply 3.3 V to logic.
Solder ceramic and electrolytic capacitors right across VCC and GND at each sensitive sensor and at the STM32 rail.
Give the radio a stable 3.3 V supply, because it needs clean power at full transmit strength.
Wire the battery voltage divider to the ADC (4:1 in the firmware).
Wire the peripherals using the pin tables. Keep power leads away from the signal lines.
Power up without sensors first, and measure each rail.
Battery monitoring is not active in the current code
In main.c, the firmware reads the ADC, discards the result and sets battery_voltage = 13.2f. The dashboard therefore always shows 13.2 V and the low-battery failsafe can never trigger. Until this is fixed, do not trust that reading. Use a physical LiPo alarm and a flight timer, and land early.
PCB files
The report has the schematic, but the PCB design files are not in the repository yet. To be confirmed by team
Mount the flight controller at the balance point of the frame, on layers of foam tape instead of rigid standoffs. This stops motor vibration reaching the IMU.
Bolt the 3D-printed mast to the top deck and mount the magnetometer on it, away from motors, ESCs and power wiring.
Twist the magnetometer's I2C wires together and route them around the frame's edge, away from high-current leads.
Place a small piece of open-cell foam over the barometer's opening, to block propeller wash without sealing it.
Mount the radio and telemetry ESP32 on the lower deck. Solder the UART connection between the ESP32 and STM32, crossing TX to RX.
Mast and case models
The 3D print files are not in the repository yet. To be confirmed by team
Your hands are part of the control system. This stage builds the link between you and the drone.
You need
ESP32 Devkit V1, 2 joysticks, ADS1115, SSD1306 OLED, nRF24L01+PA+LNA, 18650 cell with charging and regulation, Arduino IDE 2
Steps
Wire the ADS1115 and OLED to I2C (SDA 21, SCL 22) and the radio to SPI (SCK 18, MISO 19, MOSI 23, CE 4, CSN 5). Power the joysticks from 3.3 V.
Connect the joysticks to the ADC: A0 yaw, A1 throttle, A2 roll, A3 pitch.
In Arduino IDE, install RF24, Adafruit_ADS1X15, Adafruit_SSD1306 and Adafruit_GFX.
Open AMD24 mini transmitter/ESP32_Remote/ESP32_Remote.ino and flash it.
Release the sticks and read the raw centre values. Update ADC_YAW_MID, ADC_PITCH_MID and ADC_ROLL_MID to match your own joysticks, along with ADC_MAX if needed.
Confirm the display reads 0 at centre and that throttle runs from 1000 to 2000.
Power the flight controller and check that the signal indicator shows a link.
Transmitter schematic. Select to enlarge.
Battery and case details
The exact charging and regulator circuit and the case model are not documented in the report. Use a protected cell and a proper charger module. To be confirmed by team
This gives you eyes on the drone: live attitude, PID sliders and magnetometer calibration.
You need
ESP32-WROOM-32, PC with Node.js 18 or newer, a 2.4 GHz Wi-Fi network or hotspot
Steps
In Arduino IDE, install FastLED and open Aeronexus telemetry/ESP32_Telemetry.ino. Flash it.
Run the dashboard server, shown below. It serves the site on port 3000 and listens for the drone on TCP port 5000.
Change the default fleet admin password and drone PINs in the server code, before using a shared network.
With no saved Wi-Fi, the ESP32 starts its own Aeronexus-Setup network. Connect to it, then follow the setup in the dashboard's fleet page to send your Wi-Fi details and PC's IP address.
When the ESP32 reconnects, assign the new connection a drone name in the fleet page.
Alternatively, connect over USB. The server auto-detects the STM32 as a direct connection.
Tilt the frame by hand and watch the attitude display respond.
cd "Aeronexus dashboard"
npm install
npm start
# then open http://localhost:3000
Command dashboard.
Check before moving on
Stage 09
Balance and calibrate
The firmware assumes a balanced drone and accurate sensors. These steps make that true.
You need
String, bubble level, dashboard running
Steps
Balance: with everything installed, including the battery, hang the drone from its centre with string. Move the battery and modules until it hangs level in both directions. Mark the battery position.
IMU: place the drone on a level surface and keep it still at boot. The firmware averages 500 samples to find its offsets.
Magnetometer: open the dashboard's calibration panel. Slowly rotate the drone through all axes until the points form a sphere. Accept the offsets, which are saved to flash.
Keep the battery plugged in and all parts in final position during calibration, and stay away from large metal objects.
Check the compass heading against a phone compass. The firmware includes a local declination value, so update it for your location.
Propellers off
Remove all propellers before you power this stage.
Starting gains are only estimates. A rig lets you find the limits with no risk of a crash.
You need
A sturdy wooden pivot rig, heavy anchor weights, the dashboard, a person dedicated to the disarm control
Steps
Direction test, propellers off. Arm and give about 30% throttle. Tilt the drone by hand. The motors on the low side must speed up, pushing that side back up. If the high side speeds up, stop and fix it before fitting propellers.
Build a rig that holds the drone firmly but allows it to rotate on one axis. Secure the rig so it cannot tip.
Fit propellers, checking direction on each motor. Keep everyone clear of the propeller disc. Never hold a drone by hand with propellers on.
Tune one axis at a time, with small changes. Start from the firmware defaults for roll and pitch: P 1.2, I 0.5, D 0.012.
P first: raise it until fast oscillation starts, then lower it by 10 to 15%.
D second: add it gradually until overshoot is damped. Back off if motors get hot or noisy.
I last: raise it carefully until the drone holds its angle against a steady push or offset.
Repeat for the other axis, then disarm and send the save command. Power-cycle and confirm the gains persisted.
Stay clear
A spinning propeller on a rig is still dangerous. Wear safety glasses, keep your hands out of the arc, and have one person ready to disarm.
Our single-axis rig.
Gain
Roll / pitch range
Yaw range
P
0.8 to 2.5
0.6 to 2.0
I
0.2 to 1.0
0.2 to 1.0
D
0.005 to 0.025
0 to 0.005
F
0 to 0.1
0
Suggested safe ranges for this hardware, from the repository's tuning guide.
Test the radio failsafe on the ground with propellers off: switch off the transmitter and confirm the drone disarms.
Stand well back, in the open, in daylight with low wind. No one stands in the flight path.
Arm using throttle down and yaw right held for 1 second, or from the dashboard.
Raise the throttle slowly until the drone lifts off a short distance, then land. Do not chase it with big corrections.
Review: if it drifts, oscillates or fights you, return to the rig and to stages 3, 9 and 10. Disarm with throttle down and yaw left.
Land by your timer, leaving a margin. Our safe flight time was about 5 to 7 minutes.
What happened to us
We achieved stable vertical liftoff, but we could not hold a sustained controlled hover by hand. The drone responded faster than our thumb joysticks allowed us to control, causing over-correction. Expect this if you use the same joysticks, and consider Hall-effect gimbals.
First flight limits
The report sets no fixed go or no-go values, so agree yours before flying and write them down.
Use the magnetometer as a sensor, and see what it can and cannot find.
You need
Known metal test object, open ground, survey page on the dashboard, GPS fix
Steps
Start on the ground. Move the drone by hand, powered with propellers off, over a known metal object, and watch the magnetic reading respond.
Open survey.html and capture a baseline, using the auto baseline to reduce the effect of outliers.
Check the GPS quality badge. The survey rejects points with poor GPS quality or at the wrong speed.
Walk or fly a low, slow pattern over the area, with the metal in a position you know.
Compare the map with the known position, then export the CSV for your records.
Only try lawnmower missions after manual flight is reliable. Keep a pilot ready to take over.
Autonomous flight
Waypoint and survey modes exist in the firmware, but we have not yet published flight results. Treat them as experimental. The firmware falls back on loss of radio or GPS, but test each failsafe yourself first.
Validation data
Formal test results for detection, with noise floor and ground truth, have not been published yet. To be confirmed by team
Anomaly on the survey screen.3D surface plot of survey data.