Proyecto Arduino Display I2C-LCD con Biblioteca de Malpartida [multilanguage_switcher] Cuando queramos conectar un display LCD a nuestro proyecto Arduino, una solución inteligente es usar un adaptador I2C-LCD. En este caso usamos el módulo de interface serial FC-113 IIC/I2C para los displays 1602 o 2004. Esto disminuye la cantidad de pins utilizados en la placa Arduino y dejará lugar para otros sensores y actuadores. La conexión entre la pantalla LCD y el módulo I2C serie es muy fácil. Simplemente se conecta el pin n del LCD al pin n del módulo serie para todos los 16 pines(1-1, 2-2, etc.) , como se muestra en la foto. Si su placa no tiene los números en las patas/pines, por lo general el pin 1 está marcado de alguna manera diferente (un cuadro en vez de un círculo, o marca rellena), y a partir de este conocemos el orden. Le sugiero soldar un conector hembra (female pin header) de una sola fila de 16 pines en el circuito del LCD para que se pueda conectar al conector macho del controlador serie. Si este no tiene uno, se puede soldar un conector macho al controlador serial. Si va a experimentar, conectando los componentes en formas diferentes, no trate de soldar los componentes directamente. Soldar y desoldar produce calentamiento del circuito impreso (PCB - Printed Circuit Board) y sus componentes, y causa daños y mal funcionamiento a estos. Enchufe el controlador de la pantalla LCD de la siguiente manera: [caption id="attachment_20" align="alignnone" width="841"] LCD 1602 y 2004 con interface I2C[/caption] Observe que no hay diferencia en la conexión entre los displays LCD, ya sea con 1602 (16 caracteres por 2 líneas) o con 2004 (20 caracteres por 4 líneas). El controlador serial dispone de 4 pines para conectar a la placa Arduino. Estos son + Vcc, -Gnd, SDA y SLC. Puede que resulte más fácil si se obtiene un conector hembra de 4 pines para cable y se sueldan los cables allí. Es posible usar estos cables con conector para otros proyectos más adelante si lo desea. La conexión es así. + Vcc se conecta a cualquier pin conector hembra + 5v, -Gnd a un conector GND, SDA y SLC a sus respectivos conectores en la placa Arduino. Tenga en cuenta que algunas tarjetas pueden no tener SDA y SLC marcados. En este caso hay que comprobar qué cabezales de pin de su tarjeta se utilizan para la comunicación I2C. En Arduino UNO generalmente A5 y A4 son SLC y SDA respectivamente. En Arduino Uno Rev. 3 el pin 16 es SDA y SCL es el pin 17. Algunas versiones de placa pueden tenerlos marcados, otras no. En Arduino Mega 2560, SDA es 20 y SLC es 21. La comunicación I2C o IIC o I²C es un modelo de interconexión de componentes. Permite que hasta 128 componentes compartan un sencillo bus serie de 2 líneas (SDA de datos y SLC de reloj). Debe comprobar las especificaciones del componente que se está conectando, debido a que ambas líneas necesitan una resistencia pull-up (una resistencia conectada a + Vcc) con el fin de conseguir un nivel alto en el caso de todos los componentes estén en estado "desconectado" del bus. En este caso, las resistencias están incluidas en la placa. Ver: https://es.wikipedia.org/wiki/I%C2%B2C El controlador serie permite apagar la luz de fondo si se quita el puente de un extremo. También se puede activar/desactivar la luz de fondo a través de software, pero no es posible encenderlo si se quita este puente. También hay un led, cerca del puente, que muestra si la placa I2C tiene energía. Hay un potenciómetro con el que se puede ajustar el contraste de la pantalla LCD. Intente girarlo mientras lo tiene en funcionamiento para ajustar el contraste hasta que esté clara la pantalla. Sólo tiene que conectar su LCD y el controlador de serie de esta manera: [caption id="attachment_17" align="alignnone" width="1002"] I2C-LCD-Project[/caption] Se necesita la biblioteca I2C LCD. Puede descargar la biblioteca de Malpartida de su sitio. https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads y descargar la última versión estable. NewliquidCrystal_1.3.4.zip en nuestro caso. Simplemente descomprima el archivo en una nueva carpeta dentro del directorio/carpeta de bibliotecas de Arduino. Ahora puede utilizar esta biblioteca en el entorno IDE Arduino. El controlador de serie también tiene 3 contactos en el PCB, por lo general llamados A0, A1 y A2. Estos son los bits menos significativos de la dirección I2C del controlador en serie. Si estas conexiones se ponen en cortocircuito, la dirección del componente va a cambiar, y estos bits se ponen a cero. Están a uno por defecto. Mi componente tiene dirección 0x3F. Por lo que se podría llevar desde 0x38 a 0x3F. Pero el suyo puede tener una dirección diferente. En ese caso se debe ejecutar un escáner de direcciones para I2C para saber cual es si no viene especificada. Cree un sketch de Arduino, se puede nombrar algo así como "i2c_scanner" y se guarda con el siguiente código: //Written by Nick Gammon // Date: 20th April 2011 //http://www.instructables.com/id/I2C-LCD-Controller-the-easy -way/ #include <Wire.h> void setup() { Serial.begin (9600); // Leonardo: wait for serial port to connect while (!Serial) { } Serial.println (); Serial.println ("I2C scanner. Scanning ..."); byte count = 0; Wire.begin(); for (byte i = 1; i < 120; i++) { Wire.beginTransmission (i); if (Wire.endTransmission () == 0) { Serial.print ("Found address: "); Serial.print (i, DEC); Serial.print (" (0x"); Serial.print (i, HEX); Serial.println (")"); count++; delay (1); // maybe unneeded? } // end of good response } // end of for loop Serial.println ("Done."); Serial.print ("Found "); Serial.print (count, DEC); Serial.println (" device(s)."); } // end of setup void loop() {} Corra este programa en su Arduino y le dirá la dirección en que está configurado su componente LCD-I2C. Debe poner el monitor serial para poder ver la respuesta. I2C scanner. Scanning ... Found address: 63 (0x3F) //la dirección puede variar Done. Found 1 device(s). //Se asume que hay un único dispositivo conectado al bus Luego de esto puede correr una demostración del funcionamiento de la biblioteca para su display LCD. /* * Demo de Modulo Adaptador Serial I2C/IIC LCD */ #include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> // 0x3F es la direccion de mi modulo // si obtiene otra dirección cambie aqui #define I2C_ADDR 0x3F //Descripcion de pines del LCD 2004A y 1602A LiquidCrystal_I2C lcd(I2C_ADDR,2,1,0,4,5,6,7); // El pin 13 tiene un LED conectado en la mayoria de las placas Arduino. // Le damos un nombre int led = 13; void setup() { // Se debe inicializar la biblioteca con el tamaño del display antes de usarla // Elija/descomente la linea de su modelo // lcd.begin(20, 4);//20 columns 4 rows for 2004A lcd.begin(16, 2);//16 columns 2 rows for 1602A lcd.setBacklightPin(3,POSITIVE); //lcd.setBacklight(HIGH); // luz encendida. Se puede apagar y encender la luz de fondo del display lcd.setBacklight(LOW); //luz apagada lcd.clear(); // limpiar la pantalla y poner el cursor en (0,0) // inicializar el pin 13 como salida // no funcionará si eso pinMode(led, OUTPUT); } void loop() { lcd.setCursor(0,0); lcd.print("Enrique Latorres"); lcd.setCursor(0,1); lcd.print("I2C Module Demo"); // descomentar si se usa 2004A // lcd.setCursor(0,2); // lcd.print("third line 123456"); // lcd.setCursor(0,3); // lcd.print("fourth line ASDF"); digitalWrite(led, HIGH); // encendemos el led lcd.setBacklight(LOW); // apagamos la luz de fondo delay(1000); // esperamos un segundo digitalWrite(led, LOW); // apagamos el led lcd.setBacklight(HIGH); //encendemos la luz de fondo delay(1000); // esperamos otro segundo } Ahora debiera tener un display destellante con el mensaje que haya puesto en el código. También el led del pin 13 debe estar destellando opuesto al display. Se puede ver funcionando en: https://youtu.be/cXdtl3aOslg Saludos y que disfruten.