Étape 2: Programmer l’Arduino
Avec votre circuit entièrement intégré, il est temps de donner à ce projet un cerveau...Nous avons attaché le code que nous avons utilisé pour l’Arduino. Remarque qu’il contient deux paramètres que vous êtes libre de personnaliser à vos besoins et la situation : LIGHT_THRESH (sensible à la lumière de comment il est - sensibilité croissante signifie qu’il vous devrez être plus foncée pour activer) et TIMEOUT (combien de temps les lumières restent allumées après détection de mouvement - augmenter provoquera les lumières de rester pour plus).
Avec VIN déconnecté, télécharger ce code à l’Arduino. Ouvrir le moniteur de la série et voir ce que les valeurs soient en haute et basse lumière, puis définir votre seuil de faire correspondre. Assurez-vous de tester cela aussi près que possible d’où vous installez les capteurs - conditions d’éclairage peuvent changer radicalement en l’espace de quelques pieds.
Lorsque vous avez un seuil que vous pensez des œuvres, déconnectez votre Arduino de votre ordinateur et connectez-le à l’alimentation 12V. Votre bande LED devrait maintenant être et motion-sensible à la lumière !
Voici le code de l’Arduino, nous avons utilisé :
// 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);
}