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:


jueves, 17 de marzo de 2016

Control de un LED desde un servidor WEB con el Ethernet Shield W5100


El Ethernet Shield W5100 nos sirve para conectar nuestro Arduino a internet a través del puerto Ethernet de un router WIFI, pudiendo trabajar como un servidor WEB local (accesible solamente desde la red WIFI donde está conectado el router) o global (accesible desde cualquier red externa) con el que se puede interactuar, ya sea recibiendo o enviando datos a través de él. Como su propio nombre indica, el Ethernet Shield W5100 está basado en el chip Ethernet Wiznet W5100, el cual soporta los conocidos protocolos de transporte de datos TCP y UDP, además de soportar hasta cuatro conexiones de sockets simultáneas, lo que le hace muy versátil como servidor WEB. Para controlar el Ethernet Shield junto con Arduino, es necesario trabajar con la librería que viene incluida por defecto en cualquiera de los IDE existentes en la página WEB del fabricante.

Ethernet Shield W5100

El Ethernet Shield dispone de unos conectores hembra que permiten conectar a su vez otras shields apiladas sobre nuestro Arduino, por lo que es importante conocer que los pines digitales 10, 11, 12, y 13 no pueden ser utilizados como E/S genéricas, puesto que son utilizados por la comunicación SPI entre el Arduino y el Ethernet Shield W5100. Este Shield también está dotado de un conector Ethernet estándar RJ45 para poder conectarlo tanto al puerto Ethernet de un router como a la tarjeta Ethernet de un PC. También tiene un jumper soldado marcado como “INT” puede ser conectado para permitir a nuestro Arduino recibir notificaciones de eventos por interrupción desde el W5100. Además incluye un slot SD para guardar información en una tarjeta micro SD y por último tiene un botón de reset capaz de reiniciar todo el conjunto, incluido nuestro Arduino.
Para mayor comodidad del usuario, este Shield contiene una serie de LEDS que nos informan sobre el estado y funcionamiento del sistema como se muestra a continuación:
                    PWR: Indica que el Arduino y el Ethernet Shield están alimentados.
                    LINK: Indica la presencia de un enlace de red y parpadea cuando el Ethernet Shield envía o recibe datos.
                    100M: Indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una de 10Mb/s).
                    FULLD: Indica que la conexión de red es full dúplex.
                    COLL: Parpadea cuando se detectan colisiones en la red.
                    RX: Parpadea cuando el Ethernet Shield recibe datos.
                    TX: Parpadea cuando el Ethernet Shield envía datos.
Para configurar de manera correcta el Servidor WEB, al Ethernet Shield se le debe asignar una dirección MAC, que nos es más ni menos que un identificador global único y diferente para cada dispositivo conectado a la red local. No es necesario modificar la dirección MAC que trae ya el programa por defecto, puesto que con esa MAC el Servidor WEB va a funcionar correctamente. También debemos de asignar al Ethernet Shield mediante programación, unas cuantas direcciones más que obtendremos desde nuestro PC con Windows, si nos vamos a inicio à ejecutar à cmd à ipconfig, obteniendo el siguiente resultado por pantalla:

Configuración de la direcciones del adaptador de LAN inalámbrico

De los datos obtenidos, nos interesan los que están redondeados en amarillo. Lo primero que tenemos que hacer es abrir el programa y modificar las siguientes líneas del código:

                 IPAddress ip(192,168,1,14): Teniendo en cuenta la dirección de la puerta de enlace predeterminada de nuestra LAN inalámbrica, que en mi caso es 192.168.1.1, tenemos que asignar una dirección IP al Ethernet Shield para que sea reconocido dentro de nuestra red local, del estilo a la dirección IP 192.168.XX, donde XX puede ser un número comprendido entre 1 y 254. Aunque como veremos más adelante es muy importante que la dirección IP que le asignemos al Ethernet Shield esté libre, en mi caso he utilizado la 14
                 IPAddress gateway(192, 168, 1, 1):  Tiene que coincidir exactamente con la dirección de la puerta de enlace predeterminada de nuestra LAN inalámbrica.
                 IPAddress subnet(255, 255, 255, 0): Tiene que coincidir exactamente con la dirección de la máscara de subred de nuestra LAN inalámbrica. 

Para comprobar si la dirección IP que le asignamos al Ethernet Shield está libre, tenemos que hacer un ping desde el “cmd” de Windows a esa dirección, en mi caso a la dirección 192.168.1.14, y si nos devuelve “Host de destino inaccesible” significa que podemos utilizar esa dirección para la IP del Ethernet Shield puesto que está libre.

Ping a la dirección IP 192.168.1.14 desde el “cmd” de Windows

Para que la dirección IP que le asignemos al Ethernet Shield no sea ocupada por otro dispositivo cuando tengamos desconectado el sistema nos tenemos que cerciorar que la dirección que le hemos asignado no pertenece a las direcciones que tienen DHCP (un protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración automáticamente) por defecto, es decir, direcciones que nuestro router va asignar de manera automática a los elementos que conectemos a nuestra red, por el mero hecho de que se encuentren vacías en ese mismo momento. Por norma general el DHCP se aplica en la mitad de los posibles nodos de la red, es decir de la dirección 192.168.1.128 a la 192.168.1.254 por lo que si utilizamos direcciones inferiores a la 128 no deberíamos de tener problema, aunque es recomendable utilizar direcciones IP cercanas a la dirección de la puerta de enlace predeterminada para evitar este tipo de problemas. Para asegurarnos al 100% de que nuestra dirección IP no va a cambiar, podemos acceder al nuestro router escribiendo en el navegador la dirección de la puerta de enlace predeterminada, que en mi caso es http://192.168.1.1, aunque siempre nos pedirá un usuario y una contraseña para poder acceder al router, que nuestro proveedor de internet (ISP) nos debe de haber suministrado cuando realizó la instalación. Una vez dentro del menú de nuestro router debemos de buscar la configuración DHCP, comprobar los rangos de direcciones a los que va a afectar el DCHP y enlazar las direcciones MAC e IP de nuestro Ethernet Shield, para que siempre que le conectemos al router, este le asigne la misma dirección IP. Como cada router es totalmente diferente, si no encontráis la opción os recomiendo buscar información de vuestro modelo de router a través de la WEB.

Enlace de las direcciones MAC e IP del Ethernet Shield

Por último, cuando queremos acceder al Servidor WEB desde una red externa a la que está conectado el Ethernet Shield, es decir, por ejemplo desde la conexión 4G de nuestro Smartphone o desde una red WIFI diferente, tenemos que conocer la IP Pública que tiene nuestro router para poder acceder a él, y que este nos lleve a la dirección IP del Ethernet Shield a través de un puerto, el 80 por defecto, que previamente tenemos que haber abierto para la comunicación HTTP en nuestro router. Para abrir el puerto 80, tenemos que acceder nuevamente al router y buscar la opción “Port Forwarding” para enlazar el puerto, con protocolos TCP y UDP, a la IP del Ethernet Shield, que en mi caso es la 192.168.1.14. Ahora volvemos a tener el problema de que todos los routers son diferentes, por lo que tendremos que investigar cómo se pueden abrir los puertos en nuestro modelo en concreto.

Puerto 80 (HTTP) abierto y enlazado a la IP 192.168.1.14 en router modelo ZXHN H218N

Ahora solamente tenemos que adaptar el Ethernet Shield sobre la placa Arduino y cargar el programa (sketch) desde el PC mediante el cable USB como se hace normalmente, para posteriormente desconectarlo del PC  y alimentarle desde una fuente externa, que en nuestro caso es una batería de Litio-ion de 12V/3000mAh (DC 12300) para un uso prolongado. También debemos de recordar conectar el Ethernet Shield a nuestro router WIFI utilizando un cable Ethernet standard (CAT5 o CAT6 con conectores RJ45). Una vez instalado todo yo recomiendo realizar un reinicio del Arduino y la Shield Ethernet mediante el botón de reset. Para conocer nuestra IP Pública y ver si tenemos el puerto 80 (HTTP) abierto, podemos seguir este enlace una vez que tengamos el sistema funcionando, teniendo en cuenta que a no ser que tengamos asignada una IP fija, la IP pública cambiará cada vez que reiniciemos el Router o en algunos casos la misma compañía la cambia cada cierto tiempo (IP dinámica).

En este POST en concreto vamos a controlar un LED, aunque se pueden controlar todo tipo de elementos electrónicos, a través de Internet ya sea desde la red local (WIFI) o externa (4G del Smartphone u otra RED a la que no esté conectado el Ethernet Shield), mediante un PC, Tablet o Smartphone. Serán necesarios unos conocimientos básicos de HTML, simplemente para poder hacer la página WEB a nuestro gusto, a través de la cual podamos encender y apagar un LED cuando queramos. Lo que vamos a crear con el Ethernet Shield, es un servidor WEB, el cual nos proporcionará el código HTML para poder verlo en nuestro navegador y poder, así, interactuar con él. En Internet, un servidor es un dispositivo remoto que provee los datos solicitados por parte de los navegadores de otros dispositivos, es decir, sirve información a los dispositivos que se conecten a él. Cuando los usuarios se conectan a un servidor, pueden acceder a programas, archivos y otra información del servidor. En la Web, un servidor es un dispositivo que usa el protocolo HTTP para enviar páginas Web al dispositivo de un usuario cuando éste las solicita.
 
Página WEB vista en el navegador del PC
 
                 Para acceder al “Servidor WEB” desde la red local (red WIFI donde tenemos conectamos el Ethernet Shield), tenemos que acceder a la siguiente dirección WEB desde el navegador del PC por ejemplo, que coincide con la dirección IP que hemos asignado en un principio al Ethernet Shield. 
                 Para acceder al “Servidor WEB” desde una red externa (red 4G de un Smartphone u otra red WIFI diferente por ejemplo) tenemos que acceder a la siguiente dirección WEB desde el navegador del Smartphone (ojo siempre que estemos conectados a la red 4G y no a la WIFI), que coincide con la dirección IP pública que tiene asignada nuestro router, seguida del puerto HTTP (80), separados por dos puntos.

http://mi IP pública:80


 
 
Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Ethernet Shield W5100.

·         Cable Ethernet standard (CAT5 o CAT6 con conectores RJ45).

·         LED 5mm (de cualquier color).

·         Resistencia de 220Ω.

·         Batería de Litio-ion de 12V/3000mAh (DC 12300).

·         Protoboard.

·         Cables de conexión.



 
Código del programa:



Video: