Texto en LCD con Arduino

De Casiopea
Revisión del 17:06 13 jun 2022 de Francisca Estay (discusión | contribs.) (→‎Texto en LCD con Arduino)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Texto en LCD con Arduino


TítuloTexto en LCD con Arduino
Tipo de ProyectoProyecto de Curso
Palabras Claveobjetoeducativo
Período2022-2022
AsignaturaInteracción y Performatividad
Del CursoInteracción y Performatividad 2022
CarrerasDiseño, Diseño Industrial"Diseño Industrial" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property.
Alumno(s)Gabriela Alliendes, Francisca Estay, Emily Hutt Fontt
ProfesorRenzo Varela

Texto en LCD con Arduino

El proyecto es un objeto de interacción educativo que busca mostrar expositivamente la confección de sus componentes que requiere para su funcionamiento, en este caso, un objeto que a través de una pantalla se muestra información recibida de un teclado.

Proyecto.IyP.1.jpegProyecto.IyP.12.jpeg

Partes

Cada parte que compone el sistema expuesto se encuentra nombrada en el cuadro, en el caso del teclado magistral está acompañado por un esquema que muestra lo que representa cada tecla, en este caso se encuentran configuradas para ser letras.

Arduino
Cable jumper
Pantalla LCD
Teclado matricial



















Contenido

Proyecto.IyP.2.jpegProyecto.IyP.3.jpegProyecto.IyP.4.jpegProyecto.IyP.11.jpegProyecto.IyP.9.jpegProyecto.IyP.6.jpeg

Componentes

El objeto esta construido a partir de un Arduino, una pantalla LCD y un teclado magistral 3x4.

Un Arduino es una placa con circuitos integrados en donde se puede grabar instrucciones a través del lenguaje de programación, códigos. Este posee una interfaz de entrada, en donde se puede conectar en la placa diferentes tipos de periféricos. La información que se conecte se trasladará al microcontrolador, el cual es encargado de procesar los datos.

El tipo de periférico que se utilice para enviar datos dependerá del uso que se le quiere dar, en este caso será un teclado magistral de 3x4 para introducir datos.

Por otro lado, esta el interfaz de salida, que se encarga de trasladar la información procesada en el Arduino a otro periférico, en este caso será una pantalla LCD.

La pantalla LCD tiene en ella un conector I2C, o tambien llamado bus I2C; uno de los principales sistemas de comunicación en Arduino, el cual es un bus de comunicación en serie.

En la pantalla LCD el conector I2C esta soldado a todos los pines, y la comunicación al Arduino es a través de los pines SDA y SCL (datos seriales y reloj serial). EL Arduino tiene pines asociados a la conexión I2C de la pantalla LCD, estos pueden variar según el modelo de Arduino. El Arduino utilizado es el Uno, por lo que la asociación de pines es la siguiente:

  • SDA – A4
  • SCL – A5

La alimentación se hace a través de 5V y GND, y la comunicación a través de SDA y SCL.

Conexión pantalla LCD y Arduino

Para comprobar la conexión entre la pantalla LCD y Arduino, se utilizó la siguiente programación, con la librería LiquidCrystal_I2C, similar a la librería LiquidCrystal de Arduino.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd  dirección  0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x3F,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);
}

[un paso que no se realizo fue el “Scanner”. Como se investigó, el Arduino es el maestro ya que este es el controlador que trata la información, el enviara la información cuando sea indicado, y la pantalla es la que recibe esta información, por lo que se le llama el esclavo. Para esto, se debe identificar la dirección del esclavo para poder enviar la información. Para esto se debe descargar un programa y de esta manera se identificaba aquella dirección para poder enviar la información deseada a la pantalla. Creemos que, por falta de este paso, no funciono el trabajo]

Programación texto en LCD

Para el uso del teclado magistral y su conexión al Arduino, se requiere de la configuración a continuación (este no incluye la conexión de la pantalla LCD).

Se debe configurar la librería “Keypad.zip” para definir los 7 pines de Arduino que conformaran el teclado, las 4 líneas y las 3 columnas. Las constantes son:

#include "Keypad.h" 
 const byte ROWS = 4; //four rows 
 const byte COLS = 3; //three columns 
 char keys[ROWS][COLS] = { 
  {'1','2','3'}, 
  {'4','5','6'}, 
  {'7','8','9'}, 
  {'*','0','#'} 
 };

Para los valores de los pulsadores y la asignación de pines que corresponde con los del Arduino, se debe “reservar” memoria en bytes, con las siguientes constantes:

  byte rowPins[ROWS] = {5, 4, 3, 2}; //conecta los pinouts row del keypad 
  byte colPins[COLS] = {8, 7, 6}; //conecta los pinouts column del keypad

Al definir el teclado, el programa generara una matriz del teclado para la representación de los dígitos:

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

Para el uso del teclado, se definirá una serie de dígitos los que serán visualizados como una clave. Se utiliza la asignación “char” para almacenar los bytes de las matrices:

  char PIN[6]={'1','2','3','4','5','6'}; // o numero secreto (!) 
  char attempt[6]={0,0,0,0,0,0}; // usado para comparar

Configuración para la conexión de los tres componentes principales

Para el uso de todos los componentes, con el fin de lograr escribir textos en la pantalla LCD a través de un teclado magistral, se utiliza la siguiente configuración. (El objetivo principal del código a continuación es poder configurar una contraseña con todos los elementos seleccionados.)

Para el funcionamiento de la pantalla LCD se requiere de la librería “LiquidCrystal”.

#include <Password.h> 
#include <LiquidCrystal.h> 
#include <Keypad.h> 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); Password 
password = Password( "1234456" ); 
const byte ROWS = 4; // Cuatro rows 
const byte COLS = 3; // Tres columns 
// Define el Keymap 
char keys[ROWS][COLS] = { 
 {'1','2','3',}, 
 {'4','5','6',}, 
 {'7','8','9',}, 
 {'*','0',' ',} }; 
// Conectar keypad ROW0, ROW1, ROW2 y ROW3 a los pines de Arduino. 
byte rowPins[ROWS] = {5, 4, 3, 2}; // pines a conectar los row del teclado. 
byte colPins[COLS] = {16, 15, 14}; // AN0, AN1 y AN2. Por falta de pines 
const int buttonPin = 6; //   
int buttonState = 0; 
int i; 
int sal1 = 17; // pin A4 salida a rele 
int sal2 = 18; // pin A5 salida a rele 

// Crear el Keypad 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 

void setup()
{ 
 pinMode(buttonPin, INPUT); 
 pinMode(sal1, OUTPUT); 
 pinMode(sal2, OUTPUT);  
 lcd.begin(20, 4); 

 Serial.begin(9600); 
 keypad.addEventListener(keypadEvent); //añad. un evento listener para el keypad 
 keypad.setDebounceTime(250); 
 lcd.clear();     //Borra el LCD 
 lcd.setCursor(0,0); 
 lcd.print("Entre secuencia PIN:"); 
 lcd.setCursor(2,2); 
 lcd.print("* Para terminar"); 
 lcd.setCursor(0,3);  
 lcd.print(" Intentelo: "); 
} 
void loop()
{ 
 keypad.getKey(); 
 buttonState = digitalRead(buttonPin); 
 if (buttonState == HIGH) 
 { 
  lcd.clear(); 
 } 
} 
// atender algunos eventos especiales 
void keypadEvent(KeypadEvent eKey)
{ 
 switch (keypad.getState())
 { case 
 PRESSED: lcd.print(eKey); 
 switch (eKey)
  { 
   case ' ': guessPassword(); 
   break; 
   default: password.append(eKey); 
  } 
 } 
} 
void guessPassword()
{ 
 if (password.evaluate())
 {  
  digitalWrite(sal1, HIGH); // activa relé1 de la puerta 
  digitalWrite(sal2, LOW);  // desactiva relé2 de la puerta 
  lcd.clear(); 
  lcd.setCursor(0,0); 
  lcd.print("PASSWORD VALIDO "); // 
  password.reset(); //resetea password despues de entrada correcta
  delay(1000); 
  lcd.setCursor(0,0); 
  lcd.print("Bienvenido, Sr."); 
  delay(1000); 
  for (int positionCounter = 0; positionCounter < 22; positionCounter++) 
   { 
   // scroll one position right: 
    lcd.scrollDisplayRight(); // espera un poco 
    delay(150); 
   } 
   delay(35000); // espera 35 segundos antes de volver añ inicio 
   setup(); // al inicio 
   } else
   { 
    i = i++; 
    digitalWrite(ledPin,LOW); 
    digitalWrite(sal1, LOW); 
    digitalWrite(sal2, HIGH); 
    lcd.clear(); 
    lcd.print("PASSWORD INVALIDO "); 
    password.reset(); //resets password after INCORRECT entry 
    delay(2000); // tiempo de retardo 
    lcd.clear(); 
    lcd.setCursor(0,2); 
    lcd.print(" Intentelo: "); 
   } 
   if (i==3) 
   { 
    lcd.setCursor(0,1); 
    lcd.print("Lo siento... "); 
    lcd.setCursor(0,2); 
    lcd.print("Intentelo mas tarde"); 
    delay(30000); 
    lcd.clear(); 
    lcd.setCursor(0,2); 
    lcd.print(" Intentelo: "); 
    i=0; 
   } 
 }

Códigos

Código funcionamiento pantalla LCD

Como se menciono anteriormente, el siguiente código se utilizo para verificar el funcionamiento de la pantalla LCD, conectado al Arduino.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd  dirección  0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x3F,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);
}

Código para escribir texto en pantalla LCD

#include <Password.h> 
#include <LiquidCrystal.h> 
#include <Keypad.h> 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); Password 
password = Password( "1234456" ); 
const byte ROWS = 4; // Cuatro rows 
const byte COLS = 3; // Tres columns 
// Define el Keymap 
char keys[ROWS][COLS] = { 
 {'1','2','3',}, 
 {'4','5','6',}, 
 {'7','8','9',}, 
 {'*','0',' ',} }; 
// Conectar keypad ROW0, ROW1, ROW2 y ROW3 a los pines de Arduino. 
byte rowPins[ROWS] = {5, 4, 3, 2}; // pines a conectar los row del teclado. 
byte colPins[COLS] = {16, 15, 14}; // AN0, AN1 y AN2. Por falta de pines 
const int buttonPin = 6; //   
int buttonState = 0; 
int i; 
int sal1 = 17; // pin A4 salida a rele 
int sal2 = 18; // pin A5 salida a rele 

// Crear el Keypad 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 

void setup()
{ 
 pinMode(buttonPin, INPUT); 
 pinMode(sal1, OUTPUT); 
 pinMode(sal2, OUTPUT);  
 lcd.begin(20, 4); 

 Serial.begin(9600); 
 keypad.addEventListener(keypadEvent); //añad. un evento listener para el keypad 
 keypad.setDebounceTime(250); 
 lcd.clear();     //Borra el LCD 
 lcd.setCursor(0,0); 
 lcd.print("Entre secuencia PIN:"); 
 lcd.setCursor(2,2); 
 lcd.print("* Para terminar"); 
 lcd.setCursor(0,3);  
 lcd.print(" Intentelo: "); 
} 
void loop()
{ 
 keypad.getKey(); 
 buttonState = digitalRead(buttonPin); 
 if (buttonState == HIGH) 
 { 
  lcd.clear(); 
 } 
} 
// atender algunos eventos especiales 
void keypadEvent(KeypadEvent eKey)
{ 
 switch (keypad.getState())
 { case 
 PRESSED: lcd.print(eKey); 
 switch (eKey)
  { 
   case ' ': guessPassword(); 
   break; 
   default: password.append(eKey); 
  } 
 } 
} 
void guessPassword()
{ 
 if (password.evaluate())
 {  
  digitalWrite(sal1, HIGH); // activa relé1 de la puerta 
  digitalWrite(sal2, LOW);  // desactiva relé2 de la puerta 
  lcd.clear(); 
  lcd.setCursor(0,0); 
  lcd.print("PASSWORD VALIDO "); // 
  password.reset(); //resetea password despues de entrada correcta
  delay(1000); 
  lcd.setCursor(0,0); 
  lcd.print("Bienvenido, Sr."); 
  delay(1000); 
  for (int positionCounter = 0; positionCounter < 22; positionCounter++) 
   { 
   // scroll one position right: 
    lcd.scrollDisplayRight(); // espera un poco 
    delay(150); 
   } 
   delay(35000); // espera 35 segundos antes de volver añ inicio 
   setup(); // al inicio 
   } else
   { 
    i = i++; 
    digitalWrite(ledPin,LOW); 
    digitalWrite(sal1, LOW); 
    digitalWrite(sal2, HIGH); 
    lcd.clear(); 
    lcd.print("PASSWORD INVALIDO "); 
    password.reset(); //resets password after INCORRECT entry 
    delay(2000); // tiempo de retardo 
    lcd.clear(); 
    lcd.setCursor(0,2); 
    lcd.print(" Intentelo: "); 
   } 
   if (i==3) 
   { 
    lcd.setCursor(0,1); 
    lcd.print("Lo siento... "); 
    lcd.setCursor(0,2); 
    lcd.print("Intentelo mas tarde"); 
    delay(30000); 
    lcd.clear(); 
    lcd.setCursor(0,2); 
    lcd.print(" Intentelo: "); 
    i=0; 
   } 
 }