Gdy Arduino ma nie tylko mierzyć, ale też pokazywać wynik bez podłączonego komputera, niewielki wyświetlacz LCD nadal jest jednym z najpraktyczniejszych dodatków. Zestaw z ekranem 16x2 pozwala wyświetlać temperaturę, komunikaty, stan przekaźnika czy wartości z czujników, a jego uruchomienie nie wymaga skomplikowanej elektroniki. Pokażę, jaki moduł wybrać, jak go podłączyć, napisać pierwszy program i usunąć typowe problemy z pustym ekranem.
Najważniejsze decyzje przed uruchomieniem wyświetlacza
- LCD 16x2 pokazuje 16 znaków w dwóch wierszach i jest najprostszym wyborem do projektów Arduino.
- Moduł I2C wymaga tylko czterech przewodów, podczas gdy wersja równoległa zajmuje więcej pinów.
- W klasycznym połączeniu potrzebny jest zwykle potencjometr 10 kΩ do regulacji kontrastu.
- Adres I2C, najczęściej 0x27 lub 0x3F, nie jest gwarantowany i może wymagać sprawdzenia.
- Brak tekstu często wynika z kontrastu, masy albo złej kolejności pinów, a nie z uszkodzonego programu.
Co naprawdę daje LCD podłączony do Arduino
Najpopularniejszy moduł 1602, nazywany też 16x2, ma 16 kolumn i 2 wiersze. Wyświetla tekst oraz cyfry, ale nie jest ekranem graficznym. Do prostych stacji pogodowych, liczników, termometrów i menu sterujących to zwykle wystarcza, a ograniczenie graficzne pomaga utrzymać projekt w ryzach.
Większość takich wyświetlaczy korzysta z kontrolera HD44780 lub jego zgodnego odpowiednika. Dzięki temu można sterować nimi biblioteką LiquidCrystal, bez pisania obsługi niskopoziomowej. Sam najczęściej wybieram właśnie 1602, gdy liczy się czytelny komunikat i szybkie uruchomienie, a nie wygląd przypominający panel nowoczesnego urządzenia.
Do wyboru są dwa podstawowe warianty połączenia. Pierwszy wykorzystuje bezpośrednio piny danych LCD, drugi ma z tyłu małą płytkę z układem I2C, która zamienia komunikację równoległą na szeregową.
LCD równoległy czy moduł I2C
| Cecha | Połączenie równoległe | Moduł I2C |
|---|---|---|
| Liczba przewodów sygnałowych | 6 | 2 |
| Potencjometr kontrastu | Zewnętrzny, zwykle 10 kΩ | Zwykle zamontowany na płytce |
| Biblioteka | LiquidCrystal |
Jedna z bibliotek LiquidCrystal_I2C
|
| Największa zaleta | Przejrzyste poznanie działania LCD | Oszczędność pinów Arduino |
| Najczęstsza trudność | Dużo połączeń i możliwość pomyłki | Nieznany adres I2C lub różnice między bibliotekami |
Wersja równoległa ma sens edukacyjny. Widać, które linie odpowiadają za wybór rejestru, zatwierdzanie danych i przesyłanie znaków. Do gotowego projektu częściej polecam jednak I2C, bo dwa przewody sygnałowe zostawiają więcej pinów na czujniki, przyciski i sterowanie.
Trzeba tylko pamiętać, że LiquidCrystal_I2C nie jest jedną, całkowicie ujednoliconą biblioteką. Różne jej wersje mogą wymagać lcd.init(), lcd.begin() albo innej składni. Jeśli program zgłasza błąd przy inicjalizacji, najlepiej otworzyć przykład dołączony do konkretnej biblioteki zamiast kopiować losowy kod z internetu.
W Arduino Uno i klasycznym Nano linie I2C są dostępne na A4 jako SDA oraz A5 jako SCL. W Arduino Mega używa się zwykle pinów 20 i 21. W nowszych płytkach warto sprawdzić opis pinów, ponieważ mogą być dodatkowo wyprowadzone na złączu oznaczonym SDA i SCL.
Jak podłączyć klasyczny LCD 16x2
Przyjmijmy popularny układ z biblioteką LiquidCrystal i sześcioma pinami Arduino. Numery można zmienić w programie, ale na początek dobrze trzymać się jednego, czytelnego schematu.
| Pin LCD | Oznaczenie | Połączenie |
|---|---|---|
| 1 | VSS | GND |
| 2 | VDD | 5 V |
| 3 | VO | Środkowa nóżka potencjometru 10 kΩ |
| 4 | RS | Arduino D12 |
| 5 | RW | GND |
| 6 | E | Arduino D11 |
| 11 | D4 | Arduino D5 |
| 12 | D5 | Arduino D4 |
| 13 | D6 | Arduino D3 |
| 14 | D7 | Arduino D2 |
| 15 i 16 | A i K | Podświetlenie, zgodnie z dokumentacją modułu |
Dwie nóżki potencjometru podłącz do 5 V i GND, a jego środkowy pin do VO. Pin RW najlepiej od razu połączyć z masą, ponieważ w typowym projekcie Arduino tylko zapisuje dane do wyświetlacza. Podświetlenie także wymaga uwagi, bo niektóre moduły mają już rezystor, a inne wymagają jego dodania.
Przy pracy z wersją I2C podłączasz tylko VCC, GND, SDA i SCL. Na płytce z tyłu LCD znajduje się zwykle mały potencjometr do kontrastu oraz zwora podświetlenia. To właśnie ten element często rozwiązuje problem, gdy ekran jest zasilany, ale tekst pozostaje niewidoczny.
Pierwszy program i czytelne odświeżanie danych
Dla połączenia równoległego wystarczy krótki szkic. Wywołanie lcd.begin(16, 2) informuje bibliotekę, że używasz ekranu o 16 kolumnach i 2 wierszach, a setCursor() ustawia miejsce rozpoczęcia tekstu.
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print("23.6 C");
}
void loop() {
}
W konstruktorze kolejność pinów to RS, E, D4, D5, D6, D7. Pomylenie choćby dwóch przewodów może sprawić, że podświetlenie będzie działało, ale znaki się nie pojawią. Dlatego przed zmianą programu sprawdzam najpierw tabelę połączeń i ciągłość przewodów.
Dla modułu I2C kod może wyglądać tak:
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print("23.6 C");
}
void loop() {
}
Adres 0x27 jest popularny, ale nie uniwersalny. Jeżeli ekran nie reaguje, spróbuj sprawdzić także 0x3F albo uruchom skaner I2C. Gdy skaner nie wykrywa żadnego urządzenia, problem leży zwykle w zasilaniu, masie, zamienionych liniach SDA i SCL lub niezgodnym poziomie napięcia.
Jak wyświetlać zmienne bez migotania
W projektach z czujnikiem kuszące jest używanie lcd.clear() w każdej iteracji pętli. Efekt bywa jednak irytujący, bo ekran miga. Lepszym rozwiązaniem jest ustawienie kursora i nadpisanie poprzedniej wartości odpowiednią liczbą znaków.
int temperatura = 24;
void loop() {
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperatura);
lcd.print(" C ");
delay(500);
}
Spacje na końcu linii celowo przykrywają starsze, dłuższe wartości. Jeśli wcześniej wyświetliłeś 100, a później pojawi się 99, bez dodatkowej spacji ostatnia cyfra może pozostać na ekranie.
Najczęstsze błędy i szybka diagnoza
Podświetlenie działa, ale tekstu nie widać
Najpierw powoli przekręć potencjometr kontrastu. Przy złym ustawieniu ekran może wyglądać jak martwy, mimo że program działa. W module bez I2C sprawdź napięcie na VO i upewnij się, że suwak potencjometru jest podłączony do właściwej nóżki.
Pojawiają się prostokąty zamiast liter
Rząd ciemnych prostokątów zwykle oznacza, że LCD ma zasilanie i kontrast, ale nie został poprawnie zainicjalizowany. Sprawdź pin RW podłączony do GND, przewody RS i E oraz zgodność kolejności pinów w konstruktorze biblioteki.
Ekran I2C milczy
W tym przypadku zacznij od adresu. Moduł może używać 0x27, 0x3F albo innej wartości ustawionej przez zworki na ekspanderze. Potem sprawdź, czy SDA i SCL nie zostały zamienione oraz czy masa Arduino łączy się z masą wyświetlacza.
Przeczytaj również: Programowanie AVR - Od kodu do działającego układu bez zgadywania
Tekst wygląda na uszkodzony
Kontroler HD44780 ma ograniczony zestaw znaków i nie zawsze poprawnie wyświetla polskie litery. Do komunikatów technicznych używam prostych znaków ASCII, na przykład „Temp” zamiast „Temperatura” z diakrytyką, albo tworzę własne znaki w pamięci CGRAM. Zwykle można zapisać maksymalnie 8 własnych znaków jednocześnie.
Jak dobrać wyświetlacz do konkretnego projektu
Do pierwszych ćwiczeń wybrałbym LCD 1602 z I2C. Daje natychmiastowy, czytelny rezultat i nie blokuje wielu pinów, a jednocześnie uczy podstaw komunikacji z urządzeniem peryferyjnym. Wersję równoległą warto mieć wtedy, gdy chcesz zrozumieć działanie interfejsu albo korzystasz z zestawu edukacyjnego, który zawiera już potencjometr i przewody.
Jeżeli potrzebujesz więcej informacji na jednej stronie, wybierz LCD 2004, czyli 20 kolumn i 4 wiersze. Nie poprawia on jakości grafiki, ale pozwala pokazać kilka parametrów naraz, na przykład temperaturę, wilgotność, ciśnienie i stan przekaźnika.
Gdy projekt ma prezentować wykresy, ikony lub rozbudowane menu, znakowy LCD szybko pokaże swoje ograniczenia. Wtedy lepszy będzie ekran graficzny albo TFT, lecz za cenę większej liczby bibliotek, bardziej złożonego kodu i większego zużycia pamięci. Do prostego panelu sterowania klasyczny moduł nadal wygrywa prostotą.
| Zastosowanie | Najrozsądniejszy wybór | Dlaczego |
|---|---|---|
| Termometr i prosty licznik | LCD 1602 I2C | Mało przewodów i szybki start |
| Kilka parametrów naraz | LCD 2004 I2C | Więcej miejsca na tekst |
| Nauka elektroniki | LCD równoległy | Łatwiej zrozumieć sygnały sterujące |
| Ikony i wykresy | LCD graficzny lub TFT | Większe możliwości wizualne |
Od prostego komunikatu do użytecznego interfejsu
Najlepszy pierwszy projekt to nie samo wyświetlenie napisu „Hello”. Podłącz potencjometr, czujnik temperatury albo przycisk i pokaż na ekranie wartość, która faktycznie zmienia się podczas pracy. Dzięki temu od razu przećwiczysz odczyt danych, formatowanie tekstu i odświeżanie bez migotania.
Moja praktyczna kolejność jest prosta. Najpierw uruchamiam sam ekran, później sprawdzam kontrast, następnie dodaję jeden sensor i dopiero na końcu buduję menu. Takie etapowanie szybko pokazuje, czy problem tkwi w kablach, bibliotece, adresie I2C czy w logice programu.
Jeżeli połączenie zadziała, nie musisz już traktować LCD jako osobnego ćwiczenia. Ten sam schemat można rozwinąć w termostat, panel alarmowy, licznik impulsów albo lokalny interfejs robota. Najwięcej różnicy robią tu nie dodatkowe biblioteki, lecz poprawne zasilanie, właściwy kontrast i spokojne sprawdzanie każdego połączenia.