Академический Документы
Профессиональный Документы
Культура Документы
Este sensor en concreto tiene un rango de distancias sensible entre 3cm y 3m con una
precisión de 3mm.
Material
Conexiones
Programa
long distancia;
long tiempo;
void setup(){
Serial.begin(9600);
pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso
ultrasónico*/
pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del
rebote del ultrasonido*/
}
void loop(){
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso
entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: de
sde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /*fórmula para calcular la distancia
obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
delay(1000);
}
Vídeo
P.
void setup() {
Serial.begin(9600);//iniciailzamos la comunicación
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
}
Ahora en el bucle void loop() empezamos enviando un pulso de 10us al Trigger del
sensor
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
Seguidamente recibimos el pulso de respuesta del sensor por el pin Echo, para medir
el pulso usamos la función pulseIn(pin, value)
t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
La variable t, tiene el tiempo que dura en llegar el eco del ultrasonido, el siguiente
paso es calcular la distancia entre el sensor ultrasónico y el objeto
Donde Velocidad es la velocidad del sonido 340m/s, pero usaremos las unidades en
cm/us pues trabajaremos en centímetros y microsegundos, tiempo es el tiempo que
demora en llegar el ultrasonido al objeto y regresar al sensor, y la distancia
recorrida es dos veces la distancia hacia el objeto, reemplazando en la formula
tenemos:
void setup() {
Serial.begin(9600);//iniciailzamos la comunicación
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
}
void loop()
{
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
Serial.print("Distancia: ");
Serial.print(d); //Enviamos serialmente el valor de la distancia
Serial.print("cm");
Serial.println();
delay(100); //Hacemos una pausa de 100ms
}
El sensor HC-SR04 es uno de los dispositivos más utilizados por los usuarios de Arduino. Se
trata de un pequeño módulo de ultrasonidos bastante simple con el que se pueden hacer
desde detectores de obstáculos hasta un pequeño radar de andar por casa con unas pocas
líneas de código (si todavía no tienes el tuyo puedes adquirir un HC-SR04 a través de
mi link de referido por un precio irrisorio).
En este post te explicaré el funcionamiento del sensor ultrasónico y te proporcionaré un código
comentado para que lo puedas aplicar en tus proyectos con Arduino.
Tenemos que asegurarnos de que quitamos el jumper del modulo de ultrasonidos que esta
colocado en los pines “UART Select”, una vez hecho esto hacemos el siguiente montaje:
Con los potenciómetros regulamos el brillo y el contraste del LCD en el que visualizaremos la
distancia medida con el sensor de ultrasonidos.
?
1 //http://zygzax.com/webproyectos/websensorus-100/
2 #include <LiquidCrystal.h>
4
const int trigger=10;
5
const int echo=13;
6
7
float distance;
8
9
void setup(){
10
Serial.begin(9600);
11
pinMode(trigger,OUTPUT);
12 pinMode(echo,INPUT);
13 lcd.begin(16,2);
14 }
15
16 void loop(){
17 //Inicializamos el sensor
digitalWrite(trigger,LOW);
18
delayMicroseconds(5);
19
// Comenzamos las mediciones
20
// Enviamos una señal activando la salida trigger durante 10 microsegundos
21
digitalWrite(trigger,HIGH);
22
delayMicroseconds(10);
23 digitalWrite(trigger,LOW);
distance=distance*0.0001657;
28
// Enviamos los datos medidos a traves del puerto serie y al display LCD
29
Serial.println(distance);
30
lcd.setCursor(0,0);
31
lcd.print(distance);
32
delay(100);
33 }
34
35
36
Esta alarma sonará cuando la distancia leída baje de un determinado limite que
estableceremos con un potenciómetro. Para usar el sensor de ultrasonidos como una alarma,
que se active cuando la distancia baja de un determinado umbral establecido con un
potenciómetro tendremos que añadir al circuito del apartado anterior un altavoz piezoeléctrico
y un potenciómetro. Las conexiones serían las
siguientes:
En el código del programa tendremos que añadir la lectura de la entrada analógica del
potenciómetro y su adaptación de bits (0-1023) a metros (0-3). También tendremos que
configurar una salida pwm que haga sonar el altavoz.
1 //http://zygzax.com/webproyectos/websensorus-100/
#include <LiquidCrystal.h>
2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
3
4
const int trigger=10;
5
const int echo=13;
6
const int altavoz=9;
7
const int potAlarma=0;
8
9 float distance;
10 int val;
11 float lim;
12
13 void setup(){
14 Serial.begin(9600);
pinMode(trigger,OUTPUT);
15
pinMode(echo,INPUT);
16
lcd.begin(16,2);
17
}
18
19
void loop(){
20
21
//Leemos el valor del potenciometro que nos indica el limite de la alarma
22 val=analogRead(potAlarma);
23 lim=val*0.00293;
24 //Inicializamos el sensor
digitalWrite(trigger,LOW);
25
delayMicroseconds(5);
26
// Comenzamos las mediciones
27
// Enviamos una señal activando la salida trigger durante 10 microsegundos
28
digitalWrite(trigger,HIGH);
29
delayMicroseconds(10);
30 digitalWrite(trigger,LOW);
40
41 // Enviamos los datos medidos a traves del puerto serie y al display LCD
42 Serial.println(distance);
43 lcd.clear();
44 lcd.setCursor(0,0);
lcd.print("Distancia:");
45
lcd.setCursor(12,0);
46
lcd.print(distance);
47
lcd.setCursor(0,1);
48 lcd.print("Limite:");
49 lcd.setCursor(9,1);
lcd.print(lim);
50
delay(50);
51
}
52
53
54
55
56
57
Para ver como leer los datos del sensor con Matlab por el puerto serie: Tutorial leer datos de
Arduino con Matlab por el puerto serie.
Conceptos Básicos.
Primeramente debemos armar el circuito de prueba para el sensor, el cual consiste
únicamente en proveer alimentación al módulo y asignarle 2 pines de interfaz con el Arduino
(echo y trigger). Este tipo de módulos para medición de distancia por ultrasonidos se divide en
2 grandes grupos: Interfaz mediante pulso de eco e interfaz serial (I2C o UART). El HC-
SR04 cae dentro del primer grupo, por lo que explicaremos su funcionamiento brevemente en
las siguientes lineas.
La interfaz digital se logra mediante 2 pines digitales: el pin de trigger (disparo) y echo
(eco).
El primero recibe un pulso de habilitación de parte del microcontrolador, mediante el cual se le
indica al módulo que comience a realizar la medición de distancia.
A través de un segundo pin (echo) el sensor “muestra” al microcontrolador un puso cuyo
ancho es proporcional al tiempo que tarda el sonido en viajar del transductor al obstaculo y
luego de vuelta al módulo.
Mediante una sencilla formula puede estimarse entonces la distancia entre el sensor y el
obstáculo si se conoce el tiempo de viaje del sonido así como la velocidad de propagación de
la onda sonora. La siguiente imagen muestra los pulsos recibidos y enviados por el sensor, de
acuerdo a la hoja de datos elaborada por Itead Studio.
Materiales Necesarios.
Tarjeta Arduino UNO R3
Módulo sensor ultrasónico HC-SR04
Cables tipo dupont para conexiones
Protoboard (opcional)
En la foto del artículo vemos los materiales que hemos utilizado y que tenemos disponibles en
nuestra tienda virtual. Nosotros utilizamos nuestro protoboard, pero vale cualquier otra forma
de montar y conectar los componentes, incluso un simple juego de cables dupont funciona
perfecto, con la ventaja de resultar mucho más compacto.
Cabe aclarar que nosotros hemos utilizado los pines 11 y 12, pero vale cualquier otra
combinación de pines. No hay mucho más que decir, ya que es bastante fácil de conectar,
solamente tener cuidado con la polaridad y posición de las señales.
El sketch para sensor ultrasónico HC-SR04 y
Arduino.
El primer paso es descargar e instalar la librería newPing desde el playground de Arduino. El
proceso de instalación de una librería ya lo hemos cubierto en un tutorial anterior y no lo
expondremos nuevamente en esta entrada. El enlace de descarga de la librería y su
documentación se encuentran en esta web:
http://playground.arduino.cc/Code/NewPing
Ya que tengamos la librería NewPing instalada, copiamos el siguiente código para probar su
funcionamiento. Hay que recordar que si cambiamos los pines de conexión con el
sensor, es necesario retocar las primeras lineas para que las señales puedan llegar a
los pines correspondientes.
Los pines de conexión deben coincidir perfectamente para que el sensor HC-SR04 y Arduino
puedan funcionar en conjunto, de lo contrario, podemos causar daños y sobrecalentamiento a
cualquiera de las dos placas: Arduino o sensor.
1 #include <NewPing.h>
4 #define TRIGGER_PIN 12
5 #define ECHO_PIN 11
10
11 void setup() {
12 Serial.begin(9600);
13 }
14
15 void loop() {
19 int uS = sonar.ping_median();
21 Serial.print("Distancia: ");
23 Serial.print(uS / US_ROUNDTRIP_CM);
24 Serial.println("cm");
25 }
El código realizado con la librería NewPing queda bastante sencillo y además de aceptar
el sensor ultrasónico HC-SR04 permite utilizar la gran mayoría de los sensores que utilizan
interfaz del tipo Interfaz “con pulsos” con 3 y 4 pines.
Conclusión
Como hemos visto a lo largo de este artículo, utilizar el sensor HC-SR04 y arduino es bastante
sencillo. Con el uso de una librería se facilita en gran medida el desarrollo de aplicaciones. Sin
embargo, podemos desarrollar también nuestro propio código que optimice el uso del tiempo
del CPU, utilizando incluso interrupciones y eventos. Si eres de esas personas curiosas que
siempre quieren saber como funcionan las cosas, en otra ocasión desarrollamos un programa
para microcontroladores PIC en lenguaje C que puedes revisar para ver como funciona el
algoritmo de comunicación con este tipo de sensores.