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
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
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
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