Interactive Painting

Materials:


PIR motion sensor
Arduino Uno board
6 jumper wires
Soldering iron
Welding wire
9V battery


Directions:


  1. Solder 3 jumper wires onto your LED strip where it has the ground, power, and data. Make sure to solder them in the directions where the arrows are directing to.
  1. Take your PIR sensor and connect three wires to them. Again, they should be placed on the power, ground, and data. Next, you want to take the wires from both the PIR sensor and the LED strip that connect to power and solder them together.
  2. You will then connect your power line to 5V on the Arduino board.
  3. Take your wire that conects to ground on the pir sensor and connect it to one of the ground pins on the arduino board. Next, connect the ground wire from your LED strip to the other ground pin.
  4. Take the jumper wire that’s soldered in the middle of your LED and connect it to pin #6.
  5. Take the jumper wire from your PIR sensor that reads data (located in the middle of where the three wire are connected to) and insert it in pin #7.
  6. Connect arduino board to computer, open arduino application, create new file and paste code. Then click on “Upload” to verify work.
Screen Shot 2017-04-04 at 10.19.11 PM.png

CODE:


#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h>
#endif


#define PIN 6


// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);


// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 – 500 Ohm resistor on first pixel’s data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit…if you must, connect GND first.


int led = 13;                // the pin that the LED is atteched to
int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)


void setup() {
 // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
 #if defined (__AVR_ATtiny85__)
   if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
 #endif
 // End of trinket special code


 strip.begin();
 strip.show(); // Initialize all pixels to ‘off’
 
 pinMode(led, OUTPUT);      // initalize LED as an output
 pinMode(sensor, INPUT);    // initialize sensor as an input
 Serial.begin(9600);        // initialize serial
}


void loop() {
 val = digitalRead(sensor);   // read sensor value
 if (val == HIGH) {           // check if the sensor is HIGH
   digitalWrite(led, HIGH);   // turn LED ON
   delay(100);                // delay 100 milliseconds
   
   if (state == LOW) {
     Serial.println(“Motion detected!”);
     state = HIGH;       // update variable state to HIGH
   }
 }
 else {
     digitalWrite(led, LOW); // turn LED OFF
     delay(50);             // delay 200 milliseconds
     
     if (state == HIGH){
       Serial.println(“Motion stopped!”);
       state = LOW;       // update variable state to LOW
   }
 }
 
 // Some example procedures showing how to display to the pixels:
 colorWipe(strip.Color(255, 0, 0), 50); // Red
 colorWipe(strip.Color(0, 255, 0), 50); // Green
 colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
 // Send a theater pixel chase in…
 theaterChase(strip.Color(127, 127, 127), 50); // White
 theaterChase(strip.Color(127, 0, 0), 50); // Red
 theaterChase(strip.Color(0, 0, 127), 50); // Blue


 rainbow(20);
 rainbowCycle(20);
 theaterChaseRainbow(50);
}


// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
 for(uint16_t i=0; i<strip.numPixels(); i++) {
   strip.setPixelColor(i, c);
   strip.show();
   delay(wait);
 }
}


void rainbow(uint8_t wait) {
 uint16_t i, j;


 for(j=0; j<256; j++) {
   for(i=0; i<strip.numPixels(); i++) {
     strip.setPixelColor(i, Wheel((i+j) & 255));
   }
   strip.show();
   delay(wait);
 }
}


// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
 uint16_t i, j;


 for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
   for(i=0; i< strip.numPixels(); i++) {
     strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
   }
   strip.show();
   delay(wait);
 }
}


//Theatre-style crawling lights.
void theaterChase(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 (uint16_t i=0; i < strip.numPixels(); i=i+3) {
       strip.setPixelColor(i+q, c);    //turn every third pixel on
     }
     strip.show();


     delay(wait);


     for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
       strip.setPixelColor(i+q, 0);        //turn every third pixel off
     }
   }
 }
}


//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
 for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
   for (int q=0; q < 3; q++) {
     for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
       strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
     }
     strip.show();


     delay(wait);


     for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
       strip.setPixelColor(i+q, 0);        //turn every third pixel off
     }
   }
 }
}


// Input a value 0 to 255 to get a color value.
// The colours are a transition r – g – b – back to r.
uint32_t Wheel(byte WheelPos) {
 WheelPos = 255 – WheelPos;
 if(WheelPos < 85) {
   return strip.Color(255 – WheelPos * 3, 0, WheelPos * 3);
 }
 if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 – WheelPos * 3);
 }
 WheelPos -= 170;
 return strip.Color(WheelPos * 3, 255 – WheelPos * 3, 0);
}