Midiendo distancia Sensor HC-SR04

Una de las variables mas útiles de medir es distancia, la longitud entre dos puntos.

En este artículo veremos como hacer esto con un sensor de eco usando dos microcontroladores, Arduino primero y luego Teensy 3.0

sensor_eco
El sensor ultrasónico de distancias se puede alimentar con 5V y tiene un rango de de los 2 hasta los 500 cm.

Su funcionamiento se basa en el envío de un pulso de ultrasonidos, la reflexión en un objeto y su recepción para convertirlo en señal eléctrica con ancho de pulso proporcional a la distancia del objeto
Tras el salto los elementos y el procedimiento

Materiales

  • Sensor HC-SR04
  • Mini protoboard
  • Arduino Uno
  • Cable USB para Arduino
  • Notebook con Arduino IDE 1.0.3

Conectando

Esto es bastante directo, indicamos los pines del lado del sensor y su correspondiente del lado Arduino

 

Sensor Arduino
Vcc 5V
GND GND
Trig Pin 12
Echo Pin 13

 

Esta conexión se aprecia en la siguiente figura

Figura 1. Se aprecia la conexión entre Arduino y el sensor de distancia
Figura 1. Se aprecia la conexión entre Arduino y el sensor de distancia

 

El código de este sensor es directo, el siguiente sketch lo obtuvimos de http://trollmaker.com/article3/arduino-and-hc-sr04-ultrasonic-sensor

 

/*
 HC-SR04 Ping distance sensor]
 VCC to arduino 5v GND to arduino GND
 Echo to Arduino pin 13 Trig to Arduino pin 12
 More info at: http://goo.gl/kJ8Gl
 Modified by www.internetdelascosas.cl
 */

#define trigPin 12
#define echoPin 13

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.4;
  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}

La fórmula se explica de la siguiente manera,

Sea Vs la velocidad del sonido en el aire,

Vs = 340 m/s, si lo expresamos en unidades de cm y μs, nos queda de la siguiente manera

Vs = 340 [m/s] * 100[cm/m] * 10^-6 [s/ μs]  = 0,034 cm/μs

En este caso la variable duration,que se mide en μs, se divide por dos porque solo necesitamos la mitad del tiempo que toma en ir y volver

Vs = distance/(duration*0,5)

=> distance = (duration*0,5)* Vs ≈ (duration*0.5) / 29, 4

Esta última es la expresión que usamos en el código

Los valores de distancia se pueden apreciar desde el Arduino IDE, en Tools->Serial Monitor

Usando Teensy

La conexión con un Teensy 3.0 es similar donde hemos usado los pines 14 y 15 como Trig y Echo respectivamente

Conexion con Teensy y sensor de distancia
Conexion con Teensy y sensor de distancia

El código tambien se puede reutilizar con mínimas modificaciones,

en lugar de

#define trigPin 12
#define echoPin 13

usar

const int trigPin = 14;
const int echoPin = 15;

El sketch completo para Teensy queda asi

const int trigPin = 14;
const int echoPin = 15;

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop() {
int duration, distance;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.4;
if (distance >= 200 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}

Hay muchas aplicaciones que podemos hacer partiendo con la conexión de este sensor, pero quizás una de las mas interesantes sea un sensor de estacionamiento.

Los invitamos a plantear sus ideas y proyectos

Author: Manuel Carrasco

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

Deja una respuesta

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