PROYECTOS ARDUINO07/07/2011 de iPadnano Sensor de aparcamiento
conArduinoSigo con Arduino, y esta vez realizando un sensor de
aparcamiento por ultrasonidos, con un Arduino UNO, un sensor
HC-SR04 y un altavoz para seal acstica.Antes que nada, como siempre
una pequea explicacin extrada de la Wikipedia, sobre el principal
elemento de este proyecto:Qu son los ultrasonidos?Un ultrasonido es
una onda acstica o sonora cuya frecuencia est por encima del
espectro audible del odo humano (aproximadamente 20.000
Hz).Sabiendo esto, veamos como es y como funciona el sensor
utilizado:El sensor HC-SR04 y su funcionamientoComo componente
principal del proyecto, utilizar un sensor de ultrasonidos HC-SR04.
Este sensor contiene un emisor y un receptor de ondas de
ultrasonidos, y funciona a modo de sonar, de tal forma que el
emisor lanza un tren de pulsos ultrasnicos de 40 kHz en este caso y
el receptor espera el eco de dicho tren de pulsos en algn objeto.En
el datasheet del sensor podemos ver que la distancia medida es
proporcional a la amplitud del eco de la seal enviada, y para
calcular dicha distancia, nos remitimos a la formula Distancia =
Velocidad x Tiempo.Sigue leyendo!
Si tenemos en cuenta que la velocidad del sonido a temperatura
ambiente (20) es de:343 m/s o 34300 cm/s, podemos calcular que las
ondas tardan en recorrer 1 centmetro:1 centmetro = 1 segundo /
34300 = 29,15 uSSabiendo que la onda tarda 29,15 uS en recorrer 1
cm, y que el sensor nos dar el tiempo de la seal desde que es
enviada hasta que el receptor captura su eco, calculamos la
distancia de la siguiente manera: Distancia en cm = (tiempo de la
seal / 29,15 uS) / 2
La divisin por 2 se debe a que la seal desde que es enviada por
el emisor, recorre la distancia hasta el objeto, y vuelve por el
mismo camino hasta el receptor como se puede ver en la siguiente
imagen, de modo que la onda recorre 2 veces el mismo camino, por lo
que si no realizamos esta operacin, la distancia resultante en
centmetros sera el doble de la que hay realmente entre el sensor y
el objeto.
Para nuestra suerte, existen libreras para Arduino y PIC que
realizan estos clculos por nosotros, y nos dejan la simple tarea de
hacer una llamada a una funcin que nos dar el valor de la distancia
lista para utilizar en nuestro proyecto.Sabiendo como funciona el
sensor me he puesto a programar un sensor de aparcamiento.El
funcionamiento de un sensor de aparcamiento es muy sencillo,
simplemente se basa en un sensor colocado en la parte trasera de un
coche que se activa en el momento en que se mete la marcha atrs,
que mide la distancia que hay entre nuestro coche y el objeto que
est detrs (otro coche o una pared), y mediante una seal acstica nos
va indicando.La frecuencia de la seal acstica ir en aumento a
medida que se reduce la distancia con el objeto y a una mnima
distancia, la seal acstica es continua. Si la distancia aumenta, la
frecuencia de la seal acstica aumentar hasta una distancia mxima.El
proyecto consta de varios componentes como es una placa Arduino
UNO, un Sensor HC-SR04 y un Altavoz 8 con su resistencia 120, la
forma de conectarlos es la siguiente:El cdigo de programacin de la
placa Arduino es muy simple, aunque consta de varias libreras para
el control del sensor HC-SR04 y una librera de sonidos.Los archivos
son los siguientes:- Cdigo programa Sensor de Aparcamiento :
SensorParking.pde Librera Sensor HC-SR04: Ultrasonic.cpp
Ultrasonic.h Librera Sonidos: Pitches.hY conectado y programado a
funcionar!December 15th, 2012 11 Comments Quin no se ha encontrado
alguna vez con el dilema de qu hacer con las plantas cada vez que
sales unos das de casa?Bien, supongo que todos aquellos que no
tienen plantas en casa o se han decidido por un cactus. El resto
encontrareis en esta entrada una solucin que mezcla electrnica y un
poco de bricolaje.La idea es desarrollar un sistema de riego
porttil capaz de aportar agua a nuestras macetas peridicamente o
cuando la tierra est seca. El montaje est basado en Arduino, aunque
cualquiera que tenga un poco de experiencia con microcontroladores
no tendr problemas en adaptarlo a otro modelo.
Este regador autnomo utiliza una bomba de agua alimentada por
pilas para regar las plantas utilizando tres criterios
diferentes:El primero es regar peridicamente en un intervalo de
tiempo que se puede configurar en el inicio.El segundo es regar
cuando la tierra de la maceta haya cruzado el umbral de humedad
elegido.El tercero combina los dos anteriores y riega en el
intervalo de tiempo elegido y cada vez que la tierra est ms seca
que el umbral elegido.Para detectar el nivel de humedad, utiliza un
par de cables que van pinchados en la tierra de la maceta.
Los elementos principales que componen este regador autnomo son
una garrafa de plstico donde almacenar el agua que se usar para
regar, una pequea bomba de agua, un portapilas para alimentar la
bomba, una pantalla LCD que sirve de interfaz y una placa de
control donde se encuentra el Arduino.La lista exacta de
componentes es la siguiente:1 x Garrafa de agua1 x Arduino Nano1 x
LCD 162 de tipo HD447801 x Mosfet IRF5101 x Led bicolor4 x
Pulsador4 x resistencia 10k1 x resistencia 2.2K1 x resistencia 4701
x tira de pines hembra1 x tira de pines macho1 x Conector 2 cables1
x Portapilas de 4 pilas AAA1 x Tubo de goma de 4mm1 x Bomba de
agua1 x Placa de circuito impreso
Todos estos componentes se pueden encontrar sin dificultad en
tiendas de electrnica, salvo el tubo y la bomba de agua. El tubo se
puede encontrar en ebay, tiendas de animales que tengan acuarios y
posiblemente farmacias. La bomba de agua la encontr en ebay
buscando con las siguientes palabras clave mini water pump
rs-360sh.El Arduino Nano tambin recomiendo comprarlo en ebay, ya
que a da de hoy se puede encontrar sin dificultad por unos 12,
mientras que en otras tiendas el precio puede duplicarse o
triplicarse.En cuanto a la placa de control se puede mandar
fabricar a Itead a partir de su diseo en Eagle, que por unos 13 al
cambio te entrega 10 placas. Del Eagle se puede conseguir una
versin gratuita en su pgina web.El diseo de la placa os lo dejo
enlazado aqu, junto con un par de libreras necesarias para el
proyecto que no vienen por defecto en el Eagle: Diseo PCB Eagle
Arduino Nano LCDY ahora vamos ya con el montaje. En primer lugar
necesitamos una garrafa de plstico, que se puede comprar
directamente o utilizar alguna de las que venden con agua
destilada.
Hay que hacerle un pequeo agujero en la parte inferior que se
usar como toma de agua de la bomba. El agujero debe ser pequeo para
que la toma de agua de la bomba pase lo ms justa posible.
La bomba tiene un par de pitorros, uno es la toma de agua que
hay que encajar en el agujero de la garrafa y el otro la salida del
agua.
Para fijar la bomba en la garafa, se puede utilizar una masilla
tipo patex, silicona o cualquier cosa que fije bien la bomba y sea
impermeable.
Lo siguiente es montar la placa de control con todos los
componentes.
Una vez hecho esto, se procede a fijar el portapilas y la placa
de control a la garrafa.El polo positivo del portapilas se puede
conectar directamente al motor y el negativo va al hueco inferior
del conector. Luego del hueco superior del conector hay que llevar
un cable hasta el polo negativo del motor. La polaridad del motor
est marcada de fbrica con un punto rojo.
Y con esto ya est prcticamente finalizado el montaje. La
alimentacin de la placa la he realizado a travs del conector
mini-USB del Arduino, ya que la idea es que est muchos das
encendido y alimentarlo por batera sera problemtico.Lo interesante
de este proyecto es realizar la programacin que ms os guste, pero
como punto de partida os dejo la que he realizado para probarlo. No
est muy pulida (ni revisada) ya que ando escaso de tiempo y no
quera retrasar ms este post, pero en todo caso vale ms que de sobra
para ver las posibilidades que tiene: codigoLa interfaz se controla
con los tres botones superiores, el central para aceptar y los de
los laterales para incrementar/decrementar o moverse por las
opciones.El botn inferior derecho es un botn de prueba y sirve para
activar la bomba independientemente de la programacin. Activa la
bomba durante el tiempo que se deje pulsado.El regador, nada ms
activarlo pregunta el modo de funcionamiento. Las tres opciones
posibles son regar por temporizacin, regar en funcin de la humedad
de la tierra o un sistema mixto.Cuando se seleccione una opcin que
implique temporizacin, pasa a preguntar el tiempo entre riegos.
Para ello hay que introducir los das, horas y minutos que
deseemos.En caso de haber seleccionado una opcin que implique riego
por humedad, preguntar el umbral de humedad a partir del cual hay
que regar.Finalmente con cualquiera de los mtodos de riego
preguntar cuantos segundos debe durar cada activacin del
riego.Durante la fase de programacin el led se ilumina en rojo y
una vez programado cambia a verde.En el modo de riego por tiempo
mostrar el tiempo que falta hasta el siguiente riego. En el modo
por humedad, mostrar la humedad actual, el umbral de activacin y el
nmero de activaciones hasta el momento. En el modo mixto, mostrar
el tiempo hasta la siguiente activacin, la humedad actual y el
umbral de activacin.Respecto al sensor de humedad, hay que tener en
cuenta que se basa en la conductividad elctrica de la tierra as que
no esperis una gran precisin. Puede variar segn la temperatura, la
composicin de la tierra, los minerales del agua, la longitud de
cable pinchada en la tierra, etc.El valor que utiliza el programa
es el promedio de las ltimas diez lecturas para evitar activaciones
accidentales. Adems parte de unos valores mnimo y mximo de
conductividad que ajusta sobre la marcha con los valores
detectados, por lo que la estimacin del porcentaje de humedad
detectado no deja de ser eso, una estimacin muy a bulto.Tambin
tiene definido en cdigo un lmite de 10 activaciones (lopodiscambiar
o eliminar) como medida de seguridad. Por otra parte, despus de una
activacin debida al sensor de humedad, hay un retardo de 10
segundos hasta que pueda producirse otra.Junto al conector del
sensor de humedad, habris notado que hay otro conector de 3 pines.
Estos pines son para comunicacin en serie, de forma que uno est
conectado a tierra y los otros dos a los pines de envo y recepcin
del Arduino. En el proyecto que describo no he llegado a
utilizarlos pero queda abierta la posibilidad de comunicarse con la
placa por otros medios y aadir nuevas funcionalidades y formas de
riego.Un par de cosas a tener muy en cuenta:1 Por el principio de
los vasos comunicantes, una vez que el tubo se llene de agua si la
salida si sita a un nivel inferior al del agua de la garrafa, saldr
agua aunque la bomba est parada. As que es importante que la
garrafa est un poco ms baja que las macetas. Esto se puede
conseguir elevando un poco la altura de las macetas o poniendo ms
baja la garrafa, por ejemplo dentro del fregadero.2 Este post est
hecho con la mejor intencin, pero si decids montarlo y usarlo que
sea bajo vuestra propia responsabilidad. No me responsabilizo de
pequeas inundaciones, plantas secas, ahogadas o cualquier otro
desastre que pueda ocasionar su uso.Y para quepodisver que es lo
que va a quedarexactamente, os dejo un vdeomostrando su
funcionamiento:Y para finalizar quiero dar las gracias a Oscar por
sus ideas y soporte tcnico.Visitas :13306Autor: Guillermo Posted in
Electrnica, Microcontroladores, Programacin | Controlando Arduino
va Bluetooth desde Android Pt.1 Hace casi dos semanas, les
compartamos un pequeo tutorial donde les explicaba rpidamente el
funcionamiento de un puente H y su utilizacin en el control de la
direccin de motores DC.
Si recuerdan un poco, les mencion en ese momento que la idea era
armar un carro a control remoto que pudiramos controlar desde
bluetooth a travs de una aplicacin en Android.
En esta entrada revisaremos la sencilla construccin del mdulo
controlador del carrito y les mostrar rpidamente como probar la
conexin Bluetooth del Arduino en Android con un software gratuito
que pueden encontrar en la PlayStore.
En los prximos das les estamos preparando un tutorial en
conjunto con los amigos de AndroiSensei donde les mostraremos como
programar la aplicacin que se encargar de controlar el carrito en
Android.
Comencemos!
Diseo del sistema
Algo que nos ayudar mucho a construir nuestro carrito Bluetooth
es hacer un pequeo diagrama de los distintos bloques funcionales.
La siguiente imagen muestra los componentes que utilizaremos y nos
indicar de manera general las conexiones que utilizaremos al
momento de construirlo.
El diseo es sumamente sencillo: Tendremos el Arduino Nano justo
enmedio actuando como sistema de control del carro conectado a un
mdulo Bluetooth que nos servir para enviar enviar comandos y
recibir informacin del estado.
Ya que el carro hace uso de dos motores DC para controlar la
direccin y el desplazamiento necesitaremos dos puentes H conectados
a las lneas D3...D6 y D9...D12.
Aunque no lo revisaremos en esta entrada, nos quedan cuatro
lneas libres que podemos utilizar para activar otros actuadores o
conectar otros sensores y todas las lneas anlogas si por ejemplo
quisieramos leer el nivel de la batera.
Debo aceptar que no es el diseo ms "compacto" y prometo disear
una versin ms sencilla para una futura versin del carro.
Por qu cuatro lneas en vez de solo dos y una compuerta lgica
inversora?
Por una razn muy simple: Modulacin de pulsos.Si bien en esta
entrada solo vamos a examinar el funcionamiento general invirtiendo
la polaridad de la alimentacin de los motores con los puente H.
Para el prximo tutorial queremos modular tambin la velocidad/fuerza
de desplazamiento del motor DC y una forma fcil de hacerlo es por
medio de modulacin de pulsos.
El Arduino Nano soporta modulacin de pulsos por medio de la
funcin analogWrite en los pines 3,5,7,9 y 11. Para modular la
fuerza del motor podemos activar uno de los transistores que queden
en serie y al segundo enviarle un tren de pulsos que provocar un
cambio en la carga del motor DC.
El diagrama elctrico
Al detallar nuestro diagrama de bloques tendremos algo como lo
siguiente:
Se que se ve un poco complicado pero realmente es muy sencillo.
Revisemos los componentes de izquierda a derecha:
Fuente de poder
El voltaje para operar el circuito lo obtendremos de un arreglo
de 4 bateras Alcalinas AA que proveen de 1.5V. Obtenemos de las
bateras dos voltajes, sacando una lnea de las dos primeras bateras
tenemos 3V que servirn para alimentar los puentes H y una segunda
lnea del arreglo de las cuatro bateras para obtener 6V.
La lnea de 6V la conectaremos al pin VIN de nuestro Nano. Esto
lo hacemos de esta manera para que pase por el regulador de voltaje
de la placa. Me preguntarn Por qu no he utilizado la salida
regulada de 3.3V de la placa Nano.
La razn es que quera tener las fuentes de alimentacin
"separadas" solo en caso de que hubiera algn accidente, as si por
ejemplo hubiera un cortocircuito en algn momento el puente H la
corriente circulara directamente de la batera y no pasara por el
Arduino Nano reduciendo las posibilidades de que este resulte
daado.
Puentes H
No entrar en muchos detalles sobre el puente ya que lo hemos
revisado en una entrada anterior. Pero seguramente han notado que
la nica diferencia es que el puente que controla el motor de
traccin utiliza resistencias de 680Ohm.
Por qu? Una confusin. Cuando fu a comprar las resistencias no
las revis en el momento y al llegar a mi casa me percat que eran de
680Ohm en vez de las de 1KOhm que haba solicitado.
As que decid re-calcular la corriente mxima que podra circular
por el puente H utilizando las resistencias de 680Ohm y los
transistores 2N2222 y es de 633mA. Inferior al 1A mximo que puede
circular por el transistor segn la hoja tcnica as que es bastante
seguro. Adems esto es suficiente para los pequeos motores DC que
deseo controlar as que decid utilizarlas en vez de reemplazarlas
por las de 1K.
Para el control de direccin mantuve las resistencia de 1K que
limitarn la corriente del puente H a cerca de 460mA y a decir
verdad funciona a la perfeccin.
Arduino Nano y Mdulo bluetooth
Esta es la parte ms sencilla ya que nicamente debemos conectar
las lneas de datos correspondientes al Nano y el mdulo bluetooth al
puerto UART. Solo hay que tener cuidado de cruzar las lneas TX y RX
o de lo contrario no podremos comunicarnos con el mdulo.
Reemplazando la tableta controladora original
Para este paso solo necesitan un poco de creatividad, no voy a
entrar en muchos detalles, prefiero mostrarles unas fotos del
proceso desde la tableta perforada hasta el mdulo final
montado.
Mdulo de RC original.
Tableta perforada cortada a la medida del mdulo original.
Midiendo la ubicacin de los componentes.
Colocando los conectores para los motores DC.
Reposicionando el Arduino Nano para la colocacin del mdulo
bluetooth.
Colocando los puentes H con sus respectivas resistencias.
Una foto del mdulo casi terminado, solo hasta este punto solo
restaba agregar las lneas de control para los puentes H.
Aqu pueden ver las lneas que controlan los puentes H, disculpen
el desorden ya era tarde y tena sueo.
El cdigo en Arduino
Vamos a reutilizar el cdigo de la entrada anterior y para
simplificar la lectura del cdigo vamos a escribir varias funciones
asociadas a cada una de las siguientes acciones:
Adelante (FORWARD): Provocar que puente H de control de traccin
se active de tal manera que el carrito se mueva hacia adelante.
Reversa (REVERSE): Provocar que el puente H de control de traccin
se active de tal manera que el carrito se mueva en reversa. Alto
(STOP): Desactivar todos los transistores en el puente H provocando
que el motor se detenga. Derecha (RIGHT): Provocar que el puente H
del control de direccin se active de tal manera que la direccin se
oriente a la derecha. Izquierda (LEFT): Provocar que el puente H
del control de direccin se active de tal manera que la direccin se
oriente a la izquierda . Centrar (CENTER): Desactivar todos los
transistores en el puente H provocando que la direccin regrese al
centro.
Cdigo de control de los puentes H: // Definimos a las lneas a
las que se encuentran// conectados los puentes H#define M1A
9#define M1B 10#define M1C 11#define M1D 12#define M2A 3#define M2B
4#define M2C 5#define M2D 6
// Buffer para almacenar los textos de control#define BUFFSIZE
255
void setup() { //Configuramos todos los pines de control como
output pinMode(M1A, OUTPUT); pinMode(M1B, OUTPUT); pinMode(M1C,
OUTPUT); pinMode(M1D, OUTPUT); pinMode(M2A, OUTPUT); pinMode(M2B,
OUTPUT); pinMode(M2C, OUTPUT); pinMode(M2D, OUTPUT); // Iniciamos
el serial al que est conectado el mdulo bluetooth
Serial.begin(9600);}
// FORWARDvoid go_forward() { digitalWrite(M1A,LOW);
digitalWrite(M1B,HIGH); digitalWrite(M1C,HIGH);
digitalWrite(M1D,LOW);}
// REVERSEvoid go_reverse() { digitalWrite(M1A,HIGH);
digitalWrite(M1B,LOW); digitalWrite(M1C,LOW);
digitalWrite(M1D,HIGH);}
// STOPvoid stop_motor() { digitalWrite(M1A,LOW);
digitalWrite(M1B,LOW); digitalWrite(M1C,LOW);
digitalWrite(M1D,LOW);}
// RIGHTvoid turn_right() { digitalWrite(M2A,HIGH);
digitalWrite(M2B,LOW); digitalWrite(M2C,LOW);
digitalWrite(M2D,HIGH);}
// LEFTvoid turn_left() { digitalWrite(M2A,LOW);
digitalWrite(M2B,HIGH); digitalWrite(M2C,HIGH);
digitalWrite(M2D,LOW);}
// CENTERvoid center_wheels() { digitalWrite(M2A,LOW);
digitalWrite(M2B,LOW); digitalWrite(M2C,LOW);
digitalWrite(M2D,LOW);}
Para recibir los comandos re-utilizaremos las funciones que
definimos en la entrada sobre Utilizando el mdulo de serie
Bluetooth en Arduino. Estas funciones nos ayudaran a rellenar un
pequeo buffer con los comandos a leer y a vaciarlo (flush) en caso
de que se llene.
Cdigo para manejo del buffer:char buffer[BUFFSIZE];int i =
0;
void flush_buffer() { Serial.write((const uint8_t*)buffer,i);
for(int j=0;j