Les 20/31: Spanning weergeven op LCD1602
Dit project demonstreert hoe je een digitale voltmeter bouwt met een Arduino en een LCD1602-display met een I2C-interface. Door de analoge spanning van een potentiometer te lezen en op het scherm weer te geven, leer je de essentiële vaardigheden van analoog-naar-digitaal-conversie, I2C-communicatie en LCD-besturing.
Dit project is een uitstekende opstap voor veel praktische toepassingen. Hier zijn enkele ideeën waarop je kunt voortbouwen:
- Het bouwen van een draagbare batterijspanningsmonitor voor je projecten.
- Het maken van een eenvoudige voeding met een visuele spanningsuitlezing.
- Het bewaken van de output van een zonnepaneel of een andere variabele spanningsbron.
- Het weergeven van de waarde van elke analoge sensor, zoals een lichtafhankelijke weerstand (LDR), als een leesbaar getal.
Aan het einde van deze handleiding heb je een duidelijk begrip van hoe je de componenten aansluit, de benodigde bibliotheken configureert en de code schrijft om je eigen spanningsdisplay te maken.
Hardwarecomponenten
Om dit project te bouwen, heb je de volgende componenten nodig. De cursus is gebaseerd op de SunFounder 3-in-1 Arduino-kit, die al deze onderdelen bevat.
- Arduino-board (bijv. Uno)
- LCD1602-display met I2C-module
- Potentiometer (10kΩ aanbevolen)
- Jumperdraden
- Breadboard
De LCD1602 en I2C-module begrijpen
De LCD1602 is een populair alfanumeriek display met 16 kolommen en 2 rijen. Een standaard parallel LCD zou veel digitale pinnen nodig hebben om te besturen. Dit display wordt echter geleverd met een speciale I2C-module die aan de achterkant is bevestigd (in video op 01:30). Deze module vereenvoudigt de bedrading aanzienlijk, waardoor de verbinding wordt teruggebracht tot slechts vier draden: VCC, GND, SDA en SCL. Dit is mogelijk omdat de I2C-module fungeert als een brug die het eenvoudige I2C-seriele signaal vertaalt naar de parallelle signalen die het LCD nodig heeft.
Dit project gebruikt de I2C-interface, een communicatieprotocol waarmee je Arduino met meerdere apparaten kan praten via slechts twee draden. Dit is een fundamentele vaardigheid voor het aansluiten van vele soorten sensoren en displays.
Bedradingsgids
Het aansluiten van het LCD en de potentiometer op de Arduino is eenvoudig. De I2C-module heeft stroom en twee communicatielijnen nodig. De potentiometer fungeert als een variabele spanningsdeler, waarmee je de spanning op de wiper-pin kunt aanpassen.
Hier is de gedetailleerde bedradingsopstelling:
- LCD I2C-module naar Arduino:
- GND naar Arduino GND (in video op 05:38).
- VCC naar Arduino 5V (in video op 05:47).
- SDA naar Arduino A4 (in video op 05:47).
- SCL naar Arduino A5 (in video op 05:57).
- Potentiometer naar Arduino:
- Linkerpin naar Arduino 5V (in video op 33:39).
- Middelste pin (Wiper) naar Arduino A0 (in video op 33:43).
- Rechterpin naar Arduino GND (in video op 33:43).
De vereiste bibliotheek installeren
Dit project vereist een externe bibliotheek om het LCD via I2C te besturen. De bibliotheek die in de video wordt gebruikt, is de "Arduino Liquid Crystal I2C"-bibliotheek. Je kunt deze downloaden via de link op de Robojax-resourcepagina of van GitHub (in video op 06:16).
Om deze te installeren, download je de bibliotheek als een ZIP-bestand. Ga vervolgens in je Arduino IDE naar Sketch > Bibliotheek gebruiken > .ZIP-bibliotheek toevoegen... en selecteer het gedownloade bestand (in video op 06:41).
Het I2C-adres van je LCD vinden
Voordat je de hoofdcode uploadt, is het cruciaal om het I2C-adres van je specifieke LCD-module te bepalen. Dit adres kan variëren afhankelijk van de fabrikant. De video demonstreert hoe je een I2C-scanner gebruikt om dit te vinden (in video op 08:11).
Je kunt deze scanner vinden door naar Bestand > Voorbeelden > Wire > i2c_scanner te gaan. Upload deze code naar je Arduino met het LCD aangesloten en open de Seriële Monitor. Het zal het adres weergeven, dat vaak 0x27 of 0x3F is. Je moet dit adres gebruiken in je hoofdcode.
Code-uitleg
De code voor dit project is gericht op het lezen van een analoge waarde en het formatteren ervan voor weergave. Laten we de belangrijkste, door de gebruiker configureerbare delen opsplitsen.
1. Bibliotheekinclusies en LCD-object
Dit gedeelte bevat de benodigde bibliotheken en maakt een object voor je LCD. Het belangrijkste hier is het I2C-adres, dat je moet wijzigen zodat het overeenkomt met het adres dat je in de vorige stap hebt gevonden.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Stel het LCD-adres in op 0x27 voor een display van 16 of 20 tekens en 2 of 4 regels
LiquidCrystal_I2C lcd(0x27, 16, 2);#include <Wire.h>: Deze bibliotheek is ingebouwd in Arduino en is vereist voor I2C-communicatie.#include <LiquidCrystal_I2C.h>: Dit omvat de bibliotheek die we zojuist hebben geïnstalleerd, die de functies biedt om de LCD te besturen.LiquidCrystal_I2C lcd(0x27, 16, 2);: Deze regel maakt een object met de naamlcd. De eerste parameter,0x27, is het I2C-adres dat je eerder hebt gevonden. De tweede en derde parameters definiëren de afmetingen van de LCD: 16 kolommen en 2 rijen. Je moet0x27wijzigen naar jouw specifieke adres als dit anders is.
2. Setup- en Loop-functies
De setup()-functie initialiseert de LCD en schakelt de achtergrondverlichting in. De loop()-functie bevat de kernlogica voor het lezen van de spanning en het weergeven ervan.
void setup()
{
lcd.begin();
lcd.backlight();
}
void loop()
{
int potValue = analogRead(A0);
float voltage = potValue * (5.0 / 1023.0);
// ... (LCD-weergavecode)
delay(1000);
}
lcd.begin(): Dit initialiseert de LCD-interface en bereidt deze voor op gebruik.lcd.backlight(): Dit schakelt de achtergrondverlichting van het display in, waardoor de tekst zichtbaar wordt.int potValue = analogRead(A0);: Dit leest de ruwe analoge waarde van pin A0, die is verbonden met de loper van de potentiometer. De waarde is een geheel getal tussen 0 en 1023, die de spanning van 0V tot 5V vertegenwoordigt.float voltage = potValue * (5.0 / 1023.0);: Dit is de cruciale conversiestap. Het zet de ruwe ADC-waarde om in een werkelijke spanningsmeting. De formule vermenigvuldigt de ruwe waarde met de verhouding van de referentiespanning (5,0V) tot de maximale ADC-waarde (1023). Dit is nodig omdat de ADC geen spanning direct leest; het leest een proportioneel getal.
3. De spanning weergeven
De code wist vervolgens het scherm en drukt de spanningswaarde af op een specifieke positie op de tweede regel.
lcd.clear();
lcd.print("LCD1602 Tutorial");
lcd.setCursor (0,1); // ga naar het begin van de 2e regel
lcd.print("Voltage:");
lcd.setCursor (9,1); // zet op regel 2, teken 9
lcd.print(voltage);
lcd.setCursor (13,1); // zet op regel 2, teken 14
lcd.print("V");
lcd.clear(): Wist eventuele eerdere tekst van het scherm.lcd.print("LCD1602 Tutorial"): Drukt de titel af op de eerste regel.lcd.setCursor (0,1): Zet de cursor aan het begin van de tweede regel. De eerste parameter is de kolom (0-15), en de tweede is de rij (0 voor de eerste regel, 1 voor de tweede).lcd.print(voltage): Drukt de berekende spanningswaarde af. Defloat-variabele wordt standaard met twee decimalen afgedrukt.lcd.setCursor (13,1): Verplaatst de cursor naar kolom 13 op de tweede regel om het "V"-teken direct na het getal te plaatsen.
Live projectdemonstratie
Zodra je de code hebt geüpload, moet de LCD "LCD1602 Tutorial" weergeven op de eerste regel. Op de tweede regel wordt "Voltage:" gevolgd door de huidige spanningsmeting weergegeven. Wanneer je aan de knop van de potentiometer draait, zie je de weergegeven spanning in realtime veranderen, variërend van ongeveer 0,00V tot 5,00V (in video op 35:25).
Dit project is een perfect voorbeeld van hoe je een ruw analoog signaal omzet in een duidelijke, leesbare waarde. De vaardigheden die je hier hebt geleerd, kunnen direct worden toegepast op elke andere analoge sensor die je in de toekomst gebruikt.
De video behandelt ook andere gerelateerde onderwerpen, zoals het weergeven van tekst, scrollen en het maken van aangepaste tekens op de LCD.
Gerelateerde projecten uit deze video
- Les 20/31: LCD1602 gebruiken met Arduino om tekst weer te geven | Robojax
- Les 20/31: Temperatuur en luchtvochtigheid van DHT11 weergeven op LCD-scherm
Hoofdstukken
- [00:00] Inleiding tot de LCD1602 en projectoverzicht
- [01:30] Uitleg over LCD1602-hardware en I2C-module
- [04:06] Het I2C-adres instellen met jumpers
- [05:28] Bedradingsschema voor de LCD1602
- [07:31] Code-uitleg voor basis tekstweergave
- [11:10] Demonstratie van het knipperende cursorvoorbeeld
- [13:46] Aangepaste tekens maken en gebruiken
- [18:51] Het seriële displayvoorbeeld gebruiken
- [23:16] Tekst scrollen op de LCD
- [26:13] Temperatuur en luchtvochtigheid van DHT11 weergeven
- [33:00] Spanning van een potentiometer lezen en weergeven
- [35:56] Afstand van een ultrasone sensor weergeven
/*
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
}
Dingen die je misschien nodig hebt
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Hulpmiddelen en referenties
-
DocumentatieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Bestanden📁
Arduino-bibliotheken (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Gebruikershandleiding
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB