Suchcode

Lektion 20/31: Spannung auf LCD1602 anzeigen

Lektion 20/31: Spannung auf LCD1602 anzeigen

Dieses Projekt zeigt, wie man mit einem Arduino und einem LCD1602-Display mit I2C-Schnittstelle ein digitales Voltmeter baut. Indem du die analoge Spannung eines Potentiometers ausliest und auf dem Bildschirm anzeigst, lernst du die grundlegenden Fähigkeiten der Analog-Digital-Umwandlung, der I2C-Kommunikation und der LCD-Steuerung. 

LCD_sunFounder

Dieses Projekt ist ein großartiger Ausgangspunkt für viele praktische Anwendungen. Hier sind einige Ideen, auf denen du aufbauen kannst:

  • Bau eines tragbaren Batteriespannungsmonitors für deine Projekte.
  • Erstellung eines einfachen Netzteils mit visueller Spannungsanzeige.
  • Überwachung der Ausgabe eines Solarpanels oder einer anderen variablen Spannungsquelle.
  • Anzeige des Werts eines beliebigen analogen Sensors, wie eines lichtabhängigen Widerstands (LDR), als lesbare Zahl.

Am Ende dieser Anleitung wirst du ein klares Verständnis dafür haben, wie du die Komponenten verbindest, die erforderlichen Bibliotheken konfigurierst und den Code schreibst, um deine eigene Spannungsanzeige zu erstellen.

Potentiometer

Hardware-Komponenten

Um dieses Projekt zu bauen, benötigst du die folgenden Komponenten. Der Kurs basiert auf dem SunFounder 3-in-1 Arduino-Kit, das alle diese Teile enthält.

  • Arduino-Board (z. B. Uno)
  • LCD1602-Display mit I2C-Modul
  • Potentiometer (10kΩ empfohlen)
  • Jumper-Kabel
  • Breadboard

Verständnis des LCD1602 und des I2C-Moduls

Das LCD1602 ist ein beliebtes alphanumerisches Display mit 16 Spalten und 2 Zeilen. Ein standardmäßiges paralleles LCD würde viele digitale Pins zur Steuerung benötigen. Dieses Display verfügt jedoch über ein dediziertes I2C-Modul, das auf seiner Rückseite angebracht ist (im Video bei 01:30). Dieses Modul vereinfacht die Verkabelung erheblich und reduziert die Verbindung auf nur vier Drähte: VCC, GND, SDA und SCL. Dies ist möglich, weil das I2C-Modul als Brücke fungiert und das einfache I2C-Serialsignal in die parallelen Signale übersetzt, die das LCD benötigt.

Dieses Projekt verwendet die I2C-Schnittstelle, ein Kommunikationsprotokoll, das es deinem Arduino ermöglicht, mit mehreren Geräten über nur zwei Drähte zu kommunizieren. Dies ist eine grundlegende Fähigkeit für den Anschluss vieler Arten von Sensoren und Displays.

Verkabelungsanleitung

LCD1602_pot_wiring

Das Verbinden des LCDs und des Potentiometers mit dem Arduino ist unkompliziert. Das I2C-Modul benötigt Strom und zwei Kommunikationsleitungen. Das Potentiometer fungiert als variabler Spannungsteiler und ermöglicht es dir, die Spannung an seinem Schleifer-Pin einzustellen.

Hier ist der detaillierte Verkabelungsaufbau:

  • LCD-I2C-Modul zu Arduino:
    • GND zu Arduino GND (im Video bei 05:38).
    • VCC zu Arduino 5V (im Video bei 05:47).
    • SDA zu Arduino A4 (im Video bei 05:47).
    • SCL zu Arduino A5 (im Video bei 05:57).
  • Potentiometer zu Arduino:
    • Linker Pin zu Arduino 5V (im Video bei 33:39).
    • Mittlerer Pin (Schleifer) zu Arduino A0 (im Video bei 33:43).
    • Rechter Pin zu Arduino GND (im Video bei 33:43).

Installieren der erforderlichen Bibliothek

Dieses Projekt erfordert eine externe Bibliothek, um das LCD über I2C zu steuern. Die im Video verwendete Bibliothek ist die "Arduino Liquid Crystal I2C"-Bibliothek. Du kannst sie über den Link auf der Robojax-Ressourcenseite oder von GitHub herunterladen (im Video bei 06:16).

Um sie zu installieren, lade die Bibliothek als ZIP-Datei herunter. Gehe dann in deiner Arduino-IDE zu Sketch > Bibliothek einbinden > .ZIP-Bibliothek hinzufügen... und wähle die heruntergeladene Datei aus (im Video bei 06:41).

Finden der I2C-Adresse deines LCDs

Bevor du den Hauptcode hochlädst, ist es entscheidend, die I2C-Adresse deines spezifischen LCD-Moduls zu bestimmen. Diese Adresse kann je nach Hersteller variieren. Das Video zeigt, wie man einen I2C-Scanner verwendet, um sie zu finden (im Video bei 08:11).

Du findest diesen Scanner unter Datei > Beispiele > Wire > i2c_scanner. Lade diesen Code mit angeschlossenem LCD auf deinen Arduino hoch und öffne den seriellen Monitor. Er zeigt die Adresse an, die oft 0x27 oder 0x3F ist. Du musst diese Adresse in deinem Hauptcode verwenden.

Code-Erklärung

Der Code für dieses Projekt konzentriert sich auf das Lesen eines analogen Werts und dessen Formatierung für die Anzeige. Lass uns die wichtigsten, vom Benutzer konfigurierbaren Teile aufschlüsseln.

1. Bibliotheks-Einbindungen und LCD-Objekt

Dieser Abschnitt bindet die erforderlichen Bibliotheken ein und erstellt ein Objekt für dein LCD. Der wichtigste Teil hier ist die I2C-Adresse, die du ändern musst, damit sie der im vorherigen Schritt gefundenen entspricht.

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

// Setze die LCD-Adresse auf 0x27 für ein 16- oder 20-Zeichen- und 2- oder 4-Zeilen-Display
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: Diese Bibliothek ist in Arduino integriert und für die I2C-Kommunikation erforderlich.
  • #include <LiquidCrystal_I2C.h>: Dies bindet die gerade installierte Bibliothek ein, die die Funktionen zur Steuerung des LCDs bereitstellt.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: Diese Zeile erstellt ein Objekt namens lcd. Der erste Parameter, 0x27, ist die I2C-Adresse, die du zuvor herausgefunden hast. Der zweite und dritte Parameter definieren die Abmessungen des LCDs: 16 Spalten und 2 Zeilen. Du musst 0x27 in deine spezifische Adresse ändern, falls diese abweicht.

2. Setup- und Loop-Funktionen

Die setup()-Funktion initialisiert das LCD und schaltet die Hintergrundbeleuchtung ein. Die loop()-Funktion enthält die Kernlogik zum Lesen der Spannung und deren Anzeige.

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

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (LCD-Anzeigecode)
  delay(1000);
}
  • lcd.begin(): Dies initialisiert die LCD-Schnittstelle und bereitet sie für die Verwendung vor.
  • lcd.backlight(): Dies schaltet die Hintergrundbeleuchtung des Displays ein, wodurch der Text sichtbar wird.
  • int potValue = analogRead(A0);: Dies liest den rohen analogen Wert von Pin A0, der mit dem Schleifer des Potentiometers verbunden ist. Der Wert ist eine Ganzzahl zwischen 0 und 1023 und repräsentiert die Spannung von 0V bis 5V.
  • float voltage = potValue * (5.0 / 1023.0);: Dies ist der entscheidende Umrechnungsschritt. Er wandelt den rohen ADC-Wert in eine tatsächliche Spannungsmessung um. Die Formel multipliziert den rohen Wert mit dem Verhältnis der Referenzspannung (5,0V) zum maximalen ADC-Wert (1023). Dies ist notwendig, da der ADC die Spannung nicht direkt liest, sondern einen proportionalen Wert.

3. Anzeigen der Spannung

Der Code löscht dann den Bildschirm und gibt den Spannungswert an einer bestimmten Position in der zweiten Zeile aus.

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // gehe zum Anfang der 2. Zeile
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // setze auf Zeile 2, Zeichen 9
  lcd.print(voltage); 
  lcd.setCursor (13,1); // setze auf Zeile 2, Zeichen 14
  lcd.print("V"); 
  • lcd.clear(): Löscht jeglichen vorherigen Text vom Bildschirm.
  • lcd.print("LCD1602 Tutorial"): Gibt den Titel in der ersten Zeile aus.
  • lcd.setCursor (0,1): Setzt den Cursor an den Anfang der zweiten Zeile. Der erste Parameter ist die Spalte (0-15), der zweite die Zeile (0 für die erste Zeile, 1 für die zweite).
  • lcd.print(voltage): Gibt den berechneten Spannungswert aus. Die float-Variable wird standardmäßig mit zwei Dezimalstellen ausgegeben.
  • lcd.setCursor (13,1): Bewegt den Cursor auf Spalte 13 in der zweiten Zeile, um das Zeichen "V" direkt nach der Zahl zu positionieren.

Live-Projektdemonstration

Sobald du den Code hochgeladen hast, sollte das LCD "LCD1602 Tutorial" in der ersten Zeile anzeigen. In der zweiten Zeile wird "Voltage:" gefolgt von der aktuellen Spannungsmessung angezeigt. Wenn du den Drehknopf des Potentiometers drehst, siehst du die angezeigte Spannung in Echtzeit ändern, von ungefähr 0,00V bis 5,00V (im Video bei 35:25).

Dieses Projekt ist ein perfektes Beispiel dafür, wie man ein rohes analoges Signal in einen klaren, für Menschen lesbaren Wert umwandelt. Die hier erlernten Fähigkeiten kannst du direkt auf jeden anderen analogen Sensor anwenden, den du in Zukunft verwenden könntest.

Das Video behandelt auch andere verwandte Themen, wie das Anzeigen von Text, Scrollen und das Erstellen benutzerdefinierter Zeichen auf dem LCD.

Verwandte Projekte aus diesem Video

Kapitel

  • [00:00] Einführung in das LCD1602 und Projektübersicht
  • [01:30] Erklärung der LCD1602-Hardware und des I2C-Moduls
  • [04:06] Einstellen der I2C-Adresse mit Jumpern
  • [05:28] Schaltplan für das LCD1602
  • [07:31] Code-Erklärung für die grundlegende Textanzeige
  • [11:10] Demonstration des blinkenden Cursor-Beispiels
  • [13:46] Erstellen und Verwenden benutzerdefinierter Zeichen
  • [18:51] Verwendung des seriellen Anzeigebeispiels
  • [23:16] Scrollender Text auf dem LCD
  • [26:13] Anzeige von Temperatur und Luftfeuchtigkeit vom DHT11
  • [33:00] Lesen und Anzeigen der Spannung von einem Potentiometer
  • [35:56] Anzeige der Entfernung von einem Ultraschallsensor

Bilder

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

Ressourcen & Referenzen

Dateien📁

Arduino-Bibliotheken (zip)

|||Benutzerhandbuch