Oleh Muhammad Ilyasaa dalam Tutorial Arduino
Tahap Kesukaran : Pertengahan, Mempunyai Asas Arduino

Belum mempunyai asas arduino? Jika Ya, lakukan tutorial yang lebih mudah dahulu >> Arduino Bagaimana Untuk Menggunakan Paparan LCD 12C

>> Tahukah anda, 8 LCD boleh dikawal dengan hanya menggunakan 2 pin arduino <<

Fail Fritzing : Arduino-Control-8-I2C-LCD.fzz

Litar Arduino Uno dan 8 Paparan LCD I2C

Dalam tutorial ini, kita akan meneroka cara menggunakan paparan LCD I2C bersaiz 16×2 dengan Arduino uno. Paparan LCD I2C juga boleh didapati dalam variasi bersaiz 20×4.

Paparan LCD I2C bersaiz 16×2

Dengan modul I2C yang terdapat pada belakang paparan LCD I2C ini, kita akan dapat menyambung LCD kepada papan Arduino dengan hanya menggunakan dua pin iaitu pin SDL dan pin SDA. Modul I2C pada belakang paparan LCD I2C mempunyai komponen perintang boleh laras yang dibina untuk memudahkan pelarasan kontras pada paparan LCD.

>> Apa itu I2C ??? <<

I2C adalah salah satu protokol untuk komunikasi siri yang pada mulanya direka oleh Semiconductors Philips pada awal 1980-an, protokol ini membolehkan sejumlah bilangan litar bersepadu (cip) untuk berada di atas satu saluran komunikasi. Untuk membolehkan kesemua litar bersepadu (cip) berinteraksi antara satu sama lain, setiap litar bersepadu (cip) haruslah mempunyai alamat yang tersendiri dan unik.

Gambar menunjukkan dua litar bersepadu master (cip) dan dua litar bersepadu slave (cip) berkongsi satu saluran komunikasi.

Protokol I2C membenarkan sejumlah bilangan litar bersepadu (cip) slave untuk berkomunikasi dengan sejumlah bilangan litar bersepadu (cip) master. Protokol I2C merupakan komunikasi jarak pendek dalam satu peranti sahaja. Protokol ini hanya memerlukan dua wayar isyarat (SDA dan SCL) untuk bertukar maklumat antara litar bersepadu (cip).

>> Pin I2C Pada Papan Arduino ??? <<

Jadual di bawah menunjukkan pin I2C (SDA dan SCL) yang terdapat pada beberapa variasi papan Arduino.

Papan Arduino Pin I2C
Arduino Uno A4 (SDA), A5 (SCL)
Arduino Mega 2560 20 (SDA), 21 (SCL)
Arduino Leonardo 2 (SDA), 3 (SCL)
Arduino Due 20 (SDA), 21 (SCL), SDA1, SCL1

>> Komponen apa yang anda perlukan <<

Untuk tutorial ini, anda perlukan:

>> Alamat Paparan LCD I2C <<

Seperti yang telah diperkatakan sebelum ini, untuk membolehkan kesemua litar bersepadu (cip) berinteraksi antara satu sama lain, setiap litar bersepadu (cip) haruslah mempunyai alamat yang tersendiri dan unik. Paparan LCD I2C didatangkan dengan alamat I2C yang asal samaada 0x27 atau 0x3F.

Fail Fritzing : Arduino-Control-I2C-LCD.fzz

Litar Arduino Uno dan Paparan LCD I2C

Kita boleh mengetahui alamat paparan LCD I2C ini dengan membuat imbasan pada saluran komunikasi I2C. Siapkan litar di atas untuk mengimbas alamat I2C paparan LCD yang dihubungkan pada papan Arduino Uno.

Sekarang kita akan memuat naik kod i2c_scanner ke dalam papan Arduino Uno bagi membolehkan papan Arduino Uno mengimbas alamat yang terdapat pada paparan LCD I2C 16×2. Kod di bawah akan mengesan alamat I2C pada peranti atau komponen yang ada pada saluran komunikasi I2C yang sama. Sekiranya peranti atau komponen dijumpai, alamat I2C peranti atau komponen tersebut akan dilaporkan pada serial monitor perisian Arduino IDE. Dengan kod ini juga, kita boleh mengetahui samaada saluran komunikasi I2C berfungsi atau tidak. Selain itu, kita juga boleh mengetahui samaada peranti atau komponen kita berfungsi dengan baik atau rosak.

/* Programmer : Muhammad Ilyasaa Bin Abdul Rahman
 * More info at https://www.nadieleczone.com.my
 */

