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

https://os.mbed.com/media/uploads/ramirezcar/conexiones_total__1.jpg

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 https://os.mbed.com/media/uploads/ramirezcar/inicializando_proceso.jpg https://os.mbed.com/media/uploads/ramirezcar/dist_entre_4_y_20_led_naranja_on.jpg https://os.mbed.com/media/uploads/ramirezcar/dist_entre_20_y_40_led_azul_on.jpg https://os.mbed.com/media/uploads/ramirezcar/dist_mayor_a_40_led_verde_on.jpg https://os.mbed.com/media/uploads/ramirezcar/error_4_leds_on.jpg

Prueba 2 https://os.mbed.com/media/uploads/ramirezcar/distancia_menor_a_4_infrarrojo_activado.jpghttps://os.mbed.com/media/uploads/ramirezcar/distancia_menor_a_4_led_rojo_on.jpg https://os.mbed.com/media/uploads/ramirezcar/dsitancia_entre_4_y_20.jpg https://os.mbed.com/media/uploads/ramirezcar/distancia_entre_20_y_40.jpg https://os.mbed.com/media/uploads/ramirezcar/distancia_mayor_a_40.jpg

Committer:
ramirezcar
Date:
Wed Feb 12 20:30:57 2020 +0000
Revision:
1:79299edab09b
Parent:
0:7b1293e58047
Child:
2:8181dbf88b24
MEDICION CON SENSORES ULTRASONICO E INFRARROJO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ramirezcar 0:7b1293e58047 1 #include "mbed.h"
ramirezcar 1:79299edab09b 2 #include "HCSR04.h"
ramirezcar 0:7b1293e58047 3
ramirezcar 1:79299edab09b 4 Serial pc(PA_2,PA_3);// Puertos de comunicación serial a PC
ramirezcar 1:79299edab09b 5 DigitalOut Verde(PD_12); // Verde==> Distancia RECOMENDADA (<40)
ramirezcar 1:79299edab09b 6 DigitalOut Azul(PD_15);// Azul ==> Distancia MENOR A RECOMENDADA (entre 20 y 40)
ramirezcar 1:79299edab09b 7 DigitalOut Naranja(PD_13);//Naranja> Distancia PELIGROSA (entre 4 y 20)
ramirezcar 1:79299edab09b 8 HCSR04 ultra(PB_4,PB_5);// Sensor Ultrasónico (Trigger y Echo)
ramirezcar 1:79299edab09b 9 DigitalOut Rojo(PD_14);// Respuesta Sensor infrarojo==> CHOQUE INMINENTE (menor a 4)
ramirezcar 1:79299edab09b 10 DigitalIn Infra(PD_6);// Señal Sensor infrarojo
ramirezcar 0:7b1293e58047 11
ramirezcar 1:79299edab09b 12 int main(){
ramirezcar 1:79299edab09b 13
ramirezcar 1:79299edab09b 14 pc.baud(115200); // Velocidad de Transmisión
ramirezcar 1:79299edab09b 15 pc.printf("Incio\n");//Mensaje de Incio de lectura de diastanciaen en pantalla PC
ramirezcar 1:79299edab09b 16 while(1){ // Para que se ejecute siempre
ramirezcar 1:79299edab09b 17 int d;
ramirezcar 1:79299edab09b 18 char selector;
ramirezcar 1:79299edab09b 19 if(Infra == 0){ //Si se activa sensor infrarrojo se ejecuta caso d
ramirezcar 1:79299edab09b 20 d = 4;
ramirezcar 1:79299edab09b 21 selector = 'd';
ramirezcar 1:79299edab09b 22 }
ramirezcar 1:79299edab09b 23 else if(Infra == 1){
ramirezcar 1:79299edab09b 24 d =ultra.distance(1);
ramirezcar 1:79299edab09b 25 if(d>4 && d<=20){
ramirezcar 1:79299edab09b 26 selector = 'a';
ramirezcar 1:79299edab09b 27 }
ramirezcar 1:79299edab09b 28 else if(d>20 && d<= 40){
ramirezcar 1:79299edab09b 29 selector = 'b';
ramirezcar 1:79299edab09b 30 }
ramirezcar 1:79299edab09b 31 else if(d > 40){
ramirezcar 1:79299edab09b 32 selector = 'c';
ramirezcar 1:79299edab09b 33 }
ramirezcar 1:79299edab09b 34 }
ramirezcar 1:79299edab09b 35 switch(selector){
ramirezcar 1:79299edab09b 36 case 'a' :
ramirezcar 1:79299edab09b 37 pc.printf(" entre 4 y 20 \n");
ramirezcar 1:79299edab09b 38 Naranja = 1;
ramirezcar 1:79299edab09b 39 Azul = 0;
ramirezcar 1:79299edab09b 40 Verde = 0;
ramirezcar 1:79299edab09b 41 Rojo = 0;
ramirezcar 1:79299edab09b 42 break;
ramirezcar 1:79299edab09b 43 case 'b' :
ramirezcar 1:79299edab09b 44 pc.printf("entre 20 y 40 \n");
ramirezcar 1:79299edab09b 45 Azul = 1;
ramirezcar 1:79299edab09b 46 Naranja = 0;
ramirezcar 1:79299edab09b 47 Verde = 0;
ramirezcar 1:79299edab09b 48 Rojo = 0;
ramirezcar 1:79299edab09b 49 break;
ramirezcar 1:79299edab09b 50 case 'c' :
ramirezcar 1:79299edab09b 51 pc.printf("mayor a 40 \n");
ramirezcar 1:79299edab09b 52 Verde = 1;
ramirezcar 1:79299edab09b 53 Azul = 0;
ramirezcar 1:79299edab09b 54 Naranja = 0;
ramirezcar 1:79299edab09b 55 Rojo = 0;
ramirezcar 1:79299edab09b 56 break;
ramirezcar 1:79299edab09b 57 case 'd' :
ramirezcar 1:79299edab09b 58 pc.printf("menor igual a 4 \n");
ramirezcar 1:79299edab09b 59 Verde = 0;
ramirezcar 1:79299edab09b 60 Azul = 0;
ramirezcar 1:79299edab09b 61 Naranja = 0;
ramirezcar 1:79299edab09b 62 Rojo = 1;
ramirezcar 1:79299edab09b 63 break;
ramirezcar 1:79299edab09b 64 default :
ramirezcar 1:79299edab09b 65 pc.printf("default \n");
ramirezcar 1:79299edab09b 66 Verde = 1;
ramirezcar 1:79299edab09b 67 Azul = 1;
ramirezcar 1:79299edab09b 68 Naranja = 1;
ramirezcar 1:79299edab09b 69 Rojo = 1;
ramirezcar 1:79299edab09b 70 break;
ramirezcar 1:79299edab09b 71 }
ramirezcar 1:79299edab09b 72 pc.printf("%d \n",d);
ramirezcar 1:79299edab09b 73 wait(5);
ramirezcar 0:7b1293e58047 74 }
ramirezcar 1:79299edab09b 75
ramirezcar 0:7b1293e58047 76 }
ramirezcar 1:79299edab09b 77