The Rotating POV Globe utilizes the arduino uno as the central control brain which contains an Atmel AVR microcontroller. Essentially we have a rotating ring which contains up to 32 LEDs in this particular configuration. As the ring rotates, changes in the configuration of the LEDs will give the impression of a consistant and persistant globe or sphere covered in LEDs. The best way to describe the construction of a Rotating POV Globe is with a description of the hardware followed by a description of the software.
Step 1: Rotating POV Globe Hardware
It is a ring that is driven or rotated by a brushless multipole DC motor at the base and held in place at the top by a bearing. At both of these points, we transfer electrical power by varying the internals of the ring where all of the processing and LED control occurs. Once we enter the ring, we need to perfom some power smoothing because this is constantly rotating and may have interruptions to the supply current as a result of these moving contacts. We use a rectified diode capacitor to provide continuous power to the control electronics. We also have a 5 volt regulator to supply low voltage power to the LEDs along a common anode.
The arduino uno is interfaced with the LEDs using a data bus and a series of TTL latches. This is done because the I/O limitation of the arduino uno prevents us from directly wiring LEDs to its outputs. We have an 8 bit data bus which is common to all four D-type latch chips and each latch chip is directly addressed from another pin so there are four pins that do the addressing. It is done this way because it is highly scaleable. If you want to increase the number of LEDs that you are going to drive,you can easily extend the data bus, use a hardward d-multiplexer rather than in software (which is what we have done here for simplicity) and drive many more LEDs. It is very simple, very fast and very effective! The TTL latch chips will read the data bus and upon the clock transition on the address or the clock signal provided to the latch chip, the data is stored within 8 registers so the output is held continuously at value regardless of what the data bus does next. So you can very quickly write all the values of these LEDs using the limited I/O. Each of these chips directly drives an LED by syncing the current because its a TTL.
For timing we have an inductive proximaty switch or sensor. On each rotation, this inductive proximaty switch will pass a very closly bolted piece of iron and induces an electromagnetic field within the iron and detects the change as it moves past the iron. In air or in an non-iron environment the signal will behave differently to what it does in front of the iron. The electronics within this proximaty switch will give us a reasonably nice signal output each time this proxy switch passes the iron. Because the switch operates at 12 volts, and the arduino will only accept up to 5 volts on its input we use a resistive potential divider to drop the signal level coming out of the inductive proxy switch to one that is nice and friendly for the arduino. This is run into one of the analogue pins and we convert its function to trigger the interrupt service routine. This determines timing and synchronizes the image on each rotation.
Step 2: Rotating POV Globe Software
Under normal operating conditions when the globe is stationary nothing is happening but as soon as we pass this inductive proximaty switch and pass the iron, we trigger an interrupt service routine. This routine will consecutively scan through the columns of the array and write each column. It will write a column and then allow the column to stay in its existing state for a predetermined amount of time before switching it all off again. It will then wait for a predetermined amount of time before it looks at the next column and repeats the process. So, what we have in the software is a very fast consecutive reading of the columns and in between reads we blank. This gives the impression that although the LED is moving quite fast, we have a relatively short duration of On time relative to the Off time.
By adjusting this timing, we can change how much that LED is going to appear to smear because what we want to do is make the LED appear to be stationary. The longer we keep that LED On for, the more it will turn from a dot to a smear or line. So, if we want to display something with a regularly spaced pixel representation, we need to keep that LED looking like a dot. You should be able to find these timing values quite easily.
It will continue to scan through the entire array column by column, until it has reached the end. When it reaches the end you have a small period of time to manipulate the array. You can either write a new one or manipulate the existing one. If you want to write a new one, there are two ways you can do it:
- from algorithms which may use nested loops to write a repetitious pattern
- or, read a set pattern from flash memory as is the case with the world map image