viernes, 29 de abril de 2016

Control de una hélice con motor DC y driver L9110H


Hoy os voy a mostrar cómo controlar tanto la velocidad como el sentido de giro de una hélice motorizada mediante el uso del driver L9110H, utilizado habitualmente para el manejo de pequeños motores DC que estén alimentados con voltajes comprendidos entre 2.5 - 12V, que en nuestro caso es un motor DC de 5V, y con una corriente máxima de 800mA. Este tipo de hélice con motor DC y driver L9110H es del fabricante “KEYES”, pudiéndose adquirir en algunas de las tiendas de electrónica online existentes en el mercado bajo el nombre de “Fan motor” a un precio que ronda los 6€.


Fan Motor de “KEYES”

Este sistema viene ya montado y soldado en un PCB ofreciéndonos 4 pines de conexión, dos de ellos para la alimentación (+VCC y GND), y los otros dos para el control del motor DC de 5V (INA e INB). El pin INA se utiliza para variar la velocidad del motor DC mediante pulsos PWM, por lo que deberemos de conectarlo a un pin digital de Arduino que permita este tipo de salida digital pulsada (en el programa de control se utiliza el pin digital 9). Por otro lado el pin INB se utiliza para cambiar el sentido de giro del motor, es decir, cuando este pin esté a nivel BAJO (LOW) el motor girará en un sentido y cuando esté a nivel ALTO (HIGH) girará en el sentido contrario (en el programa de control se utiliza el pin digital 8). El programa de control lo que hace es desplegar un MENU a través del monitor serie del IDE de Arduino, para que nosotros a través del mismo, seleccionemos una opción como se puede observar en la siguiente imagen.


Monitor Serie


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Fan Motor (KEYES).

·         Protoboard.

·         Cables de conexión.



Código del programa:






Video:



viernes, 15 de abril de 2016

Caudalímetro con sensor de flujo YF-S201 y LCD 2004


En el POST de hoy os voy a enseñar cómo medir el caudal de agua en L/hora que atraviesa la alcachofa de nuestra ducha, así como la cantidad de agua que gastamos cada vez que nos duchamos, para ello, vamos a montar y programar un sencillo caudalímetro basado en el sensor de flujo YF-S201, un display LCD 2004 para poder visualizar los valores a tiempo real y una serie de elementos auxiliares necesarios para que le llegue el caudal de agua a nuestro sensor.


Sensor de flujo YF-S201

El sensor de flujo YF-S201 está constituido por una carcasa de plástico, un rotor de agua y un sensor de efecto Hall. El funcionamiento de este sensor es muy simple, es decir, en el rotor tiene un pequeño imán adherido para poder registrar una vuelta cada vez que pasa por el sensor magnético de efecto Hall que hay en el otro lado del tubo, generándose pulsos de salida a una velocidad proporcional a la del flujo. En la parte posterior del sensor hay una flecha para indicar la dirección del flujo. Cada pulso en la salida del sensor equivale aproximadamente a 2,25 mililitros. Una de las cosas a tener en cuenta es que no es un sensor de precisión, por lo que la frecuencia del pulso varía un poco dependiendo de la velocidad de flujo, la presión del fluido y la orientación del sensor,  necesitándose una cuidadosa calibración si se requiere más que un 10% de precisión. A continuación os muestro algunas de las características más relevantes de este sensor.

Tabla de características del sensor de flujo YF-S201

La salida del sensor (cable amarillo) la vamos a conectar a nuestro Arduino para que mediante una correcta programación podamos visualizar a través del LCD 2004 el caudal que sale por nuestra ducha en L/hora, además del consumo de agua en litros que hemos realizado en un determinado espacio de tiempo, por ejemplo, mientras nos duchamos (el cable rojo a +5V y el negro a GND de nuestro Arduino). Como la señal del pulso de salida es una simple onda cuadrada es muy fácil de registrar mediante interrupciones, para posteriormente convertir los pulsos en caudal. Según la hoja de datos del fabricante, por cada litro de agua que pasa por el sensor obtenemos aproximadamente 450 pulsos, entonces:


Esto quiere decir que si tenemos la frecuencia (pulsos por segundo), simplemente lo tenemos que dividir entre 7.5 para obtener el número de L/min. Para el caudal en L/hora tenemos que multiplicar la frecuencia por 60 minutos que tiene una hora.

  

La instalación del sensor a nuestra ducha es muy sencilla, lo primero que tenemos que hacer es dejar libre de conexiones el grifo de la ducha, para enroscar allí un extremo de la manguera con conexiones hembra de ½”, conectando el extremo libre de la manguera a la entrada del sensor. Por último en la salida del sensor conectaremos la manguera con la alcachofa que habíamos retirado anteriormente del grifo de la ducha. El sensor en ambos extremos tiene roscas macho estándar de ½”, lo que nos facilita la conexión. También es muy recomendable aplicar teflón en cada uno de los extremos del sensor para evitar posibles fugas de agua.


Caudalímetro con Arduino UNO


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Sensor de flujo YF-S201.

·         Manguera con conectores hembra de ½”.

·         Alcachofa de ducha con manguera y conector hembra de ½”.

·         Módulo LCM 2004 I2C V1.

·         Display 20x4 LCD 2004.

·         Teflón.

·         Batería de 12VDC/3000mAh (DC12300).

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:

martes, 12 de abril de 2016

Reloj en tiempo real Tiny RTC I²C con LCD 2004


El Tiny RTC I²C, es uno de los diferentes relojes en tiempo real con comunicación I²C que nos podemos encontrar en el mercado actual. Está compuesto por un RTC DS1307, una memoria EEPROM 24C32N y una batería CR2032 de 3V, gracias a ello es capaz de almacenar los datos y de seguir en funcionamiento aunque lo desconectemos de la alimentación de nuestro Arduino, y por lo tanto, cuando volvamos a conectarlo, mantendrá intacta tanto la hora como la fecha que le hayamos introducido mediante programación, aunque siempre que estemos trabajando con él es muy recomendable mantenerlo correctamente alimentado.

Tiny RTC I²C

Los valores tanto de hora como de fecha, les vamos a poder visualizar a través de un display LCD 2004, que no es más que un simple LCD que cuenta con cuatro líneas en las que se pueden mostrar hasta 20 caracteres en cada una de ellas. Tanto el LCD 2004 como el RTC van a compartir los pines SCL y SDA  para conectarse con nuestro Arduino mediante comunicación I²C, aunque podríamos incluir en nuestros proyectos hasta 128 dispositivos gracias a este protocolo de comunicación, siempre y cuando respetemos la dirección que tenga asignado cada uno de ellos. 

Otra cosa muy importante a recordar es que dentro de la programación, exactamente en la línea “LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);”, donde pone 0x20, es justo la dirección que va a tener nuestro LCD 2004. Dicha dirección se obtiene midiendo el valor de los pines de dirección A0, A1 y A2, que están justo detrás del módulo LCM 2004 I2C V1 conectado al LCD 2004, con un potenciómetro, que en mi caso están todos conectados a GND (A0=0, A1=0 y A2=0) como se puede apreciar en la siguiente imagen.

Configuración de los pines A0, A1 y A2 (direcciones) en el LCD 2004

El programa simplemente cargará automáticamente la hora y la fecha que tengamos ajustada en nuestro PC al Tiny RTC I²C a través de la conexión serie USB de nuestro Arduino y gracias al uso de la librería "RTClib.h", una vez que comience la ejecución del programa, se mostrará los valores a través del LCD 2004. A parte de mostrarnos la hora y la fecha en tiempo real, este sistema nos permite poder crear diferentes alarmas y eventos en función del instante de tiempo que deseemos, siempre que se contemple dentro de la programación y tengamos correctamente conectado el hardware externo que necesitemos, por ejemplo, que a las 18:00:00h del día 14/04/2016 se encienda una bombilla a través de un Relé conectado a uno de los pines digitales de salida de los que nuestro Arduino dispone, para que posteriormente se apague a las 18:30:00h. Para más información debéis revisar el POST donde se explica detenidamente el manejo de los Relés.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         RTC DS1307.

