-Materiales:Arduino UNO/Mega/Nano o similar
-2 sensores ultrasónicos HC-SR04
-Un relé(Yo puse un Led pero simplemente es conectar un rele en vez de el Led).
-Aquí os dejo el esquema y una explicación de colocación de componentes.
1-Colocamos los sensores ultrasónicos en una protoboard ,o si lo van a incluir en su casa en un PCB.
2-Ahora conectamos GND y 5V de Arduino con los sensores, después conectamos los pines trig y echo de los sensores a los pines digitales que queramos (en mi caso trig1 pin 7,echo1 pin 8 , trig 2 pin 12 y echo 2 pin 12).
3-Una vez colocados los sensores colocamos en el lugar del Led un relé 5V( con diodos para no quemar el Arduino con corrientes inversas), un pin de el relé va a una salida digital y el otro a GND.
-Funcionamiento de los sensores.
En este caso usaremos la librería NewPing, así que no haría falta saber como funciona el sensor, pero si no quieres usar la librería para controlar estos sensores lo explico:
El sensor funciona midiendo el tiempo que tarda la onda desde que tu la mandas mediante el pin trig hasta que vuelve en el pin echo, así que seria así.
Como el pin trig es el que manda la señal de sonido cuando tu quieras accionarlo, empezaríamos el sketch de Arduino poniendo el siguiente código:
void
loop(){
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
}
Primero
nos aseguramos de que esta apagado el sensor poniéndolo en LOW, después
esperamos 2 microsegundos y ya accionamos el pin trig para mandar la
onda, lo siguiente seria dejarle un tiempo a que reboten las ondas, y
finalmente apagar el sensor. Ahora hay que medir el tiempo que tardan
las ondas en ir y venir así que usamos la función "pulseIn" guardando
el resultado en una variable (llamada duración en mi caso).
duración
= pulseIn(echo,HIGH);
Ya
una vez guardado el tiempo seria hacer una simple operación matemática,
el tiempo que ha tardado al onda en volver / velocidad del sonido en
cm por microsegundo / 2 por que las ondas van y vuelven, así que si no
lo dividiéramos la distancia seria el doble de la que es:
distancia
= duración/29,1/2
Y
ya si queremos ver en el ordenador la distancia que mide el sensor
usaríamos la comunicación serial, así que quedaría algo así:
int
trig = 2; //Conectaríamos el pin trig en el 2(o cambiamos el pin en
el que esta trig)
int echo =4; //Conectaríamos el pin echo en el 4(o cambiamos el pin en el que esta echo)
int
distancia;
int
duración;
void
setup(){
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
Serial.begin(9600);
}
void
loop(){
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
duración
= pulseIn(echo,HIGH);
distancia
= duración/29,1/2
Serial.print(distancia);
//
Se puede poner un delay aquí para poder leer la medida.
}
-Programa
Yo repito, les voy a dar el sketch con la librería NewPing así que tienen que descargársela, sin la libreria se las apañan ustedes con el código que he dado antes.
#include
<NewPing.h>
const
int Trig1 = 7;
const
int Echo1 = 8;
const
int Trig2 = 12;
const
int Echo2 = 11;
int personas = -1; //Aqui guardaremos el nuero de personas que hay en la habtación.
int
distancia1;
int
distancia2;
int
duracion1;
int
Led = 2;
int
estado = 0;
int
estadoAnterior ;
NewPing
Sonar2(Trig2,Echo2,500);
void
setup() {
pinMode(Trig1,OUTPUT);
pinMode(Trig2,OUTPUT);
pinMode(Echo1,INPUT);
pinMode(Echo2,INPUT);
pinMode(Led,OUTPUT);
//Declaramos que el pin Led o rele sera una salida.
Serial.begin(9600);
}
void
loop() {
digitalWrite(Trig1,
LOW);
digitalWrite(Trig2,
LOW);
delayMicroseconds(2);
digitalWrite(Trig1, HIGH);
delayMicroseconds(10);
digitalWrite(Trig1, LOW);
duracion1 = pulseIn(Echo1, HIGH);
distancia1 = duracion1 / 2 / 29.1 ;
if(distancia1 < 0){
distancia1 = distancia1 + distancia1;
}
distancia2 = Sonar2.ping_cm();
if(distancia1 >60 && distancia2 <60 ){ //Si la
distancia1 es mayor 60 y la 2 es menor a 60.
delay(1000);
estado = 1; //Estado es 1.
personas = personas + 1; //Y sumamos una persona a la
sala.
}
if(distancia2 >60 && distancia1 <60){ //Si la distancia2 es mayor 60 y la 2 es menor a 60.
delay(1000);
estado= 0; //Estado es 0.
personas = personas - 1; //Y restamos una persona a la
sala.
if(personas < 0){ //Por si alguien intenta
hacer que las personas sean negativas evitando el
sensor al entrar ,cuando las personas sean menor a 0.
personas = 0; //Personas sera 0.
}
}
if(estado == 1){ //Si estado es 1.
digitalWrite(Led,HIGH); //Encendemos el Led/Relé.
}
if(estado == 0 && personas == 0){ //Si estado es 0 y
hay 0 personas en la sala.
digitalWrite(Led,LOW ); //Apagamos el Led/Relé.
}
Serial.println("personas");//Si quieres un contador deparsonas aqui lo tienes.
Serial.println(personas);
}
El contador de personas es por si entra alguien a tu cuarto y sale no se apague la luz y te deje a oscuras xD
Gracias,por haber leido la entrada.
Si
no les funciona decírmelo ,por que por ejemplo a mi uno de los sensores
me media mal con la librería así que lo hice sin la librería como
podéis ver arriba.

No hay comentarios:
Publicar un comentario