Schritt 4: Skizze: Herunterfahren und Interrupt basierte aufwachen (Stromverbrauch)
Um Power/Akku Verbrauch zu speichern, wäre es vorteilhaft für Arduino in niedrigsten Verbrauch Energiesparmodus oder Ruhezustand genommen, bis PIR-Sensor Bewegungen erkennt. Wir erreichen dies mit Hardware-Interrupt und Power Down Mode von Arduino-Board ATMEGA328P Microcontroller. Darüber hinaus werden wir analog-digital-Wandler (ADC) deaktivieren, da wir keine ADC brauchen.
"Power-Down-Modus speichert den Inhalt der Register aber friert den Oszillator, deaktivieren alle Othe R Chip Funktionen bis zum nex t Interrupt oder Hardware Reset."
In dieser Skizze verwenden wir Eingangs-Pin D2 oder Interrupt 0, welche Ausgabe des PIR Sensor angeschlossen ist.
PIR-Melder selbst auf staatliche Timer hat, brauchen wir keine Timer von Arduino, Ausgangs-Pin D13 ON für bestimmte Zeit zu halten. Die Einschaltzeit ist physisch einstellbar mit Tx Potentiometer, wie im vorherigen Schritt gezeigt.
-Arduino auf ersten Einschalten blinkt LED an Pin 13 für eine Minute, ist dies nur für visuelle Anzeige der Aufwärmphase PIR-Sensor benötigt, um auf Raumtemperatur zu stabilisieren.
für (Int ich = 1; ich < = 120; i ++) {}
DigitalWrite (LedPin, hoch);
Delay(100);
DigitalWrite (LedPin, LOW); Delay(100); }
-Die Arduino wird in den Winterschlaf gehalten, bis D2 Pin LOW ist.
In der Funktion Hibernate();
Wir setzen alle Pins auf Eingang außer 13 pin, mit denen wir unsere LED oder Relais verbunden haben.
für (Int ich = 0; ich < 20; i ++) {}
Wenn (ich! = 13)
PinMode (ich, Eingabe);}
und Arduino-Sleep-Modus auf niedrigsten Verbrauch Energiemodus
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
"und" deaktivieren ADCs
ADCSRA & = ~ (1 << 7);
und deaktivieren Sie Brown out Detektor verwendet, um die Eingangsspannung zu überprüfen
sleep_bod_disable();
Wir legen Interrupt 0 Pin 2 in erkennen Änderung des Zustandes des Signals an Pin 2
AttachInterrupt (PIRsensorInterrupt, WakeUpNow, Änderung);
Schließlich wird mit "Sleep"-Funktion aufgerufen
sleep_mode();
-Wenn der PIR-Sensor Bewegung feststellt, Ausgang PIR-Sensor Zustandsänderungen von LOW auf HIGH. Diese steigende Rand-Signal aufgenommen durch Interrupt 0, Arduino aus dem Ruhezustand erwacht, Interrupts sind vorübergehend deaktiviert und somit Pin D13 geht hoch.
Einmal eingestellt ist im Laufe der Zeit, PIR Ausgabe wieder kehrt zurück zu niedrig aus, dieses fallenden Kante Signal wirft einen anderen Interrupt, Arduino wieder in den Ruhezustand setzen.