Vous êtes sur la page 1sur 18

Sensor ultrasnico, mideindo la distancia en un

sistema de aparcamiento

El sensor ultrasnico Arduino nos permite medir distancias a travs


de los ultrasonidos. Si ya tienes un kit seguramente tengas este tipo
de sensor. En este tutorial te voy a ensear cmo puedes construir
un sistema de aparcamiento asistido.
Es muy comn encontrar este tipo de sensores en los coches
actuales. El objetivo es mostrar cmo podemos construir sistemas
reales con esta placa de prototipado. Te explicar el conexionado de
los componentes y el cdigo necesario para hacerlo funcionar.

Cmo funciona el sensor ultrasnico


Arduino
Para medir distancias con Arduino podemos hacerlo de diferentes
maneras. Existen el sensor de infrarrojos, que utilizan las propiedades
de la luz para calcular la distancia, y el sensor ultrasnico
Arduino utiliza las propiedades de propagacin del sonido para
medir distancias. Ms concreto utiliza los ultrasonidos. Este tipo de
ondas sonoras se encuentran por encima del espectro audible por los
seres humanos.

El funcionamiento es muy sencillo. El sensor enva una onda ultrasnica


a travs del disparador o trigger, revota contra el objeto y el receptor o
echo detecta la onda. Sabiendo cunto ha tardado en viajar dicha onda,
podemos saber la distancia.
Solo hace falta utilizar la famosa frmula de la velocidad que
aprendimos en el colegio.

Donde s es el espacio y t es el tiempo. Si despejamos es espacio que


es lo que necesitamos saber, nos quedara de la siguiente manera.

La velocidad es conocida, el sonido viaja a 343 metros por segundo.


El tiempo nos lo devolver el propio sensor ultrasnico Arduino a travs
de la API de Arduino. Con todo esto ya podemos calcular a qu
distancia se encuentra un objeto.

La velocidad del sonido es 343 m/s a una temperatura de 20C. La


velocidad aumenta o disminuye 0,6 m/s por grado centgrado. Podemos
ser ms exactos si utilizamos un sensor de temperatura como el
LM35.

El zumbador o buzzer Arduino


Para simular correctamente el sensor de distancia vamos a utilizar
un buzzer Arduino. Estos componentes utilizan la piezoelectricidad,
un fenmeno fsico que afecta en determinados cristales (el cuarzo es
el ms comn). Al someter un cristal de este tipo, se deforman y vibran.
Si conseguimos que esa vibracin tenga una frecuencia dentro del
espectro audible, conseguiremos un sonido.

Por lo tanto, es importante conocer las frecuencias del espectro


audible. No vamos a ver una masterclass sobre este tipo de seales,
solo debemos quedarnos con el rango de frecuencias va de 20 Hz
(hercios) a 20 kHz (kilohercio).

Cerca de los 20 Hz el sonido es muy grabe. Cuando vamos subiendo


de frecuencia, el sonido se va haciendo cada vez ms agudo. Esto nos
servir para alertar de que nos estamos acercando a un obstculo al
aparcar.
Tampoco podemos esperar un sistema de alta fidelidad con un buzzer
Arduino, pero nos da la posibilidad de generar tonos audibles para
alarmas e incluso alguna meloda musical fcilmente reconocible.

Sistema de alerta con LEDs


Por ltimo, incorporamos el sistema de alerta visual para el sensor
ultrasnico Arduino. Esto nos permite visualizar si estamos cerca o lejos
de un obstculo. Con 3 LEDs (verde, amarillo y rojo) conseguimos
determinar si estamos lejos, cerca o en zona de peligro.

Componentes necesarios
Ya hemos visto una breve explicacin de lo que vamos a necesitar. La
siguiente lista te muestra todo el material necesario.

Arduino UNO
Protoboard donde conectaremos los componentes
Cables para hacer las conexiones
3 resistencias de 220
1 LED verde
1 LED amarillo
1 LED rojo
1 sensor ultrasnico Arduino (HC-SR04)
1 buzzer

