Steuerung einer Lampe, die angeht, wenn bei Dunkelheit eine Person den Parkplatz betritt

aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de
Wechseln zu: Navigation, Suche

Das Projekt wurde auch bisher schon im Unterricht umgesetzt, allerdings ohne Mikrocontroller, sondern mit analogen Bauteilen.

Für die Umsetzung mit dem Arduino haben wir uns mit den benötigten Sensoren beschäftigt. Unsere Wahl fiel auf einen passiven Infrarot-Bewegungsmelder (PIR) vom Typ HC-SR 501. Hier ist eine sehr gute Anleitung zu PIR-Sensoren verfügbar.


Das ist unsere Schaltung. Die Parkplatzlampe wird durch eine LED simuliert.

Leuchte mit Bewegungsmelder und Dunkelsensor


Das ist der Sketch für unsere Schaltung.


/*
Mit diesem Programm wird eine Lampe auf einem Parkplat simuliert.
Die Lampe wird angeschaltet, wenn es dunkel ist und gleichzeitig Bewegung registriert wird.
Die Lampe leuchtet 5 Sekunden nach, wenn keine Bewegung mehr registriert wird.
*/

//Variablen deklarieren
int LedPin = 13;              //Anschluss für die Lampe festlegen
int BewegungsPin = 2;         //Anschluss für den Steuerungsausgang des Bewegungsmelders festlegen
int Bewegung = 0;             //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int HelligkeitsPin = A0;      //Anschluss für den Abgriff des Spannungsteilers aus Vorwiderstand Rv und Fotowiderstand LDR
int Helligkeitswert = 0;      //Variable, die einen der Helligkeit entsprechenden Digitalwert speichert
unsigned long StartTime = 0;  //Variable, die für die Berechnung der Leuchtdauer der Lampe verwendet wird

//Prozedur zur Initialisierung des µControllers (wird einmalig beim Start durchlaufen)
void setup() {
  pinMode(LedPin, OUTPUT);          //Anschluss der LED wird als Ausgang gesetzt
  pinMode(BewegungsPin, INPUT);     //Anschluss der Steuerleitung des Bewegungsmelders wird als Eingang gesetzt
  pinMode(HelligkeitsPin, INPUT);   //Anschluss des Spannungsteiler-Abgriffes wird als Eingang gesetzt
}

//Schleifenprozedur, die immer wieder neu durchlaufen wird
void loop() {
  Helligkeitswert=analogRead(HelligkeitsPin);   //analogen Helligkeitswert einlesen (wird im µController in Digitalwert umgewandelt
  Bewegung=digitalRead(BewegungsPin);           //Zustand des Bewegungsmelders auslesen
  if (Bewegung== HIGH&&Helligkeitswert>150) {   //Wenn Bewegung vorliegt und der Helligkeitswert 150 überschreitet,...
    digitalWrite(LedPin,HIGH);                  //wird die Lampe eingeschaltet...
    StartTime=millis();                         //und die aktuelle Zeit (Zeit ab Programmstart in Millisekunden) wird abgespeichert
   }
  else if (millis()-StartTime>5000){            //ansonsten, wenn 5000 Millisekunden Differenz überschritten sind,...
    digitalWrite(LedPin,LOW);                   //wird die Lampe ausgeschaltet
    }
  }