LABORATORIUM TEKNIK ELEKTRONIKA DAN TEKNIK DIGITAL
FAKULTAS TEKNIK TELEKOMUNIKASI DAN ELEKTRO (FTTE) INSTITUT TEKNOLOGI TELKOM JL. D.I. PANJAITAN 128 PURWOKERTO 2021 MODUL III Komunikasi I2C, Digital Sensor, dan Keypad I. DASAR TEORI A. Komunikasi I2C I2C atau Inter integrated Circuit merupakan salah satu fitur komunikasi yang terdapat di dalam mikrokontroler Arduino. I2C ini bekerja secara sinkronus dimana antara perangkat transimtter (pengirim data) dan receiver (penerima data) dan bertukar informasi secara lamgsung dalam waktu bersamaan. I2C memiliki 2 jalur data utama yaitu SDA dan SCK, dimana SCK ini terhubung dengan sinyal input yang berupa sinyal clock sedangkan untuk SDA ini akan terhubung langsung dengan data yang diproses. Jenis protokol komunikasi I2C ini dapat menghubungkan antar beberapa device sehingga dapat bertukar data antara satu sama lain. Protokol komunkasi I2C ini memiliki karakteristik serial synchronous half duplex bidirectional, dikarenakan data yang ditransmisikan dari sebuah jalur terminal SDA (SDA Port) hanya melalui satu jalur secara seri (serial), setiap proses transmisi data dilakukan secara bergantian antar device yang saling terkoneksi (half duplex), dan data yang ditransmisikan dapat berasal dari sebuah device dikirim ke device lain itu yang dimaksud dengan bidirectional [1].
Gambar 3.1.1 Digram Blok Komunikasi I2C [1]
Berdasarkan skema digram blok diatas, terdapat satu set resistor pull up yang dipasang pada power supply 5 Volt, resistor ini berfungsi untuk menghasilkan ouput SDA dan SCL berlogika 1 atau HIGH agar komunikasi I2C dapat bekerja pada seluruh device yang terhubung. Kedua jalur pada protokol I2C ini (SDA dan SCK) keduanya bersifat open drain dimana keduanya akan melalukan drive sehingga keluarannya akan mendekati bahkan sama dengan logika 0 atau LOW. Sehingga, jika tidak dipasang satu set resistor pull up, maka pada jalur SDA dan SCL keluarannya akan berlogika atau mendekati logika 0 atau LOW dan komunikasi pada bus data tidak akan bekerja sesuai dengan fungsinya [1]. B. Digital Sensor Berdasarkan keluarannya, sensor terbagi menajadi 2 yaitu sensor analog dan sensor digital. Sensor analog menghasilkan output atau keluaran yang berupa sinyal analaog yang bersifat kontinyu, salah satu contoh dari sesnsor analog yaitu sensor suhu LM35 yang sudah dibahas pada praktikum modul 2 kemarin. Keluaran atau output dari sinyal analog berupa sinyal yang bersifat kontinyu (berlanjut), artinya keluaran dari sinyal analog ini dapat bernilai dalam rentang tertentu.contohnya pada sensor suhu LM35 yang masukkannya berupa suhu dan kemudian dikonversi ke dalam bentuk tegangan melalui proses ADC (Analog to Digital Converter). Sedangkan untuk sensor digital, inputnya berupa besaran fisis seperti suhu, kelembapan dan lain – lain dan keluaran atau outputnya berupa sinyal diskrit yaitu bernilai 1 atau 0 saja. Sehingga pada sensor digital tidak perlu lagi tambahan perangkat ADC untuk menghasilnya sinyal keluaran yang berupa sinyal digital, salah satu contoh sensor digital yaitu sensor DHT (Digital Humadity Temperature). Sensor DHT memilki kemampuan untuk membaca atau mendeteksi input yang berupa suhu dan kelembapan suatu objek [2]. Sensor DHT ini tergolong komponen yang sangat stabil jika dibandingkan dengan sensor suhu yang outputnya masih analog. Keungggulan dari sensor DHT ini antara lain produk berkualitas tinggi, respon pembacaan yang cepat dan hasil pembacaan yang cukup akurat, dan fitur anti-interferensi yang terjangkau. DHT11 menyediakan kalibrasi presisi tinggi. Faktor kalibrasi ini disimpan dalam memori program OTP , jadi jika sensor internal mendeteksi suhu atau kelembapan, modul ini akan membaca koefisien sensor. Ukurannya yang kecil, jarak transmisi sinyal cukup jauh dapat mencapai hingga 20 meter. Sehingga sensor DHT ini sangat efektif untuk diaplikasikan pada alat pembacaan suhu dan kelembapan, jika dibandingkan dengan sensor suhu LM35 yang hanya mampu mendeteksi suhu saja, akan tetapi dalam sensor digital khususnya pada DHT ini, hasil keluaran tidak selalu akurat karena pada sinyal digital dapat dipengaruhi oleh noise (derau)
atau faktor gangguan lain [2].
Gambar 3.1.2 Sensor Digital DHT11 [2]
Pada sensor DHT11 memiliki 3 pin atau kaki utama yaitu VCC, DATA, dan GND (Ground), masing – masing pin memiliki fungsi sendiri – sendiri antara lain sebagai berikut. 1. VCC Pin VCC ini merupakan pin kutub positif pada sensor DHT ini. Pin ini memiliki fungsi untuk menerima tegangan input dari catu daya atau power supply untuk sumber tegangan. 2. DATA Pin DATA ini berfungsi sebagai penghubung antara sensor DHT dengan mikrokontroler, pin ini terhunbung pada pin digital mikrokontroler. Setelah sensor DHT menerima sinyal input, maka pin DATA akan menjadi perantara untuk sinyal input tadi menuju ke mikrokontroler untuk diproses. 3. GND Pin yang ketiga pada sensor DHT11 ini ialah pin GND atau Ground. Pin ini berfungsi sebagai kutub 0 Volt pada sensor DHT11[2]. C. Keypad Keypad merupakan salah satu perangkat input yang berupa tombol / saklar tekan (push button) yang berfungsi untuk memasukkan (input) beberapa karakter. Keypad merupakan salah satu jenis perangkat antarmuka (interface) yang umum dijumpai pada embedded system adalah keypad matrik 3x4 atau 4x4. Keypad biasanya digunakan pada beberapa perlatan yang berbasis mikrokontroler. Pada penggunanya, keypad terdiri dari beberapa sakar (button), yang saling terhubung jika dilakukan penekanan pada bagian keypad sehingga antara kolom dan baris terhubung. Agar mikrokontroler dapat melakukan scan keypad harus diberikan logika LOW(“0”) ketika tombol keypad tidak ditekan dan logika HIGH (“1”) pada saat keypad ditekan [3].
Gambar 3.1.3 Keypad Matrik 4x4 [3]
II. HASIL DATA 1. Percobaan Pertama Scanning Alamat I2C
Gambar 3.2.4 Percobaan Pertama
Kode Program Percobaan Pertama : #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); } void loop() { byte error, address; int nDevices; Serial.println("Memindai...."); nDevices = 0; for (address = 1; address < 127; address++) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C terbaca pada alamat 0x"); if (address < 16) Serial.print("0"); Serial.print (address, HEX); Serial.println(" !"); nDevices++; } } if (nDevices == 0) Serial.println ("Tidak ada satupun alamat I2C yang ditemukan\n"); else Serial.println ("Selesai \n"); delay (3000);
Gambar 3.2.8 Percobaan Keempat Gagal Login Kode Program Percobaan Keempat : #include <Keypad.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd (0x20, 16,2); byte state; byte code; const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS]={ {'7', '8', '9', 'A'}, {'4', '5', '6', 'B'}, {'1', '2', '3', 'C'}, {'*', '0', '#', 'D'}, }; byte rowPins[ROWS] = {7, 6, 5, 4}; byte colPins[COLS] = {3, 2, 1, 0}; char data_pass[6] = "123456"; Keypad keypad = Keypad (makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup() { lcd.init(); lcd.backlight(); reset(); } void reset () { lcd.clear(); lcd.setCursor (0,0); lcd.print("Sistem Keamanan"); lcd.setCursor (0,1); lcd.print ("PIN : "); state = 0; code = 0; } void gagal() { lcd.setCursor (0,0); lcd.print("Password Salah!"); delay (2000); lcd.clear(); reset(); } void sukses() { a: lcd.setCursor (0,0); lcd.print("Login Sukses..!"); lcd.setCursor (0,1); lcd.print("* : Logout"); char key = keypad.getKey(); if (key != '*') { goto a; } else { reset(); } } void loop() { char key = keypad.getKey(); if (key) { if (key != '#') { lcd.setCursor (state +5,1); if (data_pass[state] == key) { code++; } else { code--; } lcd.print("*"); delay(100); state++; } else { if (code == 6) { lcd.clear(); sukses(); } else { lcd.clear(); gagal(); } } } } III. ANALISIS DAN PEMBAHASAN Pada praktikum modul 3 kali ini, mahasiswa atau praktikan melakukan suatu percobaan simulasi pengaplikasian protokol komunikasi I2C (Inter Integrated Circuit) untuk mengakses sensor digital yang berupa DHT11 (Digital Humidity Temperature) dan untuk mengakses perangkat input yang berupa modul keypad matrix dengan ukuran 4x4. Berbeda dengan praktikum modul sebelumnya, pada modull 3 kali ini, praktikan melakukan simulasi percobaan melalui software proteus profesional untuk membantu praktikan dalam merangkai rangkaian yang akan dibuat dalam modul kali ini. Selain itu, setiap praktikan juga harus memasang software Arduino IDE (Integrated Development Environment) untuk menuliskan source code atau kode program yang akan dijalankan pada setiap percobaan dalam modul ini. software proteus profesional dan Arduino IDE ini bersifat offline, sehingga praktikan tidak perlu terhubung ke jaringan untuk mengakses kedua software ini, berbeda dengan platform website tinkercad yang harus terhubung ke jaringan terlebih dahulu agar dapat diakses oleh praktikan. Pada percobaan yang pertama, praktikan melakukan simulasi pembacaan atau scanning alamat pada modul komunikasi I2C. . Praktikan menggunakan board mikrokontroler Arduino UNO sebagai perangkat yang mengendalikan modul atau sensor lain. I2C yang dipakai oleh praktikan merupakan I2C yang bertipe PCF8574A yang sudah tersedia di dalam software proteus. Modul I2C kemudian dihubungkan ke Arduino melalui pin SDA dan SCL yang terhubung ke pin analog A4 dan A5, sedangkan untuk pin analog pada modul I2C, A0, A1 ,dan A2 dihubungkan ke kutub 0V atau ground.. Selanjutnya, praktikan menuliskan kode program pemindaian alamat I2C ini di dalam software Arduino IDE, setelah melakukan compile dari kode program yang telah tertuliskan di software Arduino IDE, agar dapat dijalankan di rangkaian yang sudah dibuat pada software proteus, maka harus dicari file hex dari hasil compile tadi, lalu dimasukkan ke dalam Arduino di proteus. Karena praktikum kali ini menggunakan simulasi software, maka untuk menampilkan hasil dari komunikasi serial dapat ditampilkan dengan bantuan instrumen virtual terminal agar dapat menampilkan hasil pembacaan alamat I2C yang dapat dipakai dalam simulasi percobaan selanjutnya. Pada percobaan kedua, praktikan melakukan simulasi untuk mengakses sensor digital DHT11 dan outputnya akan ditampilkan pada display LCD 16x2. Untuk percobaan kedua dan seterusnya, LCD tidak terhubung langsung dengan board Arduino, melainkan terhubung ke modul I2C terlebih dahulu dan untuk menghubungkan antara LCD dengan Arduino, dapat digunakan alamat I2C yang terpindai pada modul I2C yang sudah didapatkan pada percobaan pertama tadi. Sensor digital DHT11 ini, pada dasarnya sama dengan sensor LM35,akan tetapi sensor DHT memiliki kelebihan yaitu lebih mudah dioperasikan jika dibandingkan dengan LM35. Pada percobaan kedua ini, praktikan menghubungkan pin data pada sensor DHT11 ke pin digital 8 Arduino, sedangkan untuk pin VCC dihubungkan ke power dan pin GND dihubungkan ke kutub 0V. ketika rangkaian ini dijalankan, maka sensor DHT akan membaca input yang berupa suhu dan kelembaban dalam bentuk digital, dan kemudian hasil pembacaan tersebut akan ditampilkan pada layar LCD. Perintah untuk membaca suhu dan udara pada sensor DHT ini pada baris program berupa dht.readHumidity(); untuk membaca kelembapan dan dht.readTemperature(); untuk membaca parameter suhu. Selanjutnya pada percobaan ketiga praktikan mencoba untuk mensimulasikan cara mengakses modul keypad matrix 4x4 sebagai perangkat input. Untuk output dari masukan keypad nanti akan ditampilkan pada display LCD 16x2, untuk menghubungkan antara modul komunikasi I2C dengan LCD, praktikan menambahkan alamat I2C 0x20 yang sudah terpindai oleh virtual terminal ke dalam kode program percobaan ketiga ini agar modul I2C dengan Arduino dan perangkat lain dapat berkomunikasi secara serial. Ketika rangkaian percobaan ketiga ini dijalankan, maka pada tampilan layar LCD akan menampilkan kalimat “Key is :” dan ada perintah untuk memasukkan salah satu karakter dari keypad yang nantinya karakter tersebut akan ditampilkan pada layar LCD. Jumlah karakter yang dapat disimpan ke dalam variabel percobaan ketiga ini hanya satu digit saja, karena di dalam kode program praktikan tidak membuat variabel array (larik) yang dapat menyimpan karakter lebih dari satu. Sehingga apabila user menginputkan karakter yang ada pada keypad, maka tampilan output yang ditampilkan pada layar LCD akan berubah – ubah secara bergantian. Untuk instruksi akses keypad ini di dalam kode program berupa perintah char key = keypad.getKey(); yang berarti variabel key akan menyimpan karakter yang diinputkan oleh user melalui keypad. Pada percobaan keempat, praktikan masih menggunakan rangkaian yang sama dengan rangkaian percobaan ketiga akan tetapi, praktikan mengubah kode program pada Arduino IDE. Percobaan keempat ini tentang sistem login sederhana menggunakan modul keypad matrix 4x4, untuk jumlah digit password diatur sebanyak 6 digit angka berdasarkan instruksi yang terdapat pada kode program percobaan keempat ini yaitu char data_pass[6] = "123456"; yang artinya, variabel data password dapat menyimpan 6 digit karakter dan karakter yang dapat disimpan itu hanya angka 1 sampai 6, selain karakter itu maka tidak dapat disimpan ke dalam variabel data password. Ketika rangkaian percobaan keempat ini dijalankan, maka akan muncul perintah kepada user untuk memasukkan pin, kemudian pin yang diinputkan oleh user akan disimpan ke dalam variabel data password untuk diproses selanjutnya. Di dalam kode program percobaan ini terdapat 3 function yang dipakai antara lain yang pertama yaitu void reset () Yang berfungsi untuk mengembalikan ke perintah awal yaitu menginputkan pin lagi ketika user salah memasukkan pin. Kemudian function yang kedua yaitu void gagal (), dimana di dalam void gagal () ini terdapat perintah untuk menampilkan peringatan “Password Salah” ketika nilai variabel yang diinputkan oleh user tidak sama dengan nilai dari variabel data password yang sudah ditentukan di dalam kode program. Kemudian function yang ketiga yaitu void sukses (), di dalam function ini terdapat instruksi untuk menampilkan kalimat “Login Sukses” dan terdapat pilihan untuk logout dengan cara menekan karakter “ * ” agar kembali ke instruksi di awal tadi yaitu memasukkan pin untuk memasuki sistem login sederhana ini. IV. KESIMPULAN DAN SARAN A. Kesimpulan 1. Untuk menampilkan hasil pemindaian alamat I2C ketika simulasi rangkaian menggunakan software proteus, rangkaian dihubungkan ke virtual terminal untuk menampilkan hasil komunikasi serial monitor dikarenakan pada software proteus belum ada fitur serial monitor Arduino. 2. Alamat I2C yang terpindai dapat digunakan Arduino untuk berkomunikasi dengan perangkat lain seperti LCD 16x2. 3. Dengan adanya alamat I2C ini, dapat mengurangi penggunaan pin pada board Arduino karena perangkat lain dapat terhubung melalui komunikasi dengan alamat I2C. 4. Pada modul keypad 4x4, posisi karakter baik yang vertikal maupun horizontal dapat diubah – ubah sesuai dengan posisi karakter pada array dalam kode program. 5. Sensor DHT11 dapat membaca suhu dan tekanan dari lingkungan tanpa adanya proses ADC (Analog to Digital Converter) karena DHT11 ini merupakan sensor digital. B. Saran 1. Sebelum praktikum dimulai, alangkah baiknya disiapkan terlebih dahulu tentang software apa saja yang diperlukan dan bagaimana cara pemasangannya, agar waktu ketika praktikum berlangsung tidak berkurang karena kendala software. 2. Praktikan diharapkan lebih aktif dan interaktif lagi ketika praktikum berlangsung. 3. Pada percobaan ketiga tentang akses modul keypad sebaiknya di dalam kode program ditambahkan operasi hitung aritmatika, agar simulasi rangkaian percobaan ketiga sama seperti algoritma pada kalkulator. V. DAFTAR PUSTAKA [1] S. Frans, “I2C Protokol,” Bina Nusant. Univ., pp. 1–3, 2007, [Online]. Available: http://comp-eng.binus.ac.id/files/2014/05/Artikel-I2C- Protokol.pdf. [2] M. Adiptya and H. Wibawanto, “Sistem Pengamatan Suhu Dan Kelembaban Pada Rumah Berbasis Mikrokontroller ATmega8,” J. Tek. Elektro Unnes, vol. 5, no. 1, pp. 15–17, 2013, doi: 10.15294/jte.v5i1.3548. [3] D. L. Fay, “Penerapan Media Sketchup Dengan Model Pembelajaran Langsung Pada Kompetensi Dasar Menerapkan Prosedur Pembuatan Gambar Detail Konstruksi Jembatan Di Smkn 1 Mojokerto,” Angew. Chemie Int. Ed. 6(11), 951–952., vol. 3, pp. 3–15, 1967. VI. LAMPIRAN 1. Jawablah 14 pertanyaan yang telah disisipkan di setiap percobaan ! 1. Apa fungsi dari serial monitor ? Jawaban Untuk mengirim dan menerima data secara serial melalui perantara kabel USB. 2. Apa maksud dari potongan program berikut? for (address = 1; address < 127; address++ ) Jawaban Potongan progran diatas merupakan bentuk dari perluangan for dimana variabel address akan menghitung naik (up count) mulai dari ketika variabel address bernilai 1 dan akan berhenti ketika sudah mencapai angka 126. 3. Jika I2C bisa mengalamatkan sebanyak 127 alamat, pada alamat ke berapa I2C yang digunakan terdeteksi? Jawaban Pada alamat ke 20. 4. Apa fungsi dari modul I2C, apa bedanya dengan menggunakan dan tidak menggunakan modul I2C pada LCD 16x2? Jawaban Fungsi dari modul I2C ini ialah untuk mempersingkat program LCD 16 x 2 pada mikrokontroler, selain itu juga bisa menghemat pin karena pin output dari modul I2C ini hanya terdiri dari 4 pin (VCC, GND, SDA, dan SCL). 5. Apa bedanya pada saat kemarin menggunakan LM35 dan sekarang menggunakan DHT 11? Jawaban LM35 hanya mampu mendeteksi besaran suhu saja, sedangkan untuk DHT 11 mampu mendeteksi 2 besaran fisis sekaligus yaitu suhu dan kelembapan. 6. Kenapa DHT 11 disebut sensor digital? Dan kenapa LM35 disebut sensor analog? Jawaban Karena pada sensor suhu LM35 hanya bekerja pada pin analog mikrokontroler dan sebelum mendapatkan ouput berupa suhu, LM35 memerlukan proses konversi ADC (Analog to Digital Converter). Sedangkan pada DHT 11 hanya bekerja pada pin digital mikrokontroler,dan tidak memerlukan proses ADC. 7. Apa fungsi dari sebuah library? Jawaban Library di dalam sebuah sketch program mikrokontroler berfungsi untuk mengambil dan menjalankan semua instruksi yang terdapat di dalam library tersebut. 8. Kenapa keypad yang digunakan disebut keypad matrix? Jawaban Karena susunan dari keypad 4x4 yang dipakai pada praktikum kali ini, susunan dan urutan tombolnya berdasarkan konsep matriks 4x4 ( 4 kolom dan 4 baris). 9. Apa maksud dari potongan program berikut : char key = keypad.getKey (); if (key) Jawaban Pada variabel key yang bertipe data char akan menampung nilai yang dimasukkan oleh user. Kemudian untuk if (key) merupakan statement pemilihan atau selection dengan parameter yang sudah ditentukan pada programnya. 10. Apa fungsi dari sebuah void / fungsi? Jawaban void atau fungsi merupakan sebuah tempa / fungsi kosong yang dapat diisi dengan beberapa instruksi dan instruksi yang terdapat di dalam fungsi tersebut, dijalankan dengan cara memanggil nama fungsi tesebut di dalam fungsi utama. 11. Mengapa pada percobaan ke 4 variabel data_pass menggunakan tipe data char dan array? Jawaban Karena password yang dimasukkan oleh user berupa kombinasi angka dan karakter, maka variabel data_pass sebagai tempat menyimpan karakter yang dimasukkan oleh user harus bertipe char. Jumlah password yang dimasukkan oleh user lebih dari satu karakter, maka dibutuhkan sebuah array (larik) untuk menyimpan beberapa karakter yang dimasukkan oleh user. 12. Mengapa dibutuhkan void reset? Jawaban Fungsi reset digunakan untuk mengembalikan tampilan layar ke posisi semula jika user salah memasukkan password, jika fungsi reset ini tidak ada, maka ketika user salah memasukkan password, maka user tidak dapat memasukkan password lagi. 13. Apa maksud dari potongan program berikut : goto a; Jawaban Perintah untuk menjalankan atau pergi ke label a, dimana di dalam labe a tersebut terdapat beberapa instruksi untuk menjalankan lcd 16 x 2. 14. Mengapa pada saat percobaan ke 3 key yang ditekan berubah – ubah di LCD, tidak bergeser ke kanan? Jawaban Karena pada percobaan yang ke 3 tidak terdapat sebuah variabel yang mampu menampung karakter yang berjumlah lebih dari 1, sehingga pada percobaan 3 ini, output pada LCD hanya 1 karakter saja. 2. Modifikasilah program pada percobaan ke 4 sehingga memenuhi ketentuan berikut : a. Panjang digit adalah digit terkahir dari NIM praktikan.( Note : jika digit terakhir NIM = 0, maka panjang digitnya adalah 10 digit ). b. Jika sudah 3 kali gagal masuk, maka muncul tulisan “PIN TERBLOKIR” dan user tidak dapat memasukkan pin lagi. Jawaban