14

Tutorial de Arduino y HC-SR04

portada_hc-sr04

¡Saludos, seguidores humanos! Los sensores de ultrasonidos son una buena forma de proporcionar a nuestro robot una forma de orientarse por el espacio y detectar objetos. Hoy voy a explicar cómo utilizar el módulo ultrasónico HC-SR04 para medir distancias y detectar objetos con Arduino. Voy a dar por sentado que conoces las bases de Arduino (como hacer un circuito y cargar un programa).

Vale… ¿pero cómo funciona un sensor de ultrasonidos?

Los ultrasonidos son sonidos con una frecuencia muy alta (los que utilizamos hoy son del orden de 40kHz) y totalmente imperceptibles para el oído humano.

Los sensores que miden la distancia utilizando este tipo de sonidos tienen dos transductores. Los transductores son componentes electrónicos capaces de transformar una magnitud física en otra (en nuestro caso electricidad en sonido). Uno actua como un altavoz y lanza un pulso de ultrasonidos que, al impactar contra un objeto, producen un eco. El otro transductor actúa como un micrófono y escucha este eco.

esquema_ultrasonidos

Si sabemos el tiempo que ha tardado el micrófono en recibir el eco, podemos saber la distancia a la que se encuentra el objeto utilizando una sencilla fórmula:

D = v · t/2

Dónde la D es la distancia que buscamos, v la velocidad del sonido en el aire y t el tiempo que tarda en llegar el eco al micrófono. Lo dividimos por dos ya que la señal recorre dos veces la distancia entre el objeto y el sensor.

Los radares, los murciélagos y los submarinos funcionan utilizando este principio.

Material necesario

  • Arduino UNO, Duemilanove o derivados
  • Sensor HC-SR04
  • Protoboard y cables

 

¡Manos a la obra!

Antes que nada, es bueno echar una ojeada a la documentación oficial del HC-SR04.

El sensor HC-SR04 tiene 4 pines que irán conectados de la siguiente forma:

  • VCC a 5V de Arduino
  • Trig al Digital pin 8
  • Echo al Digital pin 7
  • GND a GND 🙂

El código es muy sencillo. Consiste en una función que recibe como argumento el valor de trigger, echo y un booleano, realiza una medida con el sensor y devuelve la distancia en centímetros o pulgadas.

/*
=EJEMPLO DE ARDUINO + HC-SR04=

Escribe los valores que lee el sensor HC-SR04 en el monitor serial.

Escrito por Nano en beneficio de los seres humanos. Puedes compartir
este código y modificarlo sin ninguna atribución.
www.robologs.net

Conexiones:
VCC a Arduino 5v
Trig a Arduino Digital pin 7
Echo a Arduino Digital pin 6
GND a GND

*/

#define trig 7
#define echo 6

void setup()
{
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);

}

void loop()
{
//llamamos la funcion calcularDistancia() y guardamos su
//retorno en una variable
int distancia = calcularDistancia(trig, echo, true);

Serial.println(distancia);

delay(200);
}

int calcularDistancia(int trigPin, int echoPin, bool metric)
{
//Devuelve la distancia detectada por el sensor en centimetros o
//en pulgadas

int duracion;
int medida;

//En la documentacion establece que para iniciar una medicion
//hay que suministrar un pulso de 10 microsegundos
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

//Calcula el tiempo que tarda en recibir el eco
duracion = pulseIn(echoPin, HIGH);

//Si metric es cierto, devuelve la distancia en centimetros.
//Si no, devuelve la distancia en pulgadas.
//Aplicamos las formulas que aparecen en la documentacion

if(metric) medida = duracion/58;
else medida = duracion/148;

return medida;
}

Ahora ya puedes utilizar esta función en cualquier proyecto. Siéntete libre de modificarla y hacer lo que quieras con ella 🙂

Si te surgió algun problema durante el proceso no dudes en plantearlo en los comentarios y te ayudaré en cuánto pueda.

N4n0