#include <Wire.h>

void setup() {
  Serial.begin (9600);
  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() {}

Muat naik kod di atas untuk mula mengimbas alamat I2C paparan LCD. Jika sambungan dan LCD berada dalam keadaan yang baik, kita akan dapat lihat keluaran di bawah pada serial monitor perisian Arduino IDE. Seperti yang diperkatakan sebelum ini, paparan LCD I2C didatangkan dengan alamat I2C yang asal samaada 0x27 atau 0x3F. Ini bermakna jika kita membeli paparan LCD yang mempunyai alamat asal 0x27, kita akan mendapat keluaran pada serial monitor menunjukkan alamat I2C kita adalah 0x27.

Jika membeli paparan LCD dengan alamat asalnya 0x27

Jika membeli paparan LCD dengan alamat asalnya 0x3F

I2C scanner. Scanning …
Found address: 39 (0x27)
Done.
Found 1 device(s).
I2C scanner. Scanning …
Found address: 63 (0x3F)
Done.
Found 1 device(s).

​Walaubagaimanapun, kita boleh menukar alamat asal paparan LCD I2C dengan menyambung pad alamat. Pad alamat biasanya dilabelkan sebagai A0-A1-A2.

Kita boleh melihat label “A0 A1 A2” pada gambar di atas

Dengan mensolder atau menghubungkan pad A0 atau/dan pad A1 atau/dan pad A2, kita boleh mengubah alamat I2C paparan LCD. Jadual di bawah menunjukkan variasi alamat yang boleh ditukar berdasarkan alamat asal 0x27 paparan LCD I2C. (1 = Pad tidak bersambung 0 = Pad disambung):

A0

A1 A2

HEX ADDRESS

1

1 1

0x27

0

1 1

0x26

1

0 1

0x25

0

0 1

0x24

1

1 0

0x23

0

1 0

0x22

1

0 0

0x21

0

0 0

0x20

>> Ini bermaksud, kita boleh mengawal 16 LCD dengan hanya menggunakan 2 pin <<

Mana datangnya 16 alamat LCD? Kita mampu mempunyai 8 variasi alamat dengan menggunakan paparan LCD I2C yang mempunyai alamat asal 0x27. Tambahan lagi, kita juga mampu mempunyai 8 variasi alamat lain dengan menggunakan paparan LCD I2C yang mempunyai alamat asal 0x3F. Jika kita membuat sedikit pengiraan secara teori, 8 alamat dari 0x27 dan 8 alamat dari 0x3F menjadikan jumlah keseluruhan alamat yang boleh digunakan adalah 16 alamat.

>> Bagi memudahkan tutorial, kita hanya akan menggunakan tiga paparan lcd I2C sahaja <<

Menghubungkan pad untuk menetapkan alamat paparan LCD yang unik

Dapatkan tiga paparan LCD I2C. Paparan LCD I2C yang pertama, biarkan ketiga tiga pad A0-A1-A2 tidak berhubung. Paparan LCD I2C yang kedua, hubungkan pad A1 sahaja. Paparan LCD I2C yang ketiga, hubungkan pad A2 sahaja. Ini bagi menghasilkan alamat yang berlainan bagi setiap paparan LCD I2C. Selepas itu, siapkan litar di bawah.

Fail Fritzing : Arduino-Control-3-I2C-LCD.fzz

Litar Arduino Uno dan Tiga Paparan LCD I2C

Muat naik kod i2c_scanner sebelum ini dan imbas alamat I2C paparan LCD. Kita sepatutnya mendapat tiga alamat pada serial monitor perisian Arduino IDE. Jika kita mendapat kurang daripada tiga alamat, ini bermakna samaada paparan LCD I2C kita tidak berfungsi atau sambungan kita pada paparan LCD I2C salah. Semak dua perkara di atas dan betulkan apa yang perlu.

>> Pasangkan Arduino Library liquidcrystal_i2c ke perisian arduino IDE <<

Arduino library adalah folder dengan beberapa fail di dalamnya, fail akan berakhir dengan .cpp (fail kod C++) dan .h (fail header C++). Jadi apa itu arduino library??? Arduino library adalah satu ciri yang sangat hebat dan menakjubkan. Library adalah koleksi fungsi fungsi yang telah siap ditulis oleh seseorang atau kumpulan untuk kita gunakan. Sebagai contoh jika kita ingin mengawal motor, kita perlu mencari library kawalan motor yang bersesuaian. Sedikit huraian tentang library lagi, library adalah koleksi fungsi fungsi yang telah ditulis untuk kita yang kita boleh gunakan tanpa perlu melakukan kerja kerja menulis kod yang rumit. Dengan kata lain, library memudahkan kerja kerja mengekod kita.

>> Dapatkan library liquidcrystal_i2C di sini <<

Library liquidcrystal_I2C di atas dimiliki oleh pemilik akaun github yang bernama fdebrabander. Library ini adalah berdasarkan kod kod yang dibangunkan oleh DFROBOT. Jika anda tidak tahu untuk memasang library ke perisian Arduino IDE, baca langkah langkah pemasangan arduino library di laman sesawang di bawah.

>> Cara memasang arduino library <<

Selesai memasang library liquidcrystal_I2C, kita teruskan dengan tutorial untuk mengawal 3 paparan LCD I2C. Sebelum ini kita sudah mendapatkan alamat bagi ketiga tiga paparan LCD I2C, bolehlah kita masukkan alamat tersebut ke dalam kod di bawah.

Masukkan alamat yang didapati pada serial monitor perisian Arduino IDE sebelum ini ke bahagian kod ini :

LiquidCrystal_I2C lcd1(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x3E, 16, 2);
LiquidCrystal_I2C lcd3(0x25, 16, 2);

Kod penuh boleh didapati di bawah, jangan lupa masukkan alamat yang didapati pada serial monitor perisian Arduino IDE sebelum ini.

/* Programmer : Muhammad Ilyasaa Bin Abdul Rahman
 * More info at https://www.nadieleczone.com.my
 */

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

LiquidCrystal_I2C lcd1(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x3E, 16, 2);
LiquidCrystal_I2C lcd3(0x25, 16, 2);
  
void setup() 
{
  // initialize the LCD
  lcd1.begin();
  lcd2.begin();
  lcd3.begin();

  // Turn on the blacklight and print a message.
  lcd1.backlight();
  lcd2.backlight();
  lcd3.backlight(); 

  lcd1.print("LCD 1");
  lcd2.print("LCD 2");
  lcd3.print("LCD 3"); 
}

void loop() 
{
  lcd1.setCursor(0, 1);
  lcd1.print(millis() / 1000);  

  lcd2.setCursor(0, 1);
  lcd2.print(millis() / 100); 

  lcd3.setCursor(0, 1);
  lcd3.print(millis() / 10);     
}

>> Penerangan terhadap beberapa Kod penting di atas <<

LiquidCrystal_I2C lcd1(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x3E, 16, 2);
LiquidCrystal_I2C lcd3(0x25, 16, 2);

Arahan LiquidCrystal_I2C lcdX(0xXX, 16, 2) diperlukan bagi memulakan Library liquidcystal_I2C. Sebagai contoh, jika anda mempunyai LCD dengan 20 lajur dan 4 baris (20×4), anda perlu mengubahnya ke LiquidCrystal_I2C lcdX(0xXX, 20, 4).

  lcd1.begin();
  lcd2.begin();
  lcd3.begin();

Arahan lcdX.begin() menetapkan LCD kepada mod 16 lajur dan 2 baris.

  lcd1.print("LCD 1");
  lcd2.print("LCD 2");
  lcd3.print("LCD 3"); 

Arahan lcdX.print(“–Mesej–“) akan mencetak mesej ke paparan LCD. “–Mesej–” mesti mempunyai panjang maksimum sama dengan lajur LCD. Contohnya, untuk LCD berlajur 16 lajur, panjang maksimum “–Mesej–” bersamaan dengan 16. Untuk LCD berlajur 20 lajur, panjang maksimum “–Mesej–” bersamaan dengan 20.

  lcd1.setCursor(0, 1);
  lcd2.setCursor(0, 1);
  lcd3.setCursor(0, 1);     

Arahan lcdX.setCursor(0,1) akan menetapkan kursor ke lajur dan baris yang dikehendaki. Jika anda mahu mencetak mesej ke lajur lima dan baris kedua anda perlu menggunakan arahan lcdX.setCursor(4,1).

>> Muat naik kod dan lihat LCD beraksi <<

Selepas kita berjaya memuat naik kod ke papan Arduino Uno, kita akan melihat ketiga tiga LCD memaparkan nombor yang berlainan. Nombor pada LCD1 akan berubah setiap 1 saat, nombor pada LCD2 akan berubah setiap 0.1 saat manakala nombor pada LCD3 akan berubah setiap 0.01 saat.

>> Selamat mencuba <<

TINGGALKAN JAWAPAN BALAS ANDA

Sila masukkan ulasan anda!
Sila masukkan nama anda di sini