Sensor ultrasnico, montando el circuito


Se trata de un circuito muy sencillo. Por un lado vamos a tener toda la
parte de alertas, acstica y visual, y por otra parte el sensor de
ultrasonidos. En el siguiente esquema te muestro el conexionado.
Cosas a tener en cuenta. Las resistencias son de 220 y se colocan
en serie con los LEDs. El sensor ultrasnico Arduino se conecta a dos
pines digitales, uno para el trigger o disparador y otro para el echo o
receptor. El buzzer Arduino se conecta a una salida PWM.

Programando el sensor ultrasnico


Arduino para medir distancia
Vamos a empezar por la programacin. Lo primero es una breve
descripcin de lo que queremos conseguir. Esto nos ayudar a plantear
el problema general y posteriormente dividirlo en trozos ms pequeos.
A esto se le llama pensamiento computacional y si eres usuario
asiduo de este blog, ya estars familiarizado con este concepto.

El sistema de aparcamiento consiste en detectar un objeto a travs del


sensor ultrasnico y avisar con seales de luz y sonido. Por lo tanto, ya
tenemos la primera divisin, detectar el obstculo y alertas con sonido
y luces.

Lo primero que har ser plantear el algoritmo del sistema de deteccin


de obstculos.

1. Comprobar la distancia de los objetos


1. Est dentro del rango para avisar?
1. Si
1. Lanzar alarma visual y sonora
2. Continuar
2. No
1. Continuar

El algoritmo del sistema de alerta visual y sonora sera el siguiente.

1. Est en zona verde?


1. Si
1. Encender LED verde
2. Emitir sonido 1
3. Salir
2. No
1. Continuar
2. Est en zona amarilla?
1. Si
1. Encender LED amarillo
2. Emitir sonido 2
3. Salir
2. No
1. Continuar
3. Est en zona roja?
1. Si
1. Encender LED rojo
2. Emitir sonido 2
3. Salir
2. No
1. Continuar

De los dos algoritmos anteriores, deducimos que vamos a necesitar


varios umbrales de decisin, uno para cada situacin. Podemos
coger una simple regla y determinarlos.

Umbral 1: est en zona verde desde 30 cm a 20 cm.


Umbral 2: est en zona amarilla, desde 20 cm a 10 cm.
Umbral 3: est en zona roja, menos de 10 cm.

Variables y constantes
A travs del sensor de ultrasonidos vamos a detectar el obstculo.
Comenzamos a programar declarando las variables y constantes.
Siempre que trabajemos con pines digitales o analgicos, es una buena
prctica declarar una constante por cada uno de ellos.

// Pines utilizados
#define LEDVERDE 2
#define LEDAMARILLO 3
#define LEDROJO 4
#define TRIGGER 5
#define ECHO 6
#define BUZZER 9

// Constantes
const float sonido = 34300.0; // Velocidad del sonido en cm/s
const float umbral1 = 30.0;
const float umbral2 = 20.0;
const float umbral3 = 10.0;

Definimos los pines para los LEDs, para el sensor de ultrasonidos y


para el buzzer Arduino. Siempre debemos fijarnos en el esquema
elctrico mostrado anteriormente. Luego declaramos 4 constantes. La
primera es la velocidad del sonido convirtiendo de metros por segundo
a centmetros por segundo. Esto lo hacemos multiplicando por 100.
Las siguientes constantes son los umbrales de decisin que hemos
marcado antes.

Funcin setup
En la funcin setup iniciamos el monitor serie y ponemos los pines en
el modo correspondiente. Los LEDs, el Trigger del sensor de
ultrasonidos y el buzzer son en modo salida (OUTPUT). El pin Echo del
sensor ultrasnico en modo entrada (INPUT).

Por ltimo vamos a empezar desde un estado conocido, todos los


LEDs apagados. He creado una funcin para realizar esta tarea.
void setup() {
// Iniciamos el monitor serie
Serial.begin(9600);

// Modo entrada/salida de los pines


pinMode(LEDVERDE, OUTPUT);
pinMode(LEDAMARILLO, OUTPUT);
pinMode(LEDROJO, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(TRIGGER, OUTPUT);
pinMode(BUZZER, OUTPUT);

// Apagamos todos los LEDs


apagarLEDs();

}
// Apaga todos los LEDs
void apagarLEDs()
{
// Apagamos todos los LEDs
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDAMARILLO, LOW);
digitalWrite(LEDROJO, LOW);
}

Las funciones son muy tiles por dos razones, nos permiten ordenar
el cdigo para que sea ms legible y tambin reutilizar el cdigo. En
este caso vamos a necesitar apagar todos los LEDs ms de una vez y
es ms fcil escribir una llamada a una funcin con una lnea de
cdigo que hacer las 3 llamadas a la funcin digitalWrite para apagar
cada LED.

Funcin Loop
La funcin loop() contiene el cdigo que se repetir una y otra vez. Aqu
es donde vamos a ir poniendo todo nuestro algoritmo, el que hemos
detallado anteriormente. He dividido esta funcin en varias funciones
para hacer el cdigo ms legible.

void loop() {
// Preparamos el sensor de ultrasonidos
iniciarTrigger();

// Obtenemos la distancia
float distancia = calcularDistancia();

// Apagamos todos los LEDs


apagarLEDs();

// Lanzamos alerta si estamos dentro del rango de peligro


if (distancia < umbral1)
{
// Lanzamos alertas
alertas(distancia);
}

A continuacin te describo cada una de las funciones que ejecutamos


en el loop().
Iniciar sensor ultrasnico
Lo primero que hacemos es preparar el sensor de ultrasonidos. Esto lo
hacemos con la funcin iniciarTrigger() que manda un pulso. Comienza
en estado bajo durante 2 milisegundos, luego 10 milisegundos estado
alto y por ltimo ponemos en estado bajo. Esto indica que a
continuacin se mandar la seal para que la capte el echo.

// Mtodo que inicia la secuencia del Trigger para comenzar a medir


void iniciarTrigger()
{
// Ponemos el Triiger en estado bajo y esperamos 2 ms
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);

// Ponemos el pin Trigger a estado alto y esperamos 10 ms


digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);

// Comenzamos poniendo el pin Trigger en estado bajo


digitalWrite(TRIGGER, LOW);
}

Calcular la distancia de los objetos


Una vez que est preparado el sensor, ya podemos utilizarlo para
calcular la distancia. Eso lo hacemos con la funcin calcularDistancia().
Es una funcin particular ya que nos va a devolver un valor. Eso se hace
poniendo al final (o donde quieras) la palabra reservada return seguido
del valor que quieres devolver. Todo el cdigo que haya por debajo
del return no se ejecuta as que precaucin. En este caso yo devuelvo
la distancia calculada dentro de la funcin que es una variable del tipo
float.

Para calcular el tiempo se utiliza la funcin nativa de Arduino pulseIn.


Esta funcin nos devuelve el tiempo transcurrido hasta que cambia de
estado. Anteriormente hemos preparado el sensor dejando el pin,
donde tenemos conectado el trigger, en estado bajo. Cuando la onda
ultrasnica viaja por el aire, rebota en el objeto y es detectada por
el echo, el pin cambia de estado a alto (HIGH).

La funcin pulseIn detecta eso precisamente, y devuelve el tiempo


transcurrido en microsegundos. Por este motivo se debe convertir a
segundos multiplicando por 0,000001 que es lo mismo que dividir por
1.000.000. Con esta informacin ya podemos aplicar la fmula para
calcular la distancia en funcin del tiempo y la velocidad.

// Mtodo que calcula la distancia a la que se encuentra un objeto.


// Devuelve una variable tipo float que contiene la distancia
float calcularDistancia()
{
// La funcin pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo = pulseIn(ECHO, HIGH);

// Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que est en microsegundos
// por eso se multiplica por 0.000001
float distancia = tiempo * 0.000001 * sonido / 2.0;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
delay(500);

return distancia;
}

Lanzar alertas
Una vez tenemos la distancia calculada ya podemos decidir si estamos
en la situacin de enviar alerta o no. Siempre que la distancia est por
debajo del primer umbral (umbral del LED verde y el menos restrictivo),
lanzaremos la correspondiente alerta visual y sonora.

Antes de hacer nada es conveniente apagar todos los LEDs. Esto lo


hacemos llamando a la funcin que hemos generado anteriormente.

Para reproducir un sonido con buzzer, utilizamos la funcin nativa de


Arduino tone(pin, frecuencia, duracin). Esta funcin admite hasta 3
parmetros aunque con los 2 primeros, sera suficiente.

pin: es el pin donde hemos conectado el buzzer. Recuerda que


debe ser un pin PWM.
frecuencia: podemos poner un valor entre 20 Hz y 20.000 Hz.
Juega con estos valores hasta conseguir un sonido adecuado.
duracin: la duracin en milisegundos que quieres que dure el
sonido.

Si no utilizas el parmetro de duracin, el sonido se reproducir


continuamente hasta que llames a la funcin noTone(pin).
La funcin comprueba que tipo de alerta hay que lanzar. Si est dentro
del rango umbral 1 y umbral 2, enciende el LED verde y reproduce un
sonido de 2.000 Hz durante 200 milisegundos. Si est dentro del rango
umbral 2 y umbral 3, enciende el LED amarillo y reproduce un sonido
de 2.500 Hz durante 200 milisegundos y si est por debajo de umbral
3, enciende el LED rojo y reproduce un sonido de 3.000 Hz durante 200
milisegundos.

// Funcin que comprueba si hay que lanzar alguna alerta visual o sonora
void alertas(float distancia)
{
if (distancia < umbral1 && distancia >= umbral2)
{
// Encendemos el LED verde
digitalWrite(LEDVERDE, HIGH);
tone(BUZZER, 2000, 200);
}
else if (distancia < umbral2 && distancia > umbral3)
{
// Encendemos el LED amarillo
digitalWrite(LEDAMARILLO, HIGH);
tone(BUZZER, 2500, 200);
}
else if (distancia <= umbral3)
{
// Encendemos el LED rojo
digitalWrite(LEDROJO, HIGH);
tone(BUZZER, 3000, 200);
}
}

Cdigo final
Aqu te dejo todo el cdigo de este ejercicio para que lo utilices cmo y
cuando quiera. Recuerda que la mejor manera de aprender es
practicando as que no lo copies entero e intenta escribirlo tu mismo.

// Pines utilizados
#define LEDVERDE 2
#define LEDAMARILLO 3
#define LEDROJO 4
#define TRIGGER 5
#define ECHO 6
#define BUZZER 9

// Constantes
const float sonido = 34300.0; // Velocidad del sonido en cm/s
const float umbral1 = 30.0;
const float umbral2 = 20.0;
const float umbral3 = 10.0;

