Nota

¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte de Expertos: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Previsualizaciones Exclusivas: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones y Sorteos Festivos: Participa en sorteos y promociones navideñas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

2.2.8 Módulo de Sensor Ultrasónico

Introducción

El sensor ultrasónico utiliza ultrasonidos para detectar objetos con precisión y medir distancias. Envía ondas ultrasónicas y las convierte en señales electrónicas.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/list_2.2.5.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DE COMPONENTES

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Módulo Ultrasónico

COMPRAR

Diagrama Esquemático

../_images/image329.png

Procedimientos Experimentales

Paso 1: Construir el circuito.

../_images/image220.png

Paso 2: Ir a la carpeta del código.

cd ~/raphael-kit/c/2.2.8/

Paso 3: Compilar el código.

gcc 2.2.8_Ultrasonic.c -lwiringPi

Paso 4: Ejecutar el archivo ejecutable.

sudo ./a.out

Cuando se ejecuta el código, el módulo del sensor ultrasónico detecta la distancia entre el obstáculo delante y el propio módulo, luego el valor de la distancia se imprimirá en la pantalla.

Nota

Si no funciona después de ejecutar, o hay un mensaje de error: "wiringPi.h: No such file or directory", por favor consulta Instalar y verificar WiringPi.

Código

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

#define Trig    4
#define Echo    5

void ultraInit(void)
{
    pinMode(Echo, INPUT);
    pinMode(Trig, OUTPUT);
}

float disMeasure(void)
{
    struct timeval tv1;
    struct timeval tv2;
    long time1, time2;
    float dis;

    digitalWrite(Trig, LOW);
    delayMicroseconds(2);

    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig, LOW);

    while(!(digitalRead(Echo) == 1));
    gettimeofday(&tv1, NULL);

    while(!(digitalRead(Echo) == 0));
    gettimeofday(&tv2, NULL);

    time1 = tv1.tv_sec * 1000000 + tv1.tv_usec;
    time2  = tv2.tv_sec * 1000000 + tv2.tv_usec;

    dis = (float)(time2 - time1) / 1000000 * 34000 / 2;

    return dis;
}

int main(void)
{
    float dis;
    if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen
        printf("setup wiringPi failed !");
        return 1;
    }

    ultraInit();

    while(1){
        dis = disMeasure();
        printf("%0.2f cm\n\n",dis);
        delay(300);
    }

    return 0;
}

Explicación del Código

void ultraInit(void)
{
    pinMode(Echo, INPUT);
    pinMode(Trig, OUTPUT);
}

Inicializa el pin del sensor ultrasónico; mientras tanto, configura Echo como entrada y Trig como salida.

float disMeasure(void){};

Esta función se utiliza para realizar la función del sensor ultrasónico calculando la distancia de detección de retorno.

struct timeval tv1;
struct timeval tv2;

Struct timeval es una estructura utilizada para almacenar la hora actual. La estructura completa es la siguiente:

struct timeval
{
__time_t tv_sec;        /* Seconds. */
__suseconds_t tv_usec;  /* Microseconds. */
};

Aquí, tv_sec representa los segundos que Epoch pasó cuando se creó struct timeval. Tv_usec representa microsegundos o una fracción de segundos.

digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);

Se está enviando un pulso ultrasónico de 10us.

while(!(digitalRead(Echo) == 1));
gettimeofday(&tv1, NULL);

Este bucle vacío se utiliza para asegurar que cuando se envía la señal de activación, no haya señal de eco interferente y luego obtener la hora actual.

while(!(digitalRead(Echo) == 0));
gettimeofday(&tv2, NULL);

Este bucle vacío se utiliza para asegurar que no se realice el siguiente paso hasta que se reciba la señal de eco y luego obtener la hora actual.

time1 = tv1.tv_sec * 1000000 + tv1.tv_usec;
time2  = tv2.tv_sec * 1000000 + tv2.tv_usec;

Convierte el tiempo almacenado por struct timeval en un tiempo completo en microsegundos.

dis = (float)(time2 - time1) / 1000000 * 34000 / 2;

La distancia se calcula mediante el intervalo de tiempo y la velocidad de propagación del sonido. La velocidad del sonido en el aire es: 34000cm/s.

Foto del Fenómeno

../_images/image221.jpeg