Robonesia.com | Hello sahabat Robonesia, pada artikel kali ini, kita akan membuat proyek embedded system sederhana, yaitu proyek Arduino mengendalikan tampilan (display) komponen liquid crystal display (LCD) 16 x 2 karakter dengan interface via jalur Inter-integrated circuits (I2C). Berikut ini adalah langkah-langkahnya:
Step 1: Menyiapkan Kebutuhan Hardware & Software
Dalam Arduino project kali ini, kita membutuhkan komponen hardware dan software. Berikut ini adalah rincian kebutuhan proyeknya:
A. Kebutuhan hardware:
1. Board Arduino – Arduino Nano 33 IoT (1x)
2. Arduino Uno/Nano expansion board (1x).
3. LCD 16×2 karakter (1x)
4. Modul I2C serial LCD text (1)
5. Kabel USB (1x)
6. Kabel jumper
B. Kebutuhan software:
1. Software Arduino IDE, Link download
2. Library wire.h (Sudha tersedia di Arduino IDE)
3. Library LiquidCrystal_I2C.h, Link download
Gambar 1. Rincian kebutuhan proyek (hardware dan software)
Step 2: Instalasi (Wiring) Hardware
Hubungkan kaki-kaki Arduino board (Pada proyek kali ini kita menggunakan Arduino Nano 33 IoT) dengan kaki-kaki modul LCD (16×2 karakter) dengan mengikuti skematik pada gambar 2 atau table 1.
Gambar 2. Skematik elektronika (wiring diagram)
Antarmuka antara board Arduino dengan modul LCD dilakukan secara parallel melalui jalur data D4, D5, D6, dan D7. Kemudian untuk pengaturan kontras tampilan LCD dilakukan dengan komponen variabel resistor (VR = 20K) yang dihubungkan dengan kaki atau pin Vo (Contrast) yang ada pada modul LCD. Instalasi (Wiring) komponen hardware dapat dilakukan dengan menggunakan project-board.
Tabel 1. Wiring hardware
Step 3: Scan Alamat Bus I2C
Supaya LCD 16×2 karakter pada Arduino project ini menyala dan tampilannya tidak kosong, maka kita perlu mengetahui alamat bus I2C untuk device/piranti yang terhubung dengan Arduino board. Berikut adalah program yang dapat kita gunakan untuk memindai (scanning) alamat bus I2C. Program ini merujuk program I2C scanner buatan Nick Gammon (Cek pada link ini!).
Program 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// I2C Bus Address Scanner // Written by Nick Gammon (link: https://gammon.com.au/forum/?id=10896&reply=6#reply6) // Date: 20th April 2011 #include <Wire.h> void setup() { Serial.begin (9600); // Leonardo: wait for serial port to connect while (!Serial){} Serial.println (); Serial.println ("I2C scanner. Scanning ..."); byte count = 0; Wire.begin(); for (byte i = 8; i < 120; i++) { Wire.beginTransmission (i); if (Wire.endTransmission () == 0) { Serial.print ("Found address: "); Serial.print (i, DEC); Serial.print (" (0x"); Serial.print (i, HEX); Serial.println (")"); count++; delay (1); // maybe unneeded? } // end of good response } // end of for loop Serial.println ("Done."); Serial.print ("Found "); Serial.print (count, DEC); Serial.println (" device(s)."); } // end of setup void loop() {} |
Gambar 3. Output program I2C scanner – Nick Gammon
Step 4: Menulis Program (Sketch)
Program 2 bertujuan untuk menampilkan 2 kalimat pada display LCD 16×2 karakter secara bergantian dengan waktu tunda masing-masing 2.000 mS (2 detik). Kalimat pertama adalah “Hi Sahabat Robonesia!,” dan kalimat kedua adalah “Ayo belajar untuk Indonesia!.”
Program 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <Wire.h> #include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C lcd(I2C_addr,col,row) LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 = alamat I2C bus untuk LCD 16x2 karakter void setup() { lcd.init(); // Inisialisasi LCD lcd.begin(16,2,10); lcd.backlight(); } void loop() { lcd.clear(); // Bersihkan display LCD lcd.setCursor(0,0); lcd.print("Hi Sahabat"); // Tampilkan teks pada baris atas LCD lcd.setCursor(0,1); lcd.print(" Robonesia!"); // Tampilkan teks pada baris bawah LCD delay(2000); lcd.clear(); // Bersihkan display LCD lcd.setCursor(0,0); lcd.print("Ayo belajar"); // Tampilkan teks pada baris atas LCD lcd.setCursor(0,1); lcd.print("untuk Indonesia!"); // Tampilkan teks pada baris bawah LCD delay(2000); } |
Selanjutnya Program 3, program 3 bertujuan untuk menampilkan teks kalimat “Belajar Robotika di Robonesia” pada display LCD 16×2 karakter. Yang membedakan antara tampilan pada LCD dengan program 2 dan program 3 adalah teks pada program 3 bergeser ke arah kiri (Scroll Left) secara berulang.
Program 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <Wire.h> #include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C lcd(I2C_addr,col,row) LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 = alamat I2C bus untuk LCD 16x2 karakter void setup() { lcd.init(); // Inisialisasi LCD lcd.begin(16,2,10); lcd.backlight(); } void loop() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Belajar Robotika"); lcd.setCursor(0, 1); lcd.print(" di Robonesia"); // Geser tampilan LCD for (int pos = 0; pos < 16; pos--) { lcd.scrollDisplayLeft(); delay(300); } } |
Step 5: Kompilasi Program & Mengirimnya ke Dalam Chip Mikrokontroler
Setelah program selesai dibuat (Program 2 dan program 3), langkah selanjutnya adalah mengirim (Upload) program menuju chip mikrokontroller yang tertanam pada Arduino board dan melihat hasil kerja kita pada proyek mengendalikan tampilan LCD 16×2 dengan interface via bus I2C. Jika tampilan pada LCD sudah sesuai dengan harapan kita, maka itu artinya proyek Arduino kita ini telah berhasil dengan baik.
Gambar 4. Display teks pada LCD 16×2 karakter
Untuk tutorial Arduino project mengendalikan display LCD 16×2 dengan interface via bus I2C menggunakan Arduino board selengkapnya, mari kita simak Bersama pada video berikut: