6.1.png
 
 
3.png
 

I have seen the billboards along the side of the road that change their image every so often.  They are made by triangular columns which rotate so that the adjoining faces align to form one of three advertisements.  I thought that I could make a similar wooden display out of triangular wooden prisms with dark stain on one side and light on the other.  I built a small 3x3 model to try and figure out how I would control the rotation for each pixel.

Once my small model was made, I decided that using servos would be a good way to create the motion I wanted. I needed a programmable way to control the servos and began tinkering with electronics to find a solution.  I started by using an LED array controller that could interact with a raspberry pi.  The LED controller used pulse wave modification to vary the brightness of the connected LED lights.  I learned that servo position is controlled pulse wave input as well.  So, I created some circuitry to convert the LED controller output signal to match what was required by the servos.  At this point, I had the model of pixels and had created a solution for programmatically being able to adjust their positions.  My visio was to create a panel of pixels with far more than 9 pixels.  The amount of circuitry that would be created felt like a prohibitive amount of work to commit to.    The project sat for a while until one day I noticed the light reflecting off of my model. The wooden pieces were different shades depending on their orientation.   I would not need to use triangular pieces of wood; I could use a simple tile of wood that tilted to much less of a degree.  

At this point, my interest was reinvigorated, and I began looking for other ways to solve the mass circuitry problem.  I found a module designed to control 16 pixels that was programmable by the Raspberry Pi.  Even better, the modules were addressable and used an I2C interface, which meant I could string together many of them and control lots of pixels!  At this point, I began to create my second model.   For this model, I approached every decision with scalability in mind and set off to create a small 16-pixel display with steps that could be replicated for a bigger project.

4.png
 

Servo’s mounted to CNC routed backing board

Servo’s mounted to CNC routed backing board

The first challenge was figuring out how to arrange and mount the servos so they could attach properly to the wooden tiles.   I began experimenting with different arrangements and decided that using a solid piece of plywood with slots for the servos would be a good idea.   I started experimenting with different slot shapes and ended iterating over the design with a 2D art program I wrote years ago.  I then converted the designs to vector formats that a CNC router could interpret.   After several iterations, I came up with a design that allowed the wooden tiles and servos to be consistently and easily mounted.  Next, I needed a way to attach the linkage wires to the wooden pixel.    I created several 3D designs using tinkercad.com’s design tools.  I settled on an easy to use and easy to replicate design.  Finally, I experimented with different shades of wood and finishes to determine which combination would best reflect the light to create the greyscale effect I was looking for.

5.png
 

At this point I had worked out the mechanical and electrical pieces to the puzzle and finished building and wiring the second model.   Now I had to write some software.   I started by creating code that would control the servos at a low level.   This code allowed direct communication with the rpi i2c bus.   Once completed, I abstracted the process into a C++ class called Pixel.   Then I made a Board class that would organize and allow the 2-dimensional indexing of the servos.  At this point I could simply tell a pixel in row x and column y to rotate to any position between -45 and 45 degrees.   Next, I created a calibration program which would allow me to ensure consistency between pixels.  This was needed to smooth out differences in servo quality or other mechanical inconsistencies.

7.png
 

For the Pixel Panel, I chose light maple for the wooden pixels. I decided a matching light maple frame would look nice as well. The wooden pixels have a hole through them so they can be mounted on a stainless-steel rod. The rods I used were sufficient to hold four pixels each on the second model but would require additional support in order to hold 32. I was using 3D printed spacers to align the pixels and chose to design brackets for the rods that would look similar and therefore be unnoticeable. This took some time to figure out and I ended up having them fabricated at a local metal shop. I needed the frame to disassemble in the event that I needed to make adjustments or changes. For this reason, I chose to use half-blind dove tail joints on the corners that could manage the necessary vertical strain of the art piece while being easy to disassemble on the horizontal. Finally, I did some tests and reviewed the servo literature to quantify the type of power I would need for the board to operate.

Painted Pracket for metal rods

Painted Pracket for metal rods

Aluminum Heat Sink for Power Supply

Aluminum Heat Sink for Power Supply

Screenshot_20210701-204751_Chrome.jpg
 
10.png
 

The Pixel Panel runs on a Raspberry Pi which is a Linux based microcomputer. The system functions can function as a web hosting service. So, using a combination of HTML, javascript, PHP, shell script c++ and c# I created an interface that allows the board animations to be selected and modified by simply opening a web page on any web connected device.

20201130_230330.jpg