Sistema de medicion y lectura, utilizando dos sensores, un ultrasonico y un sensor infrarrojo, aprovechando arquitectura ARM para Microprocesadores

Dependencies:   mbed HCSR04 TextLCD

Sistema de medición y lectura, utilizando dos sensores, un ultrasónico y un sensor infrarrojo, aprovechando arquitectura ARM para Microprocesadores

Como primer paso en el desarrollo de este sistema de medición y lectura es armar la conexión de la electrónica entre los diferentes elementos que interactuaran entre sí.

Requerimientos de materiales, piezas y accesorios a utilizar. Los materiales a utilizar son los siguientes: 1 Placa base STM32F4. 1 Placa base de Microcontrolador STM32F4 basada en tecnología ARM. 1 Display Lcd 16x2 Backlight Azul. 1 Sensor ultrasónico HC-SR04 1 Sensor infrarrojo. 1 Potenciómetro. 1 Protoboard. Varios cables jumper

En el diagra que observamos a continuacion se detalla de una manera genera las conexiones que se deben de realizar en el proyecto en mencion.

https://os.mbed.com/media/uploads/fpachays/diagrama.jpg

Introduccion

En el proyecto se realizara un sistema de medicion y lectura de la distancia de un objeto utilizando dos sensores: un sensor ultrasonico y un Infrarojo, obteniendo un dato que sera la distancia entre el objeto y el sensor ultrasonico, para la cual sera mostrado por una pantalla Lcd 16X2 que seran los caracteres por lineas de muestreo, deacuerdo al microprocesador puedo designar cuatros rangos de distancias, identificando por medio del color del led de la placa que sera de la siguiente manera:

0cm hasta 40cm sera de color rojo 40cm hasta 200cm sera de color naranja 200cm hasta 400cm sera color azul 400cm en adelante sera de color Verde

estos valores seran visualizados en la pantalla lcd.

Funcionamiento del sistema

primeramente reseteamos el sistema en al cual se da inicio al sistema como se aprecia en al grafica, mostrando en el display que el programa esta listo para trabajar.

https://os.mbed.com/media/uploads/fpachays/diagrama01.jpg

luego se pone un objeto a una distancia de 40cm indicando en el display la distancia tomada y en la placa del microprocesador el diodo de color rojo estara activado.

https://os.mbed.com/media/uploads/fpachays/diagrama02.jpg

luego se pone un objeto a una distancia de 200cm indicando en el display la distancia tomada y en la placa del microprocesador el diodo de color naranja estara activado.

https://os.mbed.com/media/uploads/fpachays/diagrama03.jpg

luego se pone un objeto a una distancia de 400cm indicando en el display la distancia tomada y en la placa del microprocesador el diodo de color azul estara activado.

https://os.mbed.com/media/uploads/fpachays/diagrama04.jpg

luego se pone un objeto a una distancia de 400cm en adelante indicando en el display la distancia tomada y en la placa del microprocesador el diodo de color azul estara activado.

https://os.mbed.com/media/uploads/fpachays/diagrama05.jpg

Como hemos observado el funcionamiento se ha dado deacuerdo a lo esperado

