Introduction: Interactive Led Lamp | Tensegrity Structure + Arduino
This piece is a movement-responsive lamp. Designed as a minimal tensegrity sculpture, the lamp changes its configuration of colors in response to the orientation and movements of the whole structure.
In other words, depending on its orientation, the lamp turns to a certain color, brightness and light mode.
When the icosahedron rotates (over his own axis), it selects a value from a virtual spherical color picker. This color picker is not visible, but color adjustments happen in real time. Thus, you can figure out where each color is positioned in space, while you play with the piece.
The icosahedral shape provides 20 face planes and the tensegrity structure gives it 6 additional standpoints. This provides a total of 26 possible colors when the lamp rests on a flat surface. This number increases when you turn the lamp in the air.
The system is controlled by a Pro Trinket connected to a three axis accelerometer. The light is provided by RGBW LED strips, that can control the color and white brightness value individually. The entire circuit, including microprocessor, sensors and lighting system works at 5v. To power up the system, a source up to 10A is needed.
A list of the main elements used in the lamp are the following:
This movement-responsive lamp is the first version or prototype of a longer personal project.
This prototype was made out of recycled materials. Throughout the design and construction processes, I learned from successes and mistakes. With these in mind, now I'm working on the next version which will have a more intelligent structure and robust software.
I want to thank the LACUNA LAB community for their help, ideas and suggestions throughout the development of the project.
Step 1: The Idea
This project was the result of several ideas I had played with in my head for some time.
Since I started, the concept has changed, the initial project evolved and took actual shape.
The initial approach was an interest in geometric shapes as means of interaction. Because of its design, the multiple polygonal faces of this lamp serve as input method.
The first idea was to use a dynamic system to force the icosahedron to move. This could have been controlled by an interactive application, or social media users.
Another possibility would have been to have an internal marble or ball press different buttons or sensors and thus generate random inputs as the piece moved.
The tensegrity structure happened later on.
This construction method fascinated me: the way in which the parts of the structure keep each other balanced. It is very visually pleasing. The entire structure is self balanced; the pieces do not touch one another directly. It is the sum of all tensions which creates the piece; it´s fantastic!
As the initial design has changed; the project moves forward.
Step 2: The Structure
As I mentioned before, this first model was made out of recycled materials that were meant be discarded.
The wooden boards I took from a slatted bed I found on the street. The golden trims were part of the arm of an old lamp and the stoppers for the rubber bands are office clips.
Anyway, the construction of the structure is quite simple and the steps are the same as in any tensegriry.
What I did with the boards is to bring them together, in groups of two. Making a "sandwich" with the gold spacers, leaving a gap where the lights would shine through.
The dimensions of the project are completely variable and will depend on the size of the structure you want to make. The wood bars from the pictures of this project are 38cm long and 38mm wide. The separation between the boards is 13mm.
The wooden boards were cut identically, sanded (to remove the old paint layer) and afterwards perforated on both ends.
Next, I stained the boards with rustic dark varnish. To join the pieces I used 5mm threaded rod, cut into sections of 5cm and 5mm with a knot on each side.
The tensioners are red rubber bands. To attach the rubber to the bars, I made a small hole through which I passed the band and then trapped it with a stopper. This prevents the boards from moving freely and the structure to dismantle moved.
Step 3: Electronics and Lights
The configuration of the electronic components has been designed to maintain the same voltage, both logic and feeding throughout the system using 5v.
The system is controlled by a Pro Trinket connected to a three axis accelerometer. The light is provided by RGBW LED strips, that can control the colors and white brightness values individually. The entire circuit, including microprocessor, sensors and lighting system works at 5v. To power up the system, a source up to 10A is needed.
The Pro Trinket 5V uses the Atmega328P chip, which is the same core chip in the Arduino UNO. It also has almost the same pins. So it is really useful when you want to bring your UNO project to miniaturized spaces.
LIS3DH is a versatile sensor, it can be reconfigured to read into +-2g/4g/8g/16g and also brings Tap, Double-tap, orientation & free fall detection.
The NeoPixel RGBW LED Strip can manage the hue color and the white intensity separately. With a dedicated white LED, you don't need ´to saturate all the colors to have a white light, it also makes you white more pure and bright and on top of that it saves energy.
For wiring and to connect the components together I decided to pass cable and create sockets with male and female pins using crimps and connector housings.
I connected the trinket to the accelerometer throw the SPI with the default configuration. This means connect Vin to the power supply of 5V. Connect GND to common power/data ground. Connect the SCL (SCK) pin to Digital #13. Connect the SDO pin to Digital #12. Connect the SDA (SDI) pin to Digital #11. Connect the CS pin Digital #10.
The led strip is controlled by only one pin, that is going to #6 and the ground and 5v goes directly to the power supply adapter.
All documentation you might need you will find, more detailed and better explained on the adafruit page.
The power supply is connected to a female DC adapter that simultaneously feeds the microcontroller and the LED strip. Also it has a capacitor to protect the circuit from unstable current at the "switch on" moment.
The lamp has 6 light bars, but the LED strips come in a single long band. The LED band was cut in sections of 30cm (18 LEDS) and then welded with male and female 3 pins to connect to the rest of the circuit modularly.
For this project I'm using a 5v - 10A power supply. But depending of the number of leds you need you will need to calculate the current needed to feed the system.
Throughout the documentation of the piece, you can see that the LED has 80mA drawn per LED. I am using 108 LEDs in total.
Step 4: The Code
The scheme works is quite simple. An accelerometer provides information of movement on the x, y, z axis. Based on the orientation, the RGB values of the LEDs are updated.
The work is broken down into the following phases.
- Do a reading from sensor.
Simply use the api.
- By trigonometry, solve the values of "roll and pitch".
You can find much more information in this document by Mark Pedley.
- Obtain the corresponding color, related to the rotation values.
For that we turn to 0-360 RGB value using a HSL - RGB conversion function.
The value of the pitch is used at various scales to regulate the intensity of white light and color saturation. The opposite hemispheres of the color picker sphere are completely white.
- Update the buffer of lights that stores information of individual LED colors.
Depending on this information, the buffer controller will create an animation or will respond with complementary colors.
- Finally show the colors and refresh the LEDs.
Initially, the idea was to create a color sphere where you could choose any color. Placing the color wheel on the meridian and poleward the dark and light tones.
But quickly the idea was discarded.
Because the LEDs create different tones, off and quickly lit each rgb LED, when given low values to represent dark colors, the LEDs give a very poor performance and you can see how they start flashing. This makes the dark hemisphere of the color sphere can not function properly.
Then I come up with the idea to assign complementary colors to the currently selected tone.
So, one hemisphere is picking a monochromatic color value of a wheel from 50% illumination 90 ~ 100% saturation. Meanwhile the other side, picks a color gradient from the same color-position but adds, at the other side of the gradient, its complementary color.
The read of data from the sensor is raw. A filter can be applied to smooth the noise and the vibrations of the lamp itself. For the moment, I find it interesting because it looks more analogical, reacts to any touch and takes a second to completely stabilize.
I'm still working on the code and adding new features and optimizing the animations.
Step 5: Wrapping Up
The final assembly is fairly simple.
Glue the silicone cover of the LED strips with two Component Epoxy Adhesive into the bars and connect the 6 parts in series one behind the other.
Fix a point where you want to anchor the components and screw the accelerometer and the pro trinket to the wood. I used a plastic spacers to protect the bottom of the pins. The power supply adapter is properly fixed between the space of the bars with more epoxy epoxy adhesive. Was designed to fit and prevents it moves when the lamp is rotating.
Observations and improvements
Throughout the development of the project have been emerged new ideas about ways to solve problems. I also realized some design flaws or parts that can be improved.
The next step that I would like to take, is an improvement in product quality and the finish; mostly in the structure. I come with great ideas about better structreas even simpler, incorporating tensors as part of the design and hiding the components. This structure will require more powerful tools like 3D printers and laser cutters.
I still have pending the way to hide the wiring along the structure. And work into a more efficient energy consumption; to reduce spending when the lamp is working for long and is not changing the lighting.
Thanks for reading the article and your interest in my work.
I hope you learned from this project as much as I did.