Seleccionar página

HC-SR04 Arduino – Tutorial Con Código Incluido

por | Sep 18, 2014 | Tutoriales de Arduino

Sensor HC-SR04 Arduino

El sensor HC-SR04 es uno de los dispositivos más utilizados por los usuarios de Arduino. Se trata de un pequeño módulo de ultrasonidos bastante simple con el que se pueden hacer desde detectores de obstáculos hasta un pequeño radar de andar por casa con unas pocas líneas de código (si todavía no tienes el tuyo puedes adquirir un HC-SR04 a través de mi link de referido por un precio irrisorio).

En este post te explicaré el funcionamiento de este sensor ultrasónico de Arduino y te proporcionaré un código comentado para que lo puedas aplicar en tus proyectos.

El Sensor Ultrasónico HC-SR04

Lo primero que deberías pensar antes de ponerte a utilizar este o cualquier otro sensor de Arduino es si te va a servir para el proyecto que estás llevando a cabo. Para ello, debes entender el funcionamiento de los sensores ultrasónicos y conocer sus características técnicas (el Datasheet).

Funcionamiento

El funcionamiento del HC-SR04 es realmente simple y se basa en un sistema de ecos:

  1. Se envía un pulso digital alto (de al menos 10μs) al pin del disparador (Trig).
  2. El sensor ultrasónico lanza 8 ondas de 40kHz.
  3. Se establece en alto la señal de eco (Echo) hasta que se recibe el rebote las ondas.
  4. Se cuenta el tiempo que tardó en recibirse la señal.

Sabiendo que la velocidad del sonido en el aire es aproximadamente de 340m/s y conociendo el tiempo que ha tardado en ir volver la onda, se calcula la distancia.

Características

  • Voltaje de trabajo: 5V.
  • Corriente de trabajo: 15mA.
  • Frecuencia de trabajo: 40Hz.
  • Distancia máxima: 4m.
  • Distancia mínima: 2cm.
  • Ángulo de apertura: 15º.
  • Precisión: 3mm.

Como puedes ver, los valores son perfectos para acoplar el sensor ultrasónico HC-SR04 con Arduino directamente (sin necesidad de circuitería intermedia).

Un dato importante que debes tener en cuenta para evitar medidas erróneas es el tiempo de cada ciclo de medida. Lo recomendable es que dejes al menos 60ms entre cada toma de datos (lo puedes hacer con un simple delay).

Código Del Sensor Ultrasónico HC-SR04

/*Pines a utilizar por Arduino. Puedes modificarlos por los pines digitales que desees*/

int Trig=4;
int Echo=3;

//Variable en la que se va a almacenar el valor correspondiente a la distancia
int Dist;

void setup() {

pinMode (Trig, OUTPUT);
pinMode (Echo, INPUT);

}

//Este módulo calcula y devuelve la distancia en cm del sensor ultrasónico arduino.
/*
Puedes poner el código del módulo directamente en el loop o utilizar el módulo
para reducir el número de líneas de código del loop o reutilizar el código
*/
void ultrasonido (int &Distancia){

//Para estabilizar el valor del pin Trig se establece a LOW
digitalWrite (Trig, LOW);
delay(10);

//Se lanzan los 8 pulsos
digitalWrite (Trig, HIGH);
delay(10);
digitalWrite (Trig, LOW);

/*
Se mide el tiempo que tarda la señal en regresar y se calcula la distancia.

Observa que al realizar pulseIn el valor que se obtiene es tiempo, no distancia

Se está reutilizando la variable Distancia.
*/

Distancia= pulseIn (Echo, HIGH);
Distancia=Distancia/58;

delay(100);

}

void loop() {

ultrasonido (Dist);

delay (250);
}

Espero que este post te haya sido útil y que te animes a probar este sensor con tu Arduino.

El código es muy básico (como has podido ver) y sin duda son muchas las mejoras que se pueden realizar. Una de las que yo suelo utilizar consiste tomar varias medidas y hacer la mediana de los valores obtenidos para conseguir un poco más de precisión. Eso lo dejo a tu elección.

