Detector de proximidad con arduino

Detector de proximidad con arduino para aplicarlo en coche

En esta práctica vamos a utilizar Arduino Uno, un sistema de leds y un par de motores montados sobre kit de chasis para hacer un coche que, por un lado haga le efecto de luces del coche fantástico y por otro, detecte con dos sensores la presencia de un obstáculo para evitar que coche.

Este proyecto tiene una segunda variante que consiste en hacer un complemento para que se active una sirena, cuando se detecta algo próximo ( igual al dispositivo de proximidad de los coches actuales )

1º parte. Juego de Luces

Tomamos 7 diodos leds y una placa metálica de dimensiones adecuadas para situar en la parte delantera del coche. En esa placa se perfora con la broca de 5 mm, 7 orificios para los diodos. Si la placa permite la soldadura, soldamos todos los terminales negativo de los diodos a la placa. En caso de que no se pueda, unir todos los terminales negativos y de esa unión, soldar una resistencia de 220 Ohmios. Del otro extremo de la resistencia, soldar un cable y conectarlo al GND de la placa de Arduino. Los terminales positivos de los diodos tienen que soldarse a un cable y conectar el otro extremo del cable a cada uno de los puertos que vamos a usar. El esquema eléctrico de los diodos es el siguiente: Conexión de diodos

Parte 2. Vamos a realizar un detector de obstáculos con varias aplicaciones, entre ellas, la detección de intrusos ( alarma ) o bien para evitar un choque de un coche. Basado en http://www.youtube.com/watch?v=-cK5-Nv1Bfk pero utilizando otro sensor. Por tanto, tenemos que bajar otra librería. hc-sr04 En primer lugar , haremos un breve estudio del dispositivo HC-SR04.

La función que tiene es enviar un tren de impulsos por el emisor y “contar ” el tiempo que tarda en recibir el eco por el otro receptor en regresar. traductor-signal Como podemos ver en la gráfica, primero llega el pulso de 10 microsegundos a la entrada (trigger). El dispositivo espera un poco a que acabe y envía una señal ultrasónica de 8 pulsos. Esperamos a que el sonido se refleje en algún objeto y llegue al 2º sensor. Entonces, el HC-SR04 mandará por la salida ECHO una señal con anchura proporcional al tiempo que ha tardado en ser recibida ( Echo back ). A mas ancha, mas lejos estaba el objeto.

Pasamos a la programación. Recordamos que lo que venga entre */  comentarios  */  o bien comenzando con // son comentarios que no se ejecutan. /*

Este es nuestro programa que usa el HC-SR04  para medir distancias. Las características básicas son VCC  5v  ( se toman de la placa de arduino ) GND  conectado a  GND de la placa de arduino Salida Echo al pin 7 de  Arduino Entrada Trig  al pin 8 de Arduino Mas información, enlaces que hay dentro del programa:

