Introduction: Shadow Theatre

This instructable will demonstrate how to create a basic shadow theatre using the following supplies. For my application I made a boat rocking in waves but with some slight adjustments, you can use any shapes/objects you like to create whatever scene you'd like to have.

- Arduino Uno Kit

- 3D printer and design software

-9 Volt Battery

-IR receiver

- LEDs

-( )

- Servo Motors

- Breadboard

- Copy Paper

Step 1: Design

Use a program such as solidworks or inventor to design the parts you want, in my case the boat and wave, along with extruded notches to mount them to brackets to attach to your servo motors.

In order to get the linear horizontal and vertical motion I wanted, I used a two bar system attached to the servo along with a guide rail shaped like a T that fit into another T shaped insert in the boat and wave pieces.

The 3D printed brackets also can be altered to size and fit but the one thing to note is the diameter of the holes must all fit into each other and onto the servo motor. For my servos and application, all holes have a diameter of 5mm. and the T rails are 1mm smaller width-wise than the insert they are intended for.

After printing, some light sanding and filing may be required to have smooth fitting and moving parts.

Step 2: Assembly

Placement of all your parts is key for this project because if they aren't in the correct positions, your shadow projection will not be accurate.

Start with mounting your screen, I used a small sheet of copy paper between a 3D printed frame designed to look like 2 columns and a pediment.

Next mount your led loosely (for future adjustments). For the LED I have mounted it externally by connecting it to some jumper wires and then to the 9 Volt battery, but you can take it a step further and integrate it into the arduino so you won't have to manually remove the cables to turn the light on and off.

Once both the LED and screen are placed, position your moving parts between the two so you get the ideal projection you are looking for, and then once you have it secure your servos in place to keep them from moving around (I just used superglue).

From this point just place your wires, arduino, breadboard, and IR receiver anywhere they won't interfere with the light and you are done.

Step 3: Coding



#define play 0xFFC23D

int oscillate = 0;
int RECV_PIN = 11; //IR receiver pin

Servo servo;

Servo servo2;

int val; //rotation angle
int pos;

bool cwRotation, ccwRotation; //the states of rotation

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()


irrecv.enableIRIn(); // Start the receiver

servo2.attach(7); //second servo pin

servo.attach(9); //servo pin


void loop()
{ if (irrecv.decode(&results)) {

Serial.println(results.value, HEX);

irrecv.resume(); // Receive the next value

if (results.value == play || oscillate)


oscillate = 1;

servo.write(5); // tell servo to go to position in variable 'pos'


delay(400); // waits for the servo to reach the position

servo.write(50); // tell servo to go to position in variable 'pos'


delay(400); // waits for the servo to reach the position