uControl
Abril 26, 2017, 08:40:23 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Aporte - Temporizador para Sensor PIR Hc-sr501  (Leído 89 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Titohc
PIC12F
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 249



« : Abril 03, 2017, 06:53:24 »


Hola Buenas Días

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.

Código:
// 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);
     }
}

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!
En línea

Que el conocimiento jamás tenga un dueño y siempre exista la libertad de nuestra imaginación a la hora de crear.
(Uno para todos y todos para uno)
Yovani
PIC10F
*
Desconectado Desconectado

Mensajes: 45


« Respuesta #1 : Abril 10, 2017, 04:43:19 »

Gracias por compartirlo!!!

De pronto podría usarse en otros sensores que tengan rebotes

Saludos
En línea
Titohc
PIC12F
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 249



« Respuesta #2 : Abril 10, 2017, 07:49:20 »

Hola Yovani

Sinceramente, cuando lo hice no pensé en otro tipo de sensor. Me centré en resolver el problema que me daba este Sensor... Pero tendría que funcionar perfectamente, ya que es un algoritmo de programación.

Te encargo que nos comentes como te fue si lo probas con otro; así reforzamos su utilidad.

Saludos y Suerte.

En línea

Que el conocimiento jamás tenga un dueño y siempre exista la libertad de nuestra imaginación a la hora de crear.
(Uno para todos y todos para uno)
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.496 segundos con 25 consultas. (Pretty URLs adds 0.461s, 2q)