InicioHazlo Tu MismoTemporizador para sensor PIR hc-sr501

Temporizador para sensor PIR hc-sr501

Hazlo Tu Mismo2/9/2017


Hola Buenas Tardes

Estudiando las bondades del Sensor PIR-HC05 en Arduino noté que es demasiado sensible. O sea que ante un disparo envía muchos pulsos. Lo que hace en algunos proyectos una molestia de verdad.

También ante cualquier mínimo movimiento se dispara dando “falsas alarmas”. Por ello hice este código (en cascada) que quería compartir con Uds.

Materiales: Arduino (NANO, UNO, etc.), Sensor Pir y Cables.

La sensibilidad está controlada con la función millis(), a partir del disparo:
- Si persiste la señal hasta 3500 milisegundos lo considera FALSA ALARMA.
- Si la señal continúa entre 3500 y 15000 milisegundos Prende las luces.
- Si la señal supera los 15000 milisegundos enciende la Sirena.

Para probarlo le puse un LED que remplaza el encendido de las luces y Buzzer 5v. con el VISOR Serial.

[color=#000000]
// Este Programa permite controlar el exceso de disparos
// del Sensor de Movimientos, con la Frecuencia Millis()
// Siendo la Diferencias:      Hasta 3500ms FALSA ALARMA
//                     Entre 3500 y 15000ms PRENDO LUCES
//                   15000ms en adelante SUENA LA ALARMA

int ct   = 10; //.......... Calibration time
int PIRX =  2; //.......... PIR Sensor Output
long inicio, actual = 0; // Control de Milisegundos (Tiempos)
int Sirena = 3; //......... Sirena
int Luces  = 4; //......... Luces Externas
String Estado = "";

void setup() {
     Serial.begin(9600);
     pinMode(PIRX, INPUT);
     pinMode(Luces,OUTPUT);

     Serial.println("Calibrando el Sensor...");
     for(int i = 0; i <= ct; i++) {
        Serial.print(((i*100)/ct));
        Serial.print("% ");
        Serial.println("Listo...");
        delay(1000); // 1000
     }
     Serial.println("** SENSOR ACTIVADO **");
     digitalWrite(PIRX, LOW);
}

void loop() {
     while (digitalRead(PIRX) == HIGH) {
         Estado = "";
         digitalWrite(Luces,LOW);
         Serial.println("--------------------------------");
         Serial.print("** SE HA DETECTADO MOVIMIENTO ** ");
         inicio = millis();
         Serial.print(inicio);

         while (digitalRead(PIRX) == HIGH && (actual-inicio <= 3500)) {
             actual = millis();
             Estado = " Falsa Alarma";

             while (digitalRead(PIRX) == HIGH && (actual-inicio > 3500 && actual-inicio < 15000)) {
                 actual = millis();
                 Estado = " Encender LUCES";
                 digitalWrite(Luces,HIGH);

                 while (digitalRead(PIRX) == HIGH && (actual-inicio >= 15000)) {
                     actual = millis();
                     Estado = " Disparo de la SIRENA !!!";
                     
                     for (int k=0; k<2; k++) {
                         // Sonido Agudo
                         for (int i=2000;i<=4000; i++) {tone(Sirena, i, 250);}
                         // Sonido Grave
                         for (int i=4000;i>=2000; i--) {tone(Sirena, i, 250);}
                     }
                 }
             }
         }
         Serial.println(" "+String(actual)+" "+String(actual-inicio)+" "+String(Estado));
         Serial.println("----------------------ESTABLE--- ");
         digitalWrite(Luces,LOW);
     }
}
[/color]


Uds. Podrán variar los valores de acuerdo a la utilidad que quieran darle. Para comprobar y regularlo a gusto.

Espero que les sirva como a mí. Les deseo lo mejor!.
Datos archivados del Taringa! original
5puntos
44visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

H
Humberto02🇦🇷
Usuario
Puntos0
Posts15
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.