"Cyclops" Persistence of Vision Toy

This kit contains the parts to build a device that uses a quirk of your visual system to display an image. A light that's moved rapidly enough is perceived more as a line of light, rather than a moving dot. If you arrange a bunch of these lights in a row and move the entire row in a direction perpendicular to both the row and line connecting the viewer to the row (so that the row sweeps out an area visible to the viewer), you get an entire sheet of light. If you turn the lights in the row on and off at the right times, you can display an image.

This kit includes a micro-controller that turns the lights on and off for you. You can design an image using a spreadsheet. That image can be converted to a program that you can download to the micro-controller. You can also tinker with the program if you like: in fact this board makes it easy to gather data from external sensors.

The image is easiest to see if you refresh it rapidly. For example, you could attach the row of lights to the spoke of a bicycle wheel or the blade of a ceiling fan (with careful attention to safety and balance), together with a sensor that tells the micro-controller when the wheel or fan is in the starting position. That way the image gets refreshed with each revolution. It's also possible (but harder) perceive the image just by waving the row of lights, or by moving your head. Here is a link to a fan that uses persistence of vision. And here is a bike wheel with POV display.

Is It Hard to Build?

I think it's no harder to build than a model of a plane or ship. It's got a lot of little pieces that you need to put together, in the right way. If you are careful, and persistent, and follow the instructions, it will work. Once you have the basic functionality working, your ingenuity and inspiration will make it ten times cooler.

Be Careful

There are several potential dangers. Some people with epilepsy may be sensitive to blinking lights, such as those in this project. Soldering irons can cause nasty burns. If the display is mounted on a rotating device, it could pose a hazard if it is unbalanced or comes loose.

Tools and Materials

Name Description Links
Soldering Iron

A pencil iron, 15-30W. If you do not already have a soldering iron, Radio Shack has several models for about $10. Those would be good enough for this kit. Do not use a big 100W gun: those are good for plumbing, but they will make the copper delaminate from your boards. If you decide you enjoy electronics, you will want to get a better iron. The best models have temperature regulation and chrome plated iron clad tips. The XYTronic soldering station I bought 30 years ago is as good as new: I've never even needed to change the tip. Copper tips do not last very long at all. "Cold Heat" irons appear to be a new twist on the old idea of "resistive soldering". The reviews I've Googled suggest it is much harder to get good connections with this kind of iron... and the applied voltage could damage the semiconductors you need to solder down.

Solder Use a fine gauge electronics solder with rosin core (preferably multi-core) flux. NEVER use acid flux: that's good for plumbing, but it will destroy your electronics products.
De-Soldering Tool

Ideally you will not need this.. but mistakes happen. Some companies sell a rubber bulb you are supposed to use to remove molten solder. In my experience, this kind of tool does not work very well at all. Slightly better is a "Soldapullit". Some people like them, but I've actually had more success with a similar but cheaper device (in the links at the right). You can also buy a braid of very fine copper wire that acts as a wick. The very best tool is really a desoldering station: a soldering iron with a hollow tip attached to a vacuum pump, but those are really expensive (I never owned one, even 30 years ago when I was building electronic devices for a living).

Needle nose pliers Available in most craft and hobby shops, as well as Radio Shack
Wire Snippers Available in most craft and hobby shops, as well as Radio Shack
Wire Stripper

Try to get a tool that can strip both 30AWG Kynar insulated wire-wrap wire, and 22AWG wire. For the wire-wrap wire, I use a stripper that has a fixed-size slot: you put the wire in the slot and pull. The cheapest strippers require manual adjustment: if you get it wrong, you may nick the wire (which is then more likely to break later). Strippers with specific positions for different gauges can work well, but if poorly made can be just as bad as the manual adjustment kind. There are also "self adjusting" strippers: I have tried several cheap ones without satisfaction, but the expensive ones might work well.

Computer

Any Mac, Linux, or Windows computer with a serial port (or a USB adaptor that provides a serial port). This is used to send the image to your Cyclops. The computer does not need to remain connected continuously while the toy is running, only when you want to download a new image. USB adaptors are described further in the Overview section below.

Hot Melt Glue Gun This can be handy for securing things physically. You can also use it to attach the light emitting diodes to the diffusers (described in more detail later).

Preparation

If you have never soldered anything before, first read some tutorials on the subject:

Then download these (explained in more detail in a moment):

Overview

Your kit is composed of the following pieces:

Name Description
Micro-controller

