Customizable Zoetrope

by Jeagle_g in Circuits > Arduino

116 Views, 1 Favorites, 0 Comments

Customizable Zoetrope

20240627_105204.jpg

This instructable describes the process of making a zoetrope-like construction, of which the animation can be hot-swapped if desired, and can easily be expanded upon


A mechanism consisting of two wheels or gears incrementally rotates a platform with a frame of animation on every edge. This mechanism is commonly known as a geneva drive and is even used in real movie projectors. By rotating the frames with a pause between every turn, the frames and the animation become easier to watch. Without the pause, the frames would simply look like a moving blur. The mechanism is powered by an Arduino Uno, with a potentiometer, servo and powerbank connected to it.

By turning the potentiometer you can set the speed at which the smaller cog of the geneva drive rotates, thus determining the speed at which the animation is displayed. The more the nob is turned clockwise, the faster it goes. This gives you feel control over the appearance of the animation.

Additionally, the animation frames can easily be taken out and replaced with other frames. This means you could display any 8-frame animation you desire using this construction.

By adding things like lights or a looping, panaramic background in the middle of the frames the animation can be personalized further.


My reasoning behind making this construction is a great love for classic forms of animation. I'm a big fan of analog methods of creation and expression, and handmade animation is no exception. Therefore creating a (mostly) analog, tangible installation capable of displaying an animation seemed like a fun and novel idea. Not to mention that classic zoetropes, what this construction was inspired by, are close to being 200 years old. Giving a modern twist on this classic form of animation felt like a nice homage to the roots of animated media.

Supplies

Electrical Components

Arduino Uno

9g 360 degree Micro Servo

Potentiometer 10k Ohms

Breadboard

Header pins

Jumper wires

