LCD Screen I2C – Belajar Arduino 101

Guide lengkap Coding LCD untuk Arduino dan juga NodeMCU.

LCD Screen merupakan module termudah untuk membuat Paparan Huruf-berAbjad seperti memaparkan bacaan sensor, memberi notifikasi pada pengguna, dan juga pelbagai paparan kreatif yang mampu difikirkan.

Jika anda baru bermula dengan Arduino dan mahu membeli Screen LCD,
kami ada 2 saranan untuk anda :

  • Jangan beli LCD Screen yang TIDAK mempunyai module I2C
  • Teruskan membaca artikel ini sehingga habis, sebelum meneruskan pembelian.

Terdapat 2 jenis LCD Screen yang memerlukan penggunaan pin-pin berlainan pada Arduino:

  • LCD Module TANPA I2C
  • LCD Module bersama I2C.

Dalam blog entry ini, kami akan focus pada module LCD yang menggunakan I2C, kerana ia dapat menjimatkan banyak pin Digital untuk kegunaan lain dan juga memudahkan wiring projek.

JENIS-JENIS LCD SCREEN

PILIHAN WARNA:

Terdapat 2 pilihan warna untuk LCD screen yang biasa terdapat di pasaran:

  • Warna Hijau dengan tulisan berwarna Hitam
  • Warna Biru dengan tulisan berwarna Putih

(Klik di sini untuk mendapatkan module LCD 16X2 dari website kami)

PILIHAN JENIS KOMUNIKASI/PIN DENGAN ARDUINO:

Terdapat juga 2 pilihan kaedah komunikasi LCD dengan Arduino.

1) LCD Screen Yang menggunakan Pin Output Digital Arduino untuk berfungsi
(Lihat kaedah wiring berikut untuk pin digital)

LCD ini memerlukan 6 pin Digital Pin Output dari Arduino untuk komunikasi data selain dari pin 5V dan Gnd.

Dalam masa yang sama, terdapat beberapa komponen lain seperti potentiometer dan resistor yang perlu disambungkan.

Bagi kami, kaedah seperti ini akan membazirkan banyak masa dan membazirkan pin digital Arduino, yang mana boleh digunakan untuk sensor-sensor dan butang-butang lain.

2) LCD Screen yang menggunakan Komunikasi I2C
(Lihat kaedah wiring berikut untuk I2C)

Module berwarna hitam ini adalah Module I2C yang boleh digunakan untuk berbagai jenis Size Screen LCD (16X2, 16X4, 20X4…). Ia bersifat hampir universal.

Dengan module ini, anda hanya perlu sambungkan pin SDA dan pin SCL Module I2C ini pada pin A4 dan pin A5 Arduino UNO/NANO yang merupakan Port I2C.
(Arduino MEGA mempunyai port I2C di pin yang berlainan)

Dalam masa yang sama, kebanyakan projek Arduino, jarang menggunakan pin Analog yang banyak sehingga perlu menggunakan pin A4 dan A5.

Dengan ini, sebanyak 6 pin Digital Arduino dapat di selamatkan untuk kegunaan lain projek.

INSTALL LIBRARY LCD (I2C)

NOTA UPDATE:
Library Library LiquidCrystal I2C by Frank de Brabander dalam Library Manager Arduino IDE sudah obsolete.

Ikuti langkah-langkah berikut untuk meng-Install Library ini:

LANGKAH #1:

Download Library I2C dari Frank de Brabander yang latest dari link kami di bawah:

Library LiquidCrystal I2C Updated dari Frank de Brabander

atau dari GitHub:

Library dari GitHub

LANGKAH #2:

Dari Arduino IDE, Navigasi ke
Sketch > Include Library > Add .Zip libraries…

LANGKAH #3:

Pilih Folder atau .Zip file yang telah anda download, dan kemudian tekan “Open”.
Setelah selesai, Library sudah ready untuk digunakan.

SAMBUNGAN WIRING LCD I2C PADA ARDUINO

Perhatikan module I2C ini, terdapat potentiometer berwarna biru, dan putarkan potentiometer ini untuk mengubah kadar kontras screen LCD sehingga anda nampak paparan, selepas mengupload coding.

