Schnittstelle-Adapter


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Treppenhausautomat mit Bewegungsmelder und AUS-Ankündigung
(mit PIR-Bewegungsmelder und Arduino)


Die Funktionalität einer Flur- bzw. Treppenhausbeleuchtung mit einem konventionellen Treppenhausautomat ist allgemein bekannt. Mit einem Taster wird die Beleuchtung eingeschaltet und gleichzeitig ein Timer gestartet. Nach Ablauf der eingestellten Zeit, sofern der Taster (oder ein anderer) nicht erneut betätigt wird, geht das Licht wieder aus. Die folgende Schaltung erfüllt vollständig die Hauptaufgabe eines Treppenhausautomaten jedoch mit zwei Erweiterungen. Statt eines Tasters, der dazu dient, die Beleuchtung einzuschalten, kommt ein Bewegungsmelder zum Einsatz. Es können, genauso wie es in der Praxis vorkommt, mehrere Bewegungsmelder eingesetzt werden. Auch eine Kombination aus Tastern und Bewegungsmeldern ist in diesem Fall möglich. Die weitere Erweiterung bezieht sich auf das Ausschalten des Lichtes. Anstatt eines einfachen „AUS“ wird die kurz bevorstehende Ausschaltung angekündigt. In diesem Fall ändern die eingesetzten RGB-Leuchtdioden ihre Farbe (und Blinken anschließend abwechselnd) bevor das Licht endgültig ausgeht. Dadurch wird man vor der darauf folgenden Dunkelheit gewarnt. Bei einer praktischen Anwendung muss natürlich darauf geachtet werden, welche Leuchtmittel zum Einsatz kommen, damit solche Funktionalität realisierbar ist.

Bewegungsmelder

Die Bewegung wird von einem Mini-PIR-Bewegungsmelder (VMA314 von Velleman) erfasst und an Arduino weiter gemeldet. Die Abmessungen des kleinen Moduls betragen ca. 2,5 x 3,3 cm. Die Verarbeitung der Signale des PIR-Sensors innerhalb des Moduls übernimmt der Controller BISS0001. Das Modul verfügt über zwei Potenziometer, mit welchen die Empfindlichkeit und Nachlaufzeit eingestellt werden können. Auf der kleinen Platine des Bewegungsmelders sitz darüber hinaus ein 3,3 V fester Spannungsregler, der die Betriebsspannung des Moduls bestimmt. Damit bekommen wir am Ausgang im Bewegungsfall ein Signal von 3,3V.

PIR-Bewegungsmelder

PIR-Bewegungsmelder VMA314

Ansicht Rückseite

Ansicht Rückseite

PIR-Bewegungsmelder Kurzinfo

Pegelkonverter

Das Signal von 3,3 V, das von dem Bewegungsmelder geliefert wird, wird von Arduino durchaus erkannt. Doch Arduino arbeitet grundsätzlich mit 5 VDC und erwartet an Eingängen dementsprechend auch 5V-Signale. Damit das gewährleistet ist, muss das 3,3V Signal auf 5V hochtransferiert werden. Diese Aufgabe übernimmt ein Level Converter (Logikpegelkonverter). Dabei handelt es sich um ein Modul, das in der Welt des Arduino und Raspberry Pi bekannt und überall erhältlich ist. Mit dem Modul können Signale in beiden Richtungen, z.B. von 3,3 auf 5V oder 5V auf 3,3V, gewandelt werden. In diesem Fall kann das Modul vier Signale gleichzeitig verarbeiten.

Pegelkonverter

Pegelkonverter

Beleuchtung

Die Beleuchtung (Flur, Treppenhaus, Treppenstufen etc.) wird von acht RGB-Leuchtdiode symbolisiert. Jede RGB-Diode besteht aus drei einzelnen Leuchtdioden, die in einem Gehäuse untergebracht sind. Jede RGB-Leuchtdiode verfügt über vier Anschlüsse (hier gemeinsame Kathode). Drei Anschlüsse werden für die einzelnen Leuchtdioden benötigt, vierter Anschluss ist GND. Damit muss die Steuerung insgesamt 24 Leuchtdioden ansteuern, um den gewünschten Effekt zu erhalten. Jede einzelne Leuchtdiode wird mit einem Vorwiderstand abgesichert. Bei einer Spannung von 5VDC und Widerstandswert von 1kOhm ergibt sich für jede Leuchtdiode ein Strom im Wert von I = U / R = 5V / 1000 Ohm = 5 mA.

