A 5-inch GPS quad that carries a tourniquet kit up to 200 m on its own, shows the scene live so a 112 dispatcher can see it, lands 5 m from the casualty facing them and plays spoken instructions.






Prices checked live on 7 October 2026. Rotorama ships to Lithuania in 2-3 days. AliExpress prices are the cheapest listed variant, so pick the right one when ordering.
| Part | Qty | € | Shop |
|---|---|---|---|
| Readytosky Mark4 5" frame | 1 | 20.69 | Rotorama |
| iFlight XING-E Pro 2207 1800KV | 4 | 62.36 | Rotorama |
| MicoAir H743 V2 + 55A AM32 stack, runs ArduPilot out of the box | 1 | 92.79 | Rotorama |
| MicoAir MG-903 GPS + compass | 1 | 16.39 | Rotorama |
| SkyGuy Nano 2.4G ELRS receiver | 1 | 13.49 | Rotorama |
| CNHL Ministar 1300 mAh 6S | 1 | 21.79 | Rotorama |
| Gemfan Hurricane 51477-3 props, sets of 4 | 2 | 6.18 | Rotorama |
| FC buzzer, battery strap 20x250, box strap 20x550 | 3 | 9.27 | Rotorama |
| M3 screws x8, x12, x30, M3 square nuts, foam pads, heat shrink | 6 | 6.74 | Rotorama |
| Shipping to Lithuania (Packeta) | 7.00 | Rotorama | |
| Seeed XIAO ESP32S3 Sense, camera + WiFi + computer | 1 | 15.49 | AliExpress |
| DFPlayer Mini, 28 mm 1 W speaker, microSD, 1 kΩ resistor | 4 | 7.09 | AliExpress |
| M3 male-female hex standoffs 6+6, shipping buffer | 4.17 | AliExpress | |
| PETG (≈125 g), 3 mm plywood offcut, foam tape, zip ties | 5.40 | materials | |
| Drone total | 288.85 | €11.15 left |
The video is WiFi rather than analog because the analog chain came to about €315 once a USB 5.8 GHz receiver was included. The XIAO streams to a laptop, draws a dashboard with the GPS position for 112, bridges MAVLink for Mission Planner and drives the voice player, all for €15.49.
Open plate_x1c.3mf in Bambu Studio: all four parts on one plate, already standing right. Bambu PETG HF, 0.20 mm Standard, 4 wall loops, 20% infill, supports off, brim on the box and door. The mast and pod can go in PETG-CF for stiffness. With the AMS, paint the “SOS 112” letters white.
| Part | Grams | On the bed | Note |
|---|---|---|---|
| Payload box | 91 | closed back wall down | 175 mm tall, brim. Raised “SOS 112” on both sides |
| Box door | 7 | on its bottom edge | hinge pin: 70 mm of 1.75 mm filament |
| Head pod | 15 | as flown | holds camera, voice player, speaker, WiFi antenna |
| GPS mast | 12 | upright | ELRS antenna clips on its back |
| Part | Material | Qty |
|---|---|---|
| Skid bars 140 × 14 mm, widen the stance to 40° | 3 mm birch ply | 2 |
| Instruction card 85 × 54 mm, Lithuanian, goes in the box | 3 mm ply | 1 |
| Landing pad tiles 300 × 300, tape into 600 mm | box cardboard | 4 |
Measured on the model plus slack: motors ≈135 mm, battery lead ≈120 mm, XIAO cable ≈135 mm, voice player power ≈130 mm, buzzer ≈85 mm, receiver ≈70 mm.
| FC plug (JST-SH) | Goes to | ArduPilot |
|---|---|---|
| GPS · GND 5V TX3 RX3 SCL SDA | MG-903 GPS + compass | SERIAL3 GPS |
| UART4 · GND 5V TX4 RX4 | XIAO: TX4→D7, RX4→D6 | SERIAL4 MAVLink2 115200 |
| UART5 · GND 5V | voice player power only | none |
| SBUS/CRSF · GND 5V TX6 RX6 | ELRS receiver, TX/RX crossed | SERIAL6 RC in |
| LED/Buzzer · 5V Buzz− | buzzer | built in |
| ESC 8-pin | 55A AM32 ESC | motors 1-4, current, ESC telemetry |
MicoAir743v2 (hold BOOT, plug USB).ardupilot/sos.param, write, reboot. All 66 values checked against the official 4.7.1 list. It caps the takeoff throttle: the default made the simulator climb to 30 m instead of 15.Arduino, board XIAO_ESP32S3 with OPI PSRAM, upload firmware/sos_cam. It makes the WiFi SOS-DRONE. The laptop opens http://192.168.4.1/ for the camera, position with a Google Maps link, height, distance, battery and voice buttons. Mission Planner connects on UDP 14550. Share the dashboard tab in the video call with 112, internet through the phone over USB.
Voice: record the instructions in Lithuanian on a phone, save as 0001.mp3 on the microSD. It plays on repeat for 3 minutes once the drone lands away from where it took off.
make_mission.py BASE_LAT BASE_LON CASUALTY_LAT CASUALTY_LON writes the mission: climb to 15 m, hover 20 s 25 m short of the casualty so 112 sees the scene, land 5 m short facing them. Wait about 30 s after the GPS fix, then arm in AUTO with the throttle down. It does not fly back: it only has to buy time until the ambulance arrives, and the crew unplugs it and drives it back.sitl/video.py.film/film.py and film/sound.py.| Check | Result | |
|---|---|---|
| Collisions, 42 parts pairwise | none | pass |
| Spinning props to anything | 3.6 mm closest, tips 15.5 mm apart | pass |
| Door and kit | door swings 150° free, kit slides straight out | pass |
| Camera view | nothing of the drone in frame. Casualty visible hovering 25 m out at 15 m, and landed 5 m away. Out of frame for ≈8 s mid-descent | pass |
| GPS sky view, compass distances | 0% blocked above 10°, 53-113 mm from noise sources | pass |
| Centre of gravity | 0.8 mm off loaded, 1.3 mm empty | pass |
| Tip-over on the skids | 40° sideways, 44° fore-aft, props 94 mm off the ground | pass |
| Thrust, power, endurance | T/W ≈7, 7.4 min hover, mission 16% of the pack one way | estimate |
| 5 V rail, plugs, serial ports | 0.95 of 3 A, one job per port | pass |
| Screws | 4+ mm of thread everywhere, stack screws clear the top plate | pass |
| Printability | 4 watertight parts on one X1C plate, no supports | pass |
| ArduPilot parameters | 66 of 66 valid in 4.7.1 | pass |
| Head unit firmware | compiles for XIAO ESP32S3, parser and voice-player frames tested with real MAVLink | pass |
| Mission in ArduPilot SITL 4.7.1 | armed in AUTO, cruise 15.1 m, 26 s overview, landed 8.0 m from the casualty facing them (1° off). Voice code replayed on the telemetry fired once, after the landing | pass |
| Budget | €288.85 of €300 | pass |
The frame and a few parts are modelled from shop data. When they arrive, measure these, set them at the top of sos.scad and run ./make.sh. If every check still passes, print.