Caută cod

Lecția 20/31: Afișarea tensiunii pe LCD1602

Lecția 20/31: Afișarea tensiunii pe LCD1602

Acest proiect demonstrează cum să construiești un voltmetru digital folosind un Arduino și un afișaj LCD1602 cu interfață I2C. Citind tensiunea analogică de la un potențiometru și afișând-o pe ecran, vei învăța abilitățile esențiale ale conversiei analog-digitală, comunicării I2C și controlului LCD. 

LCD_sunFounder

Acest proiect este o piatră de temelie excelentă pentru multe aplicații practice. Iată câteva idei pe care le poți dezvolta:

  • Construirea unui monitor portabil de tensiune a bateriei pentru proiectele tale.
  • Crearea unei surse de alimentare simple cu afișaj vizual al tensiunii.
  • Monitorizarea ieșirii unui panou solar sau a altei surse de tensiune variabile.
  • Afișarea valorii de la orice senzor analogic, cum ar fi un rezistor dependent de lumină (LDR), ca număr lizibil.

Până la sfârșitul acestui ghid, vei avea o înțelegere clară a modului de conectare a componentelor, de configurare a bibliotecilor necesare și de scriere a codului pentru a crea propriul afișaj de tensiune.

potentiometru

Componente Hardware

Pentru a construi acest proiect, vei avea nevoie de următoarele componente. Cursul se bazează pe kit-ul Arduino 3-în-1 SunFounder, care include toate aceste piese.

  • Placă Arduino (de ex., Uno)
  • Afișaj LCD1602 cu modul I2C
  • Potențiometru (10kΩ recomandat)
  • Fire de legătură
  • Breadboard

Înțelegerea LCD1602 și a Modulului I2C

LCD1602 este un afișaj alfanumeric popular cu 16 coloane și 2 rânduri. Un LCD paralel standard ar necesita mulți pini digitali pentru control. Cu toate acestea, acest afișaj vine cu un modul I2C dedicat atașat pe spate (în video la 01:30). Acest modul simplifică dramatic cablarea, reducând conexiunea la doar patru fire: VCC, GND, SDA și SCL. Acest lucru este posibil deoarece modulul I2C acționează ca o punte, traducând semnalul serial simplu I2C în semnalele paralele de care are nevoie LCD-ul.

Acest proiect folosește interfața I2C, care este un protocol de comunicare ce permite Arduino-ului tău să vorbească cu mai multe dispozitive folosind doar două fire. Aceasta este o abilitate fundamentală pentru conectarea multor tipuri de senzori și afișaje.

Ghid de Cablare

LCD1602_pot_cablare

Conectarea LCD-ului și a potențiometrului la Arduino este simplă. Modulul I2C are nevoie de alimentare și de două linii de comunicare. Potențiometrul acționează ca un divizor de tensiune variabil, permițându-ți să ajustezi tensiunea la pinul său cursor.

Iată configurarea detaliată a cablajului:

  • Modul I2C LCD la Arduino:
    • GND la Arduino GND (în video la 05:38).
    • VCC la Arduino 5V (în video la 05:47).
    • SDA la Arduino A4 (în video la 05:47).
    • SCL la Arduino A5 (în video la 05:57).
  • Potențiometru la Arduino:
    • Pinul Stâng la Arduino 5V (în video la 33:39).
    • Pinul Mijlociu (Cursor) la Arduino A0 (în video la 33:43).
    • Pinul Drept la Arduino GND (în video la 33:43).

Instalarea Bibliotecii Necesare

Acest proiect necesită o bibliotecă externă pentru a controla LCD-ul prin I2C. Biblioteca folosită în video este biblioteca „Arduino Liquid Crystal I2C". O poți descărca de la linkul furnizat pe pagina de resurse Robojax sau de pe GitHub (în video la 06:16).

Pentru a o instala, descarcă biblioteca ca fișier ZIP. Apoi, în IDE-ul Arduino, mergi la Sketch > Include Library > Add .ZIP Library... și selectează fișierul descărcat (în video la 06:41).

Găsirea Adresei I2C a LCD-ului Tău

Înainte de a încărca codul principal, este crucial să determini adresa I2C a modulului tău LCD specific. Această adresă poate varia în funcție de producător. Videoclipul demonstrează cum să folosești un scaner I2C pentru a o găsi (în video la 08:11).

Poți găsi acest scaner mergând la File > Examples > Wire > i2c_scanner. Încarcă acest cod pe Arduino-ul tău cu LCD-ul conectat și deschide Monitorul Serial. Acesta va afișa adresa, care este adesea 0x27 sau 0x3F. Va trebui să folosești această adresă în codul tău principal.

Explicația Codului

Codul pentru acest proiect se concentrează pe citirea unei valori analogice și formatarea acesteia pentru afișare. Să descompunem părțile cheie, configurabile de utilizator.

1. Includeri de Biblioteci și Obiect LCD

