In January, Jerry O’Leary and I launched a Kickstarter campaign (currently <3 days to go) for the world’s thinnest watch, the CST-01. This is a watch we have worked on outside of project work while here at IDEO. On IDEO Labs, our aim is to share our process and give our readers an “under-the-hood” look at some […]
I live in Logan Square in Chicago and have this glass block window in the front of my building. Because I spend too much time with computers, every time I looked at the wall it seemed like a grid of pixels. I had seen LED pixel walls before, but never ones that would let light through during the day. I had been thinking about this challenge when I heard Mike Kuniavsky and Tod Kurt talk about the BlinkM modules that their company ThingM makes. These modules seemed perfect, so I ordered 126 of them and set to work.
Because the wall is public facing I wanted to make it interactive, so as someone walks by it reacts to their movement. I couldn’t resist the idea of making a “bricks” style game out of bricks, so this was the first project. The video below shows this game in progress. I wanted to design it so as people walked by, they would control the paddle and would start to play the game without intending to.
This is as far as I got, unfortunately the wall had to be taken down due to construction. If you have a similar glass brick wall and preferably live in the Chicago area, email us (firstname.lastname@example.org) and hopefully it can find a new home!
How it was made:
Each module was given a unique address between 1 and 126. I set up a grid where a BlinkM Module was soldered inside the intersection of the 4 necessary wires: SDA, SCL (data lines), power and ground. This way the electrical structure became the mechanical structure. Because each module has its own address, all of the data can be on the same bus. To measure the distance I needed to place the grid from the wall I drew a square the size of the brick on some paper and held a module so the circle of light it casts is just inside the square. Once the light gets in the brick it bounces around so much it ends up lighting the brick up uniformly with no bleed.
To control the display I used the open-source prototyping platform Arduino and Flash. Using two Arduino boards instead of one was not necessary, but they cut down the amount of bus capacitance, so the amount of errors I got decreased.
What I Learned:
Bus Buffers (Linear Technology’s LTC4300A-2) were needed for the I2C data signals. The bus capacitance was too high and was preventing the signals from switching fast enough. I used one for each data row, and mounted the chips on Schmartboards to avoid having to make a custom board for the surface mount package.
I followed the application circuit, but 4.7k Ohm resistors were swapped for the 10k resistors shown to make up for the long transmission lines.
The ground lines were originally too long. Because the signal used the power ground as a reference,it was necessary to make some ground connections horizontally as well to make more of a ground grid than simply running the ground lines vertically connecting at the bottom. The final power lines looked like this:
[kml_flashembed movie="http://labs.ideo.com/wp-content/uploads/2009/08/ledwalltemplate1.swf" width="500" /]
I wrote a program that monitors a 14×9 pixel square in a flash movie, and sends the color value of each pixel to the Arduino boards. By writing it this way, all of Flash’s built-in anti-aliasing and animation tweening can be used to control the animation on the wall. Above is the actual file that runs the LED Wall.
This animation is created by simply tweening a yellow line on the left to a red line on the right in the 14×9 pixel area in Flash.
The Arduino code uses the BlinkM library supplied by ThingM. I worked with fellow IDEOer and roommate Evan Shapiro on this protocol. We basically read in the color values for each pixel in Flash and send it to the corresponding BlinkM module.
Serproxy needs to be configured for 2 arduino boards and the configuration that was used on a mac is bundled with the code. This config file will need to be changed to reflect the serial ports of your specific Arduino boards.
Additional Video and Images Thanks to Adam Geremia for the photography help!
Soldering these was a total pain: 126 modules x 4 wires x 2 sides of the wire = 1008 solder joints. Here you can see the extra ground wire I added.
View from across the street, it really is bright, but luckily there’s a library across the street so no neighbors to annoy.
The first one!
Someone takes a cameraphone picture with it at the end.