El presente sitio presenta diseños y proyectos realizados con Solidworks y otros programas 3d , además de laminas y modelos 3d para practicar en casa, con el único objetivo de poder aprender y explorar la capacidad de Solidworks, no existiendo en ningún caso fines de lucro.

Monday, February 1, 2016

Arduino y HC-SR04

Posted by Juan Francisco | Monday, February 1, 2016 | Category: , | 0 comentarios

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 entre debido a que el eco 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, nano, Mega, etc
  • Sensor HC-SR04
  • Protoboard y cables

Procedimiento

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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
Escribe los valores que lee el sensor HC-SR04 en el monitor serial.
 
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.