Moody Flowers


We’re using optical illusions as part of the interaction.
If you stand at a specific position of our light you’ll see two 3D dices and
when the viewer change their position it will appear as the cubes are rotating.
They represent gambling. If the viewer change their position
to a 180 degree angle from the design the illusion will be
broken and instead that see 2 flowers growing out of a wall.
The 2 flowers represent life. Each of the flowers have different feelings.
One feels anxious and the other feels relief.
The anxious one will have an illusion of being on fire and
the relief flower will have the illusion of being in water.
Practically the flower is a cube of transparent acrylic where
the fire and water shapes are engraved into it.
Bellow the acrylic is light which gives interaction to it.
We also use an illusion in the lines of an eye attack.



We had big ambitions with this lamps in the beginning,
but we had to simplify is to have something to show now.
We wanted to make a background to give the illusion of an infinite box,
which my 3D sketch shows underneath (press on it and move around)
We also wanted to have more animation whit the light, which
we tried with the coding but it was to complicated in this
time frame, so if we had more time I would like to work
more on the coding and the interaction with the light.
Above the is the whole proces in pictures from sketch to
finish lamps, which also showed on the video.
Continue down to see the code to the Arduino
and the circuit diagrams.


The sketch is made for Kolding Light Festival 2016. It is used in 2 lamps called “Moody Flowers” that run by a Genuino 101. The sketch controls the “Anxious Flower” also known as “Fire”.
It controls Adafruit NeoPixels that reacts to an ultrasound sensor. The lamps “grow” out of a wall.
They each “grow” in transparent vases. One is reliefed and in comfortable nourishing water. The other is anxious and its roots are on fire.
When admiring the flowers from the right perspective they will appear as 2 floating dices. The anxious one rolls low numbers and the reliefed one rolls high numbers on its dice.
It symbolizes how life goes up and down where not everyone has the same opportunities or luck.
Furthermore it symbolizes how an individual has many layers and can be seen very different depending on the perspective you see it from.
To explore the full depth of the lamps you will have to collaborate with another person. One person has to activate the ultra sound sensor which can only be done infront of it.
Mean while another can experience the hidden animations at the flowers root which can’t be seen while standing infront of it.
We hope it can create conversations and interaction between people that might not know each other.
The key words to the lambs are gambling, growing, life, perspective, illusions, fire, water, take a chance, relief, anxious, flowers, twins, win win, odds, Yin, Yang and Moody Flowers.


// Setup pins for ultra sound sensor

#define echoPin 9 // Echo Pin Select 2 free pins for the HC-SR04
#define trigPin 8 // Trigger Pin
long duration, distance; // duration used to compute distance. long number uses 32 bits

#include // Include Adafruit NeoPixel

#define PIN 6 // Setup pin for AdafruitPixel

#define NUMPIXELS 32 // Declares number of LEDs in the strib

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); // Declares a NeoPixel object named “pixels”

int delayval = 10; // delay for 1/100 second

// ***** Declare sub tabs *****
void range(); // This declares sub tab for ultra sound sensor.
void Fire_ON(); // This declares sub tab light animation when active
void Fire_OFF(); // This declares sub tab for animation when ultra sensor is off

void setup() { // ****** setup start *****
pinMode(trigPin, OUTPUT);
pinMode(13, OUTPUT);
pinMode(echoPin, INPUT);

pixels.begin(); // This initializes the NeoPixel library.

void loop() { // ****** loop start *****

range(); // Ultra sound configuration

if (distance < 200) Fire_ON(); // Fire_ON animation activates at < 200 else Fire_OFF(); // animation initiates when >200

// Animation when sensor is off. It fills the dots one after the other with a color
void colorWipe1(uint32_t c, uint8_t wait) {
for(uint16_t i=1; i<=32; i++) {
pixels.setPixelColor(i, c);;
if (distance < 200) break;

//Animation when sensor is active. Theatre-style crawling lights.
void theaterChase1(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (int i=1; i <= 32; i=i+3) { pixels.setPixelColor(i+q, c); //turn every third pixel on }; range(); if (distance > 200) break; //Break animation if > 200

for (int i=1; i <= 32; i=i+3) {
pixels.setPixelColor(i+q, 0); //turn every third pixel off

void Fire_ON()
// Anxious fire animation
theaterChase1(pixels.Color(255, 0, 0), 50); // Full red
theaterChase1(pixels.Color(255, 69, 0), 50); // Orange shade
theaterChase1(pixels.Color(255, 140, 0), 50); // Yellow shade

void Fire_OFF()
// Calm color animation
colorWipe1(pixels.Color(255, 0, 0), 50); // Red
colorWipe1(pixels.Color(255, 69, 0), 50); // Fire orange
colorWipe1(pixels.Color(255, 140, 0), 50); // Yellow

void range()
digitalWrite(trigPin, LOW); // Start Ping sensor
delayMicroseconds(2); // delay see specifications
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // delay see specifications
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2; // Compute distance, based on the speed of sound.
// delay(1000); // Slow down


This sketch is written by Mónica Durán, Camilla Schibsbye & Lars Viberg-Sørensen

University of Southern Denmark
It Product Design

Luk menu