D-O Control and Power Board

You are here:
Estimated reading time: 5 min

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

D-O Control PCB v1.4
D-O Power Board
D-O Mini iBUS Board
D-O Mini iBUS Board with FS-RX2A receiver

Receiver wiring:

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

How to bind:
• 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

ComponentSpecificationNotes
MicrocontrollerArduino Mega 2560Required for Serial1 iBus
RC ReceiverFlySky FS-iA6BiBus protocol required
IMUMPU6050Also works: MPU6500, MPU9250, MPU6886
Motor DriverCytron MD10C (2x)Or similar H-bridge
Sound ModuleDFPlayer MiniWith Micro SD card
Servos4x StandardHead (3x) + Mainbar (1x)
Speaker8 Ohm, <3WFor DFPlayer
Battery2S+2S LiPo7.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

  1. Open D_O_printed_droid_rc_ibus_v2.1.ino in Arduino IDE
  2. Select Board: Arduino Mega 2560
  3. Select correct COM port
  4. Click Upload
  5. Open Serial Monitor (9600 baud)

Step 2: IMU Calibration (CRITICAL!)

  1. Place D-O in balanced upright position
  2. Send c within 3 seconds of boot
  3. Keep D-O PERFECTLY STILL for 5 seconds
  4. 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

  1. Open Serial Monitor (9600 baud)
  2. Send m
  3. 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)

ChannelFunctionTransmitter Setup
CH1SteeringRight Stick Left/Right
CH2ThrottleRight Stick Up/Down
CH3Mainbar ServoAssign to VrA or switch
CH4Head PitchLeft Stick Up/Down
CH5Head YawLeft Stick Left/Right
CH6Head RollAssign to VrB
CH7Sound MuteSwA (2-pos switch)
CH8Sound TriggerSwB (momentary)
CH9MoodSwC (3-pos switch)
CH10SqueakVrA 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

  1. Start with defaults: KP=25, KI=0, KD=0.8
  2. If D-O oscillates rapidly: Decrease KP, increase KD
  3. If D-O is too wobbly/slow: Increase KP
  4. If D-O drifts slowly to one side: Small increase to KI
  5. 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 (c at 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

CommandFunction
cIMU calibration (within 3s of boot)
mOpen configuration menu
dToggle debug output
sShow current sensor values
rFactory reset

Upgrading from v1.1

  1. Upload v2.1 sketch
  2. Run IMU calibration (c)
  3. Open menu (m) and configure settings
  4. All settings are saved to EEPROM automatically

Remember: With iBus v2.1, one Mega does everything!

May the Force be with your D-O!

Tags:
Was this article helpful?
Dislike 0 11 of 11 found this article helpful.
Views: 4554
Next: D-O BB1