Această secțiune include bibliotecile necesare și creează un obiect pentru LCD-ul tău. Cea mai importantă parte aici este adresa I2C, pe care trebuie să o schimbi pentru a se potrivi cu cea găsită în pasul anterior.

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

// Setează adresa LCD la 0x27 pentru un afișaj cu 16 sau 20 de caractere și 2 sau 4 linii
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: Această bibliotecă este integrată în Arduino și este necesară pentru comunicarea I2C.
  • #include <LiquidCrystal_I2C.h>: Aceasta include biblioteca pe care tocmai am instalat-o, care oferă funcțiile pentru controlul LCD-ului.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: Această linie creează un obiect numit lcd. Primul parametru, 0x27, este adresa I2C pe care ai găsit-o mai devreme. Al doilea și al treilea parametru definesc dimensiunile LCD-ului: 16 coloane și 2 rânduri. Trebuie să schimbi 0x27 cu adresa ta specifică dacă este diferită.

2. Funcțiile Setup și Loop

Funcția setup() inițializează LCD-ul și pornește lumina de fundal. Funcția loop() conține logica principală pentru citirea tensiunii și afișarea acesteia.

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

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (cod pentru afișarea pe LCD)
  delay(1000);
}
  • lcd.begin(): Aceasta inițializează interfața LCD și o pregătește pentru utilizare.
  • lcd.backlight(): Aceasta pornește lumina de fundal a afișajului, făcând textul vizibil.
  • int potValue = analogRead(A0);: Aceasta citește valoarea analogică brută de pe pinul A0, care este conectat la cursorul potențiometrului. Valoarea va fi un număr întreg între 0 și 1023, reprezentând tensiunea de la 0V la 5V.
  • float voltage = potValue * (5.0 / 1023.0);: Acesta este pasul crucial de conversie. Convertește valoarea ADC brută într-o citire reală a tensiunii. Formula înmulțește valoarea brută cu raportul dintre tensiunea de referință (5.0V) și valoarea maximă ADC (1023). Acest lucru este necesar deoarece ADC-ul nu citește tensiunea direct; el citește un număr proporțional.

3. Afișarea tensiunii

Codul apoi șterge ecranul și afișează valoarea tensiunii la o poziție specifică pe a doua linie.

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // mergi la începutul celei de-a doua linii
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // setează la linia 2, caracterul 9
  lcd.print(voltage); 
  lcd.setCursor (13,1); // setează la linia 2, caracterul 14
  lcd.print("V"); 
  • lcd.clear(): Șterge orice text anterior de pe ecran.
  • lcd.print("LCD1602 Tutorial"): Afișează titlul pe prima linie.
  • lcd.setCursor (0,1): Setează cursorul la începutul celei de-a doua linii. Primul parametru este coloana (0-15), iar al doilea este rândul (0 pentru prima linie, 1 pentru a doua).
  • lcd.print(voltage): Afișează valoarea calculată a tensiunii. Variabila float va fi afișată cu două zecimale în mod implicit.
  • lcd.setCursor (13,1): Mută cursorul la coloana 13 pe a doua linie pentru a poziționa caracterul "V" imediat după număr.

Demonstrație live a proiectului

Odată ce ai încărcat codul, LCD-ul ar trebui să afișeze "LCD1602 Tutorial" pe prima linie. Pe a doua linie, va afișa "Voltage:" urmat de citirea curentă a tensiunii. Pe măsură ce rotești butonul potențiometrului, vei vedea tensiunea afișată schimbându-se în timp real, variind de la aproximativ 0.00V la 5.00V (în videoclip la 35:25).

Acest proiect este un exemplu perfect despre cum să iei un semnal analogic brut și să îl transformi într-o valoare clară, lizibilă pentru om. Abilitățile învățate aici pot fi aplicate direct oricărui alt senzor analogic pe care l-ai putea folosi în viitor.

Videoclipul acoperă și alte subiecte conexe, cum ar fi afișarea textului, derularea și crearea de caractere personalizate pe LCD.

Proiecte conexe din acest videoclip

Capitole

  • [00:00] Introducere în LCD1602 și prezentarea proiectului
  • [01:30] Explicația hardware-ului LCD1602 și a modulului I2C
  • [04:06] Setarea adresei I2C cu jumperi
  • [05:28] Schema de conexiuni pentru LCD1602
  • [07:31] Explicația codului pentru afișarea textului de bază
  • [11:10] Demonstrarea exemplului cu cursorul intermitent
  • [13:46] Crearea și utilizarea caracterelor personalizate
  • [18:51] Utilizarea exemplului cu afișaj serial
  • [23:16] Derularea textului pe LCD
  • [26:13] Afișarea temperaturii și umidității de la DHT11
  • [33:00] Citirea și afișarea tensiunii de la un potențiometru
  • [35:56] Afișarea distanței de la un senzor ultrasonic

Imagini

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
Limba: 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
}

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)

Manualul utilizatorului