Automatisk hallen löpare ljus (2 / 5 steg)
Steg 2: Programmera Arduino
Med din krets fullt utbyggd, är det dags att ge projektet en hjärna...Vi har bifogat den kod som vi används för Arduino. Observera att den innehåller två parametrar som du kan anpassa efter behov och situation: LIGHT_THRESH (hur ljuset känslig är det - ökande känslighet innebär att det ska behöva vara mörkare aktivera) och TIMEOUT (hur länge belysningen kvar på efter upptäcka rörelse - öka det kommer att orsaka lamporna att bo för längre).
Med VIN bortkopplad, ladda upp denna kod till Arduino. Öppna upp seriella bildskärmen och se vad värdena blivit i hög och låg belysning, så Ställ din tröskel att matcha. Se till att testa detta så nära som möjligt till där du installerar sensorerna - ljusförhållanden kan förändras drastiskt inom loppet av ett par fötter.
När du har en tröskel som du tror fungerar, koppla bort din Arduino från datorn och Anslut den till 12V leverans. Nu bör din LED strip ljus - och rörelsekänslig!
Här är Arduino koden vi använde:
// Automated Runner Lights (v1.0)
// Scott Martin & Todd Medema
// http://fabricate.io
// 10/3/2013
//
// Change this code to your heart's content!
// Constants won't change. They're used here to
// set pin numbers and thresholds:
const int motionPin = 6;// A6
const int lightAnalogPin = 7; // A7
const int ledPin = 3; // D3
const int LIGHT_THRESH = 1000;
const int MOTION_THRESH = 250;
const int TIMEOUT = 1000;
// variables will change:
int motionState = 0; // countdown after last motion
int lightState = 0; // countdown after last dark
int LEDActive = 0; // if LEDs are on
int LEDBrightness = 0; // current LED brightness (for fade in/out)
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if (analogRead(motionPin) > MOTION_THRESH) {
motionState = TIMEOUT;
}
if (analogRead(lightAnalogPin) < LIGHT_THRESH) { //Is Bright
lightState = 0;
} else {
lightState = TIMEOUT;
}
if (motionState > 0) motionState -= 1;
if (lightState > 0) lightState -= 1;
Serial.print("cell: ");
Serial.print(analogRead(lightAnalogPin));
Serial.print(", pir: ");
Serial.println(analogRead(motionPin));
if (motionState && (lightState || LEDActive)) {
LEDActive = true;
}
else {
LEDActive = false;
}
if (LEDActive) {
if (LEDBrightness < 255) {
LEDBrightness = min(LEDBrightness + 1, 255);
}
} else {
if (LEDBrightness > 0) {
LEDBrightness = max(LEDBrightness - 1, 0);
}
}
analogWrite(ledPin, LEDBrightness);
delay(10);
}