Introduction: Interactive Flower Pot - Arduino Motion Activated RGB Led

About: I'm a digital artist with many years of experience. Since a couple of years ago, I've became interested in interactive art installation. At the moment I create cool things with Arduino and TouchDesigner.

In this project I've made a flower pot with recycled plastic drink bottles. Then using Arduino, it turned in to a motion activated colorful lamp. This tutorial will show you how to wire and program your motion detector and RGB led with your Arduio. In this example, the RGB led goes on when there's motion detected and it changes color to red, green, blue, white and purple continually until there no motion detected and it then goes off.

Step 1: The Parts

Here's the list of part needed:

1. Arduino Uno

2. Breadboard

3. Jumper wires

4. PIR motion detector

5. 3 x 220 ohm resistors

6. RGB led module

Step 2: Wiring the Parts

This part explains how to wire all the parts. The PIR sensor has 3 pins, one to the ground, one to 5V and the OUT pin connects to a digital pin point on the Arduino (I chose pin number 4). Here is a good website explaining how this works.

Now we'll connect the RGB Led. The one I'm using has 4 pins. One for each of the colors (Red, Green, Blue) and one is the common anode which connects to the ground. The color pins have to connect to Arduino through resistors. So I've connected the red pin to pin number 7 via a 220 ohm resistor, green to number 6 via a 220 ohm resistor and blue to pin number 5 also via a 220 ohm resistor. And the forth pin connect to ground.

Step 3: Writing the Code

Here is the code for this project. I have used the millis() function to keep the sensor active when it's already on HIGH. So basically the sensor keeps checking for any movement in interval defined in const long interval (I've used 800). You can see how this function works here

int redPin= 7;

int greenPin = 6;

int bluePin = 5;

int motion = 4;

int pirState = LOW;

unsigned long previousMillis = 0; // will store last time PIR was updated

const long interval = 800; // interval at which to check for motion (milliseconds)

boolean randomNum = false; // to check the random number generate once

void setup() {

pinMode(motion, INPUT);

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

Serial.begin(9600);

}

void loop() {

long sensor = digitalRead(motion);

unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {

// save the last time you checked the pir

previousMillis = currentMillis;

if(sensor == HIGH){

if (randomNum == false){

randomNum = true;

//int redColor = random (100,255); // these are to generate random colours when motion is detected

//int greenColor = random (50,100);

// int blueColor = random (50,100);

// setColor(redColor, greenColor, blueColor);

setColor(255, 0, 0); // Red Color

delay(1000);

setColor(0, 255, 0); // Green Color

delay(1000);

setColor(0, 0, 255); // Blue Color

delay(1000);

setColor(255, 255, 255); // White Color

delay(1000);

setColor(170, 0, 255); // Purple Color

delay(1000);

//Serial.println(redColor);

}

else {

randomNum = false;

}

}

else {

setColor(0, 0, 0);

}

// set the LED with the ledState of the variable:

digitalWrite(sensor, pirState);

}

}

void setColor(int redValue, int greenValue, int blueValue) {

analogWrite(redPin, redValue);

analogWrite(greenPin, greenValue);

analogWrite(bluePin, blueValue);

}

Step 4: Assembling the Flower Pot

And all is done :)