This project is submitted for

Description

The LEDs are driven by a Raspberry Pi and the motor is driven by a PI control loop written in Verilog for an FPGA.

To my knowledge the first "pixel globe" implementation with APA102 LEDs.

Details

Preface

The following content is pulled directly from the lab report that we wrote describing this project, so if you're having trouble understanding anything here please, please don't hesitate to send me a message and I would be more than happy to explain it on a less technical level!

I did not build this project alone! Much of the design, all of the motor circuit design, all of the Verilog, most of the cable work, and most of the CAD were done by my partner Kyle. I did the primary work on the LED control software and the control board design and population.

Overview

Persistence of vision (or POV) is the phenomenon by which the eye, seeing a rapidly moving objects, stitches together the object’s position at different times into a single cohesive image. This phenomenon is leveraged by CRT displays, which use raster scanning to draw individual pixels in each horizontal scanline before returning to the beginning of the next one. In contrast, our spherical display displays scanlines vertically. We have built a spherical display that creates a picture by rapidly alternating the colors displayed by each of a column of LED pixels. Each column of vertical pixels displays simultaneously. The physical location of the light source is then moved by a short distance before the subsequent vertical scanline is displayed.

Our system consisted of a 60-pixel LED strip mounted on an acrylic ring, which was lined with a 60-pixel LED strip running an array of LED pixels. Its bottom is mounted to a 6V DC motor with an encoder which uses a Hall-effect sensor to accurately determine its position. The motor’s rotational velocity is set to 500 rpm. A 6-wire slip ring from Adafruit allowed us to connect the LED power, clock, and data lines from a stationary frame to the rotating acrylic ring. (Since 6 wires are available, 2 wires each are used for power and ground lines.)

Our system's frame was constructed from scrap wood. The ring that carries the LEDs was 12" in diameter and laser cut from 1/4"-thick acrylic. 60 APA102 LEDs from Adafruit (strip density of 144 LEDs/m) were attached to the ring with CA glue. The top and bottom of the ring were both sandwiched between two 3D printed couplers, which contained a hole for the four LED wires (on the black encoder) and the motor shaft set screw (on the purple encoder).

The motor is mounted inside a square of scrap wood which is bolted to the bottom of the frame with four metal standoffs. The motor is glued into the wooden square. The bottom plank underneath the motor is drilled out so that the motor can be set deeper inside, but the motor itself cannot actually be snug inside the plank, as the fragile encoder on the bottom needs to be able to rotate freely. Additionally, the motor's 500 RPM rotation speed creates a lot of scary vibrations, so we added a little bit of damping on the top of the frame; hence, the brick weight seen in the pictures of the device in action.

The electronic components of our system consist of the Raspberry Pi microprocessor package and the µMudd Altera Cyclone IV development board. Each controller was in charge of a separate subsystem of the overall package - the Raspberry Pi controlled the LED strip, and the µMudd board controlled the DC motor. The control board functioned as a permanent breadboard, which contained power hardware, level shifters, and bridges between digital lines on the Pi and the FPGA. 5-volt and 12-volt inputs from an ATX computer power supply were used to power the lights, the logic, and the motor.

The Raspberry Pi sent 3.3V data out into a level shifter which sends 5V SCL and SDA lines into the LED strip. It also sends two lines into the FPGA: “Motor Toggle” and “Reset”. The +5V and GND input lines on the control board are spliced into a microUSB cable, which powers the Raspberry Pi.

The FPGA receives the previously mentioned control lines from the Raspberry Pi. It also sends 3.3V from its regulator to the encoders on the DC motor. It...

These things are impossible to film, they alias to hell, especially because you need a >60ms exposure to even make sense of the picture that is being displayed. Once I get back from break I'll try to give it another shot though, especially because we have some killer animations that still images can't really capture. You can get a general idea of what they look like in motion (as well as the implicit difficulties of filming them) by looking up "POV globe" on Youtube, though.

Very cool. How's the slipring holding up at 500 RPM? And is that fast enough? My gut feel is that 500 RPM is on the slow side of proper POV for the naked eye, but I don't have any evidence or experience to back me up.

Tbh we're too scared to run it faster. The chassis is a little bit slapped together and we already need the brick on top to keep it from shaking itself apart. We're also overvolting the motor by a good 50% to get up to 500 rpm.

The other nice thing about the brick being there is that it forces the slipring (which is glued into the top wooden section) to mate with the wooden coupler. The wood sections are not terribly precisely put together, so if you don't apply a little bit of pressure, the slip ring will slip right out by a few mm. It will still work, but it's very scary, because the torsion is then entirely on the wires themselves.

That being said, the POV looks just fine at 500 rpm. The photos taken were all at a slightly long exposure, but the image is 100% visible to the naked eye and it looks great. The only thing I would want a faster rotation speed for would be if I wanted to do some higher framerate animations, but I already have a pretty cool animation coded with a sine wave around the perimeter of the globe, whose amplitude goes up and down. And I've written a few others in the pixel editor I wrote (nothing too complicated though, maybe soon).

There's a definite lack of video here, which I regret because the animations, and that's because it's really hard to get good video of POV stuff. If you have any suggestions, please let me know!