Si utilizas un código diferente, se te ocurre alguna mejora o simplemente quieres contar tu experiencia o tus dudas con este sensor ultrasónico, deja un comentario.

Actualmente me dedico, entre otras cosas, a crear contenidos sobre Arduino y otros dispositivos eléctricos. Me encanta todo lo relacionado con el “Universo Maker”.

Siempre estoy activo en los comentarios. Si tienes cualquier pregunta, no dudes en dejármela en los comentarios. Intentaré responderte lo antes posible… Un abrazo smile

Enrique Romero,

Autor del post.

¿No quieres perderte nada? ¡Suscríbete!

60 Comentarios

  1. Hola, es alucinante lo que se puede hacer con arduio y gente como tu que ayuda a quien puede. Quiero empezar en este mundillo. Tengo una consulta generica sobre si se puede o no hacer una cosa.
    arduino uno con cuatro sensores HC-SR04 puestos perpendicularmente. esta placa conectada a un Conjunto Receptor + Emisor RF 433Mhz y al receptor otro arduino uno con 4 leds que correspondan a cada uno de los sensores, de tal forma que si se activa un HC-SR04 a una determinada distancia, se ilumine el led correspondiente en el lado del receptor. Para avisar de que por ese lado hay algo a menos de x cm de distancia y se encienda el led correspondiente a ese lado. Seria posible solo usando dos placas uno (o la que fuese)? o necesitaria una placa para cada sensor? Si es posible ya me buscaria la vida en encontrar codigos y demas, pero si no esposible ya no me complico la vida, gracias

    Responder
    • Buenas cvsecar,

      Sin problema. De hecho, lo puedes hacer hasta con una única placa.

      Un saludo, Enrique.

      Responder
      • Muchas gracias Enrique por tu ayuda. Ahora empezara a buscar info de como hacerlo y probablemente te molestare en algun momento con alguna duda irresoluble de facil solucion, jaja. De nuevo gracias y felices fiestas.

      • Estaré encantado de intentar responderla cvsecar. smile

        Felices fiestas para ti también. bigsmile

        Un abrazo, Enrique.

  2. Hola antes que nada gracias por las publicaciones son muy utiles te hago una consulta sabes de como se puede capturar la parte decimal de las mediciones, si es asi podrias mostrar un codigo de ejemplo por favor desde ya muchas gracias

    Responder
    • Buenas Jose,

      Puedes hacerlo de varias maneras. Se me ocurre que puedes simplemente desplazar bits. Te dejo un post con más información.

      Un saludo, Enrique.

      Responder
  3. Hola que tal Enrique.

    Estoy haciendo un proyecto de llenado de un tanque. Y quiero utilizar este sensor, de forma en la cual me vaya marcando la distancia en que se va bajando el nivel de agua de dicho tanque. Pero no se que programarlo de forma correcta ya que no tengo experiencia en esta materia.

    Me podrias dar una orientación. Por favor.

    Besos. 😊

    Responder
    • Buenas Meli,

      Con ligeros cambios, el código que tienes en el post debería valerte. Lo que no sé es si te servirá el módulo para lo que quieres hacer. Las ondas tienen que rebotar en el agua y puede que eso te de problemas.

      Un saludo, Enrique.

      Responder
  4. Hola,

    Tengo un problema que espero sea una tontería. A ver si puedes ayudarme:

    Estoy trabajando con 2 sensores de ultrasonidos (HC-SR04), hay algun inconveniente en computar ambos datos a la vez?

    Os pongo un trozo de código aclarativo:
    Code: [Select]

    como puedes ver, d2 está comentado y fijado a un valor 100, porque no hay manera que me lea el pulso la funcion pulseIn(). Lo raro es que he hecho copiar-pegar con el primer sensor que sí funciona.
    Si hago funcionar solo un sensor (cualquiera de los 2), me lo lee. Pero ambos a la vez, no.
    puede el Arduino leer ambos datos a la vez? cada ‘X microsegundos’? o el sensor A debe leer cada 10us y el B cada 20us?

    (Todos los cables estan bien contectados, los pines bien declarados y el ambos sesnsores funcionan bien)

    ¿¿Alguna idea?? Me estoy volviendo loco

    Responder
    • Buenas David,

      Puede que estés recibiendo falsos positivos, es decir, que la onda que genera un sensor (y sus rebotes) la esté recibiendo el otro sensor. Prueba a distanciar las medidas con un delay() y pon el código de captación de valores justo después de activar el trig (no pongas código en medio porque aumentas el tiempo que tarda en leer tu placa).

      Un saludo, Enrique.

      Responder
      • Se estan interfiriendo los sensores entre ellos lo que pasa es que cuando sale la señal de uno de ellos en ese momento empieza a correr un pulso en alto y este se corta al llegar la señal de rebote lo que te pasa es que la señal de rebote esta llegando a ambos al mismo tiempo por que uno de ellos esta mas proximo a un objeto lo que tenes que hacer es disparar uno y luego de capturar la medida disparar el segundo y una vez tengas la medida del segundo presentar las mediciones ya me paso eso por eso te lo digo. Mucha suerte

  5. Que tal Enrique, buena aportación.
    Y por ejemplo, para que el sensor dé mediciones precisas, se me ocurre hacer un promedio de las primeras 15 lecturas y mostrar en pantalla solo el promedio, trato de hacer eso y me devuelve en pantalla el resultado de cada medición, ¿Cómo puedo resolver eso?.
    Saludos.

    Responder
    • Buenas Pepe,

      Puedes almacenar los resultados en un vector, sumar los resultados y dividir entre el número de datos.

      Un saludo, Enrique.

      Responder
  6. Hola Enrique
    Gracias por tu gran aportación.

    Esoy probando el HC-sr04, para detectar olivos y almendros en el campo y no va bien.
    Sólo detecta si está a menos de 2 metros y si el ramaje es bastante espeso. ¿Que aconsejas?

    Estoy mirando en SRF08, pero es caro y me da que no va a ser la solución?

    Quizá tendría que probar con otros tipos de sensores??

    GRacias

    Responder
    • Buenas Luis,

      El rango del sensor que estás probando no es suficiente :/. De cualquier forma, tampoco creo que ese tipo de sensores te vaya a proporcionar datos muy precisos aunque estén dentro del rango.

      No he trabajado con sensores para distancias tan lejanas, así que no puedo darte un nombre de “algo” que vaya a solucionar tu problema :/. Si tuviera que hacerlo yo, buscaría alguna solución tipo GPS.

      Lamento no ser de más ayuda. sad

      Un saludo, Enrique.

      Responder
  7. Hola, Enrique.

    Creo que tu código tiene un error y es que para enviar los 8 pulsos debe darse un Trigger high durante 10 microsegundos, pero estás usando delay(10) que en Arduino serían 10 ms, es decir 1000 veces más. Lo correcto sería delayMicroseconds(10)

    Gracias por el aporte.

    Responder
  8. Hola!
    Disculpa estoy trabajando en un Robot Esquiva Obstáculos sin embargo no parece funcionar y no tengo idea de cuál sea el error pues no tengo experiencia utilizando arduino y conseguí un código. Estoy utilizando el L293D para el control de los motores, un Arduino MEGA y este sensor HC-SR04. Podrás ayudarme? sad

    Responder
    • Buenas Sof,

      Intentaré ayudarte con todas las dudas puntuales que te puedan ir surgiendo. smile

      Un saludo, Enrique.

      Responder
  9. hola
    necesito ayuda estoy haciendo un proyecto de bachillerato que consiste en programar un pequeño robot de dos ejes con placa arduino, un sensor de ultrasonidos HC-SRO4 y dirigido con infrarrojos. El problema que tengo es el siguiente que el código que he hecho me funciona bien exceptuando una cosa el ULTRASONIDOS que le mando unas instrucciones y me hace otras. Os adjunto el código completo para que lo miréis porfavor necesito solucionar eso, porque lo tengo que entregar dentro de poco.

    Código:

    #include //libreria para infrarojos
    #include // libreria para ultrasonidos
    Ultrasonic ultrasonic(9,8);// trigger pin 8, echo pin 9

    #define IRPIN 2 //pin del receptor de infrarojos.

    NECIRrcv ir(IRPIN);

    //pins dels motors
    #define motor1Pin1 5 //B-1A
    #define motor1Pin2 6 //B-1B
    #define motor2Pin1 3 //A-1B
    #define motor2Pin2 10 //A-1A

    //codis dels botons del comandament IR
    #define endavant 3877175040 // pulsamos el numero 4 y va para adelante
    #define endarrere 2907897600 // pulsamos el numero 6 y va para atras
    #define esquerra 4144561920 // pulsamos el numero 8 y va para la derecha
    #define dreta 2774204160 // pulsamos el numero 2 y va para la izquierda
    #define parada 3810328320 // pulsamos el numero 5 y para

    unsigned long ircode; //variable para almacenar el codigo recibido

    void setup() {
    //declaració dels motors com a sortides
    pinMode (motor1Pin1,OUTPUT);
    pinMode (motor1Pin2,OUTPUT);

    pinMode (motor2Pin1,OUTPUT);
    pinMode (motor2Pin2,OUTPUT);

    ir.begin(); //comiença la recepcion infraroja

    }

    void loop() {

    if (ir.available()) // mientras el sensor este disponible
    {
    // leemos i mantenemos el codigo en la variable ircode
    ircode = ir.read();
    if (ircode==endavant) ENDAVANT(); //si el codigo recibido es adelante ves hacia adelante
    if (ircode==endarrere) ENDARRERE();//si el codigo recibido es atras ves hacia atras
    if (ircode==esquerra) ESQUERRA();//si el codigo recibido es izquierda ves hacia izquierda
    if (ircode==dreta) DRETA();//si el codigo recibido es derecha ves hacia derecha
    if (ircode==parada) PARADA();//si el codigo recibido es parar, parate
    }

    unsigned int distancia = ultrasonic.Ranging(CM);

    if ( distancia < 10 ) // si la distancia es 10
    {
    PARADA(); // para
    delay(2000);// espera 2 segundos
    ENDARRERE();// ves hacia atras (AQUI TENGO EL PROBLEMA EN VEZ DE IR HACIA ATRAS COMO LE INDICO GIRA A DERECHA)

    }
    }

    void ENDARRERE() //anar endarrere/atras
    {
    digitalWrite (motor1Pin1,LOW);
    digitalWrite (motor1Pin2,HIGH);
    //analogWrite (motor1Pwm,250);
    digitalWrite (motor2Pin1,HIGH);
    digitalWrite (motor2Pin2,LOW);
    //analogWrite (motor2Pwm,250);
    }

    void ESQUERRA() //anar esquerra/izquierda
    {
    digitalWrite (motor1Pin1,HIGH);
    digitalWrite (motor1Pin2,LOW);
    //analogWrite (motor1Pwm,250);
    digitalWrite (motor2Pin1,HIGH);
    digitalWrite (motor2Pin2,LOW);
    //analogWrite (motor2Pwm,250);
    }
    void DRETA() //anar dreta/derecha
    {
    digitalWrite (motor1Pin1,LOW);
    digitalWrite (motor1Pin2,HIGH);
    //analogWrite (motor1Pwm,250);
    digitalWrite (motor2Pin1,LOW);
    digitalWrite (motor2Pin2,HIGH);
    //analogWrite (motor2Pwm,250);
    }
    void PARADA() //ir parada/parar
    {
    digitalWrite (motor1Pin1,LOW);
    digitalWrite (motor1Pin2,LOW);
    //analogWrite (motor1Pwm,0);
    digitalWrite (motor2Pin1,LOW);
    digitalWrite (motor2Pin2,LOW);
    //analogWrite (motor2Pwm,0);
    }
    void ENDAVANT() //ir endavant/adelante
    {
    digitalWrite (motor1Pin1,HIGH);
    digitalWrite (motor1Pin2,LOW);
    //analogWrite (motor1Pwm,250);
    digitalWrite (motor2Pin1,LOW);
    digitalWrite (motor2Pin2,HIGH);
    //analogWrite (motor2Pwm,250);
    }

    Os adjunto imágenes para que podáis ver la conexión.

    Gracias.
    Imágenes adjuntadas Imágenes adjuntadas
    Tipo de archivo: jpg 1.jpg (85.7 KB, 2 visitas)
    Tipo de archivo: jpg 2.jpg (89.0 KB, 2 visitas)
    Tipo de archivo: jpg 3.jpg (92.4 KB, 2 visitas)
    Tipo de archivo: jpg 4.jpg (86.4 KB, 2 visitas)

    Responder
    • Buenas Gato,

      Disculpa la tardanza en contestar, me has pillado en unas fechas un poco malas.

      La verdad es que no consigo visualizar las imágenes y, por lo que he visto del código, no parece que el problema esté ahí, más parece un problema de conexión (aunque tendría que montarlo y testearlo para poder asegurártelo), pero no sé qué tipo de motores utilizas, si estás utilizando alguna shield… uneasy

      Responder
  10. Hola Enrique, en estos momentos mi grupo esta haciendo un trabajo con arduino, trata que el arduin (El robot) y lo que tiene que hacer es buscar onda de calor y acercarse a apagar-la pero todo automáticamente, pro no sabemos como hacerlo nos podrías ayudar.
    Gracias por tu atención.

    Responder
    • Buenas Eduardo,

      Puedo echaros una mano. smile

      Un saludo.

      Responder
      • Hola enrique tengo problema con un coche de dos ejes con placa arduino me puedes ayudar

  11. Buenas amigo, muy buena info, y para prender un motor cuando el sensor detecte un objeto como sería?

    Responder
    • Buenas Julio,

      Basta con que almacenes la distancia que ha medido el sensor y la compares con una variable límite que tú elijas (la que establece la distancia crítica a la que consideras que se ha detectado el objeto). Una vez superado ese valor, activas el pin asociado al motor.

      Un saludo, Enrique.

      Responder
  12. disculpa soy un principiante de electronica y tengo como tarea hacer el radar pero con dos sensores que reconozcan el objeto, es decir un sensor frente a otro pero que grafiquen en un solo radar

    Responder
    • podrias ayudarme un poco con esto si no es mucha molestia

      Responder
      • Buenas Edgar,

        Intentaré ayudarte con todas las dudas puntuales que te vayan surgiendo.

        Un saludo, Enrique.

  13. Hola tengo algunas dudas:
    -Habria algun tipo de sensor que pudiera medir entre 10-20 metros
    -Lo que yo necesito es medir distancia al agua, habria algun problrma.
    Muchas gracias, espero respuesta

    Responder
    • Buenas Patt,

      No conozco el nombre de ninguno que trabaje a esas distancias (aunque seguro que los hay).

      Respecto a la distancia al agua, no lo he probado pero es muy probable que tengas problemas con las lecturas. Yo intentaría medir la variable que quieres de alguna otra forma antes que con ultrasonidos.

      Un saludo, Enrique.

      Responder
  14. Que tal el.programa que dejaste en el post ya saca la mediana y si no es así como puedo hacer para sacar el promedio de 10 muestras.

    Responder
    • Buenas Enrique,

      Puedes recorrer los valores y ordenarlos de menor a mayor. El que esté en medio será la mediana.

      Un saludo, Enrique.

      Responder
  15. buenos días como hago pra conectar un sensor ultrasonico hc-sr04 con un arduino sheld ethernet porque lo he intentado con una programacion y me copila pero el sensorno mide la distancia siempre permanece en 0.00

    Responder
    • Buenas Fabio,

      Me encantaría ayudarte pero con esos datos es un poco complicado. Te diría que revises bien los pines (que hagan buena conexión) porque es la causa de la mayoría de problemas (sobre todo si crees que el código está bien implementado).

      Un saludo, Enrique.

      Responder
  16. No estoy totalmente seguro pero creo que en el código los 8 pulsos del trigger solo duran 10 microsegundos y debería implementarse con delayMicroseconds(10).
    Saludos, buen tutorial

    Responder
    • Estoy de acuerdo con vos, la unidad de tiempo de delay es en milisegundos, y el sensor funciona con microsegundos.
      Abrazo

      Responder
  17. Antes que nada agradecerte por tus aportes, están muy explicados.

    En segundo: Quiero poner en mi cuarto un sensor ultrasonico (hc-sr04) para controlar la luz de mi cuarto. Lo que quiero hacer es que cuando alguien pase por el marco el de la puerta se encienda la luz. Solo que tengo un problema con mi código, la luz se apaga después de ciertos mili-segundos y lo que quiero es que se mantenga encendido hasta que yo pulse un interruptor. Espero me puedan dar alguna idea, GRACIAS.

    Responder
    • Buenas Francisco,

      Para algo así, yo utilizaría un sensor de obstáculos con salida digital a 5V cuando se supera un cierto umbral establecido por un potenciómetro y las interrupciones de tu placa Arduino.

      Un saludo, Enrique.

      Responder
  18. hola!!! tengo una pregunta como puedo controlar mas de 2 sensores ultrasonicos en un arduino ??

    Responder
    • Buenas,

      Puedes conectarlos de la misma forma que utilizarías uno único, pero utilizando distintos pines.

      Un saludo, Enrique.

      Responder
  19. Buenas tardes amigos, disculpen quien sabe programa en ccs necesito un programa para pic 18f4550 con hc-sr04 que voy a usar como radar pero e compilado varios programas y no me captas el sensor las distancias si alquien tiene un programa en ccs para que me ayude con esto .
    gracias.

    Responder
  20. hola, una consulta puedo utilizar 2 sensores ultrasonicos en un solo arduino y como lo haria
    gracias por las respuestas

    Responder
    • Buenas Yoel,

      Al final, el HC-SR04 no deja de ser “dos sensores”, uno que recibe y otro que emite. Puedes utilizar dos y conectar en uno el pin de recibir señal y en el otro el de enviarla.

      Un saludo, Enrique.

      Responder
  21. amigo una pregunta, se puede hacer una medicion de distancia con dos sensores, es decir, que un sensor sea el emisor de la onda y el otro el recepto de la onda, y asi calcular tiempo en que se demora la onda en traspasar un objeto por ejemplo. saludos

    Responder
    • Buenas,

      No deberías tener ningún problema. De hecho, el propio HC-SR04 tiene un emisor y un receptor.

      Un saludo, Enrique.

      Responder
  22. Podrías compartir la librería que utilizaste …

    Responder
    • Buenas Jorge,

      Normalmente no utilizo librerías para trabajar con este dispositivo. uneasy

      Un saludo, Enrique.

      Responder
  23. Hola como puedo hacer para que calcule el tiempo de llegda conforme a la distancia???

    Responder
    • Buenas Oscar,

      Cuando utilizas la función PulseIn lo que estás haciendo es calcular el tiempo que tarda la señal en llegar y de ahí calculas la distancia, por lo que no necesitas calcularlo, ya lo tienes. Échale un ojo a la función y seguro que lo sacas. Si no, no dudes en volver a preguntar.

      Un saludo, Enrique.

      Responder
  24. Hola, Quisiera saber si me puedes ayudar en algo. Estoy haciendo una plataforma robotica que esta siendo controlada desde una pagina web, y estoy utilizando la arduino 1 con el shield de ethernet. Pero no he logrado encontrar la forma de enviar los datos de los sensores a la pagina, ya que de la unica manera que me los envia es haciendo uso del cable serial. tu sabes como eliminar este problema? Muchisimas gracias!!!

    Responder
    • Buenas Gisel,

      Espero que te ayude este post.

      Un saludo, Enrique.

      Responder
  25. Hola Enrique, me ha servido mucho tu artículo y soy fan de lo que escribes. Yo lo único que agregaría para complementar tu trabajo es agregar una corrección a la distancia con temperatura., usando el LM35 y un poco de código extra, mira la fórmula es:
    V = V0 + 0.6( m/s * °C) * t

    Donde V0 es la velocidad del sonido en el aire a 0°C (331.7m/s).

    Es fácil y agrega un poco más de precisión.

    Responder
    • Buenas Pedro,

      Se pueden hacer muchos tipos de correcciones. Si yo tuviera que centrarme en eso quizás me fijaría más en la humedad que en la temperatura ya que es un factor más crítico y estable para los fenómenos de ondas (además si analizase temperaturas quizás habría que ver también la del propio dispositivo, con ruidos térmicos incluidos).

      Por esto, la corrección que más me gusta por su simplicidad y cercanía a la realidad es realizar un simple ajuste lineal con herramientas del tipo Excel haciendo medidas a distancias conocidas (con una regla milimetrada).

      El caso es que al tratarse de un sistema que ya de por sí es bastante impreciso soy un poco escéptico a la hora de realizar correcciones y me gusta quedarme un poco en lo básico.

      De cualquier forma, muchas gracias por aportar tu comentario y tus conocimientos :).

      Un saludo, Enrique.

      Responder
  26. Gracias por tus manuales de arduino. Son muy didácticos.

    Responder
    • Buenas Dander,

      Gracias a ti por dejar tu comentario.

      Un saludo, Enrique.

      Responder
  27. Hola que tal, Perdón la molestía!!! pero amm! es urgente… estoy trabajando en un sistema de apoyo al conductor en donde debo instalar 5 ultrasonicos en un automovil y percibir los objetos alrededor dle mismo,cuando probamos los ultrasonicos dentro de un cuarto todo funciona bien… pero cuando lo hacemos en exterior y ya instalados en el auto… hace lecturas malas… que podemos hacer o que nos sugieres??

    Responder
    • Buenas Jenny,

      ¿Cuál es exactamente el problema? ¿Lecturas erróneas cuando el vehículo está en movimiento?

      Un saludo.

      Responder
      • Pues el solo hecho de hacer las mediciones en exteriores manda medidas erroneas he estado leyendo y dicen que incluso la temperatura puede afectar al sensor,el carro no estaba en movimiento pero la diferencia es que estaba midiendo en un lugar sin techo y con solo autos alrededor del vehiculo donde estaban montados los sensores,que me sugeririas? he aplicado la mediana para que pregunte n veces la distancia y que imprima la distancia más repedita pero me comentan que talvez con un filtro pueda eliminar el ruido,sinceramente me urge ayuda!

      • Buenas Jenny,

        La idea del filtro no la entiendo bien. Se suele utilizar un filtro cuando tienes problemas de ruido eléctrico (por ejemplo por el roce de las escobillas de un motor) pero si me tuviera que aventurar diría que tu problema son las múltiples reflexiones que se producen en los vehículos al enviar la onda tu sensor.

        Si es así, tiene difícil solución. Mejoraría consiguiendo sensores más directivos. Para probar que sea esto, puedes intentar espaciar en el tiempo la toma de datos (activar los sensores en intervalos de tiempo más largos) para asegurarte que los datos que estás capturando son los correctos.

        Disculpa la tardanza. Un saludo, Enrique.

    • Hola soy Polux, es la primera vez que leo educachip y viendo la fecha de tu consulta entiendo que llegaré tarde a la solución, pero por si acaso, ahí va mi comentario. El problema es que en tu programa no has delimitado el rango máximo de lectura del sensor y está ” chiflando” ponle que no haga lecturas por encima de 40 cm. pues supongo que los usaras como asistente de aparcamiento. Saludos. Enrique eres un crack…

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

HC-SR04 Arduino – Tutorial Con Código Incluido was last modified: diciembre 14th, 2016 by Enrique
Share This

¿Me ayudas?

Hey! Espero que te esté gustando el artículo. ¿Me ayudarías compartiéndolo con tus amigos? Un pequeño paso para ti, un gran paso para EducaChip. :) ¡Gracias!