RGB-Dioden

RGB-Dioden

Spannungsversorgung

Die Schaltung arbeitet mit zwei Spannungen. Externe Spannung, die von einem Netzteil stammt, beträgt 9 VDC. Mit dieser Spannung werden direkt Arduino und der Bewegungsmelder eingespeist. Die minimale Spannung für Arduino, Anschluss Vin, beträgt ca. 7 VDC. Eine andere Alternative, Arduino mit Spannung zu versorgen, ist der USB-Anschluss. Die minimale Spannung für den Bewegungssensor beträgt dagegen 5VDC. Alternativ könnte man den Bewegungssensor an den 5 V Pin des Arduino anschließen. Alle anderen Komponenten arbeiten mit 5 VDC. Diese Spannung wird hinter dem Schaltregler LM2596S abgegriffen, der hier als Modul mit der externen Beschaltung zum Einsatz kommt.

Spannungsregler mit LM2596S

Spannungsregler mit LM2596S

Schieberegister

Um die 24 Leuchtionen anzusteuern, verwenden wir drei 8-Bit Schieberegister. Damit werden Ausgänge des Arduino gespart und können für andere Zwecke eingesetzt werden. Für Ansteuerung der drei Schieberegister werden drei Ausgänge des Arduino in Anspruch genommen. Die drei Bausteine werden in Kaskadenschaltung hintereinander verschaltet. Jedes Schieberegister ist für eine Farbe der RGB-Dioden zuständig. Das erste Schieberegister steht für Blau, das zweite für Gelb und schließlich das dritte für Rot. Jeder IC stellt acht Ausgänge zur Verfügung. Damit ist es möglich, alle 24 Leuchtdioden einzeln anzusteuern.

Schieberegister 74HC595


Schieberegister 74HC595

Schieberegister 74HC595

Das Management

Die Koordination aller Komponenten der Schaltung übernimmt Arduino Nano. Damit das möglich wird, wird der kleine Mikrocontroller mit einem Programm (Sketch) geladen. Für die gestellte Aufgabe werden fünf seiner Pins, die nach Bedarf als Ein- bzw. Ausgänge definiert werden, in Anspruch genommen. Damit stehen die meisten seiner Anschlüsse für andere Aufgaben frei zur Verfügung.

Arduino Nano

Arduino Nano

Schaltplan

Schaltplan



Testschaltung

Testschaltung

Testschaltung

Das Programm (Sketch)

Die Aufgabe der Schaltung ist äußerst simpel. Sobald der Bewegungsmelder eine Bewegung registriert, wird die Beleuchtung eingeschaltet. Nach Ablauf der Nachlaufzeit geht das Licht wieder aus. Die Innovation gegenüber einer konventionellen Schaltung besteht darin, dass das Ausschalten des Lichtes angekündigt wird. Hierzu wird die Farbe des Lichtes verändert und wir lasen ganz zum Schluss die „Lampen“ kurz abwechselnd blinken. So kann sich jeder auf das „AUS“ vorbereiten oder durch weitere Bewegung die Nachlaufzeit verlängern. Damit an die Schaltung auch weitere Bewegungsmelder oder auch Taster angeschlossen werden können, übernimmt Arduino die Steuerung der Nachlaufzeit. Die Nachlaufzeit beginnt, sobald das Signal vom Bewegungsmelder abfällt.

Das Signal von dem Bewegungsmelder wird am Pin D5 des Arduino registriert. Damit man sehen kann, wie lange das Signal ansteht, wird das Signal unverändert an die Leuchtdiode LD1 weitergereicht. Die Leuchtdiode leuchtet also, solange das Signal vom Bewegungsmelder auf High steht. Mit dem Signal wird das Licht mit voller Helligkeit eingeschaltet (Alle farbigen Leuchtdioden der RGB-Leuchtdioden gehen an). Nach Änderung des Signals auf Low, wird die Nachlaufzeit gestartet. Wird während der Zeit erneut Bewegung registriert, wird die Nachlaufzeit verlängert. Ist sie schließlich abgelaufen verändern die RGB-Dioden ihre Farbe, um zu signalisieren, dass das Licht bald ausgeht. Kurz von der Abschaltung blinken sie noch abwechselnd.