The micro-controller kit (in the pink bag) is an RBBB miniaturized clone (made by the Modern Device Company) of the popular Arduino physical computing platform. The RBBB uses the open source cross-platform (Mac/Linux/Windows) Arduino development environment. This lets you write your own embedded controller software, which you can easily compile and download to the RBBB. Don't worry though, you don't need to write any software unless you really want to! But if you do want to, the RBBB can connect to six analog sensors, and 14 digital input/outputs. This pink bag also contains your Light Emiting Diodes (it's an anti-static bag that protects the diodes).

Serial Interface

The P4 serial interface kit (the red printed circuit board in the small clear ziplog bag) makes it possible for your computer to talk to your RBBB by translating RS-232 voltage levels to TTL voltage levels (it's ok if that sounds like gobbledygook).

This P4 kit presumes you have a serial port on your computer. It's relatively easy to build hardware that talks to serial ports, and also relatively easy to write software that uses the serial port. Unfortunately many vendors are omitting them. In that case, you can use a USB-to-serial adaptor. There are many such adaptors, some available for under $10 on ebay. You should watch out for two things. Firstly, try to get an adaptor that supports the RTS/CTS and DSR/DTR signals. Secondly (and more importantly) make certain the USB adaptor has drivers for your operating system. Many cheap adaptors only have drivers for Windows... and many vendors will often lie about the availability of Unix drivers. Adaptors that use chips made by Future Technology Devices International have good Mac and Linux support.

An alternative is to omit the P4, and use a USB adaptor that uses TTL voltage levels to directly talk to the RBBB. I use this USB-TTL level adaptor

I've added to your P4 ziploc bag two pushbutton switches, which can be used to tell your Cyclops to display a different image.

Arduino Development Environment Open source software that you can run on Mac, Linux, or Windows. It lets you send images (via the P4) to the RBBB.
Image Converter I wrote cyclops.rb to convert an image (represented in the grid of a spreadsheet) into a program that the RBBB runs to turn the LEDs on and off. To run this, you need to install the Ruby programming language.
LEDs

Your kit contains twenty high-brightness Light Emitting Diodes. These will be wired into ten pairs of diodes: each pair represents one pixel. Ten of the RBBB digital IO pins are each connected to one pair of light emitting diodes (wired in series, together with a 47 ohm current limiting resistor).

You have lots of choices in how you arrange the light emitting diodes. The simplest way is to just arrange them all in a line, as close together as possible. That will result in a very bright display a few inches tall. On the other hand you can make a display several feet tall, by spreading light from the diodes out over a larger area. That's what all those hot-melt glue sticks are for. You can melt a depression in both ends of the glue stick, and quickly stick a diode in each end. When the diodes light up, the light bounces off the milky glue stick and the whole thing appears to light up. If you want a brighter, more uniformly illuminated (but shorter) diffuser, you can cut the glue sticks in half before you use them.

High Level Schematic

Most of the complexity is in the RBBB board. Once you have that assembled, all you need to do is connect it to the LEDs and the P4 (if you are using the P4). This schematic shows the P4-RBBB connections and the RBBB-LED connections:

Assemble the micro-controller

The instructions for the RBBB downloaded in the "Preparation" section describes several construction options:

  • You should install the "Software reset hack", but there is an easier way to do so: see the suggested changes below.
  • The RBBB instructions give three ways of supplying power. Options 1 and 2 tether your Cyclops to your computer or a breadboard, which is not very desirable, so you should select option 3, with power provided by the supplied six-volt battery holder. If you are using the USB-serial cable with TTL level voltages (instead of the P4) then you should clip the +5 header pin so that the regulator is not "powered backwards". Do not clip this if you are using the P4 (because it supplies power to the P4).

In addition to the above options, you should consider the following changes:

  • Solder in the socket for the micro-controller before anything else. The instructions say to start with the surface mount chip resistor, but I think that's a lot harder to solder: better to get some experience first using the socket. Also, the socket is too close to the capacitors: if you install the capacitors first, it's hard to squeeze in the socket.
  • Solder in the chip resistor last.
  • You really should install the "software reset hack" capacitor, but don't cut the trace. Cutting the trace is difficult, and if you do it wrong, you could damage the board. It's easier to bend the header pin upward, and solder the capacitor to that (not-soldered-down) pin.

  • Decide if you want to use headers to attach the LEDs to the RBBB and attach the P4 to the RBBB, or directly wire everything up. If you use the headers, you will be able to unplug your RBBB from this toy, and plug it into some other toy that have not even thought of yet. On the other hand, it's a little less work to solder the LED wires directly to the RBBB. And the headers make the RBBB take up more space. Also RBBB kits are mondo cool, and pleasantly inexpensive: everybody should own at least a dozen!
  • Don't space the socket over the board using resistor leads as shown. It's clever, and may make it easier to read the labels, but you don't really need to read the labels. I think it's not such a good idea because the socket is then only supported by its leads: when you insert the chip, those leads will stress the plating in the holes. If this causes a tiny hairline crack, your RBBB could operate erratically. This is not too likely, but difficult to diagnose if it does happen.

Assemble the P4 Serial Interface

You do not need to do this if your computer lacks a serial port, and you decided to get the USB-serial interface that has TTL voltage levels. If you do build this, you can follow the instructions exactly. Do not add the optional reset capacitor (C2): that's done on the RBBB instead. Instead of the capacitor, use a jumper wire.

Connect the RBBB and P4

You can wire them directly, or you can use the header receptacles to make a cable. I intended to provide two header receptacles, but mistakenly ordered half the necessary number. The one provided can be used either to connect the P4 and the RBBB, or connect the LEDs to the RBBB. I suggest wiring the P4 directly to the RBBB and using the header receptacles to connect the LEDs. That makes it easier to use the RBBB for some other project later. Either way you will need to cut the receptacle: a hack saw will work fine. If you have a Dremmel tool, the cutoff wheel works even better than a hack saw for this purpose. You will loose a pin or three, because they are spaced so closely (take this into account when deciding where to cut the receptacle).

Test the RBBB/P4 Combination

Attach the "pilot light" LED as described in the RBBB instructions, and run the sample program that makes it blink.

Connect the LEDs

You need to make ten pixels, each consisting of two LEDs and a 47 Ohm current limiting resistor, all wired in series. These pixels are connected to Arduino digital I/O pins 2-11. Digital I/O pins 0 and 1 are used for serial communications. Pins 12 and 13 can be used as inputs. There are lots of ways to wire up the LEDs! First you need to decide what you want:

  • If you want a small bright display, find some other use for the ten hot-melt glue sticks provided, and attach the 20 LEDs to a piece of perf board. Or drill 20 holes in a piece of wood. Then connect the LEDs using the wire-wrap wire.

  • If you want a 45 inch tall display, attach one LED to each end of all 10 hot-melt glue sticks. I did this by using a smaller glue gun with a conical tip (and no smaller glue sticks inside of it). I used that tip to melt a conical depression in the end of a glue stick, and then quickly stuck a LED into that molten depression. Let the glue congeal, and then to the same thing at the other end of the glue stick. Connect the two LEDs (one on each end) in series (anode to cathode) using the wire-wrap wire. I then used the 22 AWG wire as a "spine" to connect together one cathode from each glue stick. Lastly, wire the anode from each glue stick to the RBBB, through a 47 Ohm current limiting resistor. Then figure out a way to support the ten diffusers physically. You could put them all in a hollow transparent tube (with insulation between them) to make something like a light saber, or attach them in the corner of a piece of moulding with an L-shaped cross section.

  • Compromise, and make something in between by cutting five of the glue sticks in half to make ten diffusers that are each two inches long. Then proceed as above.
  • Use you own ingenuity if you want to attach this project to a bicycle wheel or a slow moving fan. You need to be very careful though. For example, if you attach this to a spoke, and some of the parts come loose, they could get in the way and jam the wheel so it can't turn... which could result in a serious accident. Likewise somebody could get hurt if you attach this to a fan and the parts come flying off.

Program the Image

If you'd like to bypass image generation for the moment, you can download a pre-generated image, or a starting spreadsheet.

  • Open up Microsoft Excel and make an image by placing some character (say an "*") in every cell that you you want to light up. This "image" should be ten rows high. The width is not too important. If you make the image too wide, it may overlap with itself if you are using a rotating display. Start off with perhaps 10-30 columns.

  • Save your spreadsheet as a "CSV (Windows)" file. If you use the wrong format, the image conversion program will not be able to process it.
  • Use the image conversion conversion program to turn your "CSV (Windows)" file into an executable program you can run on the RBBB. To do this, edit the last line of the program to specify the .csv input file, and the .pde output file. Then cd into the directory containing the program and execute "ruby cyclops.rb". This will generate the .pde file, which is C-like source code for the RBBB. You can examine this source code using any text editor. Have a look at it: the "setup" function sets digital I/O lines 2-11 to outputs (they default to inputs). Then the "loop" function runs (forever). This function has an outer loop and an inner loop. The inner loop writes all 10 pixels. The outer loop writes the columns.
  • Run the Arduino development environment software, and use it to open the program you created in the previous step.
  • You can tinker with the program at this stage, if you want to.
  • Hook up your RBBB to the computer (via the P4 and serial port, or via a USB-TTL adaptor as described previously), and tell the Arduino development environment to upload the program to the RBBB.

Cusomization

You were provided with two extra pushbuttons (in the P4 packet). By a strange coincidence, there just happen to be two unused digital I/O lines. So you could modify the image-displaying software to listen to those switches, and display up to four different images, depending on which (if any) buttons are pressed.

If you mount your LEDs on something that rotates, you will probably want to prevent the image from from rotating around. You can do this by modifying the software so it watches one of those two unused digital I/O lines, and then starts the display sequence when it receives a signal: this synchronizes the image to a given orientation. You can use an optical sensor, but a digital hall-effect sensor may be a better choice.

Modify your cyclops to display text instead of images. You could dig up an 8 or ten pixel high font on the internet, or whomp up your own. Then modify the RBBB software to listen on its serial port (via the P4) for text sent by a computer, and display the font images corresponding to those ASCII characters.

Make the above text modification. Add a temperature sensor so the cyclops displays the temperature.

Make the above text modification. Write a "screen scraper" in your favorite language (Ruby? Python? Groovy? Lua? Smalltalk?) that downloads http://news.google.com, extracts the headlines, and then displays those headlines.

Modify the RBBB software to display a sequence of images, so that you have a tiny movie.

Modify the RBBB software to listen on its serial port (via the P4) for new images to display. Then modify the image translator so it produces only the image, and sends that directly to the RBBB (so you don't need to run the Arduino development environment every time you want to change the image.)