Medición de Temperatura y Distancia en tiempo real presentado en una pantalla LCD.

Dependencies:   mbed HCSR04 MEDIDORCORRIENTEVOLTAJEYPOTENCIA

Medición de Temperatura y Distancia en tiempo real presentado en una pantalla LCD.

DESCRIPCIÓN:

Se desea realizar las medición de temperatura y distancia en tiempo real, los valores medidos se mostrarán en una pantalla de de 20X4 (caracteresxlíneas) vía I2C; ademas se establece dos alarmas visuales por rangos (20cm > d <20 cm); si la distancia es mayor a 20 cm la pantalla nos mostrara un mensaje de fuera de rango.

Materiales y Dispositivos a emplear:

-Sensor de temperatura LM35 -Pantalla LCD 20x4 con luz de fonfo azul con interfaz I2C -Sensor ultrasonico hc-sr04 - Discovey board STM32F4 - Piout STM32F4 - Protoboard

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.

Terminales y Conexiones: Sensor Ultrasónico: Vcc............5; Trigger...Din; Echo........Dout==>Din en STM32; Ground...GND

https://os.mbed.com/media/uploads/edinson/hc-sr04.jpg

Sensor de temperatura: El LM35 es un circuito electrónico sensor que puede medir temperatura. Su salida es analógica, es decir, te proporciona un voltaje proporcional a la temperatura. El sensor tiene un rango desde −55°C a 150°C. Su popularidad se debe a la facilidad con la que se puede medir la temperatura. Incluso no es necesario de un microprocesador o microcontrolador para medir la temperatura. Dado que el sensor LM35 es analógico, basta con medir con un multímetro, el voltaje a salida del sensor.

Terminales y Conexiones. Sensor de temperatura: Pin1 .....4-20V; Pin2....Out; Pin3....GND

https://os.mbed.com/media/uploads/edinson/lm35.jpg

Diagramas Referenciales: A continuación adjuntamos los siguientes diagramas reverenciales, para la conexiones de los sensores de temperatura , distancia y LCD.

Diagrama para Conexión LCD

https://os.mbed.com/media/uploads/edinson/diagrama_lcd_1024x1024.png

Diagrama para Conexión Sensor LM35

https://os.mbed.com/media/uploads/edinson/diagrama_lm35.png

Diagrama para Conexión Sensor ultrasonico hc-sr04 https://os.mbed.com/media/uploads/edinson/diagrama_ultrasonico.jpg

Pruebas del Sistema:

Si la distancia es menor a 20 cm; el sistema presenta los siguientes datos en la pantalla LCD. Linea 1 : Datos de temperatura en (°C). Linea 2: Voltaje de trabajo del sensor de temperatura en (mv). Linea 3: Datos de distancia en (cm). Linea 4: Tiempo de lectura en (ms).

https://os.mbed.com/media/uploads/edinson/dastos_normales.jpg

Si la distancia es mayor a 20 cm; el sistema presenta los siguientes datos en la pantalla LCD. Linea 2: Datos de distancia en (cm)). Linea 3: Mensaje "Fuera de Rango".

https://os.mbed.com/media/uploads/edinson/fuera_de_rango.jpg

Observaciones: -Para la presentaciones del mensaje de fuera de rango se aplico la condición IF para que cuando la distancia esta mayor de 20cm el mensaje principal sea interrumpido y se quede dentro de esa rutina hasta que su valor de distancia cambie (menor a 20cm).

https://os.mbed.com/media/uploads/edinson/rutina_fuera_de_rango.png

