The new code and user handbook are in the attachments and on GitHub: https://github.com/PrintedDroid/D-O-Printed-Droid
The D-O V2 control and power pcbs are made for Michael Baddeleys D-O V2.
They reduce the wiring to a minimum.
There are 2 Versions. The big one is designed for a bigger 10ch Receiver (that is connected via Ch. 2 & 7-10) and needs the Arduino Nano (unless you run the iBUS sketch).
The smaller board is iBUS only (perfect for the small 10ch iBUS receiver)
The D-O stand in the attachment is for testing everything without mounted “wheels”.
Available at shop.printed-droid.com




Receiver wiring:
The FS-RX2A Pro receiver will also work well (all versions). Be carefull with the wiring:

• 1. Press and hold the Binding button, and supply power to the receiver, blue LED blinks fast means entering the binding mode.
• 2. Make the transmitter enter BIND mode.
• 3. The LED indicator become slowly blink means the binding is succeed.
• 4. Make the transmitter quit the BIND mode, the receiver LED indicator stay on means receiving signal.
Some sample pictures of the installed boards:







D-O Droid Control System v2.1 – Setup and Configuration Guide
The D-O Droid control system version 2.1 is a complete all-in-one solution for Arduino Mega that handles self-balancing, sound control, servo control, and all RC functions.
Why Choose iBus v2.1?
The iBus v2.1 is a complete system that combines ALL functions into one Arduino Mega:
- MPU6050/6500/9250/6886 IMU-based self-balancing with PID control
- 10-channel iBus RC receiver support
- DFPlayer Mini sound system with personality features
- Multi-servo control for head and mainbar movement
- Battery monitoring with low voltage protection
- Runtime configuration menu via Serial
- Idle animations and state reactions
- RC Mixing Mode selection (Arcade/Tank)
One Mega does everything – no additional controllers needed!
What’s New in v2.1
1. Runtime Configuration Menu
Old v1.1: Hard-coded values requiring recompilation
float kp = 25; // Change requires reupload
float ki = 0;
float kd = 0.8;
New v2.1: Interactive serial menu
=== CONFIGURATION MENU ===
1. PID Configuration
2. Feature Toggles
3. Battery Settings
4. Sound Settings
5. Driving Dynamics
6. Adaptive PID
7. Save & Exit
Benefit: Tune your D-O without recompiling!
2. RC Mixing Mode Selection (NEW in v2.1.2)
Problem: With standard FlySky setup, forward/backward was slow but turning was fast.
Solution: Arcade Mixing Mode (now default)
ARCADE MODE (Default – Recommended):
- CH1 (Right Stick Left/Right) = Steering
- CH2 (Right Stick Up/Down) = Throttle
- One stick controls everything – like a video game
TANK MODE (Original):
- CH1 = Left Motor speed directly
- CH2 = Right Motor speed directly
- Requires custom transmitter mixing
How to change: CLI Menu → 5. Driving Dynamics → RC Mixing Mode
3. Battery Monitoring (Optional)
IMPORTANT: Battery monitoring is now OFF by default! Why? Without voltage divider circuit connected, pin A15 floats and shows random values (1.8V, 2.5V etc.) Enable only if: You have the voltage divider circuit properly connected. How to enable: CLI Menu → 2. Feature Toggles → Battery Monitor → ON
4. Adaptive PID Control
Automatically adjusts PID parameters based on driving speed:
// Slow speed: More stability
if (avg_speed < 50) {
current_kp = config.kp_slow;
}
// Fast speed: More responsive
else if (avg_speed > 150) {
current_kp = config.kp_fast;
}
Benefit: Better balance at all speeds without manual adjustment!
Hardware Requirements
| Component | Specification | Notes |
|---|---|---|
| Microcontroller | Arduino Mega 2560 | Required for Serial1 iBus |
| RC Receiver | FlySky FS-iA6B | iBus protocol required |
| IMU | MPU6050 | Also works: MPU6500, MPU9250, MPU6886 |
| Motor Driver | Cytron MD10C (2x) | Or similar H-bridge |
| Sound Module | DFPlayer Mini | With Micro SD card |
| Servos | 4x Standard | Head (3x) + Mainbar (1x) |
| Speaker | 8 Ohm, <3W | For DFPlayer |
| Battery | 2S+2S LiPo | 7.4V – 8.4V |
Complete Wiring
Mega → Motor Driver (Cytron MD10C)
D13 → DIR1 (Motor 1 Direction)
D12 → PWM1 (Motor 1 Speed)
D11 → DIR2 (Motor 2 Direction)
D10 → PWM2 (Motor 2 Speed)
GND → GND (both drivers)
Note: Motor power (VM) from battery, logic (VCC) from 5V
Mega → Servos
D2 → Mainbar Servo
D3 → Head Servo 1 (Pitch)
D4 → Head Servo 2 (Yaw)
D5 → Head Servo 3 (Roll)
WARNING: Servo power from BEC (5-6V), NOT from Mega!
Mega → DFPlayer Mini
D7 → RX (via 1k resistor!)
D8 → TX
5V → VCC
GND → GND
Speaker → SPK1/SPK2
Mega → iBus Receiver
D19 (RX1) → iBus Signal
5V → VCC
GND → GND
Mega → MPU6050 IMU
SDA (20) → SDA
SCL (21) → SCL
5V → VCC
GND → GND
Mega → Battery Monitor (OPTIONAL)
Voltage Divider Circuit:
Battery+ ──[10kΩ]──┬──[3.3kΩ]── GND
│
└── A15 (Mega)
How To: First Time Setup
Step 1: Upload Sketch
- Open
D_O_printed_droid_rc_ibus_v2.1.inoin Arduino IDE - Select Board: Arduino Mega 2560
- Select correct COM port
- Click Upload
- Open Serial Monitor (9600 baud)
Step 2: IMU Calibration (CRITICAL!)
- Place D-O in balanced upright position
- Send
cwithin 3 seconds of boot - Keep D-O PERFECTLY STILL for 5 seconds
- Wait for “Calibration saved” message
TIP: Always re-calibrate if:
- Balance seems off
- You moved/remounted the IMU
- D-O keeps falling to one side
Step 3: Select Setup Mode
For new builds, use Pure iBus mode (2):
--- Setup Type Configuration ---
0 = PWM Only (Balance only, external controller)
1 = Hybrid (iBus + PWM sound)
2 = Pure iBus (RECOMMENDED)
How To: Use the Configuration Menu
Accessing the Menu
- Open Serial Monitor (9600 baud)
- Send
m - Menu appears – enter number to select option
Example: Changing PID Values
1. Send 'm' to open menu
2. Send '1' for PID Configuration
3. Enter new KP value (e.g. 28)
4. Enter new KI value (e.g. 0)
5. Enter new KD value (e.g. 1.2)
6. Send '7' to Save & Exit
Example: Changing Mixing Mode
1. Send 'm' to open menu
2. Send '5' for Driving Dynamics
3. Find "Mixing Mode" option
4. Enter 1 for Arcade, 0 for Tank
5. Send '7' to Save & Exit
Example: Enable Battery Monitoring
1. Send 'm' to open menu
2. Send '2' for Feature Toggles
3. Find "Battery Monitor" option
4. Enter 1 to enable
5. Send '7' to Save & Exit
How To: Set Up FlySky Transmitter
Channel Assignment (v2.1)
| Channel | Function | Transmitter Setup |
|---|---|---|
| CH1 | Steering | Right Stick Left/Right |
| CH2 | Throttle | Right Stick Up/Down |
| CH3 | Mainbar Servo | Assign to VrA or switch |
| CH4 | Head Pitch | Left Stick Up/Down |
| CH5 | Head Yaw | Left Stick Left/Right |
| CH6 | Head Roll | Assign to VrB |
| CH7 | Sound Mute | SwA (2-pos switch) |
| CH8 | Sound Trigger | SwB (momentary) |
| CH9 | Mood | SwC (3-pos switch) |
| CH10 | Squeak | VrA or VrB dial |
WICHTIG für CH3 (Mainbar): Standardmäßig ist CH3 bei FlySky nicht belegt! Du musst CH3 manuell einem Schalter oder Regler zuweisen, sonst reagiert der Mainbar-Servo nicht.
How To: Set Up Sound Files
SD Card Structure
/mp3/
0001.mp3 - Startup sound
0002.mp3 - Default/ready sound
0003.mp3 - Greeting 1
0004.mp3 - Greeting 2
0005.mp3 - Greeting 3
0006.mp3 - Negative 1
0007.mp3 - Negative 2
0008.mp3 - Negative 3
0009.mp3 - Negative 4
0010.mp3 - Positive 1
0011.mp3 - Positive 2
0012.mp3 - Positive 3
0013.mp3 - Positive 4
0014.mp3 - Positive 5
0015.mp3 - Squeaky 1
0016.mp3 - Squeaky 2
0017.mp3 - Squeaky 3
0018.mp3 - Squeaky 4
0019.mp3 - Squeaky 5
0020.mp3 - Squeaky 6
Requirements:
- SD card: FAT16 or FAT32
- Filenames: Exactly 4 digits (0001.mp3, NOT 1.mp3)
- Format: MP3, 128-320 kbps
How To: Tune PID Values
Understanding PID
- KP (Proportional): How hard to correct. Higher = more aggressive
- KI (Integral): Corrects drift over time. Usually 0 or very low
- KD (Derivative): Dampens oscillation. Prevents overshoot
Tuning Process
- Start with defaults: KP=25, KI=0, KD=0.8
- If D-O oscillates rapidly: Decrease KP, increase KD
- If D-O is too wobbly/slow: Increase KP
- If D-O drifts slowly to one side: Small increase to KI
- Test after each change!
TIP: Remove the head during PID tuning to prevent damage!
Troubleshooting
“No DFPlayer found” / No Sound
- Check 1k resistor between Mega TX (D7) and DFPlayer RX
- Verify SD card is FAT16/FAT32
- Files must be named 0001.mp3, 0002.mp3 etc.
- Try different SD card
Poor Balance / Tips Over
- Run IMU calibration (
cat boot) - Check D-O was upright during calibration
- Verify both motors spin same direction for “forward”
- Try default PID: KP=25, KI=0, KD=0.8
No RC Response
- iBus wire must be on Pin 19 (RX1)
- Check receiver binding (solid LED)
- Verify receiver has power
- Setup Mode must be 2 (Pure iBus)
Steering Fast, Driving Slow (or vice versa)
- This is a Mixing Mode issue!
- Go to Menu → Driving Dynamics
- Set Mixing Mode to 1 (Arcade) for standard FlySky
Battery Shows Wrong Voltage
- Without voltage divider = random values
- Either connect voltage divider circuit
- Or disable battery monitoring in menu
Mainbar Servo Not Moving
- CH3 is not assigned by default on FlySky!
- Assign CH3 to a switch or dial on your transmitter
CLI Command Reference
| Command | Function |
|---|---|
c | IMU calibration (within 3s of boot) |
m | Open configuration menu |
d | Toggle debug output |
s | Show current sensor values |
r | Factory reset |
Upgrading from v1.1
- Upload v2.1 sketch
- Run IMU calibration (
c) - Open menu (
m) and configure settings - All settings are saved to EEPROM automatically
Remember: With iBus v2.1, one Mega does everything!
May the Force be with your D-O!
