Anda di halaman 1dari 6

Tutorial Arduino : Mencari Address

Modul I2C pada Display LCD 16x2


Hari Santoso Arduino , Elektronika , I2C , LCD 16x23 komentar
Beberapa hari ini kita lagi sibuk ngerjain 4 project Arduino. Project-projectnya
bergelut dengan modul GPS U-blox Neo 6M, modul GSM SIM900, Sensor Suhu,
Keypad 3x4, modul SDCard, RTC DS1307, Sensor Arus, Sensor Tegangan, dan
modul LCD. Yang menarik, setiap project yang dipesan kudu menggunakan LCD
16x2 yang di-drive dengan modul I2C adapter. Tapi bukan itu inti dari artikel ini,
hehe :p. Pada artikel ini kita akan sharing tentang cara menghubungkan I2C
adapter pada Arduino Uno dan Nano, plus cara mencari address I2C yang valid
dengan bantuan program Arduino.

Modul I2C untuk LCD kadang menyebalkan. Sebab, jika salah dalam memilih
address yang berbeda, maka efeknya bukan layar lcd tidak menyala, tapi layar lcd
muncul kotak-kotak berbaris. Pada dasarnya, address I2C yang digunakan setiap
modul punya rentang dari 0-126. Misal, pada tulisan ini saya contohkan 2 modul
I2C dengan merk yang sama, tapi memiliki address yang berbeda yaitu 0x27 dan
0x3F. Berikut contoh program arduino lcd 16x2, untuk setting I2C adapter untuk
LCD dengan address 0x3F.

1. // load library LCD I2C


2. #include <LiquidCrystal_I2C.h>
3.
4. // Setting LCD pada address 0x3F
5. LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7);
Sekilas tentang Komunikasi I2C
Mengingat jumlah kaki LCD yang banyak, maka untuk menghemat pemakaian kaki
Arduino bisa menggunakan adapter dengan komunikasi I2C. Komunikasi I2C
(Inter-Integrated Circuit) adalah komunikasi synchronous yang hanya
membutuhkan 2 jalur komunikasi yang disebut dengan SDA (synchronous data)
dan SCL (synchronous clock). Komunikasi I2C juga dikenal dengan istilah Two-
Wire Serial Interface (TWI). Jadi, jika ada modul yang menggunakan komunikasi
TWI, berarti bisa diakses menggunakan I2C.

Kita tidak ingin membahas protokol I2C pada artikel ini. Tapi, beberapa modul yang
kadang membutuhkan komunikasi ini yaitu RTC, EEPROM, LCD (meski ada
tambahan modul), dan beberapa sensor lainnya. Hal yang paling penting dan perlu
diingat adalah : jalur SDA dan SCL tidak boleh terbalik. Kalau terbalik? Ya tentu
tidak bisa berkomunikasi lah, hehe (becanda). Tapi, karena setiap modul I2C
didentifikasi berdasarkan address yang berbeda, maka kita bisa memasangnya
secara paralel dengan modul I2C yang lain. Kita akan contohkan pada penjelasan
selanjutnya.

Jalur SDA dan SCL pada Arduino


Boleh diingat kembali bahwa I2C membutuhkan 2 jalur komunikasi, yaitu jalur data
(SDA) dan jalur clock (SCL). Jadi, kita harus tahu ada dimana posisi pin SDA dan
SCL pada arduino.

Pada Arduino Uno dan Nano, jalur SDA sama-sama ada pada pin A4 (Analog 5)
sedangkan jalur SCL sama-sama pada pin A5 (Analog 5). Nah, pada Arduino, pin
SDA dan SCL hanya ada satu. Jadi, jika kita memiliki banyak perangkat yang harus
berkomunikasi dengan I2C, maka kita bisa menyambungnya secara paralel.
Seperti gambar di bawah ini, dari Arduino disambung ke RTC1307 dan LCD
adapter.

Mencari Alamat pada Modul I2C dengan I2C Address


Scanner
Cerita sedikit, kita pernah memiliki 2 buah modul LCD I2C adapter. Pada modul
yang pertama, berdasarkan beberapa tutorial di internet, kita "mencoba"
menggunakan address 0x20 dan berhasil. Saat itu kita belum tahu bahwa modul-
modul I2C bisa saja memiliki address yang berbeda.

Nah, ketika mencoba modul LCD yang kedua, ternyata address 0x20 tidak works.
Kita kebingungan, bahkan kita sampai mengira bahwa modul tersebut sudah
rusak! Whatt!!! Dalam hati berkata, "haruskah Aku komplain sama penjual
ituuuuh?!!". Dua jam berlalu tanpa hasil, modul itu kita tinggal tidur. =))

Setelah bangun, kita coba cari-cari lagi di internet. Ternyata ada orang di
stackoverflow yang berhasil menggunakan address 0x3F. Dengan sedikit harapan,
kita coba alamat tersebut, eh, ternyata bisa. Dari pengalaman tersebut, muncul
pertanyaan dalam hati, "Apakah setiap modul punya address yang berbeda?". Lalu
kita coba googling dengan keyword "how do we know i2c lcd address", sok
keminggris, hehe. Ya, sebab referensi yang bagus belum banyak yang berbahasa
Indonesia. v^_^

Berdasarkan diskusi-diskusi, protokol, dan contoh source code yang ada, maka
dibuatlah program untuk mencari tahu address modul I2C dengan program berikut
ini:
1. /*
2. * I2C Scanner
3. * Explored by Elangsakti.com
4. * # Hack Your Skill!
5. */
6.
7. #include <Wire.h>
8.
9. void setup() {
10. Wire.begin();
11. Serial.begin(9600);
12. while(!Serial);
13.
14. Serial.println("#============o0o=============#");
15. Serial.println("# I2C Scanner #");
16. Serial.println("# Explored by Elangsakti.com #");
17. Serial.println("#============================#");
18.
19. Cari_Alamat();
20. }
21.
22. void loop() { }
23.
24. void Cari_Alamat() {
25. byte respon, alamat, modul = 0;
26.
27. Serial.println("Scanning...");
28. Serial.println();
29.
30. for(alamat=0; alamat<127; alamat++){
31. Wire.beginTransmission(alamat);
32. respon = Wire.endTransmission();
33. switch(respon){
34. case 0:
35. Serial.print(" ");
36. Serial.print(modul+1);
37. Serial.print(". Alamat = 0x");
38. if( alamat < 16 ) Serial.print("0");
39. Serial.println(alamat, HEX);
40. modul++;
41.
42. break;
43.
44. case 4:
45. Serial.print(" - Error ");
46. if( alamat < 16 ) Serial.print("0");
47. Serial.println(alamat, HEX);
48. }
49. }
50. Serial.println();
51.
52. if(modul > 0){
53. Serial.print("Ditemukan ");
54. Serial.print(modul);
55. Serial.println(" modul I2C.");
56. }else{
57. Serial.println("Tidak ada modul I2C.");
58. }
59.
60. delay(2000);
61. }

Cara menggunakannya, cukup hubungkan modul I2C ke Arduino. Misal


menggunakan Uno atau Nano, maka SDA ke pin A4, lalu SCL ke pin A5. VCC ke
VCC dan GND ke GND. Berikut adalah hasil dari pencarian alamat / address modul
I2C pada dua project yang ada pada gambar di atas.
Semoga bermanfaat, mohon maaf jika dalam artikel ini bercampur cerita :P,
tunggu tutorial arduino selanjutnya. Salam hangat dari Elangsakti.com

# Hack Your Skills! to be Professional Mechatronics

Anda mungkin juga menyukai