Introduction: Tutorial Divirtiendose Con Una LCD Con I2C
En este
tutorial usaremos un módulo adaptador de LCD a I2C para poder controlar nuestro LCD con solo dos pines de nuestro Arduino EL Módulo adaptador LCD a I2C que usaremos está basado en el controlador I2C PCF8574, el cual es un demultiplexor de dos entradas a 8 salidas digitales controlado por I2C, que en este módulo se usa para controlar un LCD.
Step 1: Conociendo El Modulo I2C/ Dirección Del Modulo I2C
La dirección del módulo I2C que viene por defecto es 0x27, pero podemos cambiarlo soldando los puentes A0,A1y A2; quedando la dirección en binario de la siguiente forma :0|0|1|0|0|A2|A1|A0.
Por defecto A0,A2,A1 valen 1 pero si soldamos los puentes, estos se conectan a tierra teniendo un valor 0, por ejemplo si soldamos los tres puentes la dirección seria 0|0|1|0|0|0|0|0 (0x20).
Step 2: Control Del Contraste
Para controlar el contraste solo necesitamos variar el potenciómetro que se encuentra en el módulo.
La luz de fondo se controla por software, desde el Arduino; pero el modulo tiene un Jumper para desconectar el Led de la luz de fondo. En este caso lo encontramos de color azul.
Step 3: Conexiones Entre Arduino Y Módulo Adaptador LCD a I2C
El adaptador LCD a i2C tiene los pines ordenados para solo conectar al LCD, esto lo podemos hacer a través de un protoboard o soldando directamente al LCD, es muy fácil realizarlo.
Step 4: Librería LiquidCrystal_I2C Para Arduino
Existen diferentes tipos y versiones de la librería para LCD I2C, información más completa pueden encontrar en: http://playground.arduino.cc/Code/LCDi2c , nosotros usaremos la librería LiquidCrystal_I2C
Las funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino, pero volveremos a explicaremos las funciones principales.
LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows)
Función constructor, crea una variable de la clase LiquidCrystal_I2C, con dirección, columnas y filas indicadas.
init(); o begin(); Inicializa el modulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C y el LCD.
clear(); Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)).
setCursor(col, row)Posiciona el cursor del LCD en la posición indicada por col y row(x,y); es decir, establecer la ubicación en la que se mostrará posteriormente texto escrito para la pantalla LCD.
print()Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print
scrollDisplayLeft()Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.
scrollDisplayRight()Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.
backlight();Enciende la Luz del Fondo del LCD
noBacklight();Apaga la Luz del Fondo del LCD
createChar (num, datos)Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho caracteres de 5x8 píxeles (numeradas del 0 al 7). Dónde: num es el número de carácter y datos es una matriz que contienen los pixeles del carácter. Se verá un ejemplo de esto más adelante.
Explicado la librería veamos unos ejemplos:
Step 5: 1. Un Hola Mundo Con Arduino Y LCD Con I2C
#include <LiquidCrystal_I2C.h>
#include <wire.h>
//Crear el objeto lcd dirección 0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2); //
void setup() {
// Inicializar el LCD
lcd.begin();
//Encender la luz de fondo.
lcd.backlight();
// Escribimos el Mensaje en el LCD.
lcd.print("Hola Mundo");
}
void loop() {
// Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
// Escribimos el número de segundos trascurridos
lcd.print(millis()/1000);
lcd.print(" Segundos");
delay(100);
}
//La programación para un LCD de 20x4, es igual solo hay que modificar en:
LiquidCrystal_I2C lcd(0x27,20,4);
Step 6: 2. Desplazando El Texto En El LCD
//En este ejemplo para
desplazar el texto usaremos la función scrollDisplayLeft(). El codigo es el siguiente:
#include <wire.h>
#include >LiquidCrystal_I2C.h>
//Crear el objeto lcd dirección 0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27,16,2); //
void setup() {
// Inicializar el LCD
lcd.begin();
//Encender la luz de fondo.
lcd.backlight();
// Escribimos el Mensaje en el LCD en una posición central.
lcd.setCursor(10, 0);
lcd.print("laelectronicacr");
lcd.setCursor(4, 1);
lcd.print("Tutorial LCD, Test de desplazamiento ");
}
void loop() {
//desplazamos una posición a la izquierda
lcd.scrollDisplayLeft();
delay(500);
}
Step 7: 3.Mostrando Datos De Sensores O Variables En El LCD Conectemos Un Potenciometro Y Veamos Un Porcentaje
#include <wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //Crear el objeto lcd dirección 0x27 y 16 columnas x 2 filas const int analoginPin = A0; // entrada analogica conectada al potenciometro const int analogOutPin = 9; // salida analogica pwm
int sensorValue = 0; // variable que lee el valor del potenciometro int outputValue = 0;
void setup() { lcd.begin(); // inicio de la pantalla LCD lcd.backlight(); //encendido de la pantalla LCD lcd.home(); //Posiciona el cursor en la esquina superior izquierda del LCD.
// Se ubica estaticamente el texto lcd.setCursor(12, 1); lcd.print("%"); Serial.begin(9600); // monitor serial opcional }
void loop() { // esta parte del programa se repite
int sensorValue = analogRead(analoginPin); // Lea la entrada analogica A0 y guarde el la variable sensorValue float percentValue = sensorValue / 1024.0 * 100.0; // Calcula el porcentaje con el valor de A0 y lo guarda en la variable sensorValue outputValue = map(sensorValue, 0, 1023, 0, 255); // mapeo analogico de la entrada en la salida y lo guarda en la variable outputValue
lcd.setCursor(0, 0); // Posicionar el cursor en una celda del lcd en especifico, en este caso 0,0 leadingZeros(sensorValue, 4); // Imprime el valor del sensor con el número de caracteres principales (0 o espacios como se especifica en la función leadingZeros) lcd.setCursor(6, 1); // posiciona el cursor en la columna 6 fila 1 lcd.print(percentValue); // imprime percentValue
Serial.print("sensor = " ); // imprimiendo los valores desde el serial: Serial.print(sensorValue); Serial.print("\t output = "); Serial.print(outputValue); Serial.print("\t procent = "); Serial.println(percentValue);
delay(1000); // retardo de 1 segundo }
void leadingZeros( int value, int width) { // Mostrar el resultado con los caracteres principales char valueStr[6]; // largo de la variable es 6 itoa (value, valueStr, 10); // itoa convierte a int en la cadena o string int len = strlen(valueStr); // calcula el ancho de valueStr if (len < width) { len = width - len; while (len--) lcd.print(' '); //Para que inice en cero coloque '0' entre (), para los espacios principales lugar '' entre () } lcd.print(valueStr); }