Proyectos Arduino

36
PROYECTOS ARDUINO 07/07/2011 de iPadnano Sensor de aparcamiento con Arduino Sigo con Arduino, y esta vez realizando un sensor de aparcamiento por ultrasonidos, con un Arduino UNO, un sensor HC-SR04 y un altavoz para señal acústica. Antes que nada, como siempre una pequeña explicación extraída de la Wikipedia, sobre el principal elemento de este proyecto: ¿Qué son los ultrasonidos? Un ultrasonido es una onda acústica o sonora cuya frecuencia está por encima del espectro audible del oído humano (aproximadamente 20.000 Hz). Sabiendo esto, veamos como es y como funciona el sensor utilizado: El sensor HC-SR04 y su funcionamiento Como 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 ultrasónicos – de 40 kHz en este caso – y el receptor espera el “eco” de dicho tren de pulsos en algún objeto. En el datasheet del sensor podemos ver que la distancia medida es proporcional a la amplitud del eco de la señal enviada, y para calcular dicha distancia, nos remitimos a la formula “Distancia = Velocidad x Tiempo”. Sigue leyendo!

description

Recopilación Proyectos con Arduino

Transcript of Proyectos Arduino

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