Contenido
1 – Descripción.
El sensor HC-SR04 lo podemos utilizar para medir distancias, dispone de un transmisor que emite ondas sonoras y el receptor las recibe cuando las ondas rebotan en un objeto, el tiempo que transcurre desde que sale la onda hasta que la recibe el receptor se utiliza para calcular la distancia al objeto.
En la imagen de arriba el transmisor esta en la izquierda mientras el receptor esta en la derecha, dispone de 4 pines, dos pines para la alimentación, un pin para indicar cuando quieres que emita el pulso de sonido (Trig), y otro pin que se utiliza para enviar la señal de la recepción del sonido.
Puede detectar objetos desde 2 centímetros hasta 400 cm, con una precisión de 3 mm y un angulo de cobertura de medición de 15 grados.
El funcionamiento de este sensor comienza con la instrucción:
digitalWrite(TriggerPin, HIGH);
En este momento desde el pin «TriggerPin» de nuestra placa deberá salir una señal de 5 voltios y una duración de 10 microSegundos.
Cuando el sensor detecta esta señal desde la membrana «T» emite un onda sonora, esta onda sonora esta compuesta de 8 pulsos de 5 voltios y 40 Herzios cada uno de ellos. Estos 8 pulsos son emitidos desde la membrana del transmisor, rebotados (o no) en el medio físico a detectar y recogidos por la membrana del receptor «R».
Cuando el sensor detecta los 8 pulsos calcula el tiempo que ha tardado desde que las ondas han salido del emisor hasta que las ha recibido el receptor. Una vez sabe el tiempo que ha tardado, desde el pin Echo emitirá una señal de 5 voltios con un ancho proporcional al tiempo calculado.
Cuando vayamos a recoger la señal emitida por el pin Echo del sensor, utilizaremos la instrucción:
Duración = pulseIn(EchoPin,HIGH);
Con esta instrucción transformamos el ancho de la señal de 5 voltios que emite «EchoPin», en microsegundos. En este caso una vez tenemos el valor en microsegundos lo guardamos en la variable «Duración».
2 – Datos técnicos del sensor HC-SR04.
Tensión de trabajo – 5 VDC.
Corriente de trabajo – 15 mA.
Frecuencia de trabajo – 40 Hz
Distancia de medida de 2 cm a 400 cm
Angulo de medida – 15 grados.
Pin Vcc – Entrada de tensión 5 VDC
Pin GND – Entrada de tierra
Pin Trig – Cuando recibe una señal digital emite un sonido.
Pin Echo – Emite una señal digital cuando el receptor recibe el sonido emitido por el emisor.
El esquema el eléctrico de la placa del sensor HC-SR04 es el siguiente:
En el esquema de arriba vemos 3 circuitos integrados, el interior de estos 3 circuitos STC11, TL074 y MAX232 es el siguiente:
El circuito integrado STC11, donde se procesa la información:
Este integrado responde al siguiente diagrama de funciones:
3 – Diagrama de conexión.
Diagrama de conexión eléctrica con la placa NodeMCU.
Diagrama de conexión eléctrica con la placa Arduino Uno.
En este diagrama de conexión tenemos el cableado de tierra, masa o negaivo de color negro, el cableado de positivo o alimentación de color rojo desde donde suministraremos 5 voltios de tensión.
Los dos cables de color azul son destinados para la transferencia de datos, en este caso el GPIO12 o PIN 12 en arduino, estará conectado con el pin «trig» de nuestro sensor ultrasonidos HC-SR04 y cuando este pin reciba tensión con la instrucción siguiente ( la instrucción pertenece al ejemplo de programación más abajo):
digitalWrite(TriggerPin, HIGH);
en ese momento el sensor ultrasonidos emitirá un sonido de 8 pulsos con una frecuencia 40 KHz, el tiempo de disparo para activar el pin «trig» es de 10 µS.
Esta onda de sonido debe ser recogida por el receptor del sensor de ultrasonido, después de calcular el tiempo que ha tardado la onda se emite una señal a través de Echo hacia al GPIO13 o PIN13 en arduino.
pulseIn(EchoPin,HIGH);
Esta instrucción pertenece al codigo de ejemplo más abajo. Con la función pulseIn activamos el PIN13 en arduino o GPIO13 en nodemcu, lo que devuelve esta función es un valor en microsegundos en relación a la señal emitida por el pin Echo del sensor.
4 – Programación.
Este ejemplo es muy básico y cuenta únicamente con el código para poner en marcha el sensor e imprimir resultado, también saber que este código utilizamos un delay en microsegundos de 1000, después terminar el loop y volver a imprimir el nuevo resultado:
//Ejemplo sensor ultrasonidos const int Trigger = 13; const int Echo = 12; long duracion; void setup() { pinMode(Trigger, OUTPUT); pinMode(Echo, INPUT); Serial.begin(115200); } void loop() { digitalWrite(Trigger, LOW); delayMicroseconds(1000); digitalWrite(Trigger, HIGH); delayMicroseconds(10); digitalWrite(Trigger, LOW); duracion = pulseIn(Echo, HIGH); duracion = (duracion / 2.9) / 2; Serial.println(duracion); }
Este ejemplo imprime el resultado en milímetros por el monitor del IDE de arduino. Este código utiliza una función, long Distance(long time), para calcular la distancia, con este código utilizamos un delayMicroseconds de 2:
//Ejemplo de código para utilizarlo con NodeMCU o Arduino Uno const int TriggerPin = 12; //Trig pin const int EchoPin = 13; //Echo pin long Duration = 0;
long Distance(long time)
{
// Calculo de la distancia en mm
// ((time)*(Velocidad del sonido))/ ida y vuelta al objeto) * 10
long DistanceCalc; // Calculation variable
DistanceCalc = ((time /2.9) / 2); // Calculo en mm
//DistanceCalc = time / 74 / 2; // Calculo en pulgadas
return DistanceCalc; // la funcion devuelve el valor en mm
}
void setup(){ pinMode(TriggerPin,OUTPUT); // Trigger es una salida pinMode(EchoPin,INPUT); // Echo es un pin de entrada Serial.begin(115200); // salida por el puerto serial } void loop(){ digitalWrite(TriggerPin, LOW); delayMicroseconds(2); digitalWrite(TriggerPin, HIGH); // Activamos el pin Trigger (pin 12) delayMicroseconds(10); // esperamos 10 microsegundos digitalWrite(TriggerPin, LOW); // Desactivamos el pin Trigger Duration = pulseIn(EchoPin,HIGH); // Activamos el pin Echo (pin 13) // La función pulseIn nos devuelve la duración detectada long Distance_mm = Distance(Duration); // Mediante la duración calculamos la distancia Serial.print("Distance = "); // Escribimos por monitor Serial.print(Distance_mm); Serial.println(" mm"); delay(1000); // Esperamos un segundo }
muchas gracias …muy buen trabajo
me alegro sea de ayuda, un saludo Daniel