void setup() {
// Iniciamos el monitor serie
Serial.begin(9600);

// Modo entrada/salida de los pines


pinMode(LEDVERDE, OUTPUT);
pinMode(LEDAMARILLO, OUTPUT);
pinMode(LEDROJO, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(TRIGGER, OUTPUT);
pinMode(BUZZER, OUTPUT);

// Apagamos todos los LEDs


apagarLEDs();

void loop() {
// Preparamos el sensor de ultrasonidos
iniciarTrigger();
// Obtenemos la distancia
float distancia = calcularDistancia();

// Apagamos todos los LEDs


apagarLEDs();

// Lanzamos alerta si estamos dentro del rango de peligro


if (distancia < umbral1)
{
// Lanzamos alertas
alertas(distancia);
}

// Apaga todos los LEDs


void apagarLEDs()
{
// Apagamos todos los LEDs
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDAMARILLO, LOW);
digitalWrite(LEDROJO, LOW);
}

// Funcin que comprueba si hay que lanzar alguna alerta visual o sonora
void alertas(float distancia)
{
if (distancia < umbral1 && distancia >= umbral2)
{
// Encendemos el LED verde
digitalWrite(LEDVERDE, HIGH);
tone(BUZZER, 2000, 200);
}
else if (distancia < umbral2 && distancia > umbral3)
{
// Encendemos el LED amarillo
digitalWrite(LEDAMARILLO, HIGH);
tone(BUZZER, 2500, 200);
}
else if (distancia <= umbral3)
{
// Encendemos el LED rojo
digitalWrite(LEDROJO, HIGH);
tone(BUZZER, 3000, 200);
}
}

// Mtodo que calcula la distancia a la que se encuentra un objeto.


// Devuelve una variable tipo float que contiene la distancia
float calcularDistancia()
{
// La funcin pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo = pulseIn(ECHO, HIGH);

// Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que est en microsegundos
// por eso se multiplica por 0.000001
float distancia = tiempo * 0.000001 * sonido / 2.0;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
delay(500);

return distancia;
}

// Mtodo que inicia la secuencia del Trigger para comenzar a medir


void iniciarTrigger()
{
// Ponemos el Triiger en estado bajo y esperamos 2 ms
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);

// Ponemos el pin Trigger a estado alto y esperamos 10 ms


digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);

// Comenzamos poniendo el pin Trigger en estado bajo


digitalWrite(TRIGGER, LOW);
}

Conclusin
En este artculo hemos visto un ejemplo de la vida real, un sensor de
aparcamiento asistido. Gracias a placa como Arduino podemos
descubrir cmo funciona el mundo. Si te ha gustado, te agradecera que
lo compartieras, muchas gracias.

PROBLEMAS CON EL PUERTO


SERIAL ARDUINO-UBUNTU
febrero 18, 2016

Este post tiene como propsito ayudar un poco a quienes estn empezando a
trabajar arduino y lo estn haciendo con ubuntu asi como tambin servirme de
recordatorio. ltimamente he trabajo en Arduino y al hacerlo me encontr con
algunos problemas en la combinacin Arduino-Ubuntu.
El primero de ellos que el puerto Serial se encontraba deshabilitado, al
momento de ingresar al IDE Arduino no detectaba el puerto a pesar de
encontrarse conectada la placa a la PC.

Al ingresar a Herramientas/ Puerto Serial aparece como deshabilitado y esto


no permitir que descarguemos nuestro cdigo a la tarjeta. Esto es debido a
que el sistema no tiene permisos suficientes para poder establecer una
comunicacin a travez del puerto USB.
El sistema linux, al conectar un USB le asigna un formato del tipo ttyACM0 o
similar y esto se encuentra en la ubicacion /dev.
Lo primero que tenemos que hacer es revisar como asigna el sistema operativo
los puertos.Vamos abrir una terminal de ubuntu y antes de conectar el
Arduino ejecutaremos el siguiente comando.
ls -l /dev | grep ACM
Si no hay ningn dispositivo conectado, no aparecer ningn resultado. En
caso contrario aparecer asignado con algn nombre.
Ahora conectamos el arduino a la placa y ejecutamos el mismo comando.
Deber aparecer una linea similar a
crw-rw- 1 root dialout 166, 0 sep 25 14:42 ttyACM0
En este caso dice que solo el usuario root puede acceder al puerto.
Por lo tanto procedemos a brindarle permisos para los usuarios normales del
sistema, ejecutamos e lo siguiente:
sudo chmod 777 /dev/ttyACM0
Donde ttyACM0 es el nombre que nos dio en el primer comando, este puede
ser ttyACM1
Al ejecutar este comando les pedir la contrasea del sistema.

Para asegurarnos que ha cambiado los permisos ejecutamos de nuevo


