bclose

LCD Keypad Shield

Usando un Shield que nos ahorrará muchos dolores de cabeza

Objetivos

 

 

    • Conocer los Shields con LCD y botones.
    • Presentar un ejemplo sencillo de uso..

 
 

  

Material requerido.

Imagen de Arduino UNOArduino UNO o equivalente.
Shield con LCD 16x2 y varias teclasUn LCD Keypad Shield

 

Los Keypads con Display LCD

 

Con mucha frecuencia, cuando estas montando algún circuito de prueba, necesitas un display para ver cómo van las cosas y en muchas ocasiones la consola de Arduino es una opción incomoda o simplemente no está disponible.

Necesitamos un display local y para ello ya vimos en las pasadas sesiones que basta con conectar un display del tipo que sea. Lo más fácil suele ser un LCD de 16×2 del tipo I2C, por aquello de no tener que conectar muchos pines, que además tienen la mala costumbre de soltarse en el peor momento.

Pero incluso en estas ocasiones los varios hilos del I2C son poco robustos y no es raro que se suelten, lo que suele provocar una de esas típicas imprecaciones por las que a electrónicos y técnicos en general se nos acusa de mal carácter (y hasta de hablar solos).

Por eso, hace tiempo que uso un pequeño Shield que ha mejorado mucho mis relaciones con los que me rodean, y que si no tienes problemas de pines, permite montar con seguridad un pequeño display con botones, ideal para muchas pruebas de campo e incluso como dispositivo final en cualquiera de esos perdidosa rincones de la casa por la que andas colocando Arduinos.

Por poco más de lo que vale un display LCD de 16×2, este pequeño Shield nos viene con un LCD más 5 botones, que podemos usar para nuestros proyectos. A cambio se queda bastante pines del Arduino UNO para sí mismo y la gestión del LCD, pero nos sigue dejando libres los pines digitales del 0 al 7, y las puertas analógicas del A1 al A5, más el ICSP.

La ventaja del LCD keypad Shield, es que se coloca rápidamente en su sitio y queda con una sujeción robusta a prueba de cables de protoboard bailando, lo que garantiza la estabilidad del asunto.

Vista frontal

El LCD está conectado de esta forma:

Detalle de conexiones

Para no tener que usar 5 pines digitales para reconocer los 5 botones, están conectados en serie con resistencias a un único puerto analógico de modo que reconocemos el botón pulsado mediante el valor de tensión que lee A0.

 
  • Aunque esto tiene el inconveniente que, si no podremos discriminar si se pulsan dos botones simultáneamente.
 

El programa de control

 

Como ya vimos en toras sesiones el manejo de los LCD de 16×2, no entraremos en el detalle de su gestión, y remitimos a los que sean nuevos con esta pequeña joyita de hardware al tutorial correspondiente: Displays LCD

 
  • También conviene recordar de que para que podamos ver correctamente el display LCD, dispone de un potenciómetro en la esquina superior derecha que nos ayudará a ajustar el contraste.
 

Dado que los pines están fijados por Hardware en el Shield, podemos presentar un programa tipo para manejarlo.  Como el LCD va directamente te conectado a los pines digitales de nuestro Arduino vamos a empezar incluyendo la librería LCD y definiendo las conexiones de los pines.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Algunas definiciones por comodidad

int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

int read_LCD_buttons()  // para leer los botones

Para leer los botones, vamos a definer una pequeña function:

int read_LCD_buttons()  
  { adc_key_in = analogRead(0);      // Leemos A0
    // Mis botones dan:  0, 145, 329,507,743
    // Y ahora los comparamos con un margen comodo
    if (adc_key_in > 900) return btnNONE;     // Ningun boton pulsado 
    if (adc_key_in < 50)   return btnRIGHT; 
    if (adc_key_in < 250)  return btnUP;
    if (adc_key_in < 450)  return btnDOWN;
    if (adc_key_in < 650)  return btnLEFT;
    if (adc_key_in < 850)  return btnSELECT; 

    return btnNONE;  // Por si todo falla
  }

Simplemente lee el valor de tensión en A0 y con esto reconocemos el botón pulsado. El Shield está diseñado para que cada botón provoque una lectura distinta de tensión en el convertidor A0. En cuanto un valor concuerda salimos de la función con el valor dado.

Tienes que comprobar que para el Shield del que dispones los valores son aproximadamente los mismos, pero no te confíes y compruébalo.

 
  • Cada botón está previsto sobre una serie de 0, 175, 350, 525, 700 ; Pero la fabricación de los componentes electrónicos tiene una dispersión amplia para esta calidad, por lo que podrían haber diferencias.
 

En cuanto al Setup, simplemente sacamos un mensaje en pantalla:

void setup()
   {  lcd.begin(16, 2);              // Inicializar el LCD
      lcd.setCursor(0,0);
      lcd.print("Prometec.net");     // print a simple message
   }

Y por último en el loop, gestionamos los valores en pantalla: Sesion_84

void loop()
   {  lcd.setCursor(9,1);              // Cursor a linea 2, posicion 9
      lcd.print(millis()/1000);        // Imprime segundos
      lcd.setCursor(13, 0);            // Cursor a linea 1, posicion 13
      lcd.print(key);                  // Imprime el valor leido en la puerta A0
      lcd.setCursor(0,1);              // Cursor a linea 2, posicion 1
 
      lcd_key = read_LCD_buttons();
      if( lcd_key == btnRIGHT)
              lcd.print("RIGHT ");
      else if ( lcd_key == btnLEFT )
              lcd.print("LEFT   ");
      else if ( lcd_key == btnUP)
              lcd.print("UP    ");
      else if ( lcd_key == btnDOWN)
              lcd.print("DOWN  ");
      else if ( lcd_key == btnSELECT)
              lcd.print("SELECT");
      else if ( lcd_key == btnNONE)
              lcd.print("NONE  ");
   }

El programa es muy sencillo y muy fácil de adaptar a tus propios proyectos, lo que hace que estas placas sean muy practicas cuando quieres lanzar un prototipo y no quieres liarte con los botones y displays.

El único inconveniente que tienen es que para engancharle sensores externos tienes que soldarlos a la placa o al menos soldar conectores hembras como los que trae Arduino para sus pines, ya que estos Shields nunca los pasan, o al menos yo no he visto ninguno que lo haga.

Aquí os dejo un pequeño video para mostraros el Shield.

 

 

Resumen de la sesión

 

 
    • Hemos visto como estos Shields son muy sencillos de usar.
    • Encajan como cualquier otro Shield con firmeza, lo que nos haya a mejorar la robustez de los prototipos.
    • Son muy prácticos y nos permiten poner en marcha prototipos rápidamente sin preocuparnos por pelear con las pantallas y o botones de entrada

 
 
 

 

 

 

 

 

(42) Comments

    • Marcos

    Hola Estoy buscando desactivar la backlight y con el pin digital 10 no logro hacerlo. Alguno sabe como? gracias!

    • Hola Marcos, no sé cómo podría hacerse sin quitarle la alimentación.

  • Para los botones Comparé con los siguientes parámetros:

    // Y ahora los comparamos con un margen comodo
    if (adc_key_in > 1023) return btnNONE; // Ningun boton pulsado
    if (adc_key_in < 50) return btnRIGHT;
    if (adc_key_in < 250) return btnUP;
    if (adc_key_in < 300) return btnDOWN;
    if (adc_key_in < 450) return btnLEFT;
    if (adc_key_in < 650) return btnSELECT;

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!