·         Batería de 3V CR2032.

·         Módulo LCM 2004 I2C V1.

·         Display 20x4 LCD 2004.

·         Protoboard.

·         Cables de conexión.


Código del programa:



Video:


jueves, 7 de abril de 2016

Registrando temperatura ambiente con LM35 y lector de tarjetas micro SD


Hoy os traigo un simple y económico sistema para registrar los valores de temperatura que hay en un determinado lugar a lo largo del tiempo, para ello, vamos a utilizar un sensor de temperatura LM35 y un módulo lector de tarjetas micro SD, que junto con nuestro Arduino y una sencilla programación lograremos crear un robusto dispositivo para el registro climático. El LM35 es un sensor de temperatura de muy bajo coste con una precisión calibrada de 1 °C. Su tensión de salida es lineal y proporcional a la temperatura, por lo que cada grado Celsius equivale a 10 mV, abarcando un rango de medición desde -55 °C (-550mV) hasta 150 °C (1500mV). Debido a su baja corriente de alimentación (60 μA) se produce un efecto de auto calentamiento muy reducido, además se encuentra en el mercado en diferentes tipos de encapsulado, el más común es el TO-92, utilizado también por los transistores de baja potencia. El LM35 no requiere de circuitos adicionales para su correcto funcionamiento, la baja impedancia de salida y su precisa calibración interna hacen posible su fácil instalación a nuestro Arduino.

Sensor de temperatura LM35

Este dispositivo consta de tres pines de conexión, los dos de los extremos para la alimentación (+5V y GND) y el central para el voltaje de salida “Vout”, que será el pin que conectaremos a la entrada analógica A0 de nuestro Arduino para que a través de su conversor A/D de 10 bits de resolución podamos obtener ciertos valores con los que poder operar y de esta manera obtener la temperatura real que está detectando el sensor en cada momento. Partiendo de la premisa de que 1 °C equivale a 10mV en Vout, lo primero que hacemos es obtener el valor que nos entrega el conversor A/D tras la lectura del pin Vout del sensor, después multiplicamos este valor por la precisión para obtener el voltaje real y por último dividimos el voltaje entre los 10mV para obtener los grados centígrados (°C), quedando la siguiente fórmula matemática.



A partir de aquí lo que nos interesa conocer es que nuestro Arduino puede leer y escribir datos en tarjetas micro SD a través de un módulo específico, pero no formatearlas, debido a ciertas limitaciones de la librería  #include que utilizamos, aunque como siempre estas limitaciones o especificaciones pueden cambiar en el futuro, pero es importante que las tengáis en cuenta. Por ahora solo soporta tarjetas micro SD en formato FAT16 y FAT32, en principio si usas FAT32 deberías poder usar hasta una tarjeta de 32Gb, además los nombres y archivos quedan limitados al viejo formato 8.3, es decir,  nombre de 8 caracteres y extensiones de tres,  y nada de acentos en los nombres,  ni nuestra querida letra “Ñ”,  ni espacios en blanco, en definitiva  nada que no sean letras y números, sin signos raros. Si usas Windows en cualquier versión, puedes introducir la tarjeta micro SD en un adaptador SD o similar y formatearla desde el administrador de archivos, eligiendo la opción formatear y en sistema de archivos debes seleccionar FAT32 (predeterminado), manteniendo en las opciones de formato el rápido. También debéis de conocer que la librería puede no escribir inmediatamente los datos que le envías a la tarjeta micro SD, y para asegurarse de que es así, debes hacer una llamada a flush (Vaciar) o close (Guardar y cerrar).

Lector de tarjetas micro SD

Para finalizar os tengo que decir que el módulo lector de tarjetas micro SD se conecta a nuestro Arduino mediante comunicación SPI, que no es más que uno de los protocolos de comunicación serie que soporta, además tenemos que cargarle el programa para que se escriba en la tarjeta micro SD cada 5 segundos el valor de la temperatura ambiente en un archivo llamado “LM35.TXT” (Si este archivo no existe lo crea y si ya existe añade los datos a continuación de los anteriores), cuyo contenido tendrá el siguiente aspecto.

Monitor serie del IDE de Arduino

A través del monitor serie del IDE de  Arduino podremos ir visualizando la temperatura a tiempo real además de los distintos mensajes que irá enviando el programa en función del comportamiento del lector de tarjetas micro SD (Error al leer la tarjeta, valor almacenado correctamente, error al escribir en LM35.TXT…).



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Sensor de temperatura LM35.

·         Módulo lector de tarjetas micro SD.

·         Tarjeta micro SD genérica de 2GB.

·         Protoboard.

·         Cables de conexión.


Código del programa:



Video:


miércoles, 30 de marzo de 2016

Piano con teclado capacitivo TTP229 de 16 canales y un zumbador


Hoy os traigo un fabuloso piano táctil, realizado con un teclado matricial capacitivo TTP229 de 16 canales, mediante el cual vamos a poder enviar diferentes frecuencias al zumbador piezoeléctrico activo, para conseguir la escala de todas las notas musicales en diferentes octavas, en concreto desde la 2ª a la 6ª octava, o lo que es lo mismo desde los 65,40Hz hasta los 1975,53Hz. He modificado el teclado original con unas pegatinas que podéis descargar en el siguiente enlace, para que sepamos a que tecla corresponde cada nota musical y también poder reconocer las diferentes octavas.

Teclado matricial capacitivo TTP229 de 16 canales

Este teclado está basado en el sensor capacitivo TTP229 y se utiliza mucho como una buena alternativa a los teclados mecánicos existentes, proporcionando mayor durabilidad a nuestros proyectos en situaciones donde haya que realizar gran cantidad de pulsaciones. El teclado por defecto viene configurado en el modo de 8 teclas, estando las salidas de la 1 a la 8 mapeadas directamente al conector del teclado, pero cuando se requiere utilizar las 16 teclas, que es nuestro caso, es necesario la utilización de un “Jumper” que lleve a nivel BAJO el pin TP2/KYSEL para poder cambiar al modo de 16 teclas, configurándolas como nos apetezca con Arduino a través de comunicación I²C y por supuesto gracias al código de programación que le cargamos. Según la configuración de la siguiente imagen tendremos un teclado en modo de 16 teclas, salidas activas a nivel BAJO y sin multi-key (las teclas solamente se pueden pulsar de una en una).

Configuración del teclado matricial capacitivo TTP229 de 16 canales

