Detector de movimiento PIR simple con luz temporizador sensor y retraso.
El circuito utiliza un módulo PIR (alrededor de £1,00 de ebay, un LDR (sobre 25p, otra vez de ebay y un Arduino mini pro.
Reset, se mide la luz ambiental y, para fines de prueba solamente, el resultado de atod se muestra en el monitor serie. La salida se mide constantemente hasta que el PIR detecta movimiento.
Cuando la luz cae por debajo de un nivel predeterminado (en este caso un valor de 60 - nombre de la variable ahora oscuro) y el movimiento es detectado, Pin 13, que se conectará a una fila de LEDs va alta y un contador (timercnt) es disminuye cada segundo. Otra vez, para fines de prueba solamente, el contador de decremento es mostrado en el monitor serie.
Se detecta cada movimiento del tiempo, el contador se restablece a su valor inicial - en este caso 10. Esto puse a 180 segundos cuando está instalado. Las luces permanecerá encendido durante 180 segundos siempre y cuando no haya ningún movimiento detectado.
La variable 'ledon' se establece en 1 cuando las luces estén encendidas, evitando así la luz de la fila de LEDs que afecta el circuito. Esto sólo se restablece a 0 cuando el contador llegue a 0 por ningún movimiento detectado.
Espero que todo tiene sentido y es de alguna utilidad.
Aquí está el código de Arduino - no los limpios (copiar y pegar no demasiado inteligente!), pero funciona.
//*********************************************************************************
T.Reynolds - noviembre de 2014
detector de movimiento con sensor de luz y temporizador
const int ledPin = 13; salida a los LEDs / realmente
const int inputPin = 4;
int now_dark = 60; Cuando luz medida cae por debajo de este nivel, compruebe para el movimiento.
ledon int = 0; Cuando se establece, puentes LDR circuito tan es unnaffected
por las luces apenas ha cambiado!
Restablece cuando timercnt = 0, es decir, sin movimiento.
int analogPin = 3; resistencia de 22 k (o similar) al pin analógico 3 y Gnd
Pin 3 de la LDR y + 5V
int val = 0; valor leído en el pin analógico 3
int timercnt;
void setup()
{
Serial.Begin(9600); prueba solamente
pinMode (ledPin, salida);
pinMode (inputPin, entrada); }
void loop()
{int valor = digitalRead(inputPin);
Si (ledon == 0)
{
Val = analogRead(analogPin);
Delay(1000); prueba solamente
Serial.println(Val); prueba solamente
}
Si (valor == alto & & val < now_dark || valor == alto & & ledon == 1)
{
digitalWrite (ledPin, HIGH);
timercnt = 10; Cuenta atrás desde aquí - 10 secs es prueba solamente
Luces permanecerá encendido durante 10 segundos si no detecta ningún movimiento.
Detecta cada movimiento de tiempo, timercnt a 10.
}
Si (valor == baja & & timercnt > 0)
{
Serial.Print(">"); prueba solamente
Serial.println(timercnt); prueba solamente
LEDOn = 1;
Delay(1000); timercnt--;
Si (timercnt == 0)
{
Turnoff();
LEDOn = 0;
}
}
}
turnoff() vacío
{
digitalWrite (ledPin, LOW);
}
// ====================================================