.. note:: ¡Hola! Bienvenidos a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto con otros apasionados. **¿Por qué unirse?** - **Soporte de Expertos**: Soluciona problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **Promociones y Sorteos Festivos**: Participa en sorteos y promociones especiales en días festivos. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy. 3.1.3 Alarma de Reversa =========================== Introducción --------------- En este proyecto, usaremos una pantalla LCD, un zumbador y sensores ultrasónicos para crear un sistema de asistencia de reversa. Podemos colocarlo en un vehículo a control remoto para simular el proceso real de reversa al ingresar a un garaje. Componentes -------------- .. image:: img/list_Reversing_Alarm.png :align: center Diagrama de Circuito ----------------------- El sensor ultrasónico detecta la distancia entre él y el obstáculo, la cual se mostrará en el LCD en forma de código. Al mismo tiempo, el sensor ultrasónico emite una señal sonora de advertencia a diferentes frecuencias, según el valor de la distancia. ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO17 Pin 11 0 17 SDA1 Pin 3 SCL1 Pin 5 ============ ======== ======== === .. image:: img/Schematic_three_one3.png :width: 800 :align: center Procedimientos Experimentales -------------------------------- **Paso 1:** Construye el circuito. .. image:: img/image242.png :width: 800 :align: center **Paso 2:** Cambia al directorio. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/3.1.3/ **Paso 3:** Compila. .. raw:: html .. code-block:: gcc 3.1.3_ReversingAlarm.c -lwiringPi **Paso 4:** Ejecuta. .. raw:: html .. code-block:: sudo ./a.out Al ejecutar el código, el módulo sensor ultrasónico detectará la distancia al obstáculo y luego mostrará la información en el LCD1602. Además, el zumbador emitirá un tono de advertencia cuya frecuencia cambiará según la distancia. .. note:: * Si aparece el error ``wiringPi.h: No such file or directory``, consulta :ref:`faq_c_nowork`. * Si recibes el error ``Unable to open I2C device: No such file or directory``, debes habilitar I2C y revisar si el cableado es correcto en :ref:`i2c_config`. * Si el código y el cableado están correctos pero la pantalla LCD no muestra contenido, ajusta el potenciómetro en la parte trasera para aumentar el contraste. **Código** .. note:: El siguiente código está incompleto. Para ver el código completo, usa el comando ``nano 3.1.1_ReversingAlarm.c``. .. code-block:: c #include #include #include #include #include #include #define Trig 4 #define Echo 5 #define Buzzer 0 int LCDAddr = 0x27; int BLEN = 1; int fd; //Aquí está la función de LCD void write_word(int data){...} void send_command(int comm){...} void send_data(int data){...} void lcdInit(){...} void clear(){...} void write(int x, int y, char data[]){...} //Aquí está la función de Ultrasonido void ultraInit(void){...} float disMeasure(void){...} //Aquí está la función principal int main(void) { float dis; char result[10]; if(wiringPiSetup() == -1){ printf("setup wiringPi failed !"); return 1; } pinMode(Buzzer,OUTPUT); fd = wiringPiI2CSetup(LCDAddr); lcdInit(); ultraInit(); clear(); write(0, 0, "Ultrasonic Starting"); write(1, 1, "By Sunfounder"); while(1){ dis = disMeasure(); printf("%.2f cm \n",dis); delay(100); digitalWrite(Buzzer,LOW); if (dis > 400){ clear(); write(0, 0, "Error"); write(3, 1, "Out of range"); delay(500); } else { clear(); write(0, 0, "Distance is"); sprintf(result,"%.2f cm",dis); write(5, 1, result); if(dis>=50) {delay(500);} else if(dis<50 & dis>20) { for(int i=0;i<2;i++){ digitalWrite(Buzzer,HIGH); delay(50); digitalWrite(Buzzer,LOW); delay(200); } } else if(dis<=20){ for(int i=0;i<5;i++){ digitalWrite(Buzzer,HIGH); delay(50); digitalWrite(Buzzer,LOW); delay(50); } } } } return 0; } **Explicación del Código** .. code-block:: c pinMode(Buzzer,OUTPUT); fd = wiringPiI2CSetup(LCDAddr); lcdInit(); ultraInit(); En este programa, aplicamos componentes previamente usados de manera conjunta: zumbador, LCD y ultrasonido. Se inicializan de la misma forma que se hizo anteriormente. .. code-block:: c dis = disMeasure(); printf("%.2f cm \n",dis); digitalWrite(Buzzer,LOW); if (dis > 400){ write(0, 0, "Error"); write(3, 1, "Out of range"); } else { write(0, 0, "Distance is"); sprintf(result,"%.2f cm",dis); write(5, 1, result); } Aquí obtenemos el valor del sensor ultrasónico y calculamos la distancia. Si el valor de la distancia supera el rango a detectar, se mostrará un mensaje de error en el LCD. Si el valor de la distancia está dentro del rango, se mostrarán los resultados correspondientes. .. code-block:: c sprintf(result,"%.2f cm",dis); Dado que la salida del LCD solo soporta caracteres, y la variable dis almacena un valor de tipo float, usamos sprintf(). Esta función convierte el valor float a un carácter y lo guarda en la variable string result[]. %.2f indica que se mantendrán dos decimales. .. code-block:: c if(dis>=50) {delay(500);} else if(dis<50 & dis>20) { for(int i=0;i<2;i++){ digitalWrite(Buzzer,HIGH); delay(50); digitalWrite(Buzzer,LOW); delay(200); } } else if(dis<=20){ for(int i=0;i<5;i++){ digitalWrite(Buzzer,HIGH); delay(50); digitalWrite(Buzzer,LOW); delay(50); } } Esta condición de evaluación se usa para controlar el sonido del zumbador. Según la distancia, se divide en tres casos, cada uno con una frecuencia de sonido distinta. Dado que el valor total del delay es de 500 ms, todos los casos proporcionan un intervalo de 500 ms para el sensor ultrasónico.