Hand tools and fabrication machines
This project consists of 5 LED RGBW strips lining the inside of an acrylic decahedron lined with one way film to create a system of mirrors that infinitely reflects the light from the LEDs all driven off a BeagleBone black.
Making The Hardware
- Print out a pentagon shape to act as a template for the pentagons you will be building the dodecahedron out of
- Count out 12 of these pentagons out of your acrylic
- Follow instructions on box for applying one way film to acrylic
- Cut up LED strip into segments of 7 LEDs a piece following the indicated marks on the strip that say where to cut
- Strip the waterproofing off at these marks after cutting them so you can solder wires in the next step
- Solder together these smaller strips into a pattern of 2 and then split them off into a Y formation and then 3 more strips on one part of the Y and just one on the other
- Test the strips to make sure they are work electrically and that solder points are conductive and attached correctly
- Begin assembling dodecahedron, we build it by hot gluing have the pentagons together at first and adding the strips as you can see below, different colors are the different strips at that point the numbers represent the number of strips before it in that strand, you can see at 2 how each set splits off
- Keep gluing on pentagons and adding strips where possible, making sure to have wires leading out of the shape for the data in, ground and power lines of the strips
- Upon completing the dodecahedron solder together all strips data, voltage and ground lines respectively so they all have one input for data one for voltage and one for ground
- You are now ready to hook the dodecahedron up to the BeagleBone and follow the steps below for software integration
- Attach the LED strip to the 5V output from the beagle and ground to ground
- Attach the data line to P9_29
- Wire the KYO37 like in the diagram below with its digital output attached to P9_40
Running Software On Beagle Bone
To being simply clone the repo linked on this project and cd down into the InfMirror/LEDStatic this directory will contain all the code you need to run the LED strips for your infinity mirror.
Begin by starting the PRU kernel driver that will help run the LEDs, you will have to follow these steps every time you boot up the Bone.
- cd /InfMirror/LEDStatic
- Run $ source setup.sh
- Then run $ make
The PRU kernel driver is now running in the background. From here there are a few different ways to control the LEDs.
To run any of the sample python programs from the repo simply use the command
Listed below is a quick rundown of what you can expect from the different sample programs
- neo-colors.py: Shifts the LEDs slowly through 4 different vibrant colors
- neo-rainbow.py: Runs all the colors of the rainbow through the each induvial LED quickly
- neo-gpio.py: Same as neo-colors.py but has integrated a microphone input that flashes the LEDs red when a adequate input is detected
- neo-gpioFlip.py: Top half of the hardware is white middle strip is purple and bottom few are blue flips when a adequate microphone input is detected
- simplemic.py: Testing program we used, checks from microphone input of certain level and flashes two colors if found
We recommend checking out these files and reading the section below, we tried to make them easy to understand and hope that others can build on them to create even more unique shows.
From Command Line
You can also control induvial LEDs from the command line and if you check closely this is exactly what the python code above is using to communicate to the kernel driver. But you can also do it yourself using the command below:
- $ echo "Led position in strip" "Red led" "Green led" "Blue led" "White led" > /dev/rpmsg_pru30
- $ echo -1 > /dev/rpmsg_pru30
If you continue to have issues getting the driver installed you may not have the rpmsg.pru driver that allows the ARM processor to talk with the PRU this should be installed on most current images. If it is not though follow the link below and the instructions under part 1.16: