Final Project Documentation

| No Comments

For my final project I wanted to work with expanding on a simple concept. I had bought a Flip-Flap earlier this semester at Ax Man, and it had never worked quite properly. Flip-Flaps run off of solar power, and work with a capacitor to keep the leaves waving even if the light disappears. It's consistency was always very appealing to me, as the clicking of the leaves act as a metronome constantly beating. So for my last project I wanted to learn how I and others could interact with this consistency.

After researching the Flip-Flap, I figured out that I could disrupt the flow of electricity by using a relay switch in-between the wire connecting the solar panel to the capacitor. I used a PIR Motion Detector to control the flow of energy, making it so that when you waved at the Flip Flap, it would wave back at you. I'm pretty happy with how this turned out, as it reacted as I hoped it would.

This is the Arduino program that I used to control the Motion Sensor:
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;

//the time when the sensor outputs a low impulse
long unsigned int lowIn;

//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

int pirPin = 3; //the digital pin connected to the PIR sensor's output
int ledPin = 13;

void setup(){
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);

//give the sensor some time to calibrate
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.println(" done");
Serial.println("SENSOR ACTIVE");

void loop(){

if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.print("motion detected at ");
Serial.println(" sec");
takeLowTime = true;

if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state

lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");

This wasn't a flashy project as my other ones turned out, but I'm very happy to have explored a softer approach to interactive art by bringing in the use of gesture and interaction with a mechanical object. This is an extremely interesting relationship for me, as I'm still struggling with the extremely reactive role that objects play in our lives today.

Leave a comment