-Dentro de esta rutina se observo que la pantalla parpadeaba , esto se corrigió disminuyendo el tiempo de espera a 0,1 y aumentando el tiempo de espera en la rutina if (d<20) {.

Committer:
edinson
Date:
Sat Feb 15 15:49:23 2020 +0000
Revision:
2:0275b064b403
Parent:
1:49382e23d412
Proyecto Final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dibbrowing 0:bb38e88170c8 1 #include "mbed.h"
dibbrowing 1:49382e23d412 2 #include "TextLCD.h"
edinson 2:0275b064b403 3 #include "HCSR04.h"// Biblioteca del sensor ultrasonico
dibbrowing 1:49382e23d412 4
dibbrowing 1:49382e23d412 5 Serial pc(PA_2,PA_3);
dibbrowing 1:49382e23d412 6 I2C i2c_lcd(PB_7, PB_8); // SDA, SCL
dibbrowing 1:49382e23d412 7 TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4);
dibbrowing 1:49382e23d412 8
edinson 2:0275b064b403 9 //DigitalOut led(LED1, 0); // Create the LED object and setup OFF
edinson 2:0275b064b403 10 Timeout timeout; // Create the Timeout object
dibbrowing 0:bb38e88170c8 11
edinson 2:0275b064b403 12 Timer t; //declaracion de contador
edinson 2:0275b064b403 13 AnalogIn sensor(PB_0); //entrada analogica para sensor de temperatura
edinson 2:0275b064b403 14 HCSR04 sensord(PB_4,PB_5); //Declaración del sensor ultrasonico y de los puertos de entrada a trigger y echo
edinson 2:0275b064b403 15 DigitalOut myled (PD_14);
edinson 2:0275b064b403 16 DigitalOut myled2 (PD_13);
edinson 2:0275b064b403 17 float value; //variable para datos de temparatura
edinson 2:0275b064b403 18 float volt; //variable para datos de voltaje
edinson 2:0275b064b403 19 int d;
edinson 2:0275b064b403 20
edinson 2:0275b064b403 21 int main() //Rutina Principal
dibbrowing 1:49382e23d412 22 {
edinson 2:0275b064b403 23
edinson 2:0275b064b403 24 value = (((sensor.read()*5000)/10)-22); // calculo para prsentar tempertura
edinson 2:0275b064b403 25 volt = (value*10);// calculo para presentar voltaje de sensor
dibbrowing 1:49382e23d412 26
edinson 2:0275b064b403 27 lcd.cls();
edinson 2:0275b064b403 28 lcd.setBacklight(TextLCD::LightOn);
edinson 2:0275b064b403 29 lcd.setCursor(TextLCD::CurOff_BlkOff);
edinson 2:0275b064b403 30 pc.baud(115200); // Velocidad de Transmisión
dibbrowing 1:49382e23d412 31
edinson 2:0275b064b403 32 while(1) { // inicio de bucle,Condicional establecido para que siempre sea verdadero
edinson 2:0275b064b403 33
edinson 2:0275b064b403 34
edinson 2:0275b064b403 35 int d= sensord.distance(1); // comando para un numero largo de bits
edinson 2:0275b064b403 36 if (d<20) { //condicional de led
edinson 2:0275b064b403 37 myled=1;
edinson 2:0275b064b403 38 myled2=0;
edinson 2:0275b064b403 39
edinson 2:0275b064b403 40 t.start(); // inicio de contador
edinson 2:0275b064b403 41 lcd.cls();
edinson 2:0275b064b403 42 lcd.locate(0,0);
edinson 2:0275b064b403 43 lcd.printf ("Temp= %2.2f C, ", value); //escribir dato de temperatura
edinson 2:0275b064b403 44 lcd.locate(0,1);
edinson 2:0275b064b403 45 lcd.printf ("volt= %2.2f mv, ", volt); //escribir dato de voltaje sensor
edinson 2:0275b064b403 46 lcd.locate(0,2);
edinson 2:0275b064b403 47 lcd.printf ("D= %d cm, ",d); // comando de impresion para mostra
edinson 2:0275b064b403 48 lcd.locate(0,3);
edinson 2:0275b064b403 49 lcd.printf ("time= %d ms, \r\n", t.read_ms()); // escribir datos de tiempo de lectura
edinson 2:0275b064b403 50 t.stop(); //pausa de contador
dibbrowing 1:49382e23d412 51
edinson 2:0275b064b403 52 wait (1);
edinson 2:0275b064b403 53 }
edinson 2:0275b064b403 54
edinson 2:0275b064b403 55 else if (d>=20) {
edinson 2:0275b064b403 56 myled=0;
edinson 2:0275b064b403 57 myled2=1;
edinson 2:0275b064b403 58 lcd.cls();
edinson 2:0275b064b403 59 lcd.locate(6,1);
edinson 2:0275b064b403 60 lcd.printf ("D= %d cm, ",d); // comando de impresion para mostra
edinson 2:0275b064b403 61 lcd.locate(3,2);
edinson 2:0275b064b403 62 lcd.printf ("Fuera de rango"); //
edinson 2:0275b064b403 63 wait (1);
edinson 2:0275b064b403 64 }
edinson 2:0275b064b403 65
edinson 2:0275b064b403 66
edinson 2:0275b064b403 67 }
dibbrowing 1:49382e23d412 68
edinson 2:0275b064b403 69 }
dibbrowing 1:49382e23d412 70
dibbrowing 1:49382e23d412 71
dibbrowing 1:49382e23d412 72