MENGGUNAKAN LIBRARY LCD (I2C)

Bagi memulakan pemahaman mengenai coding Library LCD ini, gunakan rajah pembahagian coding dalam Arduino IDE seperti berikut sebagai panduan:

Asas pembahagian kawasan coding, HakCipta MatGyver.my

DEFINING AREA

Dalam Defining Area, ada 3 komponen yang perlu dimasukkan:
1) Library Wire.h
Library sedia ada dalam Arduino IDE
2) Library LiquidCrystal_I2C.h

Library yang baru di download
3) Declare nama “Objek” untuk digunakan oleh LiquidCrystal_I2C Library.


Dalam contoh coding di bawah, nama objek “lcd” digunakan.
Oleh itu, kesemua coding yang berkenaan dengan LCD akan mempunyai kata kunci “lcd”

#include <Wire.h>                    // includekan library I2C. (Library ini sedia ada dalam IDE)
#include <LiquidCrystal_I2C.h>       // includekan library LiquidCrystal_I2C

LiquidCrystal_I2C lcd(0x3F,16,2);    // berikannama objek "lcd" untuk dikaitkan dengan library
                                     // set-kan address I2c dan nyatakan jenis/size LCD 16X2 seperti sebelah

Dalam bahagian ini juga, terdapat lagi 3 perkara yang perlu di declare mengikut turutan dari kiri ke kanan:

1) I2C Address bagi Module LCD anda
Mengikut coding di atas, address I2C Module LCD kami adalah “0x3F” .
Anda boleh mendapatkan I2C Address Module LCD anda dengan menggunakan I2C Address Scanner.

Ikuti URL berikut untuk menggunakan I2C Address Scanner .
(I2C Address Scanner – MatGyver Guide)

2) Size LCD
Selepas Address, terdapat nombor “16” dan “2” . Ini adalah size Screen LCD.

Jika menggunakan size LCD yang berlainan, contohnya size 20X4 atau 16X4,
boleh menulis, seperti berikut:

#include <Wire.h>                    // includekan library I2C. (Library ini sedia ada dalam IDE)
#include <LiquidCrystal_I2C.h>       // includekan library LiquidCrystal_I2C

LiquidCrystal_I2C lcd(0x3F,20,4);    // berikannama objek "lcd" untuk dikaitkan dengan library
                                     // set-kan address I2c dan nyatakan jenis/size LCD 20X4 seperti sebelah

VOID SETUP AREA

Dalam Void Setup Area, terdapat 2 line coding yang wajib ditulis untuk memulakan module LCD I2C. Rujuk berikut:

Untuk Arduino UNO/NANO/MEGA

void setup() {
  // put your main code here, to run repeatedly:  
  Wire.begin();     // mulakan I2C
  lcd.begin();      // mulakan LCD
  lcd.backlight();  // pasangkan BackLight Hijau/Biru bergantung pada jenis LCD anda
}

Untuk NodeMCU

Jika anda menggunakan Board NodeMCU, tambahkan line Wire.Begin(D2, D1) seperti di bawah:

void setup() {
  // put your main code here, to run repeatedly:  
  Wire.begin(D2,D1);   //D2 = SDA ; D1 = SCL
  lcd.begin();         // mulakan LCD
  lcd.backlight();     // pasangkan BackLight Hijau/Biru bergantung pada jenis LCD anda
}

VOID LOOP AREA

Di sini, kami akan menerangkan bagaimana menggunakan coding-coding dalam Library LCD, untuk mengawal paparan LCD.

Ikuti panduan coding-coding seperti berikut:

.Clear()

Coding .Clear() ini berfungsi memadamkan ke-SEMUA paparan dalam LCD Screen.

ARAHAN PRINT PADA LCD

Bagi memberi arahan untuk print pada lcd, terdapat 2 coding yang perlu di tulis sebelah menyebelah iaitu:
1) .setCursor
2) .print

.setCursor(R,C)

Coding .setCursor(R,C) ini berfungsi meletakkan cursor untuk permulaan print sesuatu perkataan.

C : bermaksud nombor Column
R : bermaksud nombor Row

