martes, 22 de diciembre de 2015

Control de un LED a través del Monitor Serie


En este POST os voy a explicar cómo se utiliza el puerto serie de Arduino, para comunicarnos con un PC, aunque este tipo de comunicación también es factible entre dos Arduinos, aunque en este caso ese no sea el propósito.
El IDE de Arduino, posee una herramienta llamada "Monitor Serie", esta herramienta abrirá una consola con la que podemos comunicarnos con Arduino, tanto para mandarle comandos como para recibir información. Esto es muy útil para conocer el estado de las variables de programa y saber qué es lo que realmente está pasando dentro de nuestro Arduino.
El puerto serie del Arduino Uno utiliza los pines digitales 0(RX) y 1(TX). Estos están conectados al controlador FTDI integrado en la placa, que es el que permite la traducción del formato serie TTL a USB. Estos pines no pueden ser utilizados para cualquier otro propósito mientras estamos utilizando la comunicación serie.
Para usar el puerto serie del Arduino hay varias funciones de programación que debemos de conocer. A continuación os muestro las que he considerado más importantes:
·         Serial.begin (velocidad):   Activa la comunicación serie y establece la velocidad. La velocidad de conexión (baudios o Baud Rate) es la velocidad que llegan los datos al puerto serie (normalmente se usa 9600bps).
·         Serial.available( ): Devuelve el estado del buffer del puerto serie y nos dice si hay datos dentro de este.
·         Serial.read( ): Lee un carácter del buffer (un solo byte).
·         Serial.write( ): Escribe tantos caracteres como quieras a través del puerto serie.
·         Serial.print( ): Imprime los datos al puerto serie como texto ASCII.
·         Serial.println( ): Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13, o ‘\r’) y un carácter de avance de línea (ASCII 10, o ‘\n’).
·         Serial.flush( ): Vacía el buffer de entrada de datos.
·         Serial.end( ): Desactiva la comunicación serie, para que los pines 0(RX) y 1 (TX) puedan utilizarse como entradas o salidas digitales.
NOTA: Para enviar y recibir datos, Arduino utiliza el código ASCII.
Para acceder al “Monitor Serie”, una vez abierto el IDE de Arduino, nos tenemos que dirigir hacia Programa à Monitor Serie o mediante comandos abreviados teclear Ctrl+Mayús+M.
Con el programa que os muestro a continuación, vamos a ser capaces da encender y apagar un LED, cuando enviamos caracteres a través del monitor serie. Si el carácter enviado es “D” o “d” el LED conectado al pin digital número 5 se enciende, y si lo que enviamos es “I” o “i” el LED se apaga (para más información consultar los comentarios del código). 
Ventana del Monitor Serie

Lista de Materiales:
 
·         Arduino UNO Rev.3.
·         Cable USB tipo A-B.
·         LED 3mm (de cualquier color).
·         Resistencia de 220Ω.
·         Protoboard.
·         Cables de conexión.
 
 
Código del programa:



 Video:



viernes, 18 de diciembre de 2015

Efecto FADE-IN y FADE-OUT en unos LEDS


Como nos estamos acercando a unas fechas especiales para la mayoría de nosotros, os voy a enseñar a utilizar los efectos FADE-IN (rearme) y FADE_OUT (desvanecimiento), que podemos aplicar en los diodos LED, para crear una pequeña secuencia de luces navideñas que usaremos para decorar nuestro árbol de navidad.
Esta secuencia puede ser más lenta o rápida, dependiendo del valor del delay() que introduzcamos mediante programación. Sin más dilación os presento el programa donde podréis comprender mucho mejor el funcionamiento de todo esto.
 

Lista de Materiales:
 

·        Arduino UNO Rev.3.
 
·        Cable USB tipo A-B.
 
·        5 LEDS 3mm (Colores: Blanco, Amarillo, Verde, Rojo y Azul).
 
·        5 Resistencias de 220Ω.
 
·        Protoboard.
 
·        Cables de conexión.


 
Código del programa:


 
 
 Video:
 


Pulsador con enclavamiento de estado


Los pulsadores son elementos muy utilizados para mandar señales “todo” o “nada” a dispositivos electrónicos que trabajan con lógica TTL (lógica transistor a transistor), como es el caso de los pines digitales de Arduino.  
Detalle de un Pulsador

 
Si realizamos una conexión PULL-DOWN entre el pulsador y una entrada digital cualquiera de Arduino, cuando activemos el pulsador, Arduino estará recibiendo +5V, que los codifica como estado alto (HIGH o “1” lógico), mientras que si el pulsador permanece en reposo, Arduino estará recibiendo un estado bajo (LOW o “0” lógico).
Conexión PULL_DOWN


Mediante programación vamos a ser capaces de implementar un pulsador con enclavamiento de estado, para que cuando activemos el pulsador, una salida digital de Arduino se ponga a “nivel alto” si se encontraba a “nivel bajo” y viceversa, es decir, seremos capaces de almacenar el estado de la salida digital para que esta cambie de “HIGH” a “LOW” o de “LOW” a “HIGH” cada vez que activemos el pulsador.
En la salida digital de Arduino con la que estemos trabajando, conectaremos un LED para poder comprobar que de verdad está cambiando el estado de la salida cada vez que activamos el pulsador (ON/OFF), aunque podríamos utilizar este tipo de configuración para “activar” o “desactivar” multitud de dispositivos electrónicos como relés, buzzers, motores, etc… 

Lista de Materiales:

·         Arduino UNO Rev.3.
·         Cable USB tipo A-B.
·         LED 5mm (de cualquier color).
·         Pulsador.
·         Resistencias de 10KΩ y 220Ω.
·         Protoboard.
·         Cables de conexión.


Código del programa:
 

 
 
 
Video:
 

 
 



jueves, 17 de diciembre de 2015

Display LCD 16x2 con comunicación I2C

 
Aquí les dejo como simplificar la conexión de un LCD 16x2 (consta de 2 líneas y 16 caracteres por línea), mediante comunicación I2C (SCL y SDA únicamente), puesto que por el método tradicional, necesitaríamos un potenciómetro lineal de 10KΩ además de ocupar un gran número de pines digitales, con lo que el montaje del circuito se complicaría en exceso, aunque no va a ser nuestro caso.
Para realizar las conexiones de nuestro montaje, necesitamos un módulo LCM 1602 I2C V1, que es el encargado de realizar la comunicación I2C entre el Arduino y el LCD 1602. Este módulo consta de un expansor de E/S de 8 bits destinado a la comunicación I2C, el cual le podemos encontrar en las versiones PCF8574 y PCF8574A, un potenciómetro para controlar el contraste del LCD, una serie de resistencias para regular corrientes y un pequeño LED integrado en la placa para saber si el módulo está alimentado correctamente (POWER).
Módulo LCM 1602 I2C V1

Este módulo va soldado directamente sobre los terminales del LCD 1602 que se describen a continuación:
·         VSS: Es el terminal de alimentación negativa, es decir, 0 V (masa o GND).
·         VDD: Es la alimentación positiva de la pantalla y el chip (5 V). Es recomendable ponerle en serie una resistencia para evitar daños (con una de 220 Ω es suficiente.
·         RW: Es el terminal de activación de lectura/escritura. Se suele conectar a masa para que se escriba en todo momento.
·         VO: Es el contraste de la pantalla, debe conectarse con un potenciómetro de unos 10 kΩ.
·         RS: Es el terminal selector de registro, mediante el cual, el microcontrolador le comunica al LCD si quiere mostrar caracteres o si lo que quiere es enviar comandos de control, como cambiar la posición del cursor o borrar la pantalla, por ejemplo.
·         E: Es el terminal de habilitación de la pantalla, tiene que estar activado para poder recibir información.
·         D0~D7: El LCD tiene un bus de datos de 8 bits. En este Proyecto solamente utilizaremos 4 bits, de D4 a D7, que nos servirán para establecer las líneas de comunicación por donde se transfieren los datos.
·         A y K: Son los terminales del LED que ilumina el fondo de la pantalla (BackLight). A à 5 V y K à GND.
 
Otra cosa muy importante a recordar es que dentro de la programación, exactamente en la línea “LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);”, donde pone 0x27, es justo la dirección que va a tener nuestro LCD 1602. 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 1602 I2C V1, con un voltímetro. Si por ejemplo A0 = 0 o nivel BAJO (LOW) significa que ese pin está conectado a GND y de lo contrario si A0 = 1 o nivel ALTO (HIGH) significa que ese pin está conectado a +5V, en la mayoría de los módulos la dirección puede ser modificada simplemente soldando o no los pines de dirección a unos pines adyacentes que van conectados a GND, permitiéndonos conectar varios LCD al mismo tiempo y seleccionarlos según la dirección que tengan. Las posibles direcciones y configuraciones de los pines de dirección A2, A1 y A0 se pueden obtener de la siguiente tabla.
 
Tabla de configuración de los pines A2, A1 y A0 (direcciones I2C)
 
Para encontrar la dirección I2C de los LCD, también tenemos un método alternativo realizado mediante software, es decir, disponemos del programa denominado “Escaner_direcciones_I2C” que nos facilitará enormemente la búsqueda de las direcciones I2C de cualquier dispositivo que conectemos mediante este protocolo a nuestro Arduino.  


Simplemente tendremos descargar el programa desde el link anterior, conectar el dispositivo deseado mediante I2C, cargar el programa en nuestro Arduino y por último abrir el monitor serie del IDE de Arduino para obtener su dirección I2C.
 
Monitor serie del IDE de Arduino

También comentaros que este módulo lo podemos adquirir ya soldado en la parte posterior del LCD 16x2 o por separado, aunque si lo compramos por separado nos hará falta un soldador, estaño y una cierta práctica soldando. Por último no debemos de olvidar ajustar el contraste del LCD 1602 a través del potenciómetro que el módulo LCM 1602 I2C V1 trae incorporado. Ahora ya solo tenemos que conectar los 4 terminales del módulo a sus correspondientes de la placa Arduino (VCC, GND, SDL y SDA), cargar el programa y por último enviar caracteres a través del Monitor serie para que se vayan mostrando en el LCD.

Display 16x2 LCD 1602

Antes de proceder a enviar caracteres, el LED Backlight,  que sirve para iluminar el fondo del LCD , realiza mediante programación una serie de parpadeos, quedándose encendido finalmente. También le enviamos unas pequeñas líneas de texto al LCD para que la ejecución del programa sea mucho más interactiva (consultar comentarios en el código para comprender mejor el funcionamiento completo del programa).
Para ejecutar correctamente este Proyecto necesitamos emplear una parte del software Arduino llamado Serial Monitor. Esta ventana le permite escribir mensajes que se envían a la placa Arduino, así como ver los mensajes que el Arduino nos envía (Herramientas à Monitor serie o también Ctrl+Mayús+M).

 
Lista de Materiales:

 
·         Arduino UNO Rev.3.
 
·         Cable USB tipo A-B.
 
·         Módulo LCM 1602 I2C V1.
 
·         Display 16x2 LCD 1602.
 
·         Protoboard.
 
·         Cables de conexión.
 

Código del programa: 


 
 
Video:
 

miércoles, 16 de diciembre de 2015

Sensor de parking con HC-SR04


Para todos aquellos que no tengan un coche con ordenador de abordo, dotado con múltiples sensores, que nos facilite las tareas de aparcamiento, les presento un práctico y funcional sensor de parking, basado en el funcionamiento del sensor ultrasónico HC-SR04 y Arduino UNO.
Cuando el sensor esté a una distancia inferior a 50 cm, nuestro Arduino UNO activará una alarma tanto visual como sonora, que parpadeará con una frecuencia proporcional a la distancia a la que se encuentre el sensor del objeto en cuestión. Si la distancia es mayor de 50 cm el dispositivo permanecerá en reposo. También he dotado al sistema de un interruptor para habilitar o no el modo parking, funcionando solo cuando lo necesitemos.
El principio de funcionamiento del sensor ultrasónico HC-SR04 es sumamente sencillo, primero envía un ultrasonido cuando se activa la señal “TRIG” (inaudible para el oído humano por su alta frecuencia) a través de uno de los cilindros que tiene y espera a que dicho sonido rebote sobre un objeto y vuelva, para captarlo por el otro cilindro, activando así la señal “ECHO”.

Sensor ultrasónico HC-SR04

Arduino, mediante programación, es capaz de medir el tiempo que tarda la onda ultrasonica en rebotar contra un objeto y a partir de ahí realizar unos cálculos sencillos, basados en la velocidad del sonido, para obtener la distancia a la que se encuentra de dicho objeto.
También, a través del monitor serie que trae incorporado el IDE de Arduino, podremos visualizar la distancia a la que se encuentra el sensor del objeto cuando lo necesitemos. A continuación se muestra el programa donde se puede ver el funcionamiento de este proyecto.


Lista de Materiales:

·         Arduino UNO Rev.3.
·         Cable USB tipo A-B.
·         Sensor ultrasónico HC-SR04.
·         LEDS 5mm (Rojo y Verde).
·         2 Resistencias de 220Ω.
·         Buzzer (Zumbador).
·         Interruptor de 3 terminales.
·         Protoboard.
·         Cables de conexión.
 

Código del programa:
 
 
 
 
 Video:



martes, 15 de diciembre de 2015

Control del brillo de un LED con un potenciómetro


Hoy os voy a mostrar cómo controlar la intensidad de brillo de un LED, conectado a una salida digital con PWM, utilizando para ello un potenciómetro y una entrada analógica de Arduino. Para que os hagáis una idea, un potenciómetro no es más ni menos que una resistencia variable formada por tres terminales, dos fijos (los de los extremos y uno móvil (el central), gracias a esto, indirectamente se puede controlar la intensidad de corriente que fluye por un circuito si se conecta en paralelo, o la diferencia de potencial al conectarlo en serie. Normalmente, los potenciómetros se utilizan en circuitos de poca corriente. Para circuitos de corrientes mayores, se utilizan los reóstatos que pueden disipar más potencias, aunque este último no es nuestro caso.
Diagrama de un potenciómetro


Para el control del brillo vamos a tener que utilizar una entrada analógica (A0) y una salida digital que tenga PWM (D0). Partimos de la premisa de que a la entrada digital le va a llegar un valor entre 0-5V según la posición que tenga el mando del potenciómetro. Arduino gracias a un convertidor A/D de 10 bits de resolución del que dispone, convierte el valor de tensión de entrada en un valor numérico entre 0 -1023, en definitiva al leer el pin analógico se obtiene un número.
Ese número lo tenemos que llevar a la salida digital dotada de PWM (Modulación de anchura de pulsos,) para que el convertidor D/A de 8 bits que también posee Arduino lo transforme en un valor de tensión aplicable en el circuito. Al tener menos resolución el convertidor D/A tenemos que dividir el número obtenido en la entrada entre 4 para que se ajuste a los valores con los que trabaja este convertidor (0-255) para poder obtener nuevamente valores de tensión entre 0-5V. En la siguiente imagen se muestra un sinóptico de como Arduino realiza esta conversión.

Sinóptico de conversión A/D à D/A

 
Hay que tener en cuenta que al LED no le pueden llegar los 5V que ofrece Arduino en su salida, puesto que se quemaría, por lo que tenemos que limitar la corriente que lo atraviesa mediante una resistencia de 220Ω, con lo que en sus extremos tendrá como máximo unos 2.2V.


Lista de Materiales:

·         Arduino UNO Rev.3.
·         Cable USB tipo A-B.
·         LED 5mm (de cualquier color).
·         Potenciómetro lineal de 10KΩ.
·         Resistencia de 220Ω.
·         Protoboard.
·         Cables de conexión.
 


Código del programa:




Video: