Stroboscope (zoetrope) Using Arduino and a Broken Xbox 360 DVD Drive




About: Just a guy tinkering away in a lab ...

Stroboscope (AKA zoetrope) is a device that creates an illusion of a moving picture by showing a rapid successions of frames  "stopped" for a fraction of a second due to the persistence-of-vision (POV) effect. It is a very old toy; zoetropes have been amusing crowds since 19th century. It makes it all the more fun to make one out of decidedly 21st century parts!

The project was inspired by my own interest in zoetropes (non-electronic variety) since my childhood. Many a good book were spoiled by drawing stick figure stop motion animations on successive pages ... But I digress.

I am also very interested in all kinds of motor control and I did not have much experience with brushless DC (BLDC) motors before starting this project. I'm glad I did because BLDC is a fascinating technology and I'm now trying to upgrade some of my motors with stronger magnets to see if I, too, can make an RC plane fly on one of those. I'm afraid there won't be much space to go into details of BLDC operation here, so I invite anyone interested to visit my blog and read the recent entries on BLDC theory, circuits and software.

Additionally, since BLDC motors are used in pretty much every CD/DVD/Bluray device out there, I had a huge pile of these BLDC motors ever since I started breaking DVD-RW drives to harvest lasers from them. This in large part was the influence of another instructable I read right here, written by Groover, the Pocket Laser Engraver . Ironically, I've yet to build by own (I already had a larger one) but I can't stop tearing apart broken DVD drives and the pile of available parts just keeps growing :)

So, enough talk, let's start building something!

Step 1: Gather the Parts

Apart from the Arduino, my basic goal was to reuse as many parts from the DVDs as possible.

Here is the list of parts we'll need:

1. Arduino (any variety - the sketch is very small)

2. Arduino Development Shield - with breadboard or without. The circuit is rather small, can be easily built on a breadboard but soldering the parts to the board instead will make it sturdier. The empty Development Shield PCBs are rather cheap these days, I buy them in bulk and solder my projects on them permanently.

3. A broken Xbox 360 DVD drive. The only working part we are concerned with is the spindle motor and you have to really seriously abuse  the little motor to do any damage to it. I'd say the rest of the Xbox would burn before the DVD spindle motor would get damaged, so you're pretty safe buying it on your favorite online flea market sites.

4. 1 x SN754410NE Quadruple Half-H Driver IC (SN754410NE datasheet here) . Of all the Half-H drivers this one is probably the least expensive. I sourced mine from a Chinese seller on my favorite online flea market site. You can do the same or try any electronics parts seller out there - Mouser, Newark, anyone is almost guaranteed to carry it - it's very popular.  SN754410 is also used in driving bipolar motors, so get yourself a couple of these for future projects.

5. A 1W High Intensity White LED with 10mm round transparent body.  A different LED of similar or higher intensity will do just fine, as long as you devise a bracket to hold it and point toward the disk with zoetrope animations.  The bridge on SN754410 that controls the LED can drive 1A and the LED is on for only 2ms (milliseconds) at a time, so I guess you can go as high up as 3W-4W LEDs without much concern.

6. 2x  push buttons to populate the Development Shield. One of them becomes the Reset button and the other is the Direction button

7. 1 x small 3mm LEDs - the color of your choice to populate the Development Shield. It becomes the direction indicator LED

8. 1x10K potentiometer. Please note that my own pictures show two of those ( big orange blobs). One is for controlling RPM of the motor. The other was for controlling the flash duration. During my testing I've found that there's no practical reason to control the flash duration manually. It's done in the software and the pot is just abandoned.

9. 1 x 5-pin connector  of your choice if you want the Arduino to separate from the spindle (optional).

10. 2x 0.10uF caps to filter noise on the supply bus of the Shield (optional but desirable).

11. 1 x 510Ω resistors for the direction LED

12. 1 x 1N4004 or similar general purpose rectifier diode

13. 2 x 2-pin jumper headers and one jumper - one of those headers needs to be shortened

14. OPTIONAL: if your Arduino Development Shield did not come with the stacking headers, you need those. It uses 2 x 8-pin and 2 x 6-pin headers.

15. You'll need some old CDs to become the base of your animations.

You've got all the parts, now get some flux and solder. We're going to make some fumes! (unless you're building on a breadboard of course ...)

Step 2: Populate the Shield PCB

It is time to populate the Development Shield PCB with all those parts from the previous step!

Some of the components have their places reserved  on the Development Shield, such as the pushbuttons and the direction LED (and on this picture you see that I soldered the second LED for good measure - it's not used)

The rest of the components are positioned rather free-hand (using the term to avoid calling it wily-nilly) . There is a lot of space on the board and we don't have too many components. Just as a rough guide, I prefer the controls (the pot) on the left and the outputs on the right  - but that's a matter of personal choice, really. Some people prefer to direct all cables coming and going from a board in one direction, and then the 5-pin JP3/4 would be on the left.

Whichever part layout you've chosen, in the end they should all be connected as per the included circuit diagram.  Unfortunately, I'm not yet familiar with how Instructables resizes the pictures I upload and so the schematic appears illegible (at least now that I'm editing it). If it's hard to see, get the full size circuit diagram image from my blog here: Arduino Stroboscope Circuit Diagram

One particular part of the diagram requires an extra detail: the JP1 and JP2 jumpers are there to control the input voltage on the load side of the SN754410 driver. The BLDC motor is a rather low-resistance load (only 4.3Ω measured across two windings in series) and therefore we cannot supply the load side with the same voltage as logic side because it would create currents higher than 1A - the driver's limit. So, I've added a diode D1 that loses 0.7V across it (not much but makes a difference) - that's jumper JP2. Alternatively, we can supply the load side from the 3.3V regulator onboard the Arduino - that's JP1 (but never both at the same time!). I could have just left it at 3.3V because the driver IC heats up much less but the Arduino has a quirk: if there's a considerable load on the 3.3V bus, the USB connection stops working and you can't upload any sketch to the device. So, you have to keep the JP2 on for uploading and JP1 on for long use.

Step 3: Load the Arduino Firmware

Get the sketch for Arduino Stroboscope here and upload it using your favorite version of the Arduino IDE.

The motor should start rotating right away and the flash LED should start, well, flashing.

Please note that you cannot connect the BLDC motor using a wrong pinout because there is no wrong pinout as long as you can control the direction. You can connect the three ends of the BLDC windings in any combination and it should work anyway, you'll just have to adjust the direction.

Depending on the initial position of the RPM pot the motor may turn either too slow (or barely move at all, in fact) or too fast  - everything will be a blur. There's a sweet spot somewhere at approx 50-60RPM where the rotation speed and the flash speed are just right for the human eye.  Anyway, play with it, you'll see what I mean.

Step 4: Create the Zoetrope Animations

Now is the time to create the actual animations!

Since I had access to a DIY laser cutter, I opted to cut the frame silhouettes out of black craft foam

I made two animations - Rumba and Stick Dance - for your enjoyment so far. The animation files here are in the SVG vector format and the NGC format if you wanted to cut them on your CNC laser cutter,  such as the Epilog :) 

I do realize that not everyone has an Epilog at their disposal (at least not yet :) ) and so the size of the figures is kept within 1.5" to fit on the Groover's Pocker Laser Engraver. The SVG file can also be printed and the silhouettes meticulously cut out with small scissors (anyone here up to it?) or I imagine a PC-connected paper cutter, such as Cricut for example could be used. I did not try these on paper but see no reason why they would not work, especially if the paper is a heavy card stock

The Rumba animation was created by cutting 12 frames at equal intervals out of a Rumba dance video (I would love to credit the lovely dancer but cannot locate the source at this time - the animation was made some 6 months ago). Then the dancer's silhouette was separated from the background (12 times!)  and traced in Inkscape to convert into vector format.  Rather tedious work that took several hours.

Making zoetrope animations from video is a lot of work, obviously, and so I also looked for a different way of creating the frames. It turned out that there is a software out there, called Stykz, designed specially for that!  Stykz is perfect for creating these animations because you can control the stick figure very precisely and you can plan your animation out by creating the exact number of frame you need (12) and then working your moves into them. There are some template stick figures you can use and then you can let your imagination run wild, unlike working from actual video where you're limited to what's been filmed.

I am not qualified to instruct anyone on how to use Stykz but I encourage you to stop by their site, grab the free download and check out their tutorials - you're guaranteed to find your way around the software in a matter of minutes.

The Stykz results can be exported as PNG files containing individual frames which can then be traced in Inkscape and either printed or converted for cutting out either on a laser cutter or on a PC - connected paper cutter.

Once the 12 figures have been cut, make sure you glue them to the outer rim of the CD in the right order! Direction does not matter but the order is very important . I found it best to glue the frames right away because some of the intermediate frames may look alike and the wrong order will definitely mess the motion up. Super Glue (Locktite Gel Control Super Glue works great)  is the best glue to use because it grabs and dries fast enough to move onto the next figure as soon as you've positioned the previous one.

I will be very happy if the readers make their own animations and post it either on my blog or right here.

Step 5: In Conlcusion

I started this project to learn and get more comfortable with brushless DC motors but it turned out to be a lot fun in many different ways.

If you wanted to learn more about this project or brushless DC motors in general, check out my blog for a tree-post write up on BLDC I did on the subject.

For your own animations I recommend to browse through Stykz website and hang out in their forums, too. There are plenty of interesting information about animation in general and stick figure animation specifically in there.
The Arduino Stroboscope is not a very difficult project and making your own animations can be a lot of fun, too. I hope my readers will post some of their own animations here.

It's been fun!



    • Arduino Contest 2019

      Arduino Contest 2019
    • Trash to Treasure

      Trash to Treasure
    • Tape Contest

      Tape Contest

    28 Discussions


    6 years ago on Introduction

    Just wanted to post a follow up here. I returned to the project while building another BLDC-based project and in the process re-worked the motor driving circuit. It now works much more efficiently (no overheating of the driver) and is based on very common and chip components - discrete PNP and NPN transistors. Here is the video of the new circuit running the old zoetrope animation and here is more info, including the circuit diagram and the new Arduino sketch.   


    3 years ago

    This is cool!
    Idea: What if you could set up some kind of tachometer system, using a magnet and coil so the Arduino could control the flash rate, according to rpm? Then your flashing would always be timed perfect!


    If you do make it please reply to this comment as I would like to see how you did it. How about replaceable slides so you could change the animation.


    Sure thing.

    I think I will use a laser diode though. Just completed a TTL-controlled driver for red laser diodes, will use that - they provide better illumination and the beam has narrower aperture, even without the optics - better for throwing light to far away walls :)

    The slides are interchangeable - the CD is not glued in place, you can take it off if you like. That was the whole big deal with using PWM control - otherwise the CD would slip on the spindle. See more about slippage prevention :) here: 
    My blog page has pictures of both animations I made - the Rumba and the Stick Figure Dance :), and both are downloadable in SVG and  G-Code formats. I also describe how to make your own. Haven't had much time to play with it lately, would be nice to see if anyone else had created any new animations .


    7 years ago on Introduction

    This would be much easier if you use a dc motor and add a small electrical contact to the cd at each image. So when the cd rotates and the contacts are shorted at the image points you get a strobe. No micro controller required and you r timing wouldn't go off as it did in the video.

    7 replies

    Reply 7 years ago on Introduction

    Yes the contact would wear and debouncing would be an issue which is fairly easily solved using discharge caps or by switching the electrical contacts to magnets or using a line counter instead or a million other contactless solutions. Just my 2¢ :)


    Reply 7 years ago on Introduction

    I had a similar thought but I guess it's a good learning experience using an arduino.

    I would have punched a hole (or a cut) in the disc for each image, then placed a led beneath and a phototransistor or similar on the other side that would electrically close a circuit to the LED. These can be bought as a fork like module as well.

    It wouldn't matter what speed you run it (within limits) or in which direction it runs, it would always stay synced.

    Doesn't seem there's a need for an Arduino. ;-)

    EDIT: Aha... it's the motor that needs the controller...
    With some feedback though the off sync could be corrected.


    Reply 7 years ago on Introduction

    Thank you for your comment, e5frog!

    These are all valid points and yes, the motor was the defining element of the project, at least for me because I was very curious about BLDCs in general. Using an MCU was essential for the motor part. However, even for small things like the flash timing MCU can make it so much easier.

    For example, if I based my flash on a 555 timer, I would need a circuit with something like 10-12 components in it to implement the photo transistor triggering and flash duration control. Just that little part would have been more than the entire project in terms of parts (if you consider the Arduino one black box, obviously).

    Additionally, the polycarbonate the CDs are made of  is very brittle and often cracks when you try to drill it or cut a slot. Plus, you'd need to position and drill your holes perfectly. I just know I'm not good at that :)

    Anyhow, like I said before, there are many ways to achieve the same result. But the beauty of an MCU such as Arduino is that it can take care of so many things at once and eliminate great many electronic and non-electronic components to simplify design of the project.

    That said, there are ways to implement feedback without resorting to CD disk mutilation :)  For example, most BLDC motors these days have Hall-effect sensors built in. Xbox drive was a notable exception I used to simplify the project. It would have been an almost trivial upgrade of this little project to implement rotation speed feedback / flash sync  based on the output of that sensor.  


    Reply 7 years ago on Introduction

    Yes, many ways and as you basically needed an MCU for the motor there's no reason not to use it for that as well.

    Anyway, fun little project, glad it worked out the way you wanted it to.


    Reply 7 years ago on Introduction

    Mechanical contacts have a nasty habit of bouncing (rapidly connecting and disconnecting multiple times during what might seem like a single click). And they also worn out in time. 

    A  reed switch and a whole bunch of tiny super-strong magnets glued next to the figures might do the trick (although reeds still bounce). 

    However, part of the fun was to build the animations on CDs and DVDs to emphasize the crossover between the old technology and the new. And it is very difficult to find a CD drive with a DC spindle motor these days. They've mostly all migrated to the trash bins and landfills by now. I actually have one but decided not to base the design on it because no one would be able to reproduce it because it's so hard to find.

    Regardless, by the time you take care of the switch bouncing, some spindle speed control, positioning contacts or magnets, etc., you'll realize that it was just easier to employ an MCU (Arduino here) to do all the hard work.

    By the way, sorry it's not quite clear from the video but the timing in a middle of the video went off because I switched the direction or rotation. The CD, however light, cannot stop and change direction immediately due to inertia, and that's how the sync was lost.  I had to use my finger to restore the sync :)  Once the flash is synced to the figure position, it's pretty stable even without close loop speed control. Well, stable for a toy, anyhow...

    Thanks for stopping by!


    Reply 7 years ago on Introduction

    What if the figures were directly on a clear poly carbonate disk and the flash was from behind... Could be a cool effect but then again might not work if the images are too close and the speed wasn't just right... HHHmmmmmm


    Reply 7 years ago on Introduction

    You mean, if they instead of standing on the disk like they do now would be laying on the disk? I guess it's possible.  I don't see what might prevent it from working except of course the space towards the center of the disk will become pretty crowded.

    And yes, the timing is very important regardless of the frames positions - if the strobe is just right (synchronized to the disk rotation and it's not too long) they will be "frozen" in whatever position they happen to be in that instant.

    You just have to be careful with the LED positioning: you don't want a 1W LED shining right into your eyes.

    In fact, you can have plenty of fun by aiming the LED under the disk and using some sort of a piece of white paper as a reflector to reflect it up. Then taking a transparent CD holder from a 50- or 100-pack (you know, the clear one on top) and drawing your frames with Sharpie or something like that. If you'd watch this stroboscope from above, it should show your 2D animations.
    I think it's a great idea!


    7 years ago on Step 5

    Awesome project ! Very nicely done ! Just thumbing through and I always check out the Arduino projects ....nice project and very nice code.

    Thanks so much for the share!


    7 years ago on Introduction

    No doubt!

    In fact, if you're ever in Orlando or Las Vegas, check out a Blue Men Group performance. At one point during the performance they are running a super-large scale stroboscope with life-size 3D sculptures for the frames. Pretty wicked!