Nota

¡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 [Aquí] 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

../_images/list_Reversing_Alarm1.png

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

../_images/Schematic_three_one31.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/image2421.png

Paso 2: Cambia al directorio.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.3/

Paso 3: Compila.

gcc 3.1.3_ReversingAlarm.c -lwiringPi

Paso 4: Ejecuta.

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.

Nota

  • Si aparece el error wiringPi.h: No such file or directory, consulta ¿El código en C no funciona?.

  • 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 Configuración de I²C.

  • 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

Nota

El siguiente código está incompleto. Para ver el código completo, usa el comando nano 3.1.1_ReversingAlarm.c.

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>

#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

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.

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.

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.

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.