Intelligent Solar Garden Light - Part 2

16,004

39

2

About: I enjoy cycling and photography, and especially photography whilst cycling. :)

Continuing from part 1

In this part I'm adding a PIR sensor.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: PIR - Modification

I wanted to make the garden light PIR activated, so have added this PIR sensor from SparkFun.

Although the sensor has an input voltage of 5V to 12V DC, it actually runs at 3.3V. So, if you bypass the voltage regulator it will run using the battery in the garden light control unit. I powered the PIR up using 5V and then using my multimeter verified where to attach the new power feed.

Step 2: Attach PIR

I've wired the positive power to the switch builtin to the light controller. The ground wire goes directly to the negative side of the battery bay. The original positive power wire for the PIR sensor is taped up so that it doesn't short anything out. The analog output from the sensor goes to analog input A1 on the Wee. On this particular sensor, it goes low (<1V) when motion is detected.

Step 3: Enclosure

Now I just need to work out what sort of enclosure to put the PIR in.

Step 4: Code

(Code hacked from an RGB LED cross fade example by Clay Shirky <clay.shirky@nyu.edu>).
N.B. The led controller PCB turns the LEDs on when low, not high.

=============================================

/*
  • Intelligent Solar Powered Garden Light version 0.02 zzpza<at>truenames.co<dot>uk
  • Original code example by Clay Shirky <clay.shirky<at>nyu<dot>edu>
*/

int ledPin = 3; // LED, connected to digital pin 3
int ledVal = 0; // value to send to pin
int wait = 20; // 20ms (.02 second) delay; shorten for faster fades
int solarPin = 0; // analog pin solar panel is connected to
int solarVal; // value read from solarpanel
int PIRPin = 1; // analog pin PIR is connected to
int PIRval; // value read from PIR
int ledState = 1; // status of LED
int counter = 0; // timer for LED

void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // turn leds off
ledState=0;
delay(500);
}

void fadeDownLed()
{
digitalWrite(ledPin, LOW);
Serial.println("fadeDownLed");
for (int i=0; i <= 255; i++)
{
analogWrite(ledPin, i);
// Serial.print("fadeDownLed ");
// Serial.println(i);
delay(20);
}
digitalWrite(ledPin, HIGH);
ledState=0;
counter=0;
}

void fadeUpLed()
{
digitalWrite(ledPin, HIGH);
Serial.println("fadeUpLed");
for (int i=255; i >= 0; i--)
{
analogWrite(ledPin, i);
// Serial.print("fadeUpLed ");
// Serial.println(i);
delay(20);
}
digitalWrite(ledPin, LOW);
ledState=1;
}

void turnOffLed()
{
digitalWrite(ledPin, LOW);
ledState=1;
}

void turnOnLed()
{
digitalWrite(ledPin, HIGH);
ledState=0;
}

void readSolarPanel()
{
solarVal = analogRead(solarPin);
Serial.print("Solar: ");
Serial.println(solarVal);
}

void readPIR()
{
PIRval = analogRead(PIRPin);
Serial.print("PIR: ");
Serial.println(PIRval);
}

void loop()
{
readSolarPanel();
readPIR();
if (solarVal < 100 && ledState==0 && PIRval < 5)
{
fadeUpLed();
}
if (solarVal > 120 && ledState==1 && PIRval > 5)
{
fadeDownLed();
}
if (counter > 5000) // how long LEDs should be on for
{
fadeDownLed();
}
if (ledState == 1)
{
Serial.println(counter);
counter++;
}
}

Be the First to Share

    Recommendations

    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    2 Discussions

    0
    None
    wierd idiot

    10 years ago on Introduction

    A bright idea! :P Lights up the darkness. One question, how much does the whole thing consume when on stand by?

    1 reply
    0
    None
    syraxwierd idiot

    Reply 10 years ago on Introduction

    about 35mA maybe :) the MCU power. I see this is arduino code I think is possible to put MCU is sleep mode and this will eat less power