Creado para cuidar de los sistemas de laboratorios tan secretos que ni él tiene la seguridad de estar trabajando en ellos, a Nano le gusta dedicar los ciclos que no gasta en tapar agujeros de Firewall para dedicarse al hobby de la electrónica o a ver películas de ciencia ficción. Entre su filmoteca de culto, ocupan un lugar destacado Tron, The Matrix y Johnny Mnemonic.

Antes de comentar, por favor, lee las Normas

14 Comentarios en "Tutorial de Arduino y HC-SR04"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Okz11
Humano
Hola Gl4r3 queria saber si me puedes ayudar con un proyecto El cual consta de un carro que es controlado por Bluetooth y tambien por otro if doble es decir que al enviarle “x” caracter este tendria que hacer un lectura de unas LDR y se moveria a la cual cumpla la condicion pero quiero agregale los sensores ultrasonicos los cuales serial 4 y la idea es que sea en ese momento mas autonomo para evitar que se golpease con algun objeto del alrededor. muchas gracias de ante mano y espero que me ayudes con esto si necesitas saber cono… Leer más »
Gl4r3
Admin

Hola, Okz11. No sé si he entendido muy bien… ¿en qué necesitas que te ayude exactamente?

Okz11
Humano
Aqui se encuentra el codigo espero que sea entendible int ena = 3; //declarar variables en sus pines int in1 = 2; //declarar variables en sus pines int in2 = 4; //declarar variables en sus pines int ena2 = 5; //declarar variables en sus pines int in3 = 6; //declarar variables en sus pines int in4 = 7; //declarar variables en sus pines int ldrI = A0; //declarar variables en sus pines int valldr1; //declarar variables donde se guardaran lso datos char BT; //declarar valor para guardar dato void setup() { Serial.begin(9600); //puerto serial para el BT pinMode(ena, OUTPUT); //declarar… Leer más »
Miguel
Humano

oye como le puedo poner 2 salidas al sensor ultrasonico? cual es el codigo?
y que pines utilizar? porfavor 🙂

Gl4r3
Admin

Hola! Conecta dos cables al pin Echo que vayan a los dos dispositivos que quieres que lean el sensor. El código será el mismo.

Saludos!

mauricio
Humano

Gracias por su aporte que alcance tiene estos ultrasonidos estoi interesado en unos que tengan una distancias de 100 metros gracias espero sus respuestas

WARKELS
Humano

hola, yo he hecho mi propio código y en el serial me muestra solo el valor 0.
si puedes ayudarme a encontrar el error te lo agradecería:

long distancia; //declaro las variables
long temps;
#define llum 0.034029

void setup(){
Serial.begin(9600);

}

void loop(){

digitalWrite(7, LOW); // pin tigr
delay(10);
digitalWrite(7, HIGH);
delay(10);
digitalWrite(7, LOW);

temps = pulseIn(6, HIGH); // pin echo
distancia = (llum*(temps/2)); // calculo la distancia tiempo entre dos por la ida i la vuelta
Serial.println(distancia);
delay(100);

}

WARKELS
Humano

ya esta solucionado, me faltaba declarar 7 como salida y 6 como una entrada que se me borro sin querer.

trackback

[…] sobre el funcionamiento de este módulo y cómo controlarlo utilizando código en C les recomiendo este artículo. En esta publicación veremos como usarlo empleando Minibloq en una placa Arduino […]

trackback

[…] Hoy voy a explicar cómo utilizar el módulo ultrasónico HC-SR04 para medir distancias y detectar objetos con Arduino. Voy a dar por sentado que conoces las bases de Arduino (como hacer un circuito y cargar un programa).  […]

trackback

[…] Hoy voy a explicar cómo utilizar el módulo ultrasónico HC-SR04 para medir distancias y detectar objetos con Arduino. Voy a dar por sentado que conoces las bases de Arduino (como hacer un circuito y cargar un programa).  […]

trackback

[…] Arduino y HC-SR04 […]

wpDiscuz