Arduino Uno R3/micro-USB to USB cable (type depends on your Arduino's connection port)

Powerbank


Housing Materials

MDF wood 3mm

Carboard/paper

Wooden dowels 8mm thick, 30mm long

Woodglue

Screws (small 1mm ones, often included with the aforementioned servos)


Tools & Machinery

Soldering iron

Soldering wire

Wire stripper

Sandpaper

Phillips-head screwdrivers #0

Lasercutter

Handsaw

Drill (bits of ~1mm, 8mm. Optional, but usefull for adding extra holes in case some were left out in the lasercutting process)

Pliers (largely optional, but useful for holding and/or tightening some components)

Tweezers (optional, but usefull when working with smaller components)


Prior Iterations

20240626_180155.jpg
IMG_20240220_144727.jpg
IMG_20240311_102013.jpg
IMG_20240311_101930.jpg

Before settling on the idea and concept of the zoetrope, a couple of other concepts were considered.


The first idea for this project was a primitive projector. In this concept, a wheel, similar to the one used in the final design, with tranparent frames on every edge would spin. On top of the wheel, in between the frames would be a small box, lined on the inside with a reflective material, as well as a strong light. The front of the box is open, allowing light to escape the box and illuminate whatever frame is position in front of it at any time. In front of the frame would be an aperture and a lens. This setup would create a shadowy projection on whatever surface it's pointed at.

While testing, it was established this setup could work. Using an arduino, a servo and some carboard pieces the idea of the wheel was tested, and it worked. Using a cheap plastic lens, strong flashlight and a frame made of carboard, paper and plastic, the projection was tested, and that worked too. However, when attempting to put everything together, housing and all, the conclusion was quickly drawn that the setup required too much precise, millimeter perfect construction and functioning - something that's very difficult or even almost impossible to achieve using the materials at hand. Laser cutters, arduinos, servos and some of the other components simply aren't very precise.


A different, similar concept was also thought of, where instead of a wheel with frames mounted to the top, a strip of film would incrementally be pushed and pulled in front of a similar, light-aperture-lens setup. This concept was, based on the testing of the first concept, dropped, because the chances of it succeeding were deemed equally low as the first concept.

Final Concept

The final design is more comparable to a zoetrope, phenakistiscope, or stroboscopic disc than a projector, as this concept no longer involves the use of light and transparent frames. Instead, wooden cutouts are used. However, the construction could also allow the use of flat images or full 3D-models as well, with only slight modifications to the platform.


To create the template of the geneva drive, an online geneva drive generator created by Ben Brandt, or benbrandt22 on Github, has been used:

https://benbrandt22.github.io/genevaGen/


This template was then traced in Illustrator to make a vector image suitable for laser cutting.


To make the housing of the construction, an online resource for making laser cutting templates of different types of boxes, created by Florian Festi, has been used:

https://boxes.hackerspace-bamberg.de/index


The generated templates for the housing were then modified in Illustrator to better suit the intended design.

Wiring & Soldering

Screenshot (1554).png
Screenshot (1555).png
20240625_162402.jpg
20240625_162420.jpg
20240625_163552.jpg
20240625_163601.jpg
20240625_163617.jpg

Describing how the circuit should be wired in a way that's comprehensible is a tough ask, so I highly recommend using the reference images as much as possible. Regardless, I'll try my best to describe how everything should be wired as best I can.


The pins on the Arduino we'll be using are the 5V pin, GND pin on the opposite side, the digital 11 pin and the analog A0 pin.


The right connector of the potentiometer (when viewed from the top, with the connectors pointing down, using a white wire) and the middle connector of the servo (red wire) should be connected to the 5V pin, to provide power to both.

The brown wire of the servo and the left connector of the potentiometer (when viewed from the top, with the connectors pointing down) should both be connected to the GND pin.

The last, unconnected connector of the potentiometer should be connected to the A0 pin.

The last, unconnected connector of the servo (orange wire) should be connected to the 11 pin.


If you're using a breadboard, you first have to place a header pin in every pin we'll need (5V, GND, 11, and A0, as mentioned before). Using a couple extra header pins makes the breadboard sit more stable on the Arduino.

The header pins connected to both the 5V pin and the GND pin should be given a lane of soldering tin on the breadboard, so the sets of wires (the combinations mentioned before) can be soldered to them. This can also be done using more wires instead of soldering tin, but this can make things more convoluted and take up more space.

The rest of the wires can be soldered to the breadboard normally.


Testing the setup first before integrating it into the rest of the design later is recommend, to make sure nothing is faulty.

Coding

Screenshot (657).png

The code for this construction is relatively simple. The image attached to this step displays all the code to run this contraption. I'll go through every single line, by their number, of the code to explain what it does.

The code will also be included in text at the bottom of this step, so it can be copy-pasted in full if desired.


1 - Includes the servo library to the code.

3 - Declares and names the servo.

5 - Integer to declare the pinnumber the servo is using.


7 - Setup function for executing all the code in the function upon startup of the Arduino.

8 - Sets the bitrate of the Arduino.

10 - Declares the pin A0 to be an input pin.

12 - Declares that the servo is connected to the servo pin.


15 - Loop function for executing all the code in the function on repeat.

16 - Declares an integer containing the value of the potentiometer at any given moment.

17 - Prints the value of the potentiometer to the console (this isn't necessary, but useful for troubleshooting purposes).

19 - Prints a gap in the console to make something else that also gets printed to the console later on easier to read/distinguish (this isn't necessary, but useful for troubleshooting purposes).

21 - Declares an integer containing the speed of the servo, by remapping the value of the potentiometer to be compatible with the servo.

22 - Transmits the speed value to the servo.

23 - Prints the speed of the servo to the console (this isn't necessary, but useful for troubleshooting purposes).


Code

#include <Servo.h>

Servo gDriveMotor;

const int servoPin = 11;

void setup() {
Serial.begin(9600);

pinMode(A0, INPUT);

gDriveMotor.attach(servoPin);
}

void loop() {
int potMeterValue = analogRead(A0);
Serial.print(potMeterValue);

Serial.print(" ");

int gDriveMotorSpeed = map(potMeterValue, 0, 1023, 90, 180);
gDriveMotor.write(gDriveMotorSpeed);
Serial.println(gDriveMotorSpeed);
}

Laser Cutting

ITTT Laser Cutting Parts 1.jpg
ITTT Laser Cutting Parts 2.jpg
ITTT Laser Cutting Parts 3.jpg
ITTT Laser Cutting Parts 4.jpg
ITTT Laser Cutting Parts 5.jpg
ITTT Laser Cutting Parts 6.jpg
ITTT Laser Cutting Parts 7.jpg
ITTT Laser Cutting Parts 8.jpg

For the housing, several parts have to be made from 3mm MDF wood using a laser cutter.


First off, the bottom, top and middle platform.

The bottom is completely flat and without holes.

The top panel has three holes; two small ones and one large one. The small hole at the rounded ended will be used to hold the dowel with the large geneva drive wheel, the big hole is the opening for the smaller geneva drive wheel, and the small hole at the square end will be used to stick the potentiometer through.

The middle platform has a round hole and a rectangular hole.

The round hole will hold the same dowel and geneva drive wheel as the top panel. The rectangular hole will hold the servo.


Secondly, the edge panels. These consist of one large element that goes around the sides and front, and a backport with a couple openings to allow access to the cables.


Next, the large geneva drive wheel, consisting of three parts; two identical elements for the wheel itself, and one platform with a long slit on each corner to hold the animation frames.


The smaller geneva drive wheel consists of two round plates stacked on top of each other, with a hole on each opposing side. Two halfed dowels are pushed through these holes, sticking out at the top. The dowels can be secured using wood glue or a piece of carboard or paper jammed in between. By drilling an indentation at the bottom of the wheel, the wheel can be pushed onto the servo and then secured using a screw.


A rounded panel with a hole in the middle will be used to provide the base of main geneva drive wheel.


A handful of small, I-shaped elements might have to be used to help guide the geneva drive mechanism. I ended up not having to use these because the construction provided enough friction to slow the main wheel down, but if the large wheel overshoots, you can stick these elements on the middle of the smaller wheel to help eleviate this issue.


A lot of ring shaped elements and bar shaped elements will be used to provide support to the whole construction.

The rings will support the dowels, while the bar elements will support several parts of the structure.

My advice is to laser cut more of these elements than shown in the picture, as I came up a bit short on them during the building process. It's also nice to have spare parts in case something snaps or needs some extra support.


Lastly, the animation frames. A 2x4 frame walking animation was used for this project, but any looping 8 frame animation would work. The choice is yours.

Construction

ITTT Construction Step 1.jpg
ITTT Construction Step 2.jpg
ITTT Construction Step 3.jpg
ITTT Construction Step 4.jpg
ITTT Construction Step 5.jpg
ITTT Construction Step 6.jpg
ITTT Construction Step 7.jpg
ITTT Construction Step 8.jpg
ITTT Construction Step 9.jpg
ITTT Construction Step 10.jpg
ITTT Construction Step 11.jpg
ITTT Construction Step 12.jpg
ITTT Construction Step 13.jpg
ITTT Construction Step 14.jpg
ITTT Construction Step 15.jpg
ITTT Construction Step 16.jpg
ITTT Construction Step 17.jpg
ITTT Construction Step 18.jpg
ITTT Construction Step 19.jpg
ITTT Construction Step 20.jpg
ITTT Construction Step 21.jpg
ITTT Construction Step 22.jpg

This section describes how the zoetrope is put together. The images provided in this section should aid in this process. All images are numbered to more easily keep track of the steps.


  1. Start by placing the power bank on the bottom plate, leaving a bit of room at the back for the rear panel later on. Mark the of the powerbank on the panel and glue a couple of bar pieces on this mark, to prevent the powerbank from sliding around when the construction is complete.


2. Place the middle plate on top of the bottom plate align the edges, but don't secure them together. Use the hole of the middle plate to make a mark on the bottom plate.


3. Glue the small rond plate with the hole in the middle to the bottom plate, aligning the hole with the mark made in step 2.


4. Put a dowel in the hole of the rond plate placed in step 3. Stack ring elements around the dowel until they are flush with the top of the dowel (I ran out of ring shaped elements and had to make a couple extra using some spare MDF a handsaw, and a drill with an 8mm drillbit).


5. Stack bar shaped elements on the supporting element placed in step 1 until they're at the same level as the dowel and ring shaped elements placed in step 4. Make sure to keep a gap at the back, as this is where the servo will be hanging above later.


6. Put the outside wall around the bottom plate by clipping the teeth into one another. Depending on how tight your laser cutting job is, this shouldn't require any wood glue.


7. Push the servo through the rectangular hole of the middle plate, making sure the wires come out in the direction of the small hole. This will make sure the spinning element of the servo is as close to the hole as possible. If the servo is inserted the other way around the mechanism wont connect down the line.


8. Put some glue on the supports on the base plate and place the middle plate on top. Make sure the wire is out of the construction, as you will need to connect other wires to it later.


9. Put the small geneva drive wheel on top of the servo and screw it in place. Don't tighten it too much, as this could make the servo go limp.


10. Put a dowel through the hole of top plate. Glue one ring element on the top of the plate over the dowel. Glue four ring element to the bottom of the plate over the dowel. The dowel should stick out from the bottom of the ring elements by about the thickness of the MDF, so 3mm. The top should stick out by about double the thickness of the MDF, so 6mm.


11. Connect the arduino with breadboard to the servo.


12. Put the potentiometer through the hole of the top panel. Put the metal ring and small nut over the top of the potentiometer and tighten the nut to secure it in place.


13. Put the arduino on top of the powerbank and place the top panel on the rest of the construction and push the teeth into one another. Once again, depending on the fit of the elements this shouldn't require any adhesive.


14. Push the teeth of the rear panel into the notches of side wall, covering up the electronic elements.


15. Glue the two geneva drive wheels directly on top of one another. Then, glue the large octagonal element meant to hold the frames to the top of it. The indentations of the geneva drive wheel should still be visible through the top element.


16. Place the large geneva drive wheel and frame holding element over the top of the portruding dowel. The wheel must be able to rotate freely.


17. Finally, place the frames in the right order in the slits of the top element of the large geneva drive wheel.



Final Testing

Customizable Zoetrope | ITTT Project Video

After construction is completed, a final test to see if everything works is in order.


In the video I showcase how the construction is operated, how the frames can be put on and taken off, and what the inside of the installation looks like.

Conclusion

This project I ran into several issues, teaching me a couple of new things.

For starters, I had never used with a laser cutter before. Figuring out how to operate one was an interesting task with a couple hiccups along the way. Additionally, getting to know what the possibilities of such a machine are and, perhaps more importantly, what its limitations are, was fun to explore. I now have a decent understanding of when and how to implement the use of one into future projects.

Secondly, soldering. This was also something I had never done before. Soldering itself isn't a very complicated task, but things can go very wrong if you don't know what you're doing. Figuring out how to structure the circuits was certainly the hardest part. After all, if only a single mistake is made in this process, the entire installation wont work, or even worse, will permanently damage some of your materials and components.

Getting to work with a selection of handtools again was a treat. I haven't had to touch tools like a handsaw in years, so getting to pick those up again and rediscovering how to use them to get the best results possible was a blast.

What ended up being the most difficult part of this entire project however, was all of the planning. Not just planning what elements I needed, in what size, et cetera, but also managing my time, expectations and skills. My first few iterations were very exciting and ambitious, but their scope was out of proportions considering the limited time and expertise I had. Because of this, I ended up not making the first deadline of this project. I had to seriously tone down my expectations and reshape the concept to something more manageable. The design I ended up with was still tricky to get right, primarily because of the precision required for the geneva drive, but it was doable and I ended up getting it to work the way I hoped it would.

In the end I'm very happy with how this project ended up turning out. I'll most likely try out different animations, display rates, background and additional modifications in the future, and I'll put the construction nicely on display somewhere in my room.