Die Leuchtdioden bekommen ihre Signale direkt von den Schieberegistern, die wiederum vom Arduino gesteuert werden. Um alle Leuchtdioden anzusteuern, muss Arduino 24 Bits in die Register übertragen. Da die Schieberegister in Reihe geschaltet sind, bezieht sich das erste übertragene Bit auf die letzte Leuchtdiode, das letzte Bit ist dann entsprechend für die erste Leuchtdiode zuständig. Die Bits werden auf die Leitung DS (Arduino Pin D4) gelegt. Dabei steht SHCP (Pin D2) auf Low. Die Übernahme des Wertes erfolgt, wenn SHCP seinen Zustand von Low auf High ändert. Um erneut einen Wert zu übertragen, muss SHCP wieder auf Low gehen. Mit einem High Signal auf dem Anschluss STCP (Arduino Pin D3) werden die Ausgänge entsprechend der davor übernommenen Werten gesetzt.

// --------------------------------------------------------
// Treppenhausautomat mit "AUS"-Ankündigung
// Mit PIR-Bewegungsmelder und Schieberegistern
// Arduino Nano, IDE 1.8.12
// --------------------------------------------------------
int SH_CP_Pin = 2;   
int ST_CP_Pin = 3;
int DS_Pin = 4;
int Bewegungsmelder = 5;
int Led = 6;
bool Led_On_Off [24];
int Show_Zaehler = 0;
unsigned long MillisAktuell = 0;
unsigned long MillisSoll_An = 10000;
 
void setup() {
    pinMode(ST_CP_Pin, OUTPUT);
    pinMode(SH_CP_Pin, OUTPUT);
    pinMode(DS_Pin, OUTPUT);
    pinMode(Bewegungsmelder, INPUT_PULLUP);
    pinMode(Led, OUTPUT);
}

void Ausgabe () {
    digitalWrite(ST_CP_Pin, LOW);
    for (int i=0; i<24; i++) {        
        digitalWrite(SH_CP_Pin, LOW); 
        digitalWrite(DS_Pin, Led_On_Off [i]);
        digitalWrite(SH_CP_Pin, HIGH); }
    digitalWrite(ST_CP_Pin, HIGH);
}

void Nullen () {
    for (int i=0; i<24; i++) { Led_On_Off [i] = 0; };
}

void loop () {

    // Bewegung wurde erkannt ...................................
    // Kontrollleuchte an
    // Licht an .................................................
    if (digitalRead(Bewegungsmelder) == HIGH) {
        digitalWrite (Led, HIGH);    
        for (int i=0; i<24; i++) { Led_On_Off [i] = 1; };
        Ausgabe ();
        Show_Zaehler = 0; }

    // Bewegung zu Ende = Nachlaufzeit Start ....................
    if ((digitalRead(Bewegungsmelder) == LOW) && (Show_Zaehler == 0)) {
        digitalWrite (Led, LOW);
        MillisAktuell = millis();
        Show_Zaehler = 1; }    

    // Zeit abgelaufen - Vorwarnung Start .......................
    if ((Show_Zaehler == 1) && ((millis() - MillisAktuell) > MillisSoll_An)) {
        Show_Zaehler = 2; }

    // alles Aus ................................................
    if (Show_Zaehler == 6) {
        Nullen ();
        Ausgabe ();
        Show_Zaehler = 0; }

    // alles Blinken ............................................
    if (Show_Zaehler == 5) { 
        for (int i=1; i<20; i++) {
           for (int j=0; j<24; j++) { Led_On_Off [j] = random (2); }; 
           Ausgabe ();
           delay (100); }
        Show_Zaehler = 6; }  
        
    // alles Rot ................................................
    if (Show_Zaehler == 4) {
        Nullen ();
        for (int i=16; i<24; i++) { Led_On_Off [i] = 1; }; 
        Ausgabe ();
        delay (1000);
        Show_Zaehler = 5; }

    // alles Gelb ...............................................
    if (Show_Zaehler == 3) {
        Nullen ();
        for (int i=8; i<16; i++) { Led_On_Off [i] = 1; }; 
        Ausgabe ();
        delay (1000);
        Show_Zaehler = 4; }
        
    // alles Blau ...............................................
    if (Show_Zaehler == 2) {
        Nullen ();
        for (int i=0; i<8; i++) { Led_On_Off [i] = 1; }; 
        Ausgabe ();
        delay (1000);
        Show_Zaehler = 3; }
}
// ----------------------------------------------------------
        

Kurzvideo

Kurzvideo: Treppenhausautomat mit AUS-Ankündigung


Arduino_und_Sensoren


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz