He estado un tiempo sin publicar en mi blog, pero a partir de hoy, volveré a publicar de manera más o menos regular. Hoy quiero mostrar cómo conectar dos pantallas LCD 1602 a través de comunicación I²C, para que cada una trabaje de manera independiente. Aunque en este post solo trabajaremos con dos pantallas LCD 1602, teóricamente se podrían conectar hasta 127 a nuestro Arduino mediante comunicación I²C.
Sin embargo, gracias al módulo LCM 1602 I2C (en sus dos versiones V1 y V2), es posible conectar hasta 16 pantallas simultáneamente. Es importante tener en cuenta que sería necesario alimentarlas con +5V externamente y no desde Arduino, ya que cada versión del módulo LCM 1602 I2C ofrece la posibilidad de configurar ocho direcciones diferentes a través de los pines A2, A1 y A0 (soldando o no a GND).
Para una mayor información acerca de la conexión y configuración de la dirección I²C en cada uno de los LCD 1602 es importante que analicéis el siguiente POST , teniendo en cuenta que lo más importante para que nos funcionen correctamente ambos LCD 1602 es que cada uno de los módulos LCM 1602 I2C tenga asignada una dirección I²C diferente, para que a través de nuestro Arduino podamos acceder a ella de manera independiente mediante programación.
El programa que tenemos que cargar en nuestro Arduino simplemente realizará un parpadeo alterno inicial de los LCD 1602, para que posteriormente muestren unas líneas de texto diferentes para cada LCD 1602 y finalmente se realice un barrido vertical en bucle continuo de un conjunto de asteriscos a través de ellos, sin que se mezcle la comunicación en ningún momento (para más detalles debemos analizar los comentarios del programa).
Este tipo de comunicación en los LCD 1602 es muy interesante cuando conectamos varios sensores a nuestro Arduino y queremos visualizar los resultados de manera independiente. Por ejemplo, si tenemos conectados un sensor de temperatura y otro de presión a nuestro Arduino, podremos visualizar un sólo parámetro de manera individual en cada uno de los LCD 1602, para poder acceder a ellos desde diferentes ubicaciones o salas (un LCD 1602 mostraría la temperatura y el otro la presión).
Lista de Materiales
- Arduino UNO Rev.3
- Cable USB tipo A-B
- Dos módulos LCM 1602 I2C (Versiones V1 y V2)
- Dos displays 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 |
/* TITULO: Conectando dos LCD 1602 independientes mediante comunicación I²C. AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> 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 Con este programa vamos a comunicar dos Display LCD 16x2 con Arduino mediante comunicación I²C, gracias a la utilización de módulos LCM 1602 I2C V1, que tenemos previamente soldados a los pines de cada LCD 1602. Simplemente se realiza un parpadeo alterno inicial de los LCD 1602, para que posteriormente se muestren unas líneas de texto y asteriscos a través de ellos, sin que se mezcle la comunicación, aún estando conectados los dos LCD a los mismos pines de comunicación I²C. Esto es posible gracias a que cada LCD 1602 tiene una dirección I²C única y predeterminada para la comunicación con nuestro Arduino. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL de los 2 módulos I²C conectados a los LCD 1602 | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA de los 2 módulos I²C conectados a los 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 de ambos módulos LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND respectivamente. */ // Importar librerías #include <Wire.h> // Librería comunicación I²C #include <LiquidCrystal_I2C.h> // Librería LCD I²C // Declaración de los objetos // Ajustar la dirección de los LCD (previamente comprobadas) // Terminales de conexión del LCD // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd1(0x3E, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); LiquidCrystal_I2C lcd2(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup() { Serial.begin(9600); // Configura la velocidad de la comunicación serie lcd1.begin(16,2); // Inicializa el LCD1 para 16x2 lcd2.begin(16,2); // Inicializa el LCD2 para 16x2 // Realiza 3 parpadeos alternos del LED (backlight) for(int i = 0; i< 3; i++) { lcd1.backlight(); lcd2.noBacklight(); delay(250); lcd1.noBacklight(); lcd2.backlight(); // Finaliza el ldc2 con el LED encendido (backlight) delay(250); } lcd1.backlight(); // Finaliza el ldc1 con el LED encendido (backlight) // Escribe el texto en los LCD 1602 // La posición del cursor de los LCD (Carácter, línea) comienza en (0,0) lcd1.setCursor(0,0); lcd1.print("LCD numero 1"); lcd2.setCursor(0,0); lcd2.print("LCD numero 2"); delay(2000); lcd1.setCursor(0,1); lcd1.print("Color VERDE"); lcd2.setCursor(0,1); lcd2.print("Color AZUL"); delay(2000); lcd1.clear(); lcd2.clear(); } void loop() { // Realiza una secuencia de barrido vertical de la línea de arteriscos lcd1.setCursor(0,0); lcd1.print("****************"); delay(1000); lcd1.clear(); lcd1.setCursor(0,1); lcd1.print("****************"); delay(1000); lcd1.clear(); lcd2.setCursor(0,0); lcd2.print("****************"); delay(1000); lcd2.clear(); lcd2.setCursor(0,1); lcd2.print("****************"); delay(1000); lcd2.clear(); } |
Video
En conclusión, este post proporciona información sobre cómo conectar y utilizar varias pantallas LCD 1602 mediante comunicación I²C con un Arduino. Se mencionan las diferentes opciones para conectar estas pantallas y se proporciona un ejemplo de cómo utilizarlas para visualizar resultados de sensores de manera independiente.
Espero que esta información sea útil para aquellos interesados en utilizar varias pantallas LCD con su Arduino. ¡Gracias por leer! Si tienes algún comentario o pregunta, no dudes en dejar un mensaje en la sección de comentarios a continuación.