.. note:: ¡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 [|link_sf_facebook|] y únete hoy mismo. .. _2.2.8_c_pi5: 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. .. image:: ../img/list_2.2.5.png Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ELEMENTOS EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DE COMPONENTES - ENLACE DE COMPRA * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_ultrasonic_sensor` - |link_ultrasonic_buy| Diagrama Esquemático ------------------------ .. image:: ../img/image329.png Procedimientos Experimentales -------------------------------- **Paso 1:** Construir el circuito. .. image:: ../img/image220.png **Paso 2:** Ir a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/c/2.2.8/ **Paso 3:** Compilar el código. .. raw:: html .. code-block:: gcc 2.2.8_Ultrasonic.c -lwiringPi **Paso 4:** Ejecutar el archivo ejecutable. .. raw:: html .. code-block:: 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. .. note:: Si no funciona después de ejecutar, o hay un mensaje de error: \"wiringPi.h: No such file or directory\", por favor consulta :ref:`install_wiringpi_pi5`. **Código** .. code-block:: c #include #include #include #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** .. code-block:: c 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. .. code-block:: c 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. .. code-block:: c struct timeval tv1; struct timeval tv2; Struct timeval es una estructura utilizada para almacenar la hora actual. La estructura completa es la siguiente: .. code-block:: c 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. .. code-block:: c digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); Se está enviando un pulso ultrasónico de 10us. .. code-block:: c 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. .. code-block:: c 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. .. code-block:: c 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. .. code-block:: c 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 ---------------------- .. image:: ../img/image221.jpeg