Wyświetlacze LCD oparte na sterowniku HD44780, takie jak popularny LCD 1602 (2 wiersze po 16 znaków), to jedne z najczęściej używanych modułów w projektach z Arduino. Umożliwiają wyświetlanie tekstu, liczb oraz prostych ikon tworzonych w pamięci CGRAM, co sprawdza się w robotyce, elektronice hobbystycznej i systemach sterowania.
W tym przewodniku pokażemy dwa sposoby podłączenia (klasyczny i przez konwerter I2C), gotowe schematy oraz kod z bibliotekami LiquidCrystal i LiquidCrystal_I2C, a także praktyczne wskazówki i najczęstsze pułapki.
Dlaczego warto używać wyświetlacza LCD w projektach z Arduino?
Wyświetlacze LCD są tanie, energooszczędne i łatwe w obsłudze. W robotyce służą do pokazywania statusu silników, temperatury czujników czy komunikatów błędów. W przeciwieństwie do diod LED pozwalają na wyświetlanie pełnych komunikatów tekstowych. Sterownik HD44780 obsługuje wyświetlacze znakowe o rozmiarach 16×2, 20×4 i pokrewnych (nie jest to sterownik do pełnych wyświetlaczy graficznych). Kluczową zaletą jest tryb 4‑bitowy, który redukuje liczbę linii danych z 8 do 4.
Najważniejsze korzyści wyglądają następująco:
- niskie zużycie prądu – ok. 2–5 mA bez podświetlenia;
- pełne komunikaty tekstowe – większa czytelność niż przy samych diodach LED;
- szeroka kompatybilność – Arduino Uno, Nano, Mega i wiele innych płytek;
- podświetlenie LED – sterowanie liniami A/K lub tranzystorem PWM dla regulacji jasności.
Co będzie potrzebne do podłączenia?
Oto podstawowy zestaw komponentów dla obu metod podłączenia:
- wyświetlacz LCD 1602 (HD44780) – wersja z podświetleniem lub bez, zależnie od potrzeb;
- Arduino – np. Uno lub Nano, z wyprowadzeniami w rastrze 2,54 mm;
- płytka stykowa i przewody połączeniowe – najlepiej zestaw męsko–żeńskie do szybkiego prototypowania;
- listwy goldpin – do wlutowania w LCD/konwerter, jeśli nie są fabryczne;
- konwerter I2C – np. PCF8574, zalecany dla oszczędności pinów mikrokontrolera;
- potencjometr 10 kΩ – do regulacji kontrastu na pinie VO (często wbudowany na module I2C);
- rezystor 220 Ω – opcjonalnie do ograniczania prądu podświetlenia LED.
Uwaga – przed zakupem sprawdź specyfikację zasilania: niektóre moduły pracują z 5 V, a inne z 3,3 V. Na Arduino Uno stosuj 5 V, o ile dokumentacja wyświetlacza nie wskazuje inaczej.
Metoda 1 – tradycyjne podłączenie (tryb 4‑bitowy)
Ta metoda wymaga 6 linii sygnałowych + 2 zasilających (VCC, GND): DB4–DB7, RS, E oraz linii VO do regulacji kontrastu.
Schemat podłączenia
Numery i funkcje pinów HD44780 oraz przykładowe przypisanie do Arduino prezentują się tak:
| Pin LCD | Funkcja | Podłączenie do Arduino (przykład) |
|---|---|---|
| 1 | VSS (GND) | GND |
| 2 | VDD (VCC) | 5 V |
| 3 | VO (kontrast) | Środkowy pin potencjometru (końce: 5 V i GND) |
| 4 | RS | Pin 10 (cyfrowy) |
| 5 | RW | GND (tylko zapis) |
| 6 | E | Pin 9 |
| 11–14 | DB4–DB7 | Piny 8, 7, 6, 5 |
| 15 | A (podświetlenie +) | 5 V przez rezystor 220 Ω |
| 16 | K (podświetlenie –) | GND |
Wskazówka – buduj układ na płytce stykowej, aby łatwo korygować połączenia. Reguluj kontrast potencjometrem: zbyt ciemne pełne prostokąty oznaczają zbyt wysoki kontrast lub brak inicjalizacji.
Biblioteka i kod przykładowy
Zainstaluj bibliotekę LiquidCrystal (wbudowana w Arduino IDE). Przykładowy kod wygląda tak:
#include <LiquidCrystal.h>
// Inicjalizacja: RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(10, 9, 8, 7, 6, 5);
void setup() {
lcd.begin(16, 2); // 16 kolumn, 2 wiersze
lcd.print("Witaj Arduino!");
lcd.setCursor(0, 1); // kolumna 0, wiersz 1
lcd.print("LCD dziala!");
}
void loop() {
// Pusta – statyczny tekst
}
Aby dynamicznie odświeżać treści, używaj: lcd.clear(), lcd.setCursor(kol, wie), lcd.print(tekst).
Metoda 2 – podłączenie z konwerterem I2C (zalecane)
Dlaczego I2C? Redukuje okablowanie do 4 przewodów – VCC, GND, SDA i SCL – co ułatwia prowadzenie wiązek w robotach i pozostawia wolne piny na czujniki.
Schemat podłączenia
Połączenia między konwerterem I2C a Arduino Uno wyglądają następująco:
| Pin konwertera | Podłączenie do Arduino Uno |
|---|---|
| VCC | 5 V (lub 3,3 V zgodnie ze specyfikacją modułu) |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
Wyświetlacz łączysz z konwerterem taśmą 1:1 (16 pinów jak wyżej). Po uruchomieniu zasilania sprawdź adres I2C (najczęściej 0x27 lub 0x3F) skanerem I2C z Arduino IDE. Wiele płytek I2C ma już wbudowane rezystory podciągające na SDA/SCL.
Biblioteka i kod przykładowy
Zainstaluj bibliotekę LiquidCrystal_I2C (autor: Frank de Brabander). Następnie wgraj poniższy kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adres, kolumny, wiersze
void setup() {
lcd.init();
lcd.backlight(); // Włącz podświetlenie
lcd.setCursor(0, 0);
lcd.print("Robotyka PL!");
lcd.setCursor(0, 1);
lcd.print("I2C LCD OK");
}
void loop() {
lcd.setCursor(12, 1);
lcd.print(millis() / 1000); // Sekundnik
delay(1000);
}
I2C znacząco upraszcza okablowanie i pozwala łatwo łączyć wiele modułów na wspólnej magistrali.
Zaawansowana obsługa tekstowa
Wyświetlanie znaków specjalnych i polskich liter
Kontroler HD44780 ma 8 komórek CGRAM na własne znaki (np. ikony, strzałki). Możesz je zdefiniować tak:
byte smiley[8] = {
0b00000,
0b01010,
0b00000,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
lcd.createChar(0, smiley);
lcd.write(byte(0)); // Wyświetl uśmiech
Polskie znaki diakrytyczne nie są w pełni dostępne w standardowych tabelach ROM HD44780 – możesz tworzyć najważniejsze litery w CGRAM (maks. 8 na raz) lub użyć bibliotek z mapowaniem znaków, które zamieniają niedostępne znaki na przybliżone odpowiedniki.
Dynamiczne przykłady
Oto trzy praktyczne scenariusze użycia w projektach:
- sekundnik – użyj
lcd.print(millis() / 1000);do prezentacji upływu czasu; - czujnik temperatury – z DHT11/DHT22 przygotuj bufor, np.
sprintf(buf, "T: %.1fC", temp); lcd.print(buf);; - menu robota – dla długich pozycji skorzystaj z
lcd.scrollDisplayLeft()lublcd.scrollDisplayRight().
Częste problemy i rozwiązania
Jeśli coś nie działa, sprawdź poniższe wskazówki:
- czarny ekran – wyreguluj kontrast potencjometrem i upewnij się, że zasilanie to 5 V/3,3 V zgodnie z modułem;
- brak podświetlenia – sprawdź polaryzację A/K oraz rezystor 220 Ω (jeśli wymagany przez moduł);
- nie działa I2C – zeskanuj magistralę (adres 0x27/0x3F), skontroluj połączenia SDA/SCL i obecność rezystorów podciągających;
- zniekształcony tekst – zweryfikuj poprawność adresu I2C i wersji biblioteki, zrestartuj zasilanie po zmianach;
- za mało pinów – wybierz interfejs I2C, aby ograniczyć liczbę przewodów w Arduino Uno.
Wskazówka dla robotyki – w projektach z enkoderami czy joystickiem użyj LCD do budowy prostego menu nawigacyjnego. Najpierw przetestuj funkcje na płytce stykowej, a dopiero potem lutuj docelowe połączenia.