Cerca codice

Lezione 20/31: Visualizzazione della tensione su LCD1602

Lezione 20/31: Visualizzazione della tensione su LCD1602

Questo progetto dimostra come costruire un voltmetro digitale utilizzando un Arduino e un display LCD1602 con interfaccia I2C. Leggendo la tensione analogica da un potenziometro e visualizzandola sullo schermo, imparerai le competenze essenziali della conversione analogico-digitale, della comunicazione I2C e del controllo LCD. 

LCD_sunFounder

Questo progetto è un ottimo trampolino di lancio per molte applicazioni pratiche. Ecco alcune idee su cui puoi costruire:

  • Costruire un monitor di tensione della batteria portatile per i tuoi progetti.
  • Creare un semplice alimentatore con lettura visiva della tensione.
  • Monitorare l'uscita di un pannello solare o di un'altra sorgente di tensione variabile.
  • Visualizzare il valore di qualsiasi sensore analogico, come una fotoresistenza (LDR), come numero leggibile.

Alla fine di questa guida, avrai una chiara comprensione di come collegare i componenti, configurare le librerie necessarie e scrivere il codice per creare il tuo display di tensione.

potenziometro

Componenti Hardware

Per costruire questo progetto, avrai bisogno dei seguenti componenti. Il corso si basa sul kit Arduino 3-in-1 di SunFounder, che include tutte queste parti.

  • Scheda Arduino (es. Uno)
  • Display LCD1602 con modulo I2C
  • Potenziometro (10kΩ consigliato)
  • Cavi jumper
  • Breadboard

Comprendere l'LCD1602 e il Modulo I2C

L'LCD1602 è un popolare display alfanumerico con 16 colonne e 2 righe. Un LCD parallelo standard richiederebbe molti pin digitali per essere controllato. Tuttavia, questo display viene fornito con un modulo I2C dedicato attaccato sul retro (nel video a 01:30). Questo modulo semplifica notevolmente il cablaggio, riducendo la connessione a soli quattro fili: VCC, GND, SDA e SCL. Questo è possibile perché il modulo I2C funge da ponte, traducendo il semplice segnale seriale I2C nei segnali paralleli di cui l'LCD ha bisogno.

Questo progetto utilizza l'interfaccia I2C, che è un protocollo di comunicazione che consente al tuo Arduino di parlare con più dispositivi usando solo due fili. Questa è un'abilità fondamentale per collegare molti tipi di sensori e display.

Guida al Cablaggio

LCD1602_pot_wiring

Collegare l'LCD e il potenziometro all'Arduino è semplice. Il modulo I2C necessita di alimentazione e di due linee di comunicazione. Il potenziometro agisce come un partitore di tensione variabile, permettendoti di regolare la tensione sul suo pin centrale.

Ecco la configurazione di cablaggio dettagliata:

  • Modulo I2C dell'LCD ad Arduino:
    • GND a GND di Arduino (nel video a 05:38).
    • VCC a 5V di Arduino (nel video a 05:47).
    • SDA a A4 di Arduino (nel video a 05:47).
    • SCL a A5 di Arduino (nel video a 05:57).
  • Potenziometro ad Arduino:
    • Pin Sinistro a 5V di Arduino (nel video a 33:39).
    • Pin Centrale (Cursore) a A0 di Arduino (nel video a 33:43).
    • Pin Destro a GND di Arduino (nel video a 33:43).

Installazione della Libreria Richiesta

Questo progetto richiede una libreria esterna per controllare l'LCD tramite I2C. La libreria utilizzata nel video è la libreria "Arduino Liquid Crystal I2C". Puoi scaricarla dal link fornito nella pagina delle risorse Robojax o da GitHub (nel video a 06:16).

Per installarla, scarica la libreria come file ZIP. Quindi, nel tuo IDE Arduino, vai su Sketch > Includi Libreria > Aggiungi Libreria .ZIP... e seleziona il file scaricato (nel video a 06:41).

Trovare l'Indirizzo I2C del Tuo LCD

Prima di caricare il codice principale, è fondamentale determinare l'indirizzo I2C del tuo specifico modulo LCD. Questo indirizzo può variare a seconda del produttore. Il video dimostra come usare uno scanner I2C per trovarlo (nel video a 08:11).

Puoi trovare questo scanner andando su File > Esempi > Wire > i2c_scanner. Carica questo codice sul tuo Arduino con l'LCD collegato e apri il Monitor Seriale. Mostrerà l'indirizzo, che spesso è 0x27 o 0x3F. Dovrai usare questo indirizzo nel tuo codice principale.

Spiegazione del Codice

Il codice per questo progetto è focalizzato sulla lettura di un valore analogico e sulla sua formattazione per il display. Analizziamo le parti chiave e configurabili dall'utente.

1. Inclusione delle Librerie e Oggetto LCD

Questa sezione include le librerie necessarie e crea un oggetto per il tuo LCD. La parte più importante qui è l'indirizzo I2C, che devi modificare per corrispondere a quello trovato nel passaggio precedente.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Imposta l'indirizzo LCD a 0x27 per un display da 16 o 20 caratteri e 2 o 4 righe
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: Questa libreria è integrata in Arduino ed è necessaria per la comunicazione I2C.
  • #include <LiquidCrystal_I2C.h>: Questo include la libreria che abbiamo appena installato, che fornisce le funzioni per controllare il display LCD.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: Questa riga crea un oggetto chiamato lcd. Il primo parametro, 0x27, è l'indirizzo I2C che hai trovato in precedenza. Il secondo e il terzo parametro definiscono le dimensioni del display LCD: 16 colonne e 2 righe. Devi cambiare 0x27 con il tuo indirizzo specifico se è diverso.

2. Funzioni Setup e Loop

La funzione setup() inizializza il display LCD e accende la sua retroilluminazione. La funzione loop() contiene la logica principale per leggere la tensione e visualizzarla.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (codice per il display LCD)
  delay(1000);
}
  • lcd.begin(): Questo inizializza l'interfaccia del display LCD e lo prepara per l'uso.
  • lcd.backlight(): Questo accende la retroilluminazione del display, rendendo visibile il testo.
  • int potValue = analogRead(A0);: Questo legge il valore analogico grezzo dal pin A0, che è collegato al cursore del potenziometro. Il valore sarà un intero tra 0 e 1023, che rappresenta la tensione da 0V a 5V.
  • float voltage = potValue * (5.0 / 1023.0);: Questo è il passaggio di conversione cruciale. Converte il valore ADC grezzo in una lettura di tensione effettiva. La formula moltiplica il valore grezzo per il rapporto tra la tensione di riferimento (5.0V) e il valore ADC massimo (1023). Questo è necessario perché l'ADC non legge direttamente la tensione; legge un numero proporzionale.

3. Visualizzazione della Tensione

Il codice poi pulisce lo schermo e stampa il valore della tensione in una posizione specifica sulla seconda riga.

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // vai all'inizio della 2ª riga
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // imposta alla riga 2, carattere 9
  lcd.print(voltage); 
  lcd.setCursor (13,1); // imposta alla riga 2, carattere 14
  lcd.print("V"); 
  • lcd.clear(): Pulisce qualsiasi testo precedente dallo schermo.
  • lcd.print("LCD1602 Tutorial"): Stampa il titolo sulla prima riga.
  • lcd.setCursor (0,1): Imposta il cursore all'inizio della seconda riga. Il primo parametro è la colonna (0-15), e il secondo è la riga (0 per la prima riga, 1 per la seconda).
  • lcd.print(voltage): Stampa il valore di tensione calcolato. La variabile float verrà stampata con due decimali per impostazione predefinita.
  • lcd.setCursor (13,1): Sposta il cursore alla colonna 13 sulla seconda riga per posizionare il carattere "V" subito dopo il numero.

Dimostrazione del Progetto dal Vivo

Una volta caricato il codice, il display LCD dovrebbe mostrare "LCD1602 Tutorial" sulla prima riga. Sulla seconda riga, mostrerà "Voltage:" seguito dalla lettura di tensione corrente. Mentre ruoti la manopola del potenziometro, vedrai la tensione visualizzata cambiare in tempo reale, variando da circa 0.00V a 5.00V (nel video a 35:25).

Questo progetto è un esempio perfetto di come prendere un segnale analogico grezzo e trasformarlo in un valore chiaro e leggibile. Le competenze che hai imparato qui possono essere applicate direttamente a qualsiasi altro sensore analogico che potresti usare in futuro.

Il video copre anche altri argomenti correlati, come la visualizzazione di testo, lo scorrimento e la creazione di caratteri personalizzati sul display LCD.

Progetti correlati da questo video

Capitoli

  • [00:00] Introduzione all'LCD1602 e panoramica del progetto
  • [01:30] Spiegazione dell'hardware LCD1602 e del modulo I2C
  • [04:06] Impostazione dell'indirizzo I2C con i jumper
  • [05:28] Schema di collegamento per l'LCD1602
  • [07:31] Spiegazione del codice per la visualizzazione di testo di base
  • [11:10] Dimostrazione dell'esempio con cursore lampeggiante
  • [13:46] Creazione e uso di caratteri personalizzati
  • [18:51] Uso dell'esempio di visualizzazione seriale
  • [23:16] Scorrimento del testo sul display LCD
  • [26:13] Visualizzazione di temperatura e umidità da DHT11
  • [33:00] Lettura e visualizzazione della tensione da un potenziometro
  • [35:56] Visualizzazione della distanza da un sensore a ultrasuoni

Immagini

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
Lingua: C++
/*
Lesson 20/31: Displaying voltage on LCD1602
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int count =700;
void setup()
{
  // Robojax code for LCD with I2C
	// initialize the LCD, 
	lcd.begin();
 
	// Turn on the blacklight and print a message.
	lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Voltage:");

  lcd.setCursor (9,1); // set to line 2 char 9
  lcd.print(voltage); 

  lcd.setCursor (13,1); // set to line 2 char 14
  lcd.print("V"); 

  //lcd.setCursor (3,3); // set to line 4 character 4
  //lcd.print("Text in line 4"); 
        
  delay(1000);
  count++;
 //end of loopcode Robojax code for LCD with I2C
}

File📁

Librerie Arduino (zip)

Manuale dell'utente