Ejercicio 23: Sensor de pisadas

Cuando el sensor detecta una vibración, se enciende una señal luminosa.

Novedades hardwareNovedades software
Piezoeléctrico.Comunicación con el ordenador en tiempo real a través del puerto de serie

Requisitos:

  • Un LED, una resistencia de 220 ohmios.
  • Un pulsador.
  • Un zumbador piezoeléctrico.
  • Una resistencia de varios Mohmios.

Planteamiento: Una alarma de proximidad que se activa cuando alguien pisa cerca del sensor.

Presentación de: Uso del zumbador piezoeléctrico como sensor.

Un zumbador piezoeléctrico puede usarse como sensor de vibraciones, pues las transforma en señales eléctricas.

Consideramos que se ha pisado cerca del sensor cuando la señal del sensor alcanza un valor determinado, que ajustaremos según la sensibilidad que precisemos en la variable nivel. Cada vez que se supera el nivel marcado el programa envía la cadena de caracteres “Alarma! “ por el puerto de serie, de forma que si activamos el monitor de serie de la IDE aparecerá en la parte inferior de la pantalla. También parpadea un LED, con lo que tenemos otra referencia visual de cuándo se está considerando suficiente el golpe que damos. Estas referencias nos permitirán ajustar el nivel de sensibilidad para que no haya interferencias extrañas y tampoco haya que pisar con demasiada fuerza.

Finalmente el programa se bloquea en un bucle while mientras suena la alarma sonora.

Variantes:

  • Imagina que una pisada sola da como resultado muchas falsas alarmas. Modifica el programa para que sólo salte la alarma si ha y dos pisadas en menos de 5 segundos.

Ten en cuenta que si el bucle principal, void loop( ) se repite muy rápido vas a recibir lecturas repetidas de una sola pisada, porque las vibraciones duran un tiempo.

Para evitar esto, coloca un delay dentro del if que comprueba la lectura de la entrada.

VIDEO DEL EJERCICIO 23

CODIGO FUENTE

 Copyright (C) 2006  Juan Carlos Alonso de Mena
 This program is free software; you can redistribute it and/or modify it under the terms
 of the GNU General Public License as published by the Free Software Foundation;
 See the GNU General Public License for more details?

 int led=13;
 int piezoSensor=0;              
 int medida=0;
 int nivel=80;                     //valor de la señal analógica que establecemos como límite de la sensibilidad del sensor
 int zumb=10;
 int n=0;
 int pisadas=0;                    //variable que lleva la cuenta del nº de pisadas                           
 void setup() {
   pinMode(led, OUTPUT); 
   pinMode(zumb, OUTPUT); 
   beginSerial(9600);              //inicia la comunicación con el puerto serie del  ordenador y 
 }                                 //establece la velocidad de transferencia
 void alarma(){                    //produce los 3 pitidos de la alarma sonora
   for(n=0;n<3;n++){
     digitalWrite(zumb,HIGH);
     delay(200);
     digitalWrite(zumb,LOW);
     delay(200);
   }
 }                                              
 void loop(){
   medida=analogRead(piezoSensor); //actualizamos el valor de la señal del sensor
   printInteger(medida);           //envía el valor de la señal del sensor al monitor serie
   delay(100);
   if (medida >=nivel){            //si la señal supera el límite
     digitalWrite(led,HIGH);       //se enciende el LED
     printString("Alarma!   ");    //se envían caracteres por el puerto serie
     // printByte(10);
     printByte(13);
     pisadas=pisadas +1;           //aumenta en uno el contador de pisadas                
     delay(200);
     digitalWrite(led,LOW);        //se apaga el LED
   }                                   
   while(pisadas>0){               //si se detecta una pisada suena la alarma
     alarma();
   }
 }    

Volver?

  Copyright (c) 2006  Juan Carlos Alonso de Mena

  Permission is granted to copy, distribute and/or modify this document under the terms of 
 the GNU Free Documentation License, Version 1.2 or any later version published by the
 Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
 Back-Cover Texts.  A copy of the license is included in the section entitled 
 GNU Free Documentation License?.