jueves, 4 de abril de 2024

PRÁCTICA 6: PANTALLA LCD IC2

 La pantalla LCD de 16×2  permite conectar la pantalla al arduino usando solamente dos lineas digitales a través del bus I2C. Te explico como utilizar una pantalla LCD 16×2por I2C con Arduino .


Para usar el LCD 16×2 por I2C con Arduino es necesario también agregar una librería a nuestro IDE, de forma que este sepa como comunicarse con el  chip PCF8574. Para  conocer como cargar una librería y comenzar a utilizarla,  te recomiendo revisar el tutorial. Cabe aclarar que esta librería, así como el adaptador I2C deben funcionar de forma correcta con las pantallas de 20×4.

La librería LiquidCrystal_I2C dispone de métodos similares (algunos idénticos) a los de la librería oficial.

  • LiquidCrystal_I2C() – Constructor de la clase, configura el hardware.
  • init() – Prepara el LCD para su uso.
  • clear() – Borra todos los caracteres de la pantalla LCD.
  • setCursor(col, row) – Permite mover el cursor a la posición indicada en sus parámetros.
  • print() – Imprime una variable o literal en la pantalla
  • scrollDisplayLeft() y scrollDisplayRight() – Recorre el contenido de la pantalla a la izquierda o a la derecha
  • backlight() y noBacklight() – Métodos para encender / apagar la iluminación de fondo
  • createChar(num, data) –  Crear un carácter definido por el usuario en la memoria del controlador de pantalla

Recomendamos revisar el siguiente enlace para conocer todos los métodos de los que dispone la librería oficial LiquidCrystal:

Ahora que hemos repasado la librería veamos algunos ejemplos:

 

Código para escanear   la  dirección de la pantalla. 

#include <Wire.h>              

 

 

void setup()

{

  Wire.begin();

 

  Serial.begin(9600);

  while (!Serial);             // Leonardo: wait for serial monitor

  Serial.println("\nI2C Scanner");

}

 

 

void loop()

{

  byte error, address;

  int nDevices;

 

  Serial.println("Scanning...");

 

  nDevices = 0;

  for(address = 1; address < 127; address++ )

  {

    // The i2c_scanner uses the return value of

    // the Write.endTransmisstion to see if

    // a device did acknowledge to the address.

    Wire.beginTransmission(address);

    error = Wire.endTransmission();

 

    if (error == 0)

    {

      Serial.print("I2C device found at address 0x");

      if (address<16)

        Serial.print("0");

      Serial.print(address,HEX);

      Serial.println("  !");

 

      nDevices++;

    }

    else if (error==4)

    {

      Serial.print("Unknown error at address 0x");

      if (address<16)

        Serial.print("0");

      Serial.println(address,HEX);

    }    

  }

  if (nDevices == 0)

    Serial.println("No I2C devices found\n");

  else

    Serial.println("done\n");

 

  delay(5000);           // wait 5 seconds for next scan

}



Ej 1. Un Hola mundo con Arduino y LCD

Mostraremos  texto y un valor numérico en el LCD, para esto cargamos el siguiente sketch:

#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.init();
  
  //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);
}



 

Ej 2. Desplazando el texto en el LCD

En este ejemplo para desplazar el texto usaremos la función scrollDisplayLeft(). El código 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.init();
  
  //Encender la luz de fondo.
  lcd.backlight();
  
  // Escribimos el Mensaje en el LCD en una posición  central.
  lcd.setCursor(10, 0);
  lcd.print("Tecnología  industrial 2");
  lcd.setCursor(4, 1);
  lcd.print("Tutorial LCD, Test de desplazamiento  ");
}

void loop() {
  //desplazamos una posición a la izquierda
  lcd.scrollDisplayLeft(); 
  delay(500);
}

El resultado será el texto desplazándose de derecha a izquierda.

PROYECTO A   ENTREGAR :

En este  proyecto realizaremos un montaje de un parking domótico donde utilizaremos leds, botones, pantalla lcd, servomotor y  un sensor de ultrasonidos. Queremos realizar un montaje que controle las operaciones tanto en la entrada como en la salida de vehículos.

Para entrar habrá que pulsar obligatoriamente un botón. En ese momento tienen que sucederse las siguientes operaciones:

  • El led rojo se apagará y se encenderá el verde
  • El servo girará 90º para levantar la barrera durante 3 segundos. Al bajar la barrera cambiarán los leds encendidos, estando el rojo de nuevo encendido.
  • En la pantalla LCD mostraremos un mensaje de bienvenida en la segunda línea. En la primera línea tiene que aparecer siempre fijo el número de plazas disponibles.
  • El contador de plazas disponibles, que inicialmente estará a 10  (nuestro parking tiene 10 plazas), disminuirá en uno su valor. Si el valor es 0 y estamos pulsando el botón de entrada tenemos que visualizar un mensaje de parking lleno y no dejar levantar la barrera.

Para salir un coche no necesitará pulsar un botón, ya que pondremos un sensor de ultrasonidos que detecte cuando un coche está en la rampa de salida, para desencadenar todas las operaciones relacionadas: cambiar estado de led, mensaje de salida en LCD, girar servo y aumentar plazas disponibles.


 


No hay comentarios: