Materi
Tujuan Praktikum
LDR
I2C
LCD 16x2
RTC
Kabel Jumper (secukupnya)
Breadboard
Arduino
Servo
Inter Integrated Circuit adalah standar komunikasi serial dua arah menggunakan dua
saluran yang di desain khusus untuk mengirim maupun menerima data. Sistem I2C
terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi
data antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C
Bus dapat dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai
transfer data pada I2C Bus dengan membentuk sinyal Start, mengakhiri transfer data
dengan membentuk sinyal Stop, dan membangkitkan sinyal clock.
Contoh device yang menggunakan interface I2C A5 (SDA) dan A4 (SCL) beserta
alamatnya antara lain :
LCD (Liquid Crystal Display) merupakan salah satu jenis output yang biasa digunakan
dalam pembuatan instrumen yang membutuhkan tampilan visual sebagai keluarannya.
LCD yang digunakan adalah LCD 16x2 karena LCD ini mampu menampilkan 16
karakter dalam 2 baris. LCD 16x2 memiliki 16 pin yaitu GND (1), VCC (2), VEE (3),
RS (4), R/W (5), EN (6), DB0 (7), DB1 (8), DB2 (9), DB3 (10), DB4 (11), DB5 (12),
DB6 (13), DB7 (14), VCC LED (15), GND LED (16). LCD 16x2 telah dikombinasikan
dengan modul I2C sehingga pin yang dihubungkan ke Arduino Board menjadi lebih
sedikit. Modul I2c ini memiliki 4 pin yang harus terhubung dengan Arduino Board yaitu
GND (1), VCC (2), SDA (3), SCL (4).
Walaupun pin yang dihubungkan dengan Arduino Board menjadi lebih sedikit, LCD
tetap dapat berfungsi menggunakan library default yang ada di dalam Arduino IDE.
a. INSTALASI LIBRARY LCD I2C
Kita harus mendownload library eksternal LCD I2C agar dapat menggunakan
modul LCD I2C dengan mencari NewliquidCrystal_1.3.4.zip dari Arduino atau
yang terbaru. Setelah diinstall maka jika ingin menggunakan modul ini tambahkan
library pada sketch yang ingin di buat.
Dapat juga menambahkan secara manual di dalam Skecth seperti beberapa header
berikut ini:
#include <wire.h>
#include <LiquidCrystal_I2C.h>
Setelah kita menambahkan header LCD I2C pada Sketch kita, maka perlu
menginisialisasi beberapa variabel agar modul ini dapat berfungsi.
Berikut sintak yang diperlukan :
//inisialisasi LCD 16X2 I2C
#define I2C_ADDR 0x3F
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
Langkah pertama ialah menginisialisasi Alamat I2C modul terlebih dahulu.
Inisialisasi ini penting agar Arduino Board dapat berkomunikasi dengan modul
LCD. Sebagai contoh Alamat I2C modul LCD yang terhubung ialah 0x3F. 0x3F
merupakan bilangan hexadecimal yang biasa ditemui dalam aplikasi elektronik.
Komunikasi I2C merupakan sebuah komunikasi antar perangkat dengan sistem
MASTER-SLAVE. Protocol I2C menggunakan dua pin yaitu SDA (Data) dan SCL
(Clock). Kita dapat menghubungkan Arduino Board dengan lebih dari 1000
perangkat lain dengan menggunakan komunikasi I2C karena setiap perangkat
memiliki alamat yang berbeda.
Berikutnya perlu pendefinisian pin-pin yang ada di modul I2C sesuai dengan yang
dibutuhkan. Definisi pin ini digunakan untuk inisialisasi LCD I2C pada sintak
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin,
D6_pin, D7_pin);
Setelah itu, di dalam void setup() tambahkan dua baris sintak berikut:
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
Inisialisasi di atas digunakan untuk menyalakan BACKGROUND LED LCD.
c. LIQUIDCRYSTAL()
Fungsi ini merupakan fungsi bawaan dari library LCD yang terdapat pada Arduino
IDE. Fungsi ini diperlukan untuk menginisialisasi pin-pin LCD yang terhubung
pada Arduino Board.
Sintak:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Parameter:
rs : pin RS LCD
rw : pin RW LCD
enable : pin ENABLE LCD
d0-d7 : pin D0-D7 LCD
Contoh Program:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
Penjelasan:
Pin-pin LCD yang terhubung diinisialisasikan dan fungsi LiquidCrystal dijadikan
sebuah variabel baru dengan nama lcd.
d. LCD.BEGIN()
f. LCD.CLEAR()
Fungsi lcd.clear() digunakan untuk menghapus teks yang ada di LCD dan
meletakkan posisi kursor pada baris ke-1 kolom ke-1.
Sintak:
lcd.clear()
Contoh program :
lcd.print(“test”);
lcd.clear();
Penjelasan:
lcd.clear() akan menghapus teks “test” yang tertampil pada LCD.
g. LCD.WRITE()
h. LCD.PRINT()
Beberapa modul RTC ada yang disertakan penambahan fitur pengukur suhu yang
dikemas ke dalam 1 modul seperti modul RTC DS1307 di atas. Selain itu pada modul
RTC ada yang memiliki IC EEPROM tipe AT24C32 yang dapat dimanfaatkan juga
seperti pada modul DS3231 di atas. Interface atau antarmuka untuk mengakses modul
ini yaitu menggunakan I2C atau two wire (SDA dan SCL). Sehingga apabila diakses
menggunakan mikrontroler misal Arduino Uno pin yang dibutuhkan 2 pin saja dan 2
pin power.
D. PRAKTIKUM PEMOGRAMAN
Praktikum 1
// I2C Scanner
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
Praktikum 2
//set waktu
#include "DS3231_Simple.h" //library tergantung dari RTC yang digunakan
DS3231_Simple Clock;
void setup() {
Serial.begin(9600);
Clock.begin();
}
void loop() {
DateTime waktu;
waktu.Day = 3; //atur tanggal
waktu.Month = 10; //atur bulan
waktu.Year = 20; //atur tahun
waktu.Hour = 14; //atur jam
waktu.Minute = 17; //atur menit
waktu.Second = 33; //atur detik
Clock.write(waktu);
//menampilkan waktu
#include "DS3231_Simple.h" //library tergantung dari RTC yang digunakan
DS3231_Simple Clock;
void setup() {
Serial.begin(9600);
Clock.begin();
}
void loop() {
DateTime waktu;
waktu = Clock.read();
Serial.print(waktu.Day);
Serial.print("/");
Serial.print(waktu.Month);
Serial.print("/");
Serial.print(waktu.Year);
Serial.print(" ");
Serial.print(waktu.Hour);
Serial.print(":");
Serial.print(waktu.Minute);
Serial.print(":");
Serial.println(waktu.Second);
delay(1000);
}
Praktikum 4
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte i=0;
void setup() {
lcd.begin();
lcd.setCursor(0,0);
lcd.print("TEST LCD i2C Scanner");
lcd.setCursor(0,1);
lcd.print("Praktikum MCU ");
delay(2000);
lcd.Clear();
void loop(){
lcd.setCursor(0,0);
lcd.print(“Count=”);
lcd.print(i);
delay(1000);
}
Praktikum 5
#include <LiquidCrystal_I2C.h>
#include "DS3231_Simple.h" //library tergantung dari RTC yang digunakan
byte i=0;
void setup() {
lcd.begin();
lcd.setCursor(0,0);
lcd.print("TEST LCD i2C Scanner");
lcd.setCursor(0,1);
lcd.print("Praktikum MCU ");
delay(2000);
lcd.Clear();
void loop(){
DateTime waktu;
waktu = Clock.read();
lcd.setCursor(0,0);
lcd.print(waktu.Day);
lcd.print("/");
lcd.print(waktu.Month);
lcd.print("/");
lcd.print(waktu.Year);
lcd.print(" ");
lcd.print(waktu.Hour);
lcd.print(":");
lcd.print(waktu.Minute);
lcd.print(":");
lcd.println(waktu.Second);
lcd.setCursor(0,1);
lcd.print(“Count=”);
lcd.print(i);
delay(1000);
}
E. Tugas
1. Buatlah program dimana LCD menampilkan nilai iterasi yang dibuat dari 1 hingga
60 dengan waktu jeda sebanyak 1 detik.
2. Butlah program yang menampilkan waktu pada LCD berdasarkan data dari RTC
dengan posisi rata tengah
3. Buatlah pengambilan data sensor sesuai dengan waktu yang ditetapkan dan
ditampilkan via komunikasi serial serta menampilkan data sensor dan aktuator
servo pada LCD