Committer:
fpachays
Date:
Sat Feb 15 17:02:26 2020 +0000
Revision:
0:8bf0dad41181
Ultima version del proyecto

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fpachays 0:8bf0dad41181 1 #include "mbed.h"
fpachays 0:8bf0dad41181 2 #include "HCSR04.h"
fpachays 0:8bf0dad41181 3 #include "mbed.h"
fpachays 0:8bf0dad41181 4 #include "TextLCD.h"
fpachays 0:8bf0dad41181 5 #define DEFAULT 0//no
fpachays 0:8bf0dad41181 6 #define ADAFRUIT 0//no
fpachays 0:8bf0dad41181 7 #define DFROBOT 0
fpachays 0:8bf0dad41181 8 #define LCM1602 0
fpachays 0:8bf0dad41181 9 #define YWROBOT 0
fpachays 0:8bf0dad41181 10 #define GYLCD 0//no
fpachays 0:8bf0dad41181 11 #define MJKDZ 0//no
fpachays 0:8bf0dad41181 12 #define SYDZ 1
fpachays 0:8bf0dad41181 13 #define WIDEHK 0//no
fpachays 0:8bf0dad41181 14 #define LCDPLUG 0//no
fpachays 0:8bf0dad41181 15
fpachays 0:8bf0dad41181 16 Serial pc(PA_2,PA_3); // tx, rx
fpachays 0:8bf0dad41181 17 //I2C i2c_lcd(PB_9, PB_8); // SDA, SCL
fpachays 0:8bf0dad41181 18 TextLCD lcd(PA_8, PC_11, PC_6, PC_7, PC_8, PC_9, TextLCD::LCD16x2); //Inicilizar la pantalla LCD (se considera una panalla de 16 caracteres X 2 Filas
fpachays 0:8bf0dad41181 19 //TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4);
fpachays 0:8bf0dad41181 20 //Serial pc(PA_2,PA_3);// Puertos de comunicación serial a PC
fpachays 0:8bf0dad41181 21 DigitalOut Verde(PD_12); // Verde==> Distancia RECOMENDADA (<40)
fpachays 0:8bf0dad41181 22 DigitalOut Azul(PD_15);// Azul ==> Distancia MENOR A RECOMENDADA (entre 20 y 40)
fpachays 0:8bf0dad41181 23 DigitalOut Naranja(PD_13);//Naranja> Distancia PELIGROSA (entre 4 y 20)
fpachays 0:8bf0dad41181 24 HCSR04 ultra(PB_4,PB_5);// Sensor Ultrasónico (Trigger y Echo)
fpachays 0:8bf0dad41181 25 DigitalOut Rojo(PD_14);// Respuesta Sensor infrarojo==> CHOQUE INMINENTE (menor a 4)
fpachays 0:8bf0dad41181 26 DigitalIn Infra(PB_3);// Señal Sensor infrarojo
fpachays 0:8bf0dad41181 27 char *array[] = { // Defino Matriz de caracteres a mostrar
fpachays 0:8bf0dad41181 28 "Entre 4 y 20",
fpachays 0:8bf0dad41181 29 "Entre 20 y 40",
fpachays 0:8bf0dad41181 30 "Mayor a 40",
fpachays 0:8bf0dad41181 31 "Menor igual a 4"
fpachays 0:8bf0dad41181 32 };
fpachays 0:8bf0dad41181 33 int d; // Variable que almacenará la distancia
fpachays 0:8bf0dad41181 34
fpachays 0:8bf0dad41181 35 void setup()
fpachays 0:8bf0dad41181 36 {
fpachays 0:8bf0dad41181 37 /* lcd.setBacklight(TextLCD::LightOn); // Retroiluminación de pantalla
fpachays 0:8bf0dad41181 38 lcd.setCursor(TextLCD::CurOff_BlkOn);//Seteo cursor
fpachays 0:8bf0dad41181 39 lcd.setUDC(0, (char *) udc_0);
fpachays 0:8bf0dad41181 40 lcd.putc(0);
fpachays 0:8bf0dad41181 41 lcd.setUDC(1, (char *) udc_1);
fpachays 0:8bf0dad41181 42 lcd.putc(1);
fpachays 0:8bf0dad41181 43 */
fpachays 0:8bf0dad41181 44 lcd.cls();//limpia pantalla
fpachays 0:8bf0dad41181 45 int col = 0;//definición columna
fpachays 0:8bf0dad41181 46 int row = 0;//definición fila
fpachays 0:8bf0dad41181 47 lcd.locate(col,row);//Ubiación del cursor
fpachays 0:8bf0dad41181 48 lcd.printf("Inicializando...");// mensaje de Inicialización de pantalla
fpachays 0:8bf0dad41181 49 wait(2);//Espere 2 segundos
fpachays 0:8bf0dad41181 50 //Secuencia de Incilización
fpachays 0:8bf0dad41181 51 row++;
fpachays 0:8bf0dad41181 52 lcd.locate(col,row);
fpachays 0:8bf0dad41181 53 lcd.printf("Inicializando...");
fpachays 0:8bf0dad41181 54 wait(2);
fpachays 0:8bf0dad41181 55 row++;
fpachays 0:8bf0dad41181 56 lcd.locate(col,row);
fpachays 0:8bf0dad41181 57 lcd.printf("Inicializando...");
fpachays 0:8bf0dad41181 58 wait(2);
fpachays 0:8bf0dad41181 59 row++;
fpachays 0:8bf0dad41181 60 lcd.locate(col,row);
fpachays 0:8bf0dad41181 61 lcd.printf("Inicializando...");
fpachays 0:8bf0dad41181 62 }
fpachays 0:8bf0dad41181 63 //Secuencia para mostrar distancia según su rango
fpachays 0:8bf0dad41181 64 void mostrar(char *str, int distancia)
fpachays 0:8bf0dad41181 65 {
fpachays 0:8bf0dad41181 66 //lcd.setBacklight(TextLCD::LightOn);
fpachays 0:8bf0dad41181 67 lcd.cls();
fpachays 0:8bf0dad41181 68 lcd.locate(0, 0);
fpachays 0:8bf0dad41181 69 lcd.printf(str);
fpachays 0:8bf0dad41181 70 lcd.locate(0, 1);
fpachays 0:8bf0dad41181 71 lcd.printf("Distancia: %d",distancia);
fpachays 0:8bf0dad41181 72 }
fpachays 0:8bf0dad41181 73 //Determinación de selector
fpachays 0:8bf0dad41181 74 char determinarSelector()
fpachays 0:8bf0dad41181 75 {
fpachays 0:8bf0dad41181 76 char selector;
fpachays 0:8bf0dad41181 77 if(Infra == 0) { //sensor infarojo detecta obstaculo
fpachays 0:8bf0dad41181 78 d = 4;
fpachays 0:8bf0dad41181 79 selector = 'd';
fpachays 0:8bf0dad41181 80 } else if(Infra == 1) { //no detecta obstaculo
fpachays 0:8bf0dad41181 81 d =ultra.distance(1);
fpachays 0:8bf0dad41181 82 if(d>4 && d<=20) { //distamcia entre 4 y 20
fpachays 0:8bf0dad41181 83 selector = 'a';
fpachays 0:8bf0dad41181 84 } else if(d>20 && d<= 40) { //entre 20 y 40
fpachays 0:8bf0dad41181 85 selector = 'b';
fpachays 0:8bf0dad41181 86 } else if(d > 40) { //distacia mayor a 40
fpachays 0:8bf0dad41181 87 selector = 'c';
fpachays 0:8bf0dad41181 88 }
fpachays 0:8bf0dad41181 89 }
fpachays 0:8bf0dad41181 90 //pc.printf("selector: %c\r\n",selector);
fpachays 0:8bf0dad41181 91 // pc.printf("Distancia: %d\r\n",d);
fpachays 0:8bf0dad41181 92
fpachays 0:8bf0dad41181 93 return selector;
fpachays 0:8bf0dad41181 94 }
fpachays 0:8bf0dad41181 95 //rutina principal
fpachays 0:8bf0dad41181 96 int main()
fpachays 0:8bf0dad41181 97 {
fpachays 0:8bf0dad41181 98 setup();
fpachays 0:8bf0dad41181 99 pc.baud(115200); // Velocidad de Transmisión
fpachays 0:8bf0dad41181 100 pc.printf("Inicio\n");//Mensaje de Incio de lectura de diastanciaen en pantalla PC
fpachays 0:8bf0dad41181 101 while(1) { // Para que se ejecute siempre
fpachays 0:8bf0dad41181 102 char selector = determinarSelector();
fpachays 0:8bf0dad41181 103 switch(selector) {
fpachays 0:8bf0dad41181 104 case 'a' : //distancia entre 4 y 20
fpachays 0:8bf0dad41181 105 Naranja = 1;
fpachays 0:8bf0dad41181 106 Azul = 0;
fpachays 0:8bf0dad41181 107 Verde = 0;
fpachays 0:8bf0dad41181 108 Rojo = 0;
fpachays 0:8bf0dad41181 109 mostrar(array[0], d);
fpachays 0:8bf0dad41181 110 break;
fpachays 0:8bf0dad41181 111 case 'b' ://dist. entre 20 y 40
fpachays 0:8bf0dad41181 112 Azul = 1;
fpachays 0:8bf0dad41181 113 Naranja = 0;
fpachays 0:8bf0dad41181 114 Verde = 0;
fpachays 0:8bf0dad41181 115 Rojo = 0;
fpachays 0:8bf0dad41181 116 mostrar(array[1], d);
fpachays 0:8bf0dad41181 117 break;
fpachays 0:8bf0dad41181 118 case 'c' :// dist. > 40
fpachays 0:8bf0dad41181 119 Verde = 1;
fpachays 0:8bf0dad41181 120 Azul = 0;
fpachays 0:8bf0dad41181 121 Naranja = 0;
fpachays 0:8bf0dad41181 122 Rojo = 0;
fpachays 0:8bf0dad41181 123 mostrar(array[2], d);
fpachays 0:8bf0dad41181 124 break;
fpachays 0:8bf0dad41181 125 case 'd' :// entre 0 y 4
fpachays 0:8bf0dad41181 126 Verde = 0;
fpachays 0:8bf0dad41181 127 Azul = 0;
fpachays 0:8bf0dad41181 128 Naranja = 0;
fpachays 0:8bf0dad41181 129 Rojo = 1;
fpachays 0:8bf0dad41181 130 mostrar(array[3], d);
fpachays 0:8bf0dad41181 131 break;
fpachays 0:8bf0dad41181 132 default :// Si no cae en ningún rango anterior; señal de alrma mal funcionamiento sensores (endendido de 4 leds al mismo tiempo).
fpachays 0:8bf0dad41181 133 Verde = 1;
fpachays 0:8bf0dad41181 134 Azul = 1;
fpachays 0:8bf0dad41181 135 Naranja = 1;
fpachays 0:8bf0dad41181 136 Rojo = 1;
fpachays 0:8bf0dad41181 137 break;
fpachays 0:8bf0dad41181 138 }
fpachays 0:8bf0dad41181 139 wait(1); //Espere 5 seg
fpachays 0:8bf0dad41181 140 }
fpachays 0:8bf0dad41181 141
fpachays 0:8bf0dad41181 142 }