The ShadowRC Control System is an evolution of the Shady RC dEvolution sketch, originally developed by joymonkey, combined with MarcDuino command integration from Shadow MD.
ShadowRC provides complete RC control for R2-D2 style droids using a traditional RC transmitter/receiver while maintaining full MarcDuino integration for dome panels, holoprojectors, and lighting effects.
Key Differences from Shady RC dEvolution
| Feature | Shady RC dEvolution | ShadowRC v1.3 |
|---|---|---|
| MarcDuino Functions | Basic | Full 89 function codes |
| Sound Control | Via MarcDuino | Direct MP3 Trigger + MarcDuino parallel |
| Panel Control | Limited | Individual dome & body panels |
| Holo Control | Basic | Full control with toggle states |
| Custom Sequences | None | 11 custom sequences (79-89) |
| Knob Mapping | Fixed sounds | Configurable MarcDuino functions |
| Documentation | Minimal | Extensive in-sketch documentation |
What Does It Control?
ShadowRC controls all aspects of your droid:
- Motion: Foot drive (differential/tank style) and dome rotation
- Sound: Direct MP3 Trigger control with 255 sound slots
- Dome Panels: Individual or grouped panel control via MarcDuino
- Body Panels: Full body panel integration (requires MarcDuino Body)
- Holoprojectors: Filthy HP, R-Series HP, or servo-based holos
- Logic Displays: Teeces or other MarcDuino-compatible displays
- Lighting: Magic panel, holo lights, and custom effects
- Sequences: Pre-programmed sequences like Scream, Leia, Cantina, Disco
Required Components
Main Controller
- Arduino Mega 2560 or Arduino Mega ADK
RC System
- Turnigy Evolution RC Transmitter (or compatible)
- Turnigy TGY-iA6C or iA10B Receiver (iBus protocol)
Motor Controllers
- Sabertooth 2x32A or 2×25 (foot drive)
- Syren 10 (dome rotation)
Sound System
- SparkFun MP3 Trigger
- Speaker + Amplifier
MarcDuino System (recommended)
- MarcDuino Dome Master (Arduino 328P based)
- MarcDuino Body Master (optional, for body panels)
- Servos for dome/body panels
Optional
- Teeces Logic Displays
- Holoprojectors (Filthy HP, R-Series, or servo-based)
- XBee System (for smartphone app control)
Wiring Diagram
┌─────────────────────────────────────────────────────────────────────────────┐
│ ARDUINO MEGA 2560 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ TX1 (Pin 18) ──────────────────────────────► MarcDuino Dome RX │
│ │ │
│ ├──► Dome Panel Servos │
│ ├──► Holoprojectors │
│ └──► Logic Displays │
│ │
│ TX2 (Pin 16) ──────────────────────────────► Sabertooth S1 │
│ │ │ │
│ │ └──► Foot Motors (L+R) │
│ │ │
│ └───────────────────► Syren S1 │
│ │ │
│ └──► Dome Motor │
│ │
│ RX3 (Pin 15) ◄─────────────────────────────── iBus Receiver │
│ │ │
│ └──► From TGY-iA6C/iA10B │
│ │
│ Pin 11 ────────────────────────────────────► MP3 Trigger RX │
│ │ │
│ ├──► SD Card (sounds) │
│ └──► Amplifier + Speaker │
│ │
│ Pin 44 ────────────────────────────────────► Left Foot ESC (PWM) │
│ Pin 45 ────────────────────────────────────► Right Foot ESC (PWM) │
│ │
│ Pin 12 (optional) ─────────────────────────► MarcDuino Body RX │
│ │ │
│ └──► Body Panel Servos │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Pin Connections
| Arduino Mega Pin | Connection | Notes |
|---|---|---|
| TX1 (Pin 18) | MarcDuino Dome RX | 9600 baud |
| TX2 (Pin 16) | Sabertooth S1 + Syren S1 | 9600 baud, active serial |
| RX3 (Pin 15) | iBus Receiver Signal | From TGY-iA6C/iA10B |
| Pin 11 | MP3 Trigger RX | 9600 baud (check your MP3 Trigger settings) |
| Pin 44 | Left Foot Motor | PWM signal to ESC |
| Pin 45 | Right Foot Motor | PWM signal to ESC |
| Pin 12 (optional) | MarcDuino Body RX | 9600 baud |
RC Channel Assignments
| Channel | Control | Function |
|---|---|---|
| CH1 | Right Stick X | Steering (left/right) |
| CH2 | Right Stick Y | Throttle (forward/reverse) |
| CH3 | Left Stick Y | Autodome frequency / Volume (when knob full CW) |
| CH4 | Left Stick X | Dome rotation (manual) |
| CH5 | SwB (3-pos) | Drive speed: Slow / Medium / Fast |
| CH6 | SwA (2-pos) | Drive enable (safety switch) – UP=off, DOWN=on |
| CH7 | VrA Knob | MarcDuino function selector |
| CH8 | SwC (3-pos) | MarcDuino trigger – UP=trigger, MID=off, DOWN=alt |
MarcDuino Functions Available
ShadowRC includes all 89 standard MarcDuino function codes:
Panel Sequences with Sound (1-14)
| Code | Function |
|---|---|
| 1 | Close All Panels |
| 2 | Scream – all panels open |
| 3 | Wave – one panel at a time |
| 4 | Fast Wave (smirk) – back and forth |
| 5 | Wave 2 – open progressively, close one by one |
| 6 | Cantina – beep with marching ants |
| 7 | Faint / Short Circuit |
| 8 | Cantina Dance – orchestral, rhythmic |
| 9 | Leia Message |
| 10 | Disco |
| 11 | Quiet Mode Reset |
| 12 | Full Awake Reset |
| 13 | Mid Awake Reset |
| 14 | Full Awake+ Reset |
Panel Sequences without Sound (15-21)
| Code | Function |
|---|---|
| 15 | Scream – NO SOUND |
| 16 | Wave – NO SOUND |
| 17 | Fast Wave – NO SOUND |
| 18 | Wave 2 – NO SOUND |
| 19 | Marching Ants – NO SOUND |
| 20 | Faint – NO SOUND |
| 21 | Cantina Dance – NO SOUND |
Holoprojector Control (22-25)
| Code | Function |
|---|---|
| 22 | Random Holo Movement ON (all) |
| 23 | Holo Lights Toggle (on/off) |
| 24 | Holo Lights OFF |
| 25 | Holo Reset (movement off, lights off) |
Volume Control (26-29)
| Code | Function |
|---|---|
| 26 | Volume Up |
| 27 | Volume Down |
| 28 | Volume Maximum |
| 29 | Volume Medium |
Dome Panel Control (30-53)
| Code | Function |
|---|---|
| 30 | Open ALL Dome Panels |
| 31 | Open TOP Dome Panels |
| 32 | Open BOTTOM Dome Panels |
| 33 | Close ALL Dome Panels |
| 34-53 | Open/Close individual panels 1-10 (even=open, odd=close) |
Body Panel Control (54-75)
Requires MarcDuino Body Master
| Code | Function |
|---|---|
| 54 | Open ALL Body Panels |
| 55 | Close ALL Body Panels |
| 56-75 | Open/Close individual panels 1-10 (even=open, odd=close) |
Magic Panel (76-78)
| Code | Function |
|---|---|
| 76 | Magic Panel ON |
| 77 | Magic Panel OFF |
| 78 | Magic Panel Flicker (10 seconds) |
Custom Sequences (79-89)
| Code | Function |
|---|---|
| 79 | Spook Wave (dome + body) |
| 80 | Wave Bye |
| 81 | Utility Arms Open then Close |
| 82 | Full Body Show |
| 83 | Gripper Arm |
| 84 | Interface Tool |
| 85 | Ping Pong Body Doors |
| 86 | Star Wars Disco |
| 87 | Star Trek Disco |
| 88 | Play Next Song |
| 89 | Play Previous Song |
Default Knob Function Mapping
The VrA knob (CH7) selects which function is triggered when SwC (CH8) is pushed UP:
| Knob Position | Function |
|---|---|
| Full CCW | Quiet Mode Reset (11) |
| Position 2 | Full Awake (12) |
| Position 3 | Wave (3) |
| Position 4 | Scream (2) |
| Position 5 | Cantina (6) |
| Position 6 | Leia Message (9) |
| Position 7 | Disco (10) |
| Position 8 | Short Circuit (7) |
| Position 9 | Open All Panels (30) |
| Position 10 | Close All Panels (1) |
| Position 11 | Holo Toggle (23) |
| Position 12 | Wave Bye (80) |
| Full CW | Random Sound (0) |
You can customize this mapping by editing the knobFunctions[] array in the sketch.
Configuration Options
All settings are configurable at the top of the sketch (Section 1):
// Enable/Disable Features
#define DEBUG 1 // Serial debug output (0=off, 1=on)
#define MARCDUINO_DOME_ENABLED 1 // MarcDuino Dome (0=off, 1=on)
#define MARCDUINO_BODY_ENABLED 0 // MarcDuino Body (0=off, 1=on)
#define MP3_TRIGGER_ENABLED 1 // MP3 Trigger (0=off, 1=on)
// Motor Controller Settings
#define FOOT_CONTROLLER 1 // 0=Sabertooth Serial, 1=PWM Mode
#define SYREN_ADDR 129 // Syren serial address
#define SABERTOOTH_ADDR 128 // Sabertooth serial address
// Drive Settings
byte driveSpeeds[3] = {30, 80, 127}; // Slow, Medium, Fast (0-127)
#define TURN_SPEED 50 // Turn sensitivity (40-75 recommended)
#define JOYSTICK_DEAD_ZONE 10 // Stick center dead zone
// Sound Settings
byte volume_level = 50; // Initial volume (0=loud, 255=silent)
#define MIN_VOLUME 100 // Quietest setting
#define MAX_VOLUME 0 // Loudest setting
// Autodome Settings
#define AUTODOME_MIN_SPEED 15 // Minimum rotation speed
#define AUTODOME_MAX_SPEED 50 // Maximum rotation speed
#define AUTODOME_CHATTINESS 6 // Sound frequency (1-10)
Motor Controller DIP Switch Settings
Sabertooth 2×32/2×25 (Foot Drive)
DIP Switches: 1=DOWN, 2=DOWN, 3=UP, 4=UP, 5=UP, 6=UP
Configures: Packetized Serial, Address 128, 9600 baud
Syren 10 (Dome Rotation)
DIP Switches: 1=DOWN, 2=DOWN, 3=UP, 4=DOWN, 5=UP, 6=UP
Configures: Packetized Serial, Address 129, 9600 baud
Note: Some users add 10K resistor between S1 and GND for stability
Failsafe Setup (IMPORTANT!)
Configure failsafe on your Turnigy Evolution transmitter:
- Go to Settings → Failsafe
- Enable Failsafe for Channels 1-4
- Set all channels to go to 0% (1000μs) on signal loss
This ensures the droid stops moving if the RC connection is lost.
MP3 File Naming
Sound files on the MP3 Trigger SD card should use 3-digit prefixes:
001_happy_beep.mp3
002_sad_beep.mp3
003_scream.mp3
007_short_circuit.mp3
009_leia_message.mp3
010_disco.mp3
...
255_startup.mp3
Only the first 3 digits matter to the MP3 Trigger.
Required Libraries
Install these libraries via Arduino Library Manager or manually:
- IBusBM – iBus protocol for Flysky/Turnigy receivers
- https://github.com/bmellink/IBusBM
- Sabertooth – Dimension Engineering motor controller library
- https://www.dimensionengineering.com/software/SabertoothArduinoLibraries.zip
Links
Original Shady RC dEvolution
- Astromech Wiki: https://astromech.net/droidwiki/Shady_RC_dEvolution
- Astromech Forum: https://astromech.net/forums/showthread.php?38382-Shady-RC-dEvolution-control
- Original GitHub: https://github.com/joymonkey/dEvolution
MarcDuino Information
- Developer Site: https://www.curiousmarc.com/r2-d2/marcduino-system
Credits
joymonkey – Original Shady RC dEvolution sketch
vint43 – Shadow MD AstroCan MarcDuino integration
Tim Ebel (Eebel) – Custom sequences (79-89)
BigHappyDude – Differential drive mixing algorithm