#define echoPin 7 // Asignamos al puerto 7 el nombre echoPin7 #define trigPin 8 // Trigger Pin se asigna al puerto 8 #define LEDPin 13 // El diodo que está en la placa y que corresponde al puerto 7 le llamaremos LEDPin int maximumRange = 20; // Establecemos el rango máximo que vamos a medir , en este caso son 20 cm int minimumRange = 0; // esta es la distancia mínima long duration, distance; // Se toman duration y distances como valores long // Las variables de tipo Long son variables de tamaño extendido que van desde  -2,147,483,648 hasta 2,147,483,647. // empezamos a asignar valores void setup() { Serial.begin (9600); // Vamos a poner el puerto serie Para que arduino nos informe de los valores que toma el medidor ultrasónico. pinMode(trigPin, OUTPUT); // Decimos que  trigPin será salida pinMode(echoPin, INPUT); // echoPin será entrada de datos pinMode(LEDPin, OUTPUT); // El led de la placa ( puerto 13 ) se configura como salida } void loop() { digitalWrite(trigPin, LOW); //  Primero ponemos el trig bajo delayMicroseconds(2); // Esperamos 2 microsegundos digitalWrite(trigPin, HIGH); // lo pasamos a alto para activar el  HC-SR04 delayMicroseconds(1000); // esperamos 1 ms digitalWrite(trigPin, LOW); /* pulsamos el pulso a bajo para terminar  el proceso. En el siguiente punto, esperamos a que la señal rebote y el HC-SR04 nos envíe un pulso con la anchura correspondiente al tiempo que ha tardado la onda  de sonido en rebotar */ duration = pulseIn(echoPin, HIGH); // Tomamos la duración del pulso /* La instrucción pulseIn nos da el tiempo que una onda está en alto (HIGH) . Para pasar ese tiempo a distancia, tenemos que dividirlo por 58.2 */ distance = duration/58.2; if (distance >= maximumRange || distance <= minimumRange) /* en la instrucción superior decimos si la distancia es mayor a la que indicamos al principio, o sea 20 cm o menor a 0 , entonces enviamos a la consola el valor -1 y ponemos el led activado. para ver la consola de arduino y ver las medidas que se van tomando hay que ir a  Herramientas-> monitor serial */ { Serial.println(“-1”);  // imprimimos en consola -1 digitalWrite(LEDPin, HIGH); // Encendemos el led } else { /* En caso de que esté dentro del rango, mandamos el valor a la consola usando el protocolo serie de Arduino  */ Serial.println(distance); // enviamos a consola el valor de la medida digitalWrite(LEDPin, LOW); } // Ponemos el LED apagado delay(100); // Esperamos 0,1 segundo hasta la nueva medición } Para descargar el archivo, pinchar en Medidor de distancia con HC-SR04 

  3º Parte ( añadimos un segundo sensor ). Para tener mejor control, necesitamos un segundo sensor que detecte el  otro flanco, de forma que cada sensor se encargará de controlar al motor de su flanco correspondiente ( sensor-derecha controla motor derecho ). No se aplica nada nuevo al programa, sólo que tomar dos puertos mas para controlar al segundo sensor.

    Nota: Existen librerías que se aplican específicamente para programar y que tienen en cuenta los diferentes dispositivos.
Para trabajar con alguna de ellas, la nuestra por ejemplo, se procede como
    1º paso es bajar de la web de arduino la librería que será necesaria y la podemos bajar de http://www.ardublog.com/library-for-arduino-ultrasonic-ranging-hc-sr04/
    2º Una vez descomprimida hay que instalar la carpeta "Ultrasonic" en el directorio del programa arduino, que en mi ordenador
está en C:\Program Files (x86)\Arduino\libraries
    3º  Para que las instrucciones que pongamos en el programas se puedan ejecutar, hay que decirle que incluya la librería
y por ello tenemos que  abrir el  programa para programar  Arduino "Sketch->Importar Libreria->Ultrasonic".

Programa definitivo: Una vez que hemos realizado todas las actividades anteriores ( importante para que vayamos entendiendo la programación en Arduino ) incorporamos el programa final para que, por un lado controle 7 luces led para efecto del coche fantástico y  una función que se encargue de controlar los motores en caso de detectar un obstáculo. El programa lo podemos bajar de este enlace

Coche fantástico con 7 leds y sensores ultrasonido 

Hay que destacar en ese programa que veremos una función “funcion1()” que  se va a encargar de comprobar si nos acercamos a un objeto para que pare el motor correspondiente. Se la llama cada vez que una luz se apaga y se pasa a la siguiente ( dentro de la rutina del juego de luces ). Una vez que se ejecuta, el programa sigue ejecutándose donde se quedó.

Como Actividad final, modificar el programa para que se tenga el mejor comportamiento posible. Podéis mejorarlo si se añade 4 relés más para  controlar el giro del motor, de forma que cuando se encuentre un obstáculo, se pare, retroceda un poco, gire, compruebe que el “camino está libre” y ponga los dos motores en marcha. Para esta mejora, necesitamos 6 relés.