Tutorial de arduino: Sensores de ultrasonidos para medir la distancia « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

abril 15, 2017

Tutorial de arduino: Sensores de ultrasonidos para medir la distancia

Filed under: .net,Arduino,c++,electronica,Programación — Etiquetas: , , , , — jnavero @ 11:25 pm

Buenas, en esta ocasión voy a hablar de los sensores de ultrasonidos HC-SR04. Estos sensores son muy económicos y apenas cuestan un euro.

El funcionamiento de este sensor es muy sencillo, emite una onda sonora (ultrasonido) rebota y capta esa señal. Para poder determinar la distancia medimos el periodo de tiempo que tarda la señal desde que la enviamos hasta que la recibimos.

Como la señal tiene que rebotar, es decir, ida y vuelta debemos dividir el tiempo que tarda entre dos.

Por lo tanto si vemos la formula de toda la vida Espacio = Velocidad * Tiempo

La velocidad, que es una de las incógnitas de nuestra formula es de 343,2 m/s (esta velocidad varia en función de la temperatura y otros factores) según la wikipedia

El sensor en cuestión es este

SR04

En la imagen anterior podemos observar el pinout que es:

  • VCC (positivo +5v)
  • Trig – Es el disparador del sonido (emite la onda sonora)
  • Echo – Recibe la onda sonora
  • Gnd (Negativo la tima de tierra)

 

Vamos al lio.

La receta:

  • Sensor de ultrasonidos SR04
  • Arduino uno

y el conexionado es el siguiente:

Conexion Arduino y SR04

Como vemos en la imagen anterior, las conexiones van de la siguiente forma:

  • E6 Gnd (Negativo a la placa Arduino)
  • E7 Echo y el pin 11 de Arduino
  • E8 Trig (trigger) y al pin 10 de Arduino
  • E9 Vcc (Positivo en la placa Arduino)

Como se puede ver, este sensor es muy sencillo de conectar.

Ahora bien, para poder usarlo tenemos varias formas, mediante un plugin (hay varios) o programandolo completamente nosotros.

En nuestro caso, como es sencillo, vamos a programarlo entero sin la necesidad de plugins.

El código:

 

 C++ | 
 
 copy code |
?

01
02
 
03
#define TRIGPIN 10 // Trig
04
#define ECHOPIN 11 // Echo
05
 
06
void setup() {
07
   Serial.begin(9600);
08
   pinMode(TRIGPIN, OUTPUT);
09
   pinMode(ECHOPIN, INPUT);
10
   digitalWrite(TRIGPIN, LOW);
11
}
12
 
13
void loop() {
14
 
15
   long duration = 0;
16
   long inches = 0;
17
   long cm = 0;
18
 
19
   duration = Ping();
20
   inches = ToInches(duration);
21
   cm = ToCentimeters(duration);
22
 
23
   Serial.print("Micro segs: ");
24
   Serial.print(duration);
25
   Serial.print(" --- inches:  ");
26
   Serial.print(inches);
27
   Serial.print(" --- cm: ");
28
   Serial.print(cm);
29
 
30
   Serial.println();
31
 
32
   delay(500);
33
}
34
 
35
long Ping()
36
{
37
   digitalWrite(TRIGPIN, HIGH);
38
   delayMicroseconds(10);
39
   digitalWrite(TRIGPIN, LOW);
40
   return pulseIn(ECHOPIN, HIGH) / 2;  
41
}
42
 
43
long ToInches(long microseconds) {
44
   return microseconds / 74; 
45
}
46
 
47
long ToCentimeters(long microseconds) {  
48
   return microseconds / 29.2;
49
}
50
 
51

A destacar en el código:

La función Ping lanza el sonido en la linea digitalWrite(TRIGPIN, HIGH); hace una pausa de 10 microsegundos y recepciona el eco en la linea return pulseIn(ECHOPIN, HIGH) / 2;.
Como mencionaba anteriormente, se divide entre 2 por que el sonido tiene que ir y volver.

Paso a explicar la función

long ToCentimeters(long microseconds) {
return microseconds / 29.2;
}

Como parámetro de entrada están los micro segundos
ese 29,2 es un poco raro así que lo explico.

Como el sonido viaja a 343,2m/s tenemos que convertirlo a cm/s además tenemos microsegundos como entrada que no segundos.

Veamos la formula 1000000(microsegundos) / 343,2m/s * 100cm = 2.913752913752914 (que redondeamos a 29.2).

Tenemos que ver el tema del redondeo, ya que he de decir que el sensor, no es que tenga demasiada precisión, en cm no lo hace mal del todo. he intentado hacerlo en milimetros y la verdad, que fue un poco suplicio.

Y aquí finaliza el post de hoy, espero que les haya gustado

Saludos!

No hay comentarios »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress