Archivo de la categoría: Led RGB

Comunicación I²C

I²C (Inter-Integrated Circuit) es un bus de comunicación serie muy utilizado para la comunicación entre circuitos integrados, uno de sus usos mas comunes es la comunicación entre un microcontrolador y sensores periféricos. I²C es un bus multi-maestro, es decir permite que haya múltiples maestros y múltiples esclavos en el mismo bus. El bus I²C utiliza dos líneas para transmitir la información: una para los datos (SDA) y otra para la señal de reloj(SCL) y una tercera de referencia (masa). La misma línea de datos envía la información en las dos direcciones (half duplex), por lo que es necesario un control de acceso al bus y un direccionamiento de cada elemento. Así cada dispositivo tiene una dirección de 7 bits, es decir se pueden tener hasta 128 dispositivos conectados al mismo bus, hay que tener en cuenta que existen versiones extendidas de I2C con direccionamiento a 8,10 y 12 bits.

Las líneas SDA y SCL están independientemente conectadas a dos resistores Pull-Up que se encargaran de que el valor lógico siempre sea alto a no ser que un dispositivo lo ponga a valor lógico bajo. Aunque es cierto que se pueden conectar sin las pull-up y funciona, para evitar posibles errores, lo mejor es asegurarse poniendo las pull-up.

Comunicacion_I2C_Teorico

Estructura de la Comunicación  I2C.

  • Bit de Start: Este bit provoca un cambio de 1 a 0 cuando SCL esta a nivel alto. (Master)
  • Dirección: El primer byte enviado empieza con 7 bits de dirección, el cual indica a quien enviamos o solicitamos el dato. (Master)
  • R/W (Leer/Escribir): El siguiente bit indica si vamos a realizar una operación de lectura o escritura. (Master)
  • ACK: Este bit esta presente al final de cada byte que enviamos y nos permite asegurarnos que el byte ha llegado a su destino. De este modo el que envía deja el bit a 1 y si alguien ha recibido el mensaje fuerza ese bit a 0. De esta manera confirma que le ha llegado el byte y la transmisión puede continuar. (Slave)
  • Byte de Datos: Aquí ponemos el dato que queramos escribir o leer. (Master/ Slave)
  • Se espera un ACK del receptor. (Master/ Slave)
  • Se repiten los dos últimos pasos tantas veces como sea necesario.
  • Bit de Stop. Este bit provoca el paso de 0 a 1 cuando la línea SCL se encuentra en alto. Esto termina la transmisión y deja el bus libre para que otro puede empezar a transmitir. (Master)

ProtocoloI2C

Pines en Arduino.

Arduino Uno                        Pin analógico 4(SDA) y Pin analógico 5(SCL).

Arduino Mega                      Pin 20 (SDA) y Pin 21(SCL).

Arduino Leonardo              Los pines I2C están pintados al lado de AREF.

En Arduino para usar el bus I2C es necesario la librería <Wire.h>, algunas de sus funciones son:

  • begin() Inicia el bus I2C y nos define como maestros.
  • begin(direccion) Inicia el bus I2C con la dirección de 7 bits de esclavo (opcional); si no se específica, se configura como maestro.
  • beginTransmission(direccion) Comienza una transmisión a un dispositivo I2C esclavo con la dirección dada.
  • endTransmission() Finaliza la comunicación con un STOP y deja el bus libre.
  • send(value) Envía datos desde un esclavo (un byte) en respuesta a una petición de un maestro, o prepara los bytes para transmitir de un maestro a un esclavo (entre llamadas a beginTransmission() y endTransmission()).
  • send(string) Envía datos desde un esclavo(una cadena) ……
  • send(data, quantity) Envía datos desde un esclavo (un vector de datos) ……. quantity: el número de bytes de datos para transmitir (byte)
  • write(value) Escribe los datos de un dispositivo esclavo(un byte) en respuesta a una petición de un maestro, o colas de bytes para la transmisión de un maestro a esclavo del dispositivo (entre llamadas a beginTransmission () y endTransmission ()).
  • write(string) Escribe los datos de un dispositivo esclavo (una cadena) ……
  • write(data, length) Escribe los datos de un dispositivo esclavo (un vector de datos) ……… length: el número de bytes a transmitir
  • onReceive(funcion) Registra una función que será llamada cuando un dispositivo esclavo reciba una transmisión desde un maestro.
  • onRequest(funcion) Registra una función que será llamada por el dispositivo esclavo cuando un maestro solicite datos.

Si quieres saber algunos comandos más, visita la página http://arduino.cc/en/pmwiki.php?n=Serial/Write

Ahora vamos a implementar estos conceptos a Arduino. En el ejemplo he utilizado dos placas Arduino( Duemilanove y Mega 2560). He realizado unas uniones con unos cables como se observa en el dibujo

Pines Duemilanove                       Pines Mega 2560

Pin 4                                      Pin 20

Pin 5                                      Pin 21

Pin + 5 v                               Pin + 5 v

Pin GND                               Pin GND

Las líneas SDA y SCL están independientemente conectadas a dos resistores Pull-Up de 10K que se encargaran de que el valor lógico siempre sea alto a no ser que algunos de los Arduinos lo ponga a valor lógico bajo. Aunque es cierto que se pueden conectar sin las pull-up y funciona, para evitar posibles errores, lo mejor es asegurarse poniéndolas.

Transmito un bit con el Arduino Mega y al recibirlo el Arduino Duemilanove realiza una de las tres acciones siguientes:

  • Si recibe un 1, enciende la patilla azul del Led RGB
  • Si recibe un 2, enciende la patilla rojo del Led RGB
  • Si recibe un 3, enciende la patilla verde del Led RGB

Esquema Eléctrico:

Comunicacion_I2C_TeoricoEsquema Práctico:

Comunicacion_I2C_Practico_bb

Código del Programa Maestro:

Master_I2C_Codigo

Código del Programa Esclavo:

Slave_I2C_Codigo

Fotos:

Conjunto_Arriba_I2C

Vista Superior

Conjunto_Frontal_I2C

Vista Frontal

Master_I2C

Detalle del Master

Slave_I2C

Detalle del Slave

Detalle_Resistencias_Bus_I2C

Detalle de las resistencias pull-up

Código fuente:

Maestro       Comunicación_Master_I2C.ino

Esclavo        Comunicación_Slave_I2C-ino

Ficha del Proyecto:

Comunicacion_I2C_Ficha_27

Vídeo resumen:

Anuncios

LED RGB

Un poco de teoría

El color es un atributo que percibimos de los objetos cuando hay luz. La luz es constituida por ondas electromagnéticas que se propagan a unos 300.000 Km/s, las ondas forman distintos tipos de luz, como infrarroja, visible, ultravioleta o blanca. Las ondas visibles son aquellas cuya longitud de onda está comprendida entre los 380 y 770 nanómetros.

Espectro_del_Color

Los objetos devuelven la luz que no absorben hacia su entorno. Nuestro campo visual interpreta estas radiaciones electromagnéticas que el entorno emite o refleja, esto significa que lo que vemos es la incidencia de la energía en nuestra retina y no a la materia en sí.

Lo que denominamos color no es algo físico sino que es una sensación que se produce en nuestro cerebro, por acción de la luz sobre los cuerpos. Por ello, nuestra percepción del color cambia cuando la luz se modifica, o cuando el rayo luminoso se refleja sobre superficies distintas.

Las tres variables principales del color usadas por los físicos para describirlo son las siguientes:

1) Tono (matiz o tinte)

2) Saturación (dureza o croma)

3) Luminancia (brillo)

Para obtener la gama completa teórica de colores se deben mezclar tres colores primarios, esta mezclar de colores se puede realizar de dos maneras, con luces o con pinturas.

La mezcla con luces, se llama mezcla aditiva. Cuantos más colores se añadan, más claro será el resultado. Todos los colores juntos forman luz blanca. Los colores primarios de este tipo de mezcla son:

* Luz Verde

* Luz Roja

* Luz Azul

Mezcla_aditiva

La mezclar con pinturas, se llama mezcla sustractiva. El color mezclado es siempre más oscuro que el más claro de los colores que se han mezclado. Los colores primarios de este tipo de mezcla son:

* Pintura Magenta

* Pintura Amarilla

* Pintura Azul

Mezcla_sustractiva

Basta de teoría, lo que vamos a realizar es un ejemplo básico de funcionamiento de un Led RGB.

Un Led RGB no es más que en un mismo encapsulado tres Led de los colores rojo, azul y verde. En mi caso el Led que he utilizado es de cátodo común, o lo que es lo mismo tres diodos con el cátodo unido.

Led_RGB_Patillas

Como podéis ver cuando alimento solo uno de los Led, cada uno ocupa un espacio físico distinto.

He introducido el Led en una pelota de Pin-Pon para que el efecto del color se pueda apreciar mejor

Tricolor

Los alimento con una señal PWM, y dependiendo del valor tenemos una luminosidad distinta.

Esquema Eléctrico:

LED_RGB_Esquema

Esquema Práctico:

Led_RGB_bb

Código del Programa:

Led_RGB_Codigo

Fotos:

Vista_1

Vista General

Led_Rojo

Led Rojo

Led_Verde

Led Verde

Led_Azul

Led Azul

Código fuente:

Led_RGB_Color.ino

Ficha del Proyecto:

Led_RGB_Ficha_24

Vídeo resumen: