Eenvoudige PIR bewegingsmelder met lichte sensor & vertraging timer.
Het circuit gebruikt een PIR-module (ongeveer £1,00 van ebay, een LDR (ongeveer 25p, weer van ebay & een Arduino mini pro.
Na reset, het omgevingslicht wordt gemeten en, voor testdoeleinden alleen, is de resulterende atod-uitvoer via de seriële monitor weergegeven. De output wordt voortdurend gemeten totdat de PIR beweging zintuigen.
Wanneer het licht onder een vooraf bepaald niveau (in dit geval een waarde van 60 - variabelenaam nu-dark valt) en beweging wordt gedetecteerd, Pin 13, die zal worden aangesloten op een rij voor LEDs gaat hoog en een teller (timercnt) is het elke seconde wordt verlaagd. Nogmaals, voor testdoeleinden alleen, wordt de teller verlagen op de seriële monitor weergegeven.
Elke beweging tijd ontdekt, wordt de teller wordt teruggezet op de oorspronkelijke waarde - in dit geval 10. Ik zal dit ingesteld op 180 seconden wanneer geïnstalleerd. De verlichting blijft op 180 seconden mits er geen verkeer waargenomen bestaat.
De variabele 'ledon' is ingesteld op 1 wanneer de lichten op, waardoor het licht van de rij van de LED's op het gebied van het circuit. Dit wordt alleen opnieuw ingesteld op 0 wanneer de teller op 0 als gevolg van geen beweging gedetecteerd.
Ik hoop dat al zinvol is en is van sommige gebruiken.
Hier is de code van de Arduino - niet de netste (kopiëren en plakken niet te slim!), maar het werkt.
//*********************************************************************************
T.Reynolds - November 2014
Bewegingsmelder met lichtsensor & timer
Const int ledPin = 13; uitvoer naar LEDs / echt
Const int inputPin = 4;
int now_dark = 60; Wanneer licht meting daalt tot onder dit niveau, Controleer voor verkeer.
int ledon = 0; Wanneer ingesteld, rondwegen LDR dus circuit is unnaffected
door de verlichting heeft het net ingeschakeld!
Wordt opnieuw ingesteld wanneer timercnt = 0, dat wil zeggen geen beweging gedetecteerd.
int analogPin = 3; 22 k ohm weerstand (of soortgelijke) analoge pin 3 en Gnd
LDR pin 3 en + 5V
int val = 0; waarde lezen over analoge pin 3
int timercnt;
VOID Setup
{
Serial.begin(9600); alleen test
pinMode (ledPin, OUTPUT);
pinMode (inputPin, INPUT); }
void loop
{int waarde = digitalRead(inputPin);
Als (ledon == 0)
{
Val = analogRead(analogPin);
delay(1000); alleen test
Serial.println(val); alleen test
}
Als (waarde == HIGH & & val < now_dark || waarde == HIGH & & ledon == 1)
{
digitalWrite (ledPin, hoge);
timercnt = 10; Vanaf hier - 10 seconden aftellen is test alleen
Verlichting blijft voor 10 seconden als er geen beweging gedetecteerd.
Elke beweging tijd ontdekt, timercnt ingesteld op 10.
}
Als (waarde == LOW & & timercnt > 0)
{
Serial.Print(">"); alleen test
Serial.println(timercnt); alleen test
ledon = 1;
delay(1000); timercnt--;
Als (timercnt == 0)
{
Turnoff();
ledon = 0;
}
}
}
VOID turnoff()
{
digitalWrite (ledPin, laag);
}
// ====================================================