Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 en Facebook! Profundiza en el mundo de Raspberry Pi, Arduino y ESP32 junto con otros entusiastas.

¿Por qué unirte?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas previas exclusivas: Accede a nuevos anuncios de productos y avances antes que nadie.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Estás listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!

Lección 41: Valor de escala del potenciómetro

Este proyecto se centra en leer el valor de un potenciómetro y mostrarlo en una pantalla LCD 1620 equipada con una interfaz I2C. Además, el valor se transmite al monitor serial para su monitoreo en tiempo real. Un aspecto distintivo de este proyecto es la representación gráfica del valor del potenciómetro en la pantalla LCD, que se muestra como una barra de longitud variable proporcional a la lectura del potenciómetro.

Componentes necesarios

En este proyecto necesitamos los siguientes componentes.

Es muy conveniente comprar un kit completo, aquí tienes el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Kit de Sensor Universal Maker

94

BUY

También puedes comprarlos por separado a través de los enlaces a continuación.

Introducción al componente

Enlace de compra

ESP32 & Placa de Desarrollo (Placa ESP32)

Comprar

Módulo de Potenciómetro

-

I2C LCD 1602

-

Placa de Pruebas

Comprar

Conexiones

../_images/Lesson_41_Potentiometer_scale_value_esp32_bb.png

Código

Análisis del código

La funcionalidad principal de este proyecto es leer de manera continua el valor del potenciómetro, asignarlo a un rango escalado (0-16) y mostrar el resultado tanto numéricamente como gráficamente en la pantalla LCD. La implementación minimiza el parpadeo al actualizar la pantalla solo cuando ocurren cambios significativos en la lectura, manteniendo así una experiencia visual fluida.

  1. Inclusión de bibliotecas y declaración inicial:

    // Bibliotecas necesarias para operaciones I2C y LCD
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    
    // Inicializa el LCD con dirección I2C 0x27 y 16 columnas y 2 filas
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    

    Este segmento incluye las bibliotecas necesarias para la comunicación I2C y el control del LCD. Luego, inicializa una instancia de LCD con la dirección I2C 0x27, especificando sus dimensiones como 16 columns y 2 rows.

  2. Declaración de variables:

    // Variables para almacenar las lecturas del potenciómetro
    int lastRead = 0;     // Valor anterior del potenciómetro
    int currentRead = 0;  // Valor actual del potenciómetro
    

    Las variables lastRead y currentRead se utilizan para llevar un seguimiento de las lecturas del potenciómetro en diferentes momentos.

  3. Función setup():

    void setup() {
      lcd.init();          // Inicia el LCD
      lcd.backlight();     // Activa la retroiluminación del LCD
      Serial.begin(9600);  // Inicia la comunicación serial a 9600 baudios
    }
    

    Esta función prepara el LCD y comienza la comunicación serial, configurando el entorno para el funcionamiento del proyecto.

  4. Bucle principal:

    void loop() {
       // Leer el valor actual del potenciómetro
       int currentRead = analogRead(35);
    
       // Mapea el valor leído de 0-4096 a 0-16
       int barLength = map(currentRead, 0, 4096, 0, 16);
    
       // Actualiza el LCD solo si la diferencia entre la lectura actual y la anterior es mayor a 2 para evitar parpadeos
       if (abs(lastRead - currentRead) > 2) {
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Value:");
          lcd.setCursor(7, 0);
          lcd.print(currentRead);
          Serial.println(currentRead);
    
          // Muestra una barra en la segunda fila del LCD proporcional al valor del potenciómetro
          for (int i = 0; i < barLength; i++) {
             lcd.setCursor(i, 1);
             lcd.print(char(255));
          }
       }
       // Actualiza el último valor leído para la próxima iteración
       lastRead = currentRead;
    
       // Introduce un retraso para una lectura estable
       delay(200);
    }
    
    • Lee el potenciómetro y convierte su valor en una escala adecuada para la representación visual.

    • Actualiza el LCD solo cuando se detecta un cambio significativo, mostrando el valor numérico y un gráfico de barras correspondiente.

    • También envía la lectura al monitor serial para su observación externa.

    • Asegura estabilidad y capacidad de respuesta introduciendo un breve retraso entre iteraciones.