ls -l /dev | grep ACM
el resultado debe ser similar a:
crwxrwxrwx 1 root dialout 166, 0 sep 25 14:42 ttyACM0
El cambio que notaremos esta en las primeras letras del mensaje de respuesta:
Antes: crw-rw- 1 root dialout 166, 0 sep 25 14:42 ttyACM0
Ahora: crwxrwxrwx 1 root dialout 166, 0 sep 25 14:42 ttyACM0
Indica que los demas usuarios ya tienen acceso al puerto ttyACM0.
DE ESTA FORMA YA HABILITAMOS EL PUERTO EN EL
IDE DE ARDUINO.
Espero que se ha de utilidad este post, si tienen algn comentario o duda
pueden dejarlo en los comentarios.
Cmo instalar el IDE de Arduino en
Ubuntu 14.04?
ONeZettyel17 febrero, 2015/11 Comentarios!!! Wow!!!

Hace algunas semanas un buen amigo me invito a una platica de introduccin


a Arduino, del cual yo haba ledo un poco, pero a decir verdad no me haba
interesado mucho, pues bien decid apoyar su evento y asistir, ya que siempre
que algo tenga botones y luces de colores ha de llamar mi atencin. El
evento fue muy interesante pero el verdadero reto fue hacer
funcionar Arduino en mi laptop Ubuntu 14.04, y como no encontr nada
concreto, decido compartir con ustedes la informacin que reun esperando
que no les sea tan complicado como lo fue para mi.

Para empezar con nuestro Arduino necesitaremos de su IDE con tal de poder
programar y subir el cdigo al dispositivo. A continuacin explicar como
instalarlo en una Ubuntu 14.04 pero seguramente funcionar en otras distros
derivadas de Ubuntu.

Descargando

A continuacin podemos descargar el IDE oficial de Arduino desde su pgina


web oficial, o bien desde los repositorios oficiales de Ubuntu lo que instalar
tambin algunos paquetes adicionales si es que te hacen falta (mtodo
recomendado si como yo no tienes mucha experiencia) en mi caso instal la
versin de 64 bits para GNU/Linux.

sudo apt-get update

sudo apt-get install arduino arduino-core

Probando el puerto USB


A continuacin probaremos que nuestro Arduino est conectado correctamente
a nuestro GNU/Linux.

dmesg | grep ttyACM

Que tendra que devolver lo siguiente (pero no exacto!):

[25714.468493] cdc_acm 3-1:1.0: ttyACM0: USB ACM device

No todo est listo, ahora tendramos que darle permisos suficientes al


puerto ttyACM0para que nuestro usuario pueda acceder a el a travs del IDE
(este paso lo tendrs que repetir cada vez que re-conectes el Arduino):

sudo chmod 666 /dev/ttyACM0

Ahora ya lo tenemos todo listo para poder ejecutar el IDE

Ejecutar el IDE
Una vez lo tenemos todo listo, vamos al ataque. Desde el Dash ejecuta el programa
Arduino.
Configurndolo
Primero necesitaremos seleccionar nuestra placa de Arduino con la que
trabajaremosEsto es importante ya que actualmente existe gran diversidad de
placas actualmente para ello con el IDE ejecutado nos dirigimos a:

Herramientas Tarjeta Arduino UNO ( en mi caso )

Ahora seleccionaremos el puerto con el cual se comunica nuestro Arduino

Herramientas Puerto Serial ttyACM0

Con esto ya lo tendramos todo listo para poder empezar!

Sketch, nuestro bal


Esto es el directorio donde se almacenan los proyectos que programamos este
directorio por defecto se crea y se genera en nuestro directorio personal /sketchbook
este directorio lo podemos cambiar!
Referencias
Estas son las referencias que he utilizado, y los autores a los que les corresponde el
crdito de este tutorial:
http://blog.djodjo.org/?p=311
http://blog.markloiseau.com/2012/05/install-arduino-ubuntu/

Vous aimerez peut-être aussi