Para poder comprender mejor el funcionamiento y el código de programación de este singular piano táctil, os tengo que comentar que el oído humano capta solamente frecuencias que estén por encima de los 20Hz y por debajo de los 20.000Hz (muy aproximadamente). Así pues, y con mucha suerte, sólo podemos oír unas 10 octavas como mucho, con doce notas cada una. Las 12 notas tienen distintas representaciones en el lenguaje musical (Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La# y Si), pero la diferencia de frecuencia entre cada nota y la siguiente es lo que las caracteriza, y lo que nos permite identificarlas. Además, las 12 notas de una octava, están separadas por lo que en música se denomina un semitono, y que es la mínima distancia tonal que puede haber entre dos notas cualesquiera (siempre hablando del esquema básico de la música occidental). Para finalizar esta pequeña introducción sobre las notas musicales  me queda por comentaros que una melodía es una sucesión de "notas", que hacen vibrar el aire a frecuencias distintas, que es ni más ni menos lo que se pretende realizar en este POST, y que cada  octava se extiende a través de un rango de frecuencias que es del doble del tamaño que el rango de frecuencias de la octava anterior como se puede observar en la siguiente tabla.

Frecuencia de las notas en las octavas de la 2ª a la 6ª

Una vez conectado el hardware y cargado el código en nuestro Arduino, podemos ir pulsando las diferentes teclas para componer nuestras propias melodías. Para saber en qué octava nos encontramos en cada momento se ha dotado al sistema de una serie de LEDS que se encenderán únicamente cuando estemos en la octava que les corresponda como se muestra a continuación.

Tabla de LEDS y Octavas


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Teclado matricial capacitivo TTP229 (16 canales).

·         5 LEDS de 3mm (blanco, verde, amarillo, rojo y azul).

·         5 Resistencias de 220Ω.

·         Zumbador piezoeléctrico activo (Buzzer).

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:

martes, 22 de marzo de 2016

Detector de partículas de polvo en el aire con sensor GP2Y10


El sensor GP2Y10 de Sharp es especialmente efectivo detectando partículas muy finas de polvo en el aire, de hasta 0.5 micras, y se utiliza frecuentemente para detectar la calidad del aire en sistemas de purificación del aire o en sistemas de aire acondicionado. Este sensor de detección óptica está compuesto internamente por un diodo emisor de infrarrojos (IRED) y por un fototransistor, colocados diagonalmente de tal forma que son capaces de detectar las reflexiones de luz sobre las partículas de polvo en el aire.
Especialmente es eficaz para detectar partículas muy finas como las del humo de un cigarrillo, pudiéndose distinguir el humo del polvo de la casa mediante un patrón de impulsos basado en comprobar el voltaje de la salida (Vo) cada 10ms, averiguando cuantas veces se interrumpe la comunicación entre el IRED y el fototransistor, y por lo tanto conociendo la densidad y la concentración de partículas de polvo o humo que hay en un determinado instante.

Sensor de polvo SHARP GP2Y10

Se trata de un sensor de muy bajo consumo, entorno a los 20mA,  que puede ser alimentado con un voltaje de hasta 7VDC. La salida es un voltaje lineal y proporcional a la cantidad de polvo detectado. La sensibilidad del sensor es de 0.5V por cada 0.1 mg/m³. Para conectarlo a nuestro Arduino, se deben de añadir una resistencia de 150Ω y un condensador de 220µF, formando un  circuito RC serie como divisor de tensión, como se puede observar en la siguiente imagen.

Conexión correcta de la entrada del sensor

El IRED del sensor GP2Y10 que tenemos conectado al pin digital 2 de Arduino permanece activo durante 0,32ms, que es la suma de lo que la salida Vo tarda en estabilizarse para poder ser leída a través del pin analógico A0 (0.28ms), más los 0.04ms que la salida Vo se mantiene en su máximo valor. Posteriormente el IRED permanece desactivado durante los 9.680ms siguientes antes de repetirse la secuencia del pulso de control (10ms) del IRED como se muestra a continuación.

Secuencia del pulso de control del IRED

En este POST voy a utilizar el sensor GP2Y10, para obtener el voltaje en la salida Vo del sensor, además de los valores de concentración y densidad de partículas de polvo en el aire mediante unas fórmulas matemáticas cotejadas con los valores que se obtienen del medidor de calidad de aire profesional DC1100 que incluyo dentro de la programación. Todo ello va a poder ser visualizado a través de un display LCD 1602 que he conectado a Arduino a través de comunicación I²C.
Para realizar la simulación de una situación en la que el ambiente esté mucho más cargado de partículas de polvo que en mi habitación, he adherido el sensor GP2Y10 a un Tupperware, de un litro de capacidad, al que además he añadido un ventilador de 12VDC con conexión directa a la fuente de alimentación, para poder incluir harina u otro elemento que tenga pequeñas partículas a través del ventilador y que este las vaya recirculando a través del orificio del sensor GP2Y10 para obtener diferentes lecturas.

Sistema de detección de partículas de polvo en el aire

En la siguiente tabla podemos comprobar el voltaje de salida (en voltios) en función de la densidad del polvo (en mg/m³), que este sensor de SHARP nos ofrece.

Gráfica de la Calidad del Aire

Para conocer la calidad del aire en cada momento nos podemos orientar por medio de la siguiente tabla, que está realizada respecto a la concentración de partículas de polvo en partes por millón (ppm) que hay en el aire:

Tabla de la calidad del aire


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Sensor detector de partículas GP2Y10 de SHARP.

·         Resistencia de 150Ω.

·         Condensador electrolítico de 10V y C=220µF.

·         Ventilador de 12VDC 0.15A (C5010B12M).

·         Fuente de tensión de 12VDC.

·         Tupperware de 1L de capacidad.

·         Protoboard.

·         Cables de conexión.



Código del programa:




Video: