PIR med ljussensor
Enkla PIR rörelsedetektor med ljus sensor & fördröjning timer.
Kretsen som använder en PIR modul (ca £1.00 från ebay, en LDR (ca 25p, igen från ebay & en Arduino mini pro.
Vid återställning, omgivande ljus mäts och endast avsedda som test, resulterande atod utdata visas på serial bildskärmen. Produktionen mäts hela tiden tills PIR känner av rörelse.
När ljuset faller under en förutbestämd nivå, (i detta fall ett värde av 60 - variabelnamn nu-dark) och rörelse detekteras, Pin 13, som kommer att anslutas till en rad med lysdioder går hög och en räknare (timercnt) minskas varje sekund. Igen, testa endast för, minska disken visas på serial bildskärmen.
Varje gång rörelse detekteras, räknaren återställs till sitt ursprungliga värde - i detta fall 10. Jag kommer att sätta detta till 180 sekunder när installerat. Lamporna kommer stanna på 180 sekunder förutsatt att det finns ingen rörelse upptäckts.
Den variabla ledon är inställd på 1 när lamporna är tända, vilket hindrar ljuset från raden av lysdioder som påverkar kretsen. Detta är bara återställa till 0 när räknaren når 0 på grund av ingen rörelse upptäckts.
Jag hoppas att alla är vettigt och är till nytta.
Här är Arduino koden - inte den mest välordnade (kopiera & klistra inte alltför smart!), men det fungerar.
//*********************************************************************************
T.Reynolds - November 2014
Rörelsedetektor med ljussensor & timer
CONST int ledPin = 13. utgång till lysdioder / verklig
CONST int inputPin = 4;
int now_dark = 60. När ljus mätning understiger denna nivå, kolla för rörelse.
int ledon = 0; När förbifartsleder LDR krets så är, unnaffected
av lampor har det bara slås på!
Återställs när timercnt = 0, dvs ingen rörelse upptäckts.
int analogPin = 3; 22 k motstånd (eller liknande) till analoga stift 3 och Gnd
LDR stift 3 och + 5V
int val = 0; värdet läsa på analoga stift 3
int timercnt;
void setup()
{
Serial.BEGIN(9600); testa bara
pinMode (ledPin, produktionen);
pinMode (inputPin, ingång); }
void loop()
{int värde = digitalRead(inputPin);
om (ledon == 0)
{
Val = analogRead(analogPin);
Delay(1000); testa bara
Serial.println(val); testa bara
}
om (värde == hög & & val < now_dark || värde == hög & & ledon == 1)
{
digitalWrite (ledPin, hög);
timercnt = 10; Räkna ner från här - 10 SEK är test bara
Lamporna kommer att bo för 10 SEK om ingen rörelse upptäcks.
Varje gång rörelse upptäcks, timercnt satt till 10.
}
om (värde == låg & & timercnt > 0)
{
Serial.Print(">"); testa bara
Serial.println(timercnt); testa bara
ledon = 1;
Delay(1000); timercnt--;
om (timercnt == 0)
{
turnoff();
ledon = 0;
}
}
}
void turnoff()
{
digitalWrite (ledPin, låg);
}
// ====================================================