Actividad. Dial analógico. Introducción de dígitos. Pantalla LCD

PROGRAMACIÓN EXTENDIDA


Montaje

 

Montaje eléctrico. Conexiones

En esta actividad añadiremos el potenciómetro y, mediante código, le daremos la funcionalidad de un dial analógico. Este dial permitirá al usuario introducir uno a uno los dígitos numéricos (0-9) que forman el código de desbloqueo, que mostraremos por la pantalla LCD.

Durante el desarrollo de esta actividad, trabajaremos con las entradas analógicas, la función map() y la pantalla LCD por comunicación i2c.

Pantalla LCD.

La pantalla LCD I2C se controla mediante la librería LiquidCrystal_I2C, que simplifica la comunicación a través del protocolo I2C. Este protocolo utiliza dos líneas, SDA (Serial Data) y SCL (Serial Clock), para la comunicación. En el código, se crea un objeto lcd que representa la pantalla, especificando la dirección I2C del dispositivo y el tamaño de la pantalla (16x2). La dirección I2C es un identificador único que permite al Arduino comunicarse con el dispositivo correcto en el bus I2C.

Tareas a realizar:

  1. Conectar la pantalla LCD por comunicación i2c. Para ello, deberás conectar la alimentación (5V y gnd) y las líneas de comunicación SDA y SCL a los pines A4 y A5 correspondientemente. 

  2. Conecta el terminal central del potenciómetro a cualquier entrada analógica disponible [A0, A1, A2 ó A3]. conecta un terminal extremo a la alimentación 5V y el otro terminal a tierra (gnd). Con esto, el potenciómetro será un partidor de tensión variable, obteniéndose en su pata central un valor de tensión linealmente dependiente del ángulo de giro y comprendido entre 0V y 5V.


Programación

 

Explicación actividad a programar

El Arduino dispone de varios pines de entrada analógica, que permiten medir voltajes entre 0 y 5V. Estos voltajes se convierten en valores digitales que van de 0 a 1023, mediante un convertidor analógico-digital (ADC) de 10 bits. En esta actividad, el potenciómetro se utiliza como un divisor de voltaje, generando un voltaje variable basado en su posición angular. La lectura de un potenciómetro permite transformar una señal analógica en datos digitales que el microcontrolador puede procesar, haciendo posible la interacción analógica-digital.

La función map().
Esta función nos es útil para escalar medidas de un rango a otro. El convertidor analógico de 10bits (ADC), nos devuelve un valores entre 0 y 1023, que reflejan la tensión medida en la entrada analógica, que puede estar comprendida en el rango 0v a 5v. 

y = map(Valor, fromLow, fromHigh, toLow, toHigh);

En donde el primer argumento, valor, representa el valor que tiene la variable, los siguientes argumentos (fromLow,fromHigh) indican el rango que esa variable puede tomar y los últimos argumentos (toLow,toHigh) indicamos el nuevo rango al cual queremos escalar la variable. Por ejemplo, si quisiéramos escalar el valor devuelto por el conversor ADC a la tensión (en milivoltios) medida en el pin analógico,  la función map quedaría así:

int milivoltios = map(LecturaADC, 0, 1023, 0, 5000);


Enunciado:

Crearemos un nuevo programa de cero, el cual deberá cumplir la siguiente funcionalidad: al arrancar el programa, se deberá mostrar un mensaje estático en la pantalla LCD durante 3 segundos.

[Mensaje][Bienvenida]

Transcurrido este tiempo, aparecerá en la pantalla el siguiente texto "Dial: {n}" en donde {n} es el dígito numérico (0-9) dado por la posición en tiempo real del potenciómetro.

[Dial: 6][]

Usa la función analogRead(pin) para leer el valor de tensión del potenciómetro. Esta función te devolverá un numero entero entre 0 y 1023, que se corresponde con el rango de tensión 0 a 5v. Recuerda que debes haber declarado el pin del potenciómetro como entrada en el setup()

Con la ayuda de la función map(), podrás re-escalar el rango 0-1023 al rango deseado. Este mapeo nos permite que el potenciómetro actúe como dial, seleccionando los dígitos numéricos a introducir (0-9) 
Recuerda haber incluido la librería  <Wire.h> y <LiquidCrystal_I2C.h> para poder instanciar el objeto lcd de la clase LiquidCrystal_I2C en el encabezado del programa:

LiquidCrystal_I2C lcd(i2c_address, columnas, filas);

En donde i2c_address es la dirección de la pantalla en el bus i2c, soliendo ser normalmente 0x27. Nuestra Lcd cuenta con 16 columnas y 2 filas. En el setup(), deberás inicializar la pantalla con el método lcd.init() y emplear el método lcd.backlight() para activar la retroiluminación de la misma. 

Mediante el método lcd.print("texto de ejemplo"); podrás mostrar un texto estático en la pantalla. Para mostrar en tiempo real el dígito seleccionado por el dial, debes ejecutar continuamente lcd.print(digito) en el bucle loop(). Es una buena práctica introducir un delay() de 100 milisegundos. Esto evita tomar lecturas excesivas, al mismo tiempo que se mantiene un refresco lo suficientemente fluido en la pantalla. (refresco de 10 veces por segundo: 10Hz) 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Configuración de la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Dirección I2C 0x27 para una pantalla LCD de 16x2

// Definición de pines
const int potPin = A0;  // Pin del potenciómetro

void setup() {
    // Iniciar comunicación con la pantalla LCD
    lcd.init();
    lcd.backlight();
    lcd.clear();

    // Configuración del pin del potenciómetro
    pinMode(potPin, INPUT);
   
    // Mostrar mensaje inicial
    lcd.setCursor(0, 0);
    lcd.print("Dial:");
}

void loop() {
    // Leer el valor del potenciómetro
    int potValue = analogRead(potPin);
   
    // Mapear el valor del potenciómetro (0-1023) a un rango de 0-9
    int digit = map(potValue, 0, 1023, 0, 9);
   
    // Mostrar el dígito en la pantalla LCD+
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Dial:");
    lcd.setCursor(6, 0);  // Colocar el cursor en la columna 6, fila 0
    lcd.print(digit);
   
    // Esperar un poco antes de la siguiente lectura
    delay(500);
}
Vistas
3 Número de vistas
3 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.