Koordinat dan jumlah Row/Column berbeza mengikut jenis LCD yang anda ada.
Ikuti rajah dibawah untuk lebih memahami, Column dan Row:

Matriks Koordinat untuk LCD Size 16 X 2
Matriks Koordinat untuk LCD Size 16 X 4

.print(“cubaan”)

Coding .print(“cubaan”) ini berfungsi untuk print apa sahaja yang perlu di print, sama seperti Serial Monitor. Contoh seperti berikut:

.print(digitalRead(5))

LCD akan print data input pada pin digital 5

.print(analogRead(A1))

LCD akan print data analog input pada pin analog A1

.print(“cubaan”)

LCD akan print perkataan “cubaan” .

CODING PENUH UNTUK PRINT SUATU PERKATAAN

Dalam contoh di bawah,
perkataan “CUBAAN” akan di print bermula pada koordinat (10 ,0)
dan perkataan “MATGYVER” akan di print bermula pada koordinat (4 ,1)

void loop(){//permulaan Void Loop

  lcd.setCursor(10,0);                // setkan Cursor print LCD pada koordinat 10,0
  lcd.print("CUBAAN");                // printkan message untuk di paparkan

  lcd.setCursor(4,1);                 // setkan Cursor print LCD pada koordinat 4,1
  lcd.print("MATGYVER");              // printkan message untuk di paparkan
 
}//PENUTUP VOID LOOP

PERHATIAN:
Perhatikan perkataan “CUBAAN” . Huruf “N” telah sampai di hujung LCD. Jika ia ditukar kepada “CUBAANNYA”, bermakna 3 huruf “NYA” tidak muat, dan coding akan meletakkan 3 huruf “NYA” di perenggan baru pada Row#1 bermula dengan Column 1.

KAEDAH MEMADAMKAN PAPARAN LCD

Terdapat 2 kaedah untuk memadamkan paparan LCD:

KAEDAH #1 : Menggunakan .Clear()

Dengan .Clear() , kesemua paparan pada screen LCD akan di padamkan.

Apa yang tidak bagus adalah, dalam sesuatu projek, kita jarang perlu update ke-semua paparan pada screen lcd. Kebiasaannya, kita hanya akan update data sensor sahaja.

PERHATIAN:
Setiap satu huruf yang di print kan oleh LCD, mengambil masa 1 ms untuk di print.
Jika setiap kali LCD refresh, semua paparan screen perlu di prnt, bermakna paparan LCD sahaja boleh mengambil masa 16 huruf X 2 bersamaan 32 huruf, yang juga bersamaan dengan 32ms.
Bagi projek memerlukan kitaran Void Loop yang laju, memang tidak sesuai menggunakan .Clear() bagi memadamkan paparan screen.

KAEDAH #2 : Menggunakan .print(” “)

Kaedah ini, membuatkan LCD print Space-Kosong pada koordinat yang ditetapkan.

Ini juga bermaksud, ia memadamkan paparan hanya pada bilangan Space yang di tulis.

Anda boleh lihat, bagaimana kaedah ini digunakan dalam contoh terakhir di bawah untuk Paparan Bacaan Analog Input (A1).

CONTOH CODING LENGKAP UNTUK SATU PROJEK

Anda boleh cuba copy dan paste code di bawah untuk lihat hasil keluaran LCD.

Pastikan anda kenal pasti setiap komponen coding yang menjadikan output LCD itu. Pastikan anda gantikan I2C Address dengan Addres LCD anda.

//Project : LCD Display 1602
//Perinci : Bagaimana menggunakan LCD Display I2C dengan Arduino
//Code disediakan oleh MatGyver.my

#include <Wire.h>                    // includekan library I2C. (Library ini sedia ada dalam IDE)
#include <LiquidCrystal_I2C.h>       // includekan library LiquidCrystal_I2Cvoid setup() {

LiquidCrystal_I2C lcd(0x3F,16,2);    // berikannama objek "lcd" untuk dikaitkan dengan library
                                     // set-kan address I2c dan nyatakan jenis/size LCD 16X2 seperti sebelah

void setup(){//permulaan Void Setup
  lcd.begin();                        // mulakan LCD
  lcd.backlight();                   // pasangkan BackLight Hijau/Biru bergantung pada jenis LCD anda

  // Berikan Message Paparan ketika Arduino Start-Up (Optional)
  lcd.setCursor(0,0);                // setkan Cursor print LCD pada koordinat 0,0
  lcd.print("Selamat Pagi!");        // printkan message untuk di paparkan
  lcd.setCursor(4,1);                // setkan Cursor print LCD pada koordinat 4,1
  lcd.print("MatGyver");             // printkan message untuk di paparkan

  delay(2000);                       // berikan sedikit delay untuk paparan permulaan (optional)
  lcd.clear();                       // clearkan/padamkan paparan Screen LCD

}//PENUTUP VOID SETUP

void loop(){//permulaan Void Loop
  lcd.clear();                       // clearkan/padamkan paparan Screen LCD
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(0,0);                // setkan Cursor print LCD pada koordinat 0,0
  lcd.print("Nak");                  // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(4,0);                // setkan Cursor print LCD pada koordinat 4,0
  lcd.print("DIY");                  // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(8,0);                // setkan Cursor print LCD pada koordinat 8,0
  lcd.print("Apa");                  // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(0,1);                // setkan Cursor print LCD pada koordinat 0,1
  lcd.print("Hari");                 // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(5,1);                // setkan Cursor print LCD pada koordinat 5,1
  lcd.print("Ini");                  // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  lcd.setCursor(9,1);                // setkan Cursor print LCD pada koordinat 9,1
  lcd.print("Ya");                   // printkan message untuk di paparkan
  delay(500);                        // berikan sedikit delay untuk paparan 

  for(int x = 12; x < 16; x++){      // gunakan for loop untuk untuk print berulanga pada koordinat tambahan
    lcd.setCursor(x,1);              // setkan Cursor print LCD pada koordinat x,1
    lcd.print("?");                  // printkan message untuk di paparkan
    delay(500);                      // berikan sedikit delay untuk paparan    
  }//penutup for loop

  delay(500);                        // berikan sedikit delay untuk paparan 
   
}//PENUTUP VOID LOOP

CONTOH CODING LENGKAP UNTUK MENUNJUKKAN BACAAN POTENTIOMETER PADA PIN ANALOG (A1)

//Project : LCD Display 1602
//Perinci : AnalogREad A1 LCD Display I2C dengan Arduino
//Code disediakan oleh MatGyver.my

#include <Wire.h>                    // includekan library I2C. (Library ini sedia ada dalam IDE)
#include <LiquidCrystal_I2C.h>       // includekan library LiquidCrystal_I2Cvoid setup() {

LiquidCrystal_I2C lcd(0x3F,16,2);    // berikannama objek "lcd" untuk dikaitkan dengan library
                                     // set-kan address I2c dan nyatakan jenis/size LCD 16X2 seperti sebelah

void setup(){//permulaan Void Setup
  Serial.begin(9600);                // optional
  
  lcd.begin();                        // mulakan LCD
  lcd.backlight();                   // pasangkan BackLight Hijau/Biru bergantung pada jenis LCD anda

  // Berikan Message Paparan ketika Arduino Start-Up 
  lcd.setCursor(0,0);                // setkan Cursor print LCD pada koordinat 0,0
  lcd.print("BACAAN POT :");         // printkan message untuk di paparkan
}//PENUTUP VOID SETUP


void loop(){//permulaan Void Loop
  lcd.setCursor(12,0);               // setkan Cursor print LCD pada koordinat 12,0
  lcd.print("    ");                 // padamkan 4 ROW dari koordinat 12,0 hingga 15,0
  lcd.setCursor(12,0);               // setkan Cursor print LCD pada koordinat 12,0
  lcd.print(analogRead(A1));         // printkan data pada pin analog A1
  delay(100);                        // berikan sedikit delay sebelum paparan baru refresh

  Serial.println(analogRead(A1));    // optional
   
}//PENUTUP VOID LOOP

Hasil paparan LCD akan menunjukkan seperti berikut:


Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk menyumbangkan like pada page FaceBook kami.

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

3 thoughts on “LCD Screen I2C – Belajar Arduino 101

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Twitter picture

Anda sedang menulis komen melalui akaun Twitter anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: