En este post vamos a aprender a simplificar la conexión de un LCD 16×2 mediante la comunicación I2C utilizando el módulo LCM 1602 I2C V1. A menudo, conectar un LCD 16×2 de manera tradicional puede resultar complicado y requerir un gran número de pines digitales y un potenciómetro lineal de 10KΩ. Sin embargo, gracias al módulo LCM 1602 I2C V1, podemos realizar la conexión de manera mucho más sencilla y sin tener que utilizar tanto espacio en nuestra placa Arduino.
Además, este módulo nos permite controlar el contraste del LCD y realizar la comunicación I2C de manera eficiente. En este post, veremos cómo hacer las conexiones necesarias, cómo obtener la dirección del módulo LCM 1602 I2C V1 y cómo utilizar el Serial Monitor para enviar mensajes a la placa Arduino y ver los mensajes que el Arduino nos envía. ¡Empecemos!
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).
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 a 5 V y K a 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.
Para obtener la dirección del módulo LCM 1602 I2C V1, se deben medir los valores de los pines de dirección A0, A1 y A2 con un voltímetro. Si, por ejemplo, A0 tiene un valor de 0 o un nivel BAJO (LOW), significa que el pin está conectado a GND. Por otro lado, si A0 tiene un valor de 1 o un nivel ALTO (HIGH), significa que el pin está conectado a +5V. En muchos módulos, la dirección se puede modificar simplemente soldando o no soldando los pines de dirección a otros pines adyacentes que están conectados a GND. Esto nos permite conectar varios LCD al mismo tiempo y seleccionarlos en función de su dirección. Las posibles direcciones y configuraciones de los pines de dirección A2, A1 y A0 se pueden ver en la siguiente tabla.
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.
Descarga del Escáner de direcciones I2C
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.
El módulo LCM 1602 I2C V1 se puede adquirir ya soldado en la parte posterior del LCD 16×2 o por separado. Si decidimos optar por la segunda opción, necesitaremos contar con un soldador, estaño y algo de práctica soldando.
Una vez que el módulo esté en su lugar, no olvidemos ajustar el contraste del LCD 1602 utilizando el potenciómetro incorporado. Luego, simplemente conectamos los cuatro terminales del módulo a sus correspondientes en la placa Arduino (VCC, GND, SDL y SDA), cargamos el programa y utilizamos el Monitor serie para enviar caracteres que se mostrarán en el LCD.
Antes de enviar caracteres, el LED Backlight, que ilumina el fondo del LCD, parpadea varias veces mediante programación y luego se queda encendido. También enviamos algunas líneas de texto al LCD para hacer que la ejecución del programa sea más interactiva (consulte los comentarios en el código para comprender mejor el funcionamiento completo del programa).
Para ejecutar este proyecto correctamente, necesitamos utilizar una parte del software Arduino llamada Serial Monitor. Esta ventana nos 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 16×2 LCD 1602
- Protoboard
- Cables de conexión
Código del programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
/* TITULO: Display LCD 16x2 con comunicación I2C AUTOR: MARIANO DEL CAMPO GARCÍA (@2015) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA En este programa vamos a comunicar un Display LCD 16x2 con Arduino mediante comunicación I2C, gracias a la utilización del módulo LCM 1602 I2C V1, que tenemos soldado a los pines del LCD 1602. Además mediante la utilización del IDE de Arduino, vamos a poder mandar caracteres a Arduino y visualizarlos a través del LCD 1602. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL del módulo I2C conectado al LCD 1602 | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA del módulo I2C conectado al LCD 1602 | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND respectivamente. */ // Importar librerías #include <Wire.h> // Librería comunicación I2C #include <LiquidCrystal_I2C.h> // Librería LCD I2C // Declaración del objeto // Terminales de conexión del LCD: // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x3E, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup() { Serial.begin(9600); // Configura la velocidad de la comunicación serie lcd.begin(16,2); // Inicializa el LCD para 16x2 // Realiza 3 parpadeos del LED (backlight) for(int i = 0; i< 3; i++) { lcd.backlight(); delay(250); lcd.noBacklight(); delay(250); } lcd.backlight(); // Finaliza con el LED encendido (backlight) // Escribe el texto en el LCD // NOTA: La posición del cursor del LCD (Carácter, línea) comienza en (0,0) lcd.setCursor(0,0); lcd.write("Hola, Usuario!"); // Podemos poner tanto write como print delay(1000); lcd.setCursor(0,1); lcd.write("Bienvenido"); delay(2000); // Espera a que se conecte el monitor serie y envía los caracteres al LCD // Configurar el monitor serie en el modo "Sin final de línea" lcd.clear(); lcd.setCursor(0,0); lcd.print("Monitor serie..."); lcd.setCursor(0,1); lcd.print(">Pulsa una tecla"); } void loop() { char ch; // Si se recibe un carácter por el puerto serie... if (Serial.available()) { // Retardo para que pueda recibir el caracter delay(100); // Borra la pantalla lcd.clear(); lcd.print("Recibiendo>>> "); lcd.setCursor(14,0); // Si lo recibido es mayor que 0... while (Serial.available() > 0) { // Lee el carácter que llega ch = Serial.read(); // Muestra el carácter a través del LCD lcd.write(ch); // Muestra por terminal virtual el carácter enviado al LCD Serial.write(ch); } } } |
Video
En conclusión, en este post hemos aprendido cómo simplificar la conexión de un LCD 16×2 mediante la comunicación I2C utilizando el módulo LCM 1602 I2C V1. Hemos visto que este módulo nos permite controlar el contraste del LCD y realizar la comunicación I2C entre el Arduino y el LCD 1602 sin necesidad de utilizar un gran número de pines digitales y sin tener que recurrir al uso de un potenciómetro lineal de 10KΩ.
Además, hemos aprendido cómo obtener la dirección del módulo LCM 1602 I2C V1 y cómo utilizar el Serial Monitor para enviar mensajes a la placa Arduino y ver los mensajes que el Arduino nos envía.
Espero que este post haya sido de utilidad para ustedes y si tienen alguna duda o comentario, no duden en dejármelo en los comentarios. ¡Gracias por leer!