![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
MEDICION DE DISTANCIA USANDO DOS SENSORES Y MUESTRA DE RESULTADOS EN LCD
Dependencies: mbed HCSR04 TextLCD
MEDICIÓN DE DISTANCIAS USANDO 2 TIPOS DE SENSORES:
DESCRIPCIÓN:
Se desea utilizar dos tipos de sensores de diferentes características para lograr medir la distancia desde un punto definido; los valores medidos se mostrarán en una pantalla de de 20X4 (caracteresxlíneas) vía I2C; además se han establecido 4 rangos de distancia distintos para cada uno de ellos se encenderá un color de led diferente en el microcontrolador, de tal manera que a medida que se acerca el objeto varían de la siguiente manera:
De 0 a 4 color rojo; se mostrará intervalo y distancia en pantalla De 4 a 20 naranja; se mostrará intervalo y distancia en pantalla De 20 a 40 azul; se mostrará intervalo y distancia en pantalla Mayor a 40 Verde; se mostrará intervalo y distancia en pantalla
En caso de que exista un desperfecto en alguno de los sensores (Ej: no llegue la señal ninguna o lectura errónea) a modo de alarma se encienden los 4 leds al mismo tiempo. Además se declara mensaje de inicialización en pantalla al comienzo del proceso.
Materiales y Dispositivos a emplear.
- Un sensor ultrasónico tipo HCSR04 o similar - Un sensor infrarrojo o IR tipo ME-634 o similar - Un microcontrolador STM32F4 - Una pantalla 2004 con su respectivo controlador
Breve descripción de funcionamiento de los los sensores
Sensores ultrasónicos: Emite un sonido y mide el tiempo que la señal tarda en regresar. Estos se reflejan en un objeto, el sensor recibe el eco producido y lo convierte en señales eléctricas, las cuales son elaboradas en el aparato de valoración. Estos sensores trabajan solamente donde tenemos presencia de aire (no pueden trabajar en el vacío, necesitan medio de propagación), y pueden detectar objetos con diferentes formas, diferentes colores, superficies y de diferentes materiales. Los materiales pueden ser sólidos, líquidos o polvorientos, sin embargo han de ser deflectores de sonido. Los sensores trabajan según el tiempo de retorno del eco, es decir, se valora la distancia temporal entre el impulso de emisión y el impulso del eco.
Sensor Infrarrojo: Se basa en que los rayos infrarrojos pasan al interior del fototransistor donde se encuentra un material piroeléctrico, que es el que reacciona a la presencia de los rayos infrarrojos. Por lo general, estos dispositivos están integrados en configuraciones de diverso tipo. En nuestro caso es una configuarción de sensores activo, la cual está basado en la combinación de un emisor y un receptor situados próximos entre sí. El emisor es un diodo de LED infrarrojo, mientras que el receptor es el fototransistor.
Algunos, como el Sensor Infrarrojo de distancia SHARP GP2Y0A21 da una salida en voltaje analógico permite detectar objetos en un rango de 10 a 80cm. (no se encontró en el mercado)
Otros como el ME-634 (usado en esta práctica) solo devuelven un 0 o 1 lógico como salida; es decir no nos permite determinar la distancia; pero si establecer la existencia de algún elemento frente al sensor dentro del rango seteado; por esto se lo conoce como detector de obstáculos o detector de bandas negras. Por defecto envía un 1 lógico, al encontrar algún obstáculo envía un 0 lógico.
Terminales y Conexiones.
Sensor Infrarrojo Vcc....3,3V a 5V; GND...Ground ; OUT...Digital Output(0 and 1) ==>Din en STM32
Sensor Ultrasónico: Vcc............5; Trigger...Din; Echo........Dout==>Din en STM32; Ground...GND
Diagrama
Notas:
- Se toma la distancia mínima como 4 en vista a que este el valor mínimo que mide nuestro sensor ultrasónico y se hizo corresponder esta distancia con la activación del sensor infrarrojo a fin de cubrir todo el rango.
- El sensor infrarrojo utilizado no tiene un rango amplio (más bien de unos cuantos cms), en la primera prueba se utilizó uno que podía detectar de 0-4,5cm aprox para la segunda se consiguió uno de una poco más de 0-7cm aprox; sin embargo se decidió setearlo en 4 por lo anterior.
-En vista a que solo tenemos una salida digital del sensor ultrasónico; 1 cuando esta desactivado (no hay obstaculo) y 0 cuando se activa (hay obstaculo) no se puede expresar valor de lectura si no solo se indica el rango de 0 a 4.
Prueba 1
Prueba 2
Diff: main.cpp
- Revision:
- 1:79299edab09b
- Parent:
- 0:7b1293e58047
- Child:
- 2:8181dbf88b24
--- a/main.cpp Sat Feb 01 20:02:54 2020 +0000 +++ b/main.cpp Wed Feb 12 20:30:57 2020 +0000 @@ -1,12 +1,77 @@ #include "mbed.h" +#include "HCSR04.h" -DigitalOut myled(LED1); +Serial pc(PA_2,PA_3);// Puertos de comunicación serial a PC +DigitalOut Verde(PD_12); // Verde==> Distancia RECOMENDADA (<40) +DigitalOut Azul(PD_15);// Azul ==> Distancia MENOR A RECOMENDADA (entre 20 y 40) +DigitalOut Naranja(PD_13);//Naranja> Distancia PELIGROSA (entre 4 y 20) +HCSR04 ultra(PB_4,PB_5);// Sensor Ultrasónico (Trigger y Echo) +DigitalOut Rojo(PD_14);// Respuesta Sensor infrarojo==> CHOQUE INMINENTE (menor a 4) +DigitalIn Infra(PD_6);// Señal Sensor infrarojo -int main() { - while(1) { - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); +int main(){ + + pc.baud(115200); // Velocidad de Transmisión + pc.printf("Incio\n");//Mensaje de Incio de lectura de diastanciaen en pantalla PC + while(1){ // Para que se ejecute siempre + int d; + char selector; + if(Infra == 0){ //Si se activa sensor infrarrojo se ejecuta caso d + d = 4; + selector = 'd'; + } + else if(Infra == 1){ + d =ultra.distance(1); + if(d>4 && d<=20){ + selector = 'a'; + } + else if(d>20 && d<= 40){ + selector = 'b'; + } + else if(d > 40){ + selector = 'c'; + } + } + switch(selector){ + case 'a' : + pc.printf(" entre 4 y 20 \n"); + Naranja = 1; + Azul = 0; + Verde = 0; + Rojo = 0; + break; + case 'b' : + pc.printf("entre 20 y 40 \n"); + Azul = 1; + Naranja = 0; + Verde = 0; + Rojo = 0; + break; + case 'c' : + pc.printf("mayor a 40 \n"); + Verde = 1; + Azul = 0; + Naranja = 0; + Rojo = 0; + break; + case 'd' : + pc.printf("menor igual a 4 \n"); + Verde = 0; + Azul = 0; + Naranja = 0; + Rojo = 1; + break; + default : + pc.printf("default \n"); + Verde = 1; + Azul = 1; + Naranja = 1; + Rojo = 1; + break; + } + pc.printf("%d \n",d); + wait(5); } + } +