Introduction: Tutorial Divirtiendose Con Una LCD Con I2C

About: Voy siempre para adelante, dejando de lado lo que no sirve o no quiere servir siempre hay algo mejor en la vida que nuestro propio ombligo pero hay gente que le cuesta almitirlo

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); }