Pretraži kod

Lekcija 20/31: Prikazivanje napona na LCD1602

Lekcija 20/31: Prikazivanje napona na LCD1602

Ovaj projekat demonstrira kako napraviti digitalni voltmetar koristeći Arduino i LCD1602 ekran sa I2C interfejsom. Čitanjem analognog napona sa potenciometra i prikazivanjem na ekranu, naučićete osnovne vještine analogno-digitalne konverzije, I2C komunikacije i kontrole LCD ekrana. 

LCD_sunFounder

Ovaj projekat je odličan temelj za mnoge praktične primjene. Evo nekoliko ideja na kojima možete graditi:

  • Izgradnja prijenosnog monitora napona baterije za vaše projekte.
  • Kreiranje jednostavnog napajanja sa vizuelnim prikazom napona.
  • Praćenje izlaza solarnog panela ili drugog izvora promjenjivog napona.
  • Prikazivanje vrijednosti bilo kojeg analognog senzora, poput otpornika ovisnog o svjetlosti (LDR), kao čitljivog broja.

Do kraja ovog vodiča, imaćete jasno razumijevanje kako povezati komponente, konfigurisati potrebne biblioteke i napisati kod za kreiranje vlastitog prikaza napona.

potenciometar

Hardverske komponente

Za izgradnju ovog projekta trebat će vam sljedeće komponente. Kurs se zasniva na SunFounder 3-u-1 Arduino kompletu, koji uključuje sve ove dijelove.

  • Arduino ploča (npr. Uno)
  • LCD1602 ekran sa I2C modulom
  • Potenciometar (preporučeno 10kΩ)
  • Konektorski kablovi
  • Breadboard

Razumijevanje LCD1602 i I2C modula

LCD1602 je popularan alfanumerički ekran sa 16 kolona i 2 reda. Standardni paralelni LCD zahtijevao bi mnogo digitalnih pinova za kontrolu. Međutim, ovaj ekran dolazi sa namjenskim I2C modulom pričvršćenim na njegovoj poleđini (u videu na 01:30). Ovaj modul dramatično pojednostavljuje ožičenje, smanjujući vezu na samo četiri žice: VCC, GND, SDA i SCL. To je moguće jer I2C modul djeluje kao most, prevodeći jednostavan I2C serijski signal u paralelne signale koje LCD treba.

Ovaj projekat koristi I2C interfejs, koji je komunikacijski protokol koji omogućava vašem Arduinu da razgovara sa više uređaja koristeći samo dvije žice. Ovo je osnovna vještina za povezivanje mnogih vrsta senzora i ekrana.

Vodič za ožičenje

LCD1602_pot_wiring

Povezivanje LCD ekrana i potenciometra na Arduino je jednostavno. I2C modul treba napajanje i dvije komunikacijske linije. Potenciometar djeluje kao promjenjivi djelitelj napona, omogućavajući vam da podesite napon na njegovom kliznom pinu.

Evo detaljnog rasporeda ožičenja:

  • LCD I2C modul na Arduino:
    • GND na Arduino GND (u videu na 05:38).
    • VCC na Arduino 5V (u videu na 05:47).
    • SDA na Arduino A4 (u videu na 05:47).
    • SCL na Arduino A5 (u videu na 05:57).
  • Potenciometar na Arduino:
    • Lijevi pin na Arduino 5V (u videu na 33:39).
    • Srednji pin (klizni) na Arduino A0 (u videu na 33:43).
    • Desni pin na Arduino GND (u videu na 33:43).

Instalacija potrebne biblioteke

Ovaj projekat zahtijeva eksternu biblioteku za kontrolu LCD ekrana preko I2C-a. Biblioteka korištena u videu je "Arduino Liquid Crystal I2C" biblioteka. Možete je preuzeti sa linka navedenog na Robojax stranici resursa ili sa GitHub-a (u videu na 06:16).

Da biste je instalirali, preuzmite biblioteku kao ZIP datoteku. Zatim, u vašem Arduino IDE-u, idite na Sketch > Include Library > Add .ZIP Library... i odaberite preuzetu datoteku (u videu na 06:41).

Pronalaženje I2C adrese vašeg LCD ekrana

Prije nego što prenesete glavni kod, ključno je odrediti I2C adresu vašeg specifičnog LCD modula. Ova adresa može varirati ovisno o proizvođaču. Video demonstrira kako koristiti I2C skener da biste je pronašli (u videu na 08:11).

Ovaj skener možete pronaći idući na File > Examples > Wire > i2c_scanner. Prenesite ovaj kod na vaš Arduino sa povezanim LCD ekranom i otvorite Serial Monitor. Prikazaće adresu, koja je često 0x27 ili 0x3F. Morat ćete koristiti ovu adresu u vašem glavnom kodu.

Objašnjenje koda

Kod za ovaj projekat fokusiran je na čitanje analogne vrijednosti i formatiranje za prikaz. Hajde da raščlanimo ključne dijelove koje korisnik može konfigurisati.

1. Uključivanje biblioteka i LCD objekat

Ovaj odjeljak uključuje potrebne biblioteke i kreira objekat za vaš LCD ekran. Najvažniji dio ovdje je I2C adresa, koju morate promijeniti da odgovara onoj koju ste pronašli u prethodnom koraku.

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

// Postavite LCD adresu na 0x27 za ekran od 16 ili 20 znakova i 2 ili 4 linije
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: Ova biblioteka je ugrađena u Arduino i potrebna je za I2C komunikaciju.
  • #include <LiquidCrystal_I2C.h>: Ovo uključuje biblioteku koju smo upravo instalirali, koja pruža funkcije za upravljanje LCD-om.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: Ova linija kreira objekat nazvan lcd. Prvi parametar, 0x27, je I2C adresa koju ste ranije pronašli. Drugi i treći parametar definišu dimenzije LCD-a: 16 kolona i 2 reda. Morate promijeniti 0x27 u vašu specifičnu adresu ako je drugačija.

2. Setup i Loop funkcije

Funkcija setup() inicijalizuje LCD i uključuje njegovo pozadinsko osvjetljenje. Funkcija loop() sadrži osnovnu logiku za čitanje napona i njegovo prikazivanje.

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

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (kod za prikaz na LCD-u)
  delay(1000);
}
  • lcd.begin(): Ovo inicijalizuje LCD interfejs i priprema ga za upotrebu.
  • lcd.backlight(): Ovo uključuje pozadinsko osvjetljenje ekrana, čineći tekst vidljivim.
  • int potValue = analogRead(A0);: Ovo čita sirovu analognu vrijednost sa pina A0, koji je povezan na klizač potenciometra. Vrijednost će biti cijeli broj između 0 i 1023, koji predstavlja napon od 0V do 5V.
  • float voltage = potValue * (5.0 / 1023.0);: Ovo je ključni korak konverzije. Pretvara sirovu ADC vrijednost u stvarno očitavanje napona. Formula množi sirovu vrijednost sa omjerom referentnog napona (5.0V) i maksimalne ADC vrijednosti (1023). Ovo je neophodno jer ADC ne čita napon direktno; on čita proporcionalni broj.

3. Prikazivanje napona

Kod zatim čisti ekran i ispisuje vrijednost napona na specifičnoj poziciji na drugom redu.

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // idi na početak 2. reda
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // postavi na red 2, znak 9
  lcd.print(voltage); 
  lcd.setCursor (13,1); // postavi na red 2, znak 14
  lcd.print("V"); 
  • lcd.clear(): Briše sav prethodni tekst sa ekrana.
  • lcd.print("LCD1602 Tutorial"): Ispisuje naslov na prvom redu.
  • lcd.setCursor (0,1): Postavlja kursor na početak drugog reda. Prvi parametar je kolona (0-15), a drugi je red (0 za prvi red, 1 za drugi).
  • lcd.print(voltage): Ispisuje izračunatu vrijednost napona. Varijabla float će biti ispisana sa dvije decimale po defaultu.
  • lcd.setCursor (13,1): Pomjera kursor na kolonu 13 u drugom redu kako bi pozicionirao znak "V" odmah nakon broja.

Demonstracija projekta uživo

Nakon što uploadate kod, LCD bi trebao prikazati "LCD1602 Tutorial" na prvom redu. Na drugom redu, prikazat će "Voltage:" nakon čega slijedi trenutno očitavanje napona. Dok rotirate dugme potenciometra, vidjet ćete da se prikazani napon mijenja u realnom vremenu, u rasponu od približno 0.00V do 5.00V (u videu na 35:25).

Ovaj projekat je savršen primjer kako uzeti sirovi analogni signal i pretvoriti ga u jasnu, čitljivu vrijednost. Vještine koje ste naučili ovdje mogu se direktno primijeniti na bilo koji drugi analogni senzor koji biste mogli koristiti u budućnosti.

Video također pokriva druge povezane teme, kao što su prikazivanje teksta, skrolovanje i kreiranje prilagođenih znakova na LCD-u.

Povezani projekti iz ovog videa

Poglavlja

  • [00:00] Uvod u LCD1602 i pregled projekta
  • [01:30] Objašnjenje LCD1602 hardvera i I2C modula
  • [04:06] Postavljanje I2C adrese sa jumperima
  • [05:28] Šema povezivanja za LCD1602
  • [07:31] Objašnjenje koda za osnovni prikaz teksta
  • [11:10] Demonstracija primjera trepćućeg kursora
  • [13:46] Kreiranje i korištenje prilagođenih znakova
  • [18:51] Korištenje primjera serijskog prikaza
  • [23:16] Skrolovanje teksta na LCD-u
  • [26:13] Prikazivanje temperature i vlažnosti sa DHT11
  • [33:00] Čitanje i prikazivanje napona sa potenciometra
  • [35:56] Prikazivanje udaljenosti sa ultrazvučnog senzora

Slike

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

Resursi i reference

Datoteke📁

Arduino biblioteke (zip)

Korisnički priručnik