lunes, 29 de febrero de 2016

Geolocalización con módulo GPS GY-NEO6MV2 y LCD 1602


Hoy les traigo un geolocalizador muy compacto, económico y de muy bajo consumo, puesto que solamente requiere de 3V para su correcto funcionamiento, aunque nosotros le vamos a alimentar con la salida de 3,3V que Arduino nos ofrece. Este sistema de geolocalización está basado en el módulo GPS GY-NEO6MV2, mediante el que obtenemos las coordenadas, en grados, de latitud y longitud, el valor en metros de la altitud a la que nos encontramos, y como plus también se obtiene la hora internacional en formato de 24 horas que el satélite nos devuelve. El sistema necesita de un cierto tiempo para sincronizarse con los satélites, además para su correcto funcionamiento es muy importante utilizarlo en zonas exteriores o si lo utilizamos en interiores lo debemos de colocar muy cerca de una ventana. Los valores obtenidos se muestran a través de un display LCD 1602 conectado a nuestro Arduino por medio de comunicación I2C.
El módulo GPS GY-NEO6MV2 viene con un módulo 6 U-Blox NEO de serie equipado en el PCB, una EEPROM con su correspondiente pila de tipo botón para mantener los datos intactos y una antena de cerámica que permite amplificar las señales recibidas de los satélites con los que se comunica.


Módulo GPS GY-NEO6MV2

Este módulo es sumamente sencillo de conectar a nuestro Arduino puesto que requiere de comunicación serie, y solo se necesitan dos pines para su conexión (TX/RX), además de dos resistencias de 4,7KΩy 10kΩ para adecuar la señal que recibe el módulo a través de su pin RX. Para más información, debéis consultar los comentarios del código del programa.


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo GPS GY-NEO6MV2.

·         Display 16x2 LCD 1602.

·         Pila de 9V con adaptador Jack macho de 2.1mm.

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:


viernes, 26 de febrero de 2016

Lámpara efecto camaleón con sensor de color y NeoPixels


Como todos sabemos los camaleones son famosos por su habilidad de cambiar de color para mimetizarse con el entorno que los rodea y así ser invisibles para sus posibles depredadores y presas. En este POST vamos a captar colores con un módulo sensor de reconocimiento del color TCS3200, para procesarlos mediante Arduino y mostrarlos a través de un disco de 7 leds NeoPixel, que iluminará con el color correspondiente la mampara modelo camaleón (descarga del dibujo del camaleón), que he fabricado para conseguir imitar el comportamiento de los pigmentos de la piel de un camaleón.

Mampara modelo camaleón

El módulo sensor de reconocimiento del color TCS3200, es un módulo que incluye cuatro diodos LED blancos de 5 mm con sus respectivas resistencias limitadoras de corriente que nos sirven como iluminación, además de un sensor del color TCS3200 programable, que es capaz de convertir luz en frecuencia, es decir, puede filtrar los datos RGB de la fuente de luz y  convertirlos en una onda cuadrada con una frecuencia directamente proporcional a la intensidad de luz irradiada. Para contar los ciclos  y determinar la frecuencia utilizamos la interrupción externa INT 0 (Pin digital 2 de Arduino à OUT), y para lograr obtener todas las tonalidades de color del círculo cromático realizamos la conversión de TSL (tono, saturación, luminancia) a RGB según los cálculos del modelo de color.  La frecuencia de salida se puede escalar con los pines S0 y S1 (opciones seleccionables 2%, 20%, 100% de frecuencia), y con los pines S2 y S3 se controla el filtro de RGB que estamos aplicando. Las entradas y salidas digitales de este módulo van conectadas a nuestro Arduino como se muestra en el esquema de conexión dentro del programa.


Módulo sensor de reconocimiento del color TCS3200

Para terminar os tengo que decir que el disco leds NeoPixel, está compuesto por 7 leds 5050 ultra brillantes y además integra el controlador WS2812 en su interior, lo que permite ajustar individualmente cada LED dentro de una cadena de comandos. Esta clase de leds digitales funcionan con una alimentación de 5V DC, aunque admite un rango entre 4v y 7v. Para su control requieren de una señalización de datos muy sensible a la sincronización a través del pin “IN”. La  biblioteca NeoPixel del Adafruit (#include ) escrita para Arduino soporta estos píxeles perfectamente.


Disco de 7 leds NeoPixel 5050 WS2812

A través del monitor serie del IDE de Arduino se mostrarán los valores RGB del color que se está captando con el sensor de reconocimiento del color TCS3200 en cada momento.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Sensor de reconocimiento del color (TCS3200).

·         Disco de 7 LEDS NeoPixel (5050 WS2812).

·         Mampara modelo camaleón (Papel, cartón, pegamento y tijeras).

·         Cartulinas de colores (Rojo, verde y azul).

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:

miércoles, 24 de febrero de 2016

Control de acceso con el módulo RFID RC522


Hoy les voy a presentar el módulo RFID-RC522 en una de sus facetas, es este caso, leer el número de serie de una tarjeta o llavero MIFARE 1K, para posteriormente compararlo con unos números de serie previamente guardados dentro del programa y actuar en consecuencia según coincidan o no. MIFARE es una tecnología de tarjetas inteligentes sin contacto (TISC), de las más ampliamente instaladas en el mundo, es equivalente a las 3 primeras partes de la norma ISO 14443 Tipo A de 13.56 MHz con protocolo de alto nivel.
La tarjeta MIFARE 1K (la más común de todas) tiene 16 sectores independientes que pueden configurarse para almacenamiento de información general. El primer bloque (número 0),  se usa comúnmente como directorio de la tarjeta y contiene el número de serie (UID), mientras que el bloque 3 contienen las llaves de seguridad Key A y Key B por lo que tampoco son hábiles para almacenar datos, con lo que quedan otros 13 bloques para almacenar datos. Estos dispositivos son muy utilizados como monederos en los transportes públicos. Para diferenciar las tarjetas y los llaveros, las he marcado con su número de serie como se puede observar en la siguiente imagen.

Tarjetas y llaveros MIFARE 1K

El módulo RFID RC522 (identificación por radiofrecuencia) se alimenta a  3.3V, le vamos a comunicar con nuestro Arduino a través del protocolo de comunicación SPI (10 Mbit/s), tiene un consumo aproximado de 26 mA cuando está trabajando a pleno rendimiento y la distancia máxima de lectura es de 6 cm, además este módulo utiliza un sistema avanzado de modulación y demodulación para todo tipo de dispositivos pasivos de 13.56 MHz,  maneja el ISO14443A y soporta el algoritmo de encriptación Quick CRYPTO1 y MIFARE.

Módulo RFID RC522

En este POST simplemente vamos a ir leyendo los números de serie de varios llaveros y tarjetas MIFARE, con la premisa de que si pasamos cualquiera de las dos tarjetas por el lector, se encenderá el LED de color verde durante 3 segundos (mensaje: usuario válido!!!) y si pasamos cualquier llavero se encenderá el LED de color rojo (mensaje: usuario no válido!!!).
Por último decir que los Smartphone disponen de una tecnología de comunicación inalámbrica similar a la RFID denominada NFC (comunicación de campo cercano), por lo que si acercamos la parte trasera de nuestro Smartphone al lector RFID RC522, previamente activado el NFC, conseguiremos leer el número de serie NFC de nuestro Smartphone y a su vez activar una alarma sonora durante y encender el LED de color rojo al mismo tiempo durante 3 segundos (mensaje: usuario no válido!!!). A través del monitor serie podremos comprobar el número de serie de los diferentes dispositivos y si el usuario es válido o no, cuando pasemos por el lector una tarjeta, un llavero o en su defecto un Smartphone con NFC.

Monitor serie del IDE de Arduino


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo RFID RC522.

·         2 tarjetas y 3 llaveros MIFARE 1K.

·         Smartphone con NFC (Opcional).

·         Protoboard.

·         Cables de conexión.


Código del programa:





Video:

viernes, 19 de febrero de 2016

Juego “Runner Scape” con display LCD 1602 y comunicación I2C


Aquí les dejo un juego para Arduino junto con el display LDC 1602, que yo he apodado “Runner Scape”, puesto que se basa en un personaje que tiene que ir sorteando los obstáculos que le van alcanzando a medida que va corriendo. La mecánica del juego es tremendamente sencilla y a su vez adictiva, es decir, cada vez que presionamos el pulsador conectado al pin digital 2 de Arduino, conseguimos que el personaje realice un salto para sortear un obstáculo, teniendo como meta la de conseguir la puntuación más alta posible sin chocarnos con los obstáculos que nos irán apareciendo, de manera aleatoria, por la pantalla (un punto equivale a un segundo corriendo sin chocarse). Una vez finalizado, el juego se reestablece presionando nuevamente el pulsador. A continuación os dejo una captura de una escena del juego.

Captura de una escena del juego

Por último me gustará aclarar que este juego fue programado inicialmente por Joshua Brooks y subido en la WEB de Instructables, aunque yo he añadido la comunicación I2C entre el Arduino y el LCD 1602, para que la instalación hardware del juego sea mucho más sencilla. Además he traducido al español, en la medida de lo posible los comentarios y mensajes del juego. Del código del programa tengo poco que añadir puesto que se trata de una programación de un nivel avanzado, cosa que de momento no entra dentro de nuestros propósitos.


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Pulsador.

·         Resistencia de 10KΩ.

·         Protoboard.

·         Cables de conexión.


Programa:





Video:

jueves, 18 de febrero de 2016

Radio FM con el módulo TEA5767 V3


En el POST de hoy vamos a trabajar con el módulo TEA5767 V3, para poder sintonizar las emisoras de radio FM de nuestro país, que en mi caso es España, aunque este método es válido para cualquier emisora de radio FM que tenga una frecuencia de emisión entre los 87,5 MHz y los 108 MHz. Como este módulo posee su propio oscilador de cristal interno es capaz de funcionar por si solo sin necesidad de conectarlo a ningún microprocesador, aunque dotándolo de unos circuitos básicos externos para su alimentación y control.
Módulo TEA5767 V3

En nuestro caso lo vamos a conectar a nuestro Arduino mediante comunicación I2C, para que a través de dos pulsadores denominados “subeCanal” y “bajaCanal”, podamos subir y bajar respectivamente el canal y para que a través de un display LCD 1602 podamos observar el nombre de la emisora y la frecuencia que estamos sintonizando en cada momento. Al conectar el sistema o al realizar un RESET, se sintonizará por defecto el canal número 8 (canal central), correspondiente a la emisora “M80 Radio”, sin necesidad de presionar ninguno de los dos pulsadores anteriormente mencionados. Dentro del programa tenemos declarada la matriz “frecuencia[16 ]” con las frecuencias correspondientes a las 16 emisoras de radio FM españolas más conocidas según mí criterio. A continuación os muestro la lista de emisoras de radio FM, que yo he programado,  con su número de canal y frecuencia correspondientes.
Lista de las emisoras de radio FM españolas más escuchadas

Para poder escuchar la emisora de radio FM que estamos sintonizando en cualquier momento, hay que conectar unos altavoces estéreo auto amplificados en la salida del módulo TEA5767 V3 (Jack hembra de 3,5 mm), o en su defecto unos auriculares, aunque con el inconveniente de que no podemos controlar el volumen máximo de la salida y podemos dañar nuestros oídos (en próximos POST os mostraré como se puede controlar el volumen en un sistema de este tipo).
Por último decir que la sentencia “switch(case)” del código del programa, va a ser la encargada de almacenar el nombre de la emisora que se va a mostrar a través del display LCD, aunque con el inconveniente de que esta información la debemos de meter nosotros dependiendo de las frecuencias de radio FM que hayamos metido dentro de la matriz “frecuencia[ ]”. Para mayor información os recomiendo que repaséis  los comentarios incluidos dentro del código del programa.


Lista de Materiales:

·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo de radio TEA5767 V3.

·         2 Pulsadores.

·         2 Resistencias de 10KΩ.

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Protoboard.

·         Cables de conexión. 




Código del programa:





Video:

martes, 16 de febrero de 2016

Contador ascendente/descendente con codificador rotativo


En el POST de hoy, introduzco la utilización de un codificador rotativo, que aunque son muy parecidos a un potenciómetro por fuera, en realidad son muy distintos. El potenciómetro nos da un valor analógico que tenemos que leer, pero el codificador nos envía información “digital” que vamos leyendo según giramos el mando del codificador. El modelo que vamos a utilizar nosotros es el PEC11-4215F-S0024, que nos envía 24 “pulsos” en una vuelta completa, pero ya montado sobre una pequeña tarjeta de circuito impreso con sus respetivas conexiones internas y sus resistencias PULL-DOWN incorporadas.

Módulo codificador rotativo

Su funcionamiento es muy sencillo, al girarlo se envían dos señales cuadradas desfasadas 90 grados entre sí, una por el pin CLK y otra por el pin DT del módulo, aunque dependiendo del sentido en que estemos girando el mando del codificador rotativo, el desfase de la señal del pin DT respecto del pin CLK será positivo o negativo como en el siguiente diagrama os muestro, con lo que obtendremos unos valores en el pin DT diferentes en cada caso y que podremos evaluar con Arduino para reconocer el sentido de giro en cada momento.

Diagrama de estado de los pines CLK y DT del codificador rotativo

Si evaluamos el valor de los pines CLK y DT del codificador rotativo, cuando hay un cambio de estado, de “1” a “0” (Flanco de bajada) o de “0” a “1” (flanco de subida), en el pin CLK, podemos observar en el diagrama anterior que si estamos girando en sentido horario, el valor de CLK y DT son siempre contrarios, en cambio sí giramos en sentido antihorario los valores de CLK y DT siempre coinciden, con lo que basaremos la programación del código que grabaremos en nuestro Arduino en este fenómeno para que pueda saber en qué sentido estamos girando.
Además de conocer el sentido de giro del mando del codificador rotativo, que Arduino nos señalizará mediante el encendido de dos LEDS, es decir, el LED azul solo se encenderá cuando giramos en sentido horario y el rojo cuando lo hacemos al contrario, también visualizaremos a través de un display de 7 segmentos de un solo digito, la posición en la que se encuentra el mando, aunque en una escala del 0 al 9 exclusivamente (se incrementa una posición cuando giramos en sentido horario y cuando giramos en sentido contrario disminuye). Por último añadir que los codificadores rotativos son ampliamente utilizados por ejemplo para el control del volumen en equipos de sonido.
Para su correcto montaje y funcionamiento, cada uno de los segmentos que componen el display de 7 segmentos se denominan a, b, c, d, e, f y g, denominándose además dp al punto decimal, tal y como se muestra en la siguiente imagen.

Relación entre terminales y segmentos

Para este proyecto utilizaremos un display de 7 segmentos de cátodo común, en concreto el modelo LMS5161AS (luz roja, tamaño de dígito 0.56''). Para obtener un brillo optimo del display, debemos de colocar una resistencia de 220Ω por cada terminal y no una sola en el común (en este caso el común no llevaría resistencia). Aunque para efectos de prueba nos sobra con este montaje. Para más información sobre la utilización del display, podemos ver el POST “Display de 7 segmentos de un solo dígito” publicado con anterioridad a este.


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo codificador rotatorio (PEC11-4215F-S0024).

·         Display de 7 segmentos de cátodo común (LMS5161AS).

·         3 Resistencia de 220Ω.

·         2 LEDS de 3 mm (Rojo y Azul).

·         Protoboard.

·         Cables de conexión.


Código del programa:





Video:

jueves, 11 de febrero de 2016

Robot láser controlado con un Joystick Analógico


En este POST vamos a construir un pequeño robot de dos ejes (x e y), que va a llevar incorporado un módulo láser, con el que se va a poder apuntar al objeto que deseemos, mediante el movimiento de un pequeño joystick analógico que va a ser el encargado de controlar el ángulo de giro de las plataformas que realmente componen el cuerpo del robot.
Como del joystick y de los micro servos SG90 9G ya he hablado ampliamente en POST anteriores, ahora os voy a comentar algunas cosas a cerca del módulo láser. Este módulo consta de un pequeño diodo láser emisor de 6 mm, alimentación a 5Vdc, de color rojo, 650nm de longitud de onda y  un bajo consumo de 30mA cuando se le entregan 5Vdc; además es muy usado en proyectos de alarmas, mandos a distancia, contadores por obstrucción, sensores de barrera, etc…

Módulo láser

Como precaución importantísima antes de utilizar un láser,  os advierto de que nunca debemos apuntar directamente a los ojos de personas ni animales, puesto que este láser aunque es de baja potencia, es capaz de dañar gravemente la visión, incluso a largas distancias.
Para finalizar de hablar sobre el robot láser, os voy a hablar sobre el mecanismo que da vida al movimiento del robot, que es simplemente una plataforma utilizada para cámaras FPV (vuelo en Primera persona), que incorporan algunos de los modelos actuales de DRON,  dotada de un par de micro servos SG90 9G que van a ser los encargados de generar el movimiento en los ejes x e y, dependiendo directamente de las señales que se le envíen desde el joystick analógico. Para que os hagáis una idea concreta de lo que os estoy hablando, a continuación os muestro una serie de fotos de como queda el montaje final del robot.

Montaje final del Robot láser


Lista de Materiales:

·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Joystick analógico.

·         Plataforma para cámara FPV.

·         2 Micro Servos Mr RC SG90 9G.

·         Módulo laser.

·         Protoboard.

·         Cables de conexión.


Código del programa:





Video: