UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTA DE INGENIERIA
CONTROL 1
MICROCONTROLADORES
1/5
PRÁCTICA 3
OPERACIÓN DE UN MICROCONTROLADOR ARDUINO UNO Y UN SENSOR
ULTRASÓNICO HC-SR04.
El sensor de ultrasonidos se enmarca dentro de los sensores para medir distancias o superar obstáculos,
entre otras posibles funciones. En este caso vamos a utilizarlo para la medición de distancias. Esto lo
consigue enviando un ultrasonido (inaudible para el oído humano por su alta frecuencia) a través de uno
de la pareja de cilindros que compone el sensor (un transductor) y espera a que dicho sonido rebote
sobre un objeto y vuelva, retorno captado por el otro cilindro. Este sensor en concreto tiene un rango de
distancias sensible entre 3cm y 3m con una precisión
de 3mm.
¿Qué recibimos en el sensor? El tiempo que transcurre entre el envío y la recepción del ultrasonido.
¿Cómo vamos a traducir dicho tiempo en distancia?
Aprovechando que la velocidad de dicho ultrasonido en el aire es de valor 340 m/s, o 0,034 cm/microseg
(ya que trabajaremos con centímetros y microsegundos). Para calcular la distancia, recordaremos que
v=d/t (definición de velocidad: distancia recorrida en un determinado tiempo).
De la fórmula anterior despejamos d, obteniendo d=v·t, siendo v la constante anteriormente citada y t el
valor devuelto por el sensor a la placa Arduino. También habrá que dividir el resultado entre 2 dado que
el tiempo recibido es el tiempo de ida y vuelta.
Material
Sensor ultrasónico HC-SR04 3 LED (Rojo. Amarillo y Verde)
Placa Arduino UNO 3 resistencias de 330Ω
Cables (jumpers M-M) Protoboard
Cable USB
Circuito
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTA DE INGENIERIA
CONTROL 1
MICROCONTROLADORES
2/5
Procedimiento
1. Preparar la conexión
En primer lugar, conectamos nuestra placa Arduino mediante un cable USB A-B, del tipo
que se emplean habitualmente para conectar impresoras. De momento no hace falta la
conexión de alimentación o cable adicional, para realizar la programación es suficiente
únicamente con el USB.
2. A continuación abrimos el entorno IDE de Arduino.
3. Seleccionamos el modelo de placa que estemos empleando.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTA DE INGENIERIA
CONTROL 1
MICROCONTROLADORES
3/5
4. Seleccionamos el puerto de comunicación al que está conectado.
En Windows será algo tipo COM1, COM3…
En Linux será del estilo /dev/ttyACM0
Ya tenemos la conexión configurada y lista para realizar la carga de nuestro primer programa.
5. Carga del programa de programa
En el IDE de Arduino estandard los programas tienen siempre la siguiente estructura
//Zona DECLARACIONES
void setup() {
// Zona funcion SETUP
}
void loop() {
// Zona funcion LOOP
}
Donde cada parte tiene la siguiente función:
Zona declaraciones: En esta parte se declaran variables, funciones, objetos, y
estructuras.
Funcion setup: Esta función se ejecuta cada vez que se enciende la placa de Arduino, o
se pulsa la tecla Reset. Realiza funciones de inicialización de periféricos, comunicaciones,
variables, etc.
Funcion loop: Esta función se ejecuta contínuamente. Realiza el grueso de tareas del
autómata.
El código del programa de la práctica es el siguiente:
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTA DE INGENIERIA
CONTROL 1
MICROCONTROLADORES
4/5
CODIGO DE PROGRAMACION
/***********************************************************************************/
long distancia;
long tiempo;
void setup(){
[Link](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*/
pinMode(13, OUTPUT);/*activación del pin 13 como salida: salida LED Rojo*/
pinMode(12, OUTPUT);/*activación del pin 12 como salida: salida LED Amarillo*/
pinMode(7, OUTPUT);/*activación del pin 7 como salida: salida LED Verde*/
}
void loop(){
digitalWrite(13,LOW); /* Inicializar LED*/
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: desde 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*/
/*Respuesta seg[un la distancia medida en cm*/
if (distancia<10){
digitalWrite(13, HIGH); /*Encender el LED Rojo*/
digitalWrite(12, LOW); /*Apagarr el LED Amarillo*/
digitalWrite(7, LOW); /*Apagar el LED Verde*/
delay(100);
}
if ((distancia>10)&&(distancia<50)){
digitalWrite(13, LOW); /*Apagar el LED Rojo*/
digitalWrite(12, HIGH); /*Encender el LED Amarillo*/
digitalWrite(7, LOW); /*Apagar el LED Verde*/
delay(100);
}
if (distancia>50){
digitalWrite(13, LOW); /*Apagarr el LED Rojo*/
digitalWrite(12, LOW); /*Apagar el LED Amarillo*/
digitalWrite(7, HIGH); /*Encender el LED Verde*/
delay(100);
}
/*Monitorización en centímetros por el monitor serial*/
[Link]("Distancia ");
[Link](distancia);
[Link](" cm");
delay(1000);
}
/****************************************************************************************/
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTA DE INGENIERIA
CONTROL 1
MICROCONTROLADORES
5/5
Finalmente, pulsamos en el botón remarcado para compilar y enviar la programación a
nuestra placa Arduino. Tras unos segundos, el IDE compilará el programa y lo subirá a la
placa.
Tras unos parpadeos, la placa empezará a ejecutar el programa, indicando la distancia y
encendiendo el LED correspondiente a la distancia programada.