Description

5. Proyek Layar LCD dan OLED dengan Arduino

5. PROYEK LAYAR LCD DAN OLED DENGAN ARDUINO

LCD (Liquid Crystal Display) adalah suatu jenis media tampilan yang menggunakan kristal cair sebagai penampil utama. Terdapat beberapa ukuran LCD yang dapat diterapkan pada Arduino, perbedaannya adalah jumlah baris dan kolom yang bisa ditampung. Setiap baris dan kolom mewakili banyaknya karakter, misalnya LCD 16X2 berarti LCD terdiri dari 16 kolom dan 2 baris (total 32 karakter), ada pula yang berukuran LCD 16X4 yang terdiri dari 16 kolom, 4 baris (total 64 karakter), seperti tampak Gambar 5.1 dan Gambar 5.2.

Gambar 5.1. LCD 16X2 Karakter Gambar 5.2. LCD 16X4 Karakter Ada dua cara untuk mengakses LCD melalui Arduino, yaitu:

  • Paralel, memanfaatkan semua pin LCD 16X2 yang ada. Kekurangannya adalah boros penggunaan pin Arduino dan instalasi lebih rumit.
  • Serial, memanfaatkan module 12C pada LCD 16X2, dimana pin yang dibutuhkan cuma 2 yaitu SDA dan SCL. Kelebihannya adalah hemat pin Arduino sehingga pin kosong bisa digunakan untuk kebutuhan Iainnya dan instalasi sederhana. Sedangkan kekurangannya adalah harus menambah module 12C.

Sedangkan OLED (Organic Light-Emitting Diode) atau diode cahaya organik adalah sebuah semikonduktor sebagai pemancar cahaya yang terbuat dari lapisan organik. OLED digunakan dalam teknologi elektroluminensi, seperti pada aplikasi tampilan layaL Teknologi ini terkenal fleksibel karena ketipisannya. Berbagai jenis produk OLED dapat diimplementasikan pada Arduino dengan resolusi berbeda-beda. Pada umumnya OLED menggunakan antarrnukał interface 12C seperti tampak pada Gambar 5.3 dan Gambar 5.4.

Gambar 5.3 Modul OLED Resolusi 128X32 Gambar 5,4 Modul OLED Resolusi 128X64

5.1 Proyek LCD 16X2 Secara Paralel

Proyek ini bertujuan menampilkan string ke LCD 16X2 secara paralel dengan memanfaatkan semua pin yang ada. Proyek ini juga disertai dengan pengaturan tingkat kecerahan backlight LCD dengan menggunakan Trimer / Potensiometer.

Gambar 5.5. Pinout LCD 16X2

Diagram Sketch

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
Modul LCD 1 pcs
Variable Resistor /

Potensiometer / Trimmer

1 pcs 5K- 10K
Resistor % watt 1 pcs 220 Ohm

Rangkai semua komponen seperti pada Diagram Sketch. Kemudian buka aplikasi IDE Android dan tambahkan library Liquid Crystal dari menu Sketch Include Library LiquidCrystal seperti tampak pada Gambar 5.6.

Description

Kode Program

#include <LiquidCrystal.h>

// Membuat objek LCD. Parameter: (rs, enable, d4, d5, d6, d7)

const int rs = 12, enable = 11,d4=5,d5=4,d6=3,d7=2;

LiquidCrystal lcd(rs, enable, d4, d5, d6,d7);

void setup(){

// Inisialisasi interface ke layar LCD dan menentukan dimensi lebar dan ting-gi dari layar

lcd.begin(16,2);

}

void loop() {

lcd.print(“Arduino”);// Cetak “Arduino” pada LCD

delay(3000);

lcd.setCursor(2,1); //Atur lokasi teks dimulai dari kolom 2 baris 1

lcd.print(“LCD Tutorial”); // Cetak “LCD Tutorial” pada LCD

delay(3000); // Tunda 3 detik

lcd.clear(); // Membersihkan layar

lcd.blink(); // Kedip kursor LCD

delay(4000); // Tunda 4 detik

lcd.setCursor(7,1); // Atur lokasi teks dimulai dari kolom 4 baris 1

delay(3000); // Tunda 3 detik

lcd.noBlink(); // Mematikan kedip kursor LCD

lcd.cursor(); // Menampilkan underscore/garis bawah pada posisi

karakter berikutnya

delay(4000); // Delay 4 detik

lcd.noCursor(); // Menyembunyikan kursor LCD

lcd.clear(); // Membersihkan layar LCD

}

Jika kode program sukses diupload ke Arduino maka Anda bisa mengatur tingkat kecerahan background LCD dengan cara memutar trimmer/potensiometer dengan obeng ke kiri atau ke kanan.

5.2 Proyek LCD 16X2 Secara Serial 12C Dengan Modul LCM1602

Proyek LCD 16X2 mode serial menggunakan protokol komunikasi data Bus 12C (inter-integrated circuit) yang membutuhkan tambahan module LCM1602.

Penggunaan protokol komunikasi Bus 12C ditandai oleh penggunaan pin SDA (serial data) dan SCL (serial clock). Module LCM1602 bertindak sebagai alat konversi dari mode paralel ke serial. Module LCM1602 disolderkan di bagian belakang LCD seperti tampak pada Gambar 5.8.

Description

Description

Setelah module LCM1602 disolder ke module LCD1602, selanjutnya hubungkan VCC module LCM1602 ke tegangan 5volt Arduino, hubungkan GND LCM1602 ke GND Arduino, hubungkan pin SDA LCM1602 ke pin A5 (pin SDA Arduino) dan hubungkan pin SCL LCM1602 ke pin A4 (pin SCL Arduino).

Langkah berikutnya adalah menambahkan library Arduino-LiquidCrystal-12C. library-master.zip ke IDE Arduino. Terdapat tiga cara untuk instalasi library baru ke dalam IDE Arduino:

  • Install Library Secara Online

Buka aplikasi IDE Arduino, pilih menu Sketch-> Include Library -> Manage Libraries. Kemudian cari dengan kata kunci Liquid Crystal, seperti tampak pada Gambar 5.10.

Description

Secara default instalasi library akan ditempatkan pada folder C:\Users\Nama User\Documents\Arduino\libraries, tergantung konfirgurasi foldersketchbook Arduino. Lokasi direktori sketchbook Arduino dapat dilihat di menu File Preferences Sketchbook location seperti tampak pada Gambar 5.11.

Description

  • Install Library Melalui File ZIP

Download library Liquid_Crystal_I2C di https://github.com/fdebrabanderArduino-LiquidCrystal-12C-library Kemudian pilih menu Sketch Include Library Add ZIP Library, pilih file ZIP yang sudah di download sebelumnya. Letak folder library akan sama dengan cara pertama.

• Instalasi Library Secara Manual

Download library Liquid_Crystal_12C di https://github.com/fdebrabanderArduino-LiquidCrystal-12C-library. kemudian uraikan file Arduino. LiquidCrystal-12C-library-master.zip ke folder C:\\Program Files\ Arduino\libraries seperti tampak pada Gambar 5.10. Setelah itu lakukan refresh aplikasi IDE Arduino dengan cara menutup dan membuka kernbali IDE Arduino.

Description

Catatan: Anda dapat memilih salah satu cara dari tiga cara instalasi libraty di atas. Untuk proyek selanjutnya akan berlaku sama jika terdapat penambahan library baru, sehingga kami tidak akan mengulasnya kembali bagaimana cara instalasi library ke dalam IDE Arduino

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

// String yang dicetak ke LCD

char array1[ ] = “ Horeee aku bisa Arduino Sekarang” ;

char array2[ ] = “ Hello, World!”;

int tunda =500; // waktu tunda

// Inisialisasi library

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()

{

// Inisialisasi LCD lcd.init();

// Menghidupkan backlight

lcd.backlight();

}

void loop()

{

lcd.setCursor(15, 0); // set kursor kolom 15, baris 0

for (int positionCounter1 = 0; positionCounter1 < 26; positionCounter1++)

lcd.scrollDisplayLeft(); //Scroll konten dari layar ke kiri.

lcd.print(array1[positionCounter1]); // Cetak pesan ke LCD. delay(tunda); //tunda 500 microseconds

}

lcd.clear( ); // Bersihkan layar LCD dan memposisikan kursor di kiri atas pojok.

lcd.setCursor(15, 1); // set kursor di kolom 15, baris 1

for(int positionCounter = 0; positionCounter < 26; positionCounter++)

lcd.scrollDisplayLeft(); //Scroll konten layar satu spasi ke kiri.

lcd.print(array2[positionCounter]); // Cetak pesan ke LCD.

delay(tunda); // Tunda 500 microseconds

lcd.clear(); // Bersihkan layar LCD dan memposisikan kursor di kiri atas pojok.

}

Kode program tersebut di atas adalah untuk membuat tulisan berjalan pada LCD 12C. Sekarang kita coba kembangkan lagi proyek deteksi suhu udara dengan sensor LM35 yang sudah kita buat sebelumnya, yaitu menampilkan hasil pengukuran suhu ke layar LCD 12C. Berikut diagram sketchnya

Kode Program

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

int pinRelay = 8; // Pin S Relay ke Pin 8 Arduino

int pinLED=9; // Pin LED Resistor ke Pin 9 Arduino

int pinLM35=A0; // pin LM35 ke Pin A0 Arduino(analog)

// Atur alamat LC pada ex27 untuk tampilan LCD 16 karakter 2 baris LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){

lcd.init(); // Inisialisasi LCD

lcd.backlight(); // Menghidupkan backlight

lcd.setCursor(0, 0);

lcd.print(“INDIKATOR SUHU”); // tampilkan di LCD

delay(4000); // tunda 4 detik

lcd.clear();

Serial.begin(9600);

pinMode(pinLED, OUTPUT);

pinMode(pinRelay, OUTPUT);

pinMode(pinLM35, INPUT);

}

void loop() {

int suhucelcius = getTemperatureCel(pinLM35);

int suhufarenheit = celsius_to_fahrenheit(suhucelcius);

// Tampilkan suhu ke LCD

lcd.clear(); // Bersihkan layar LCD

lcd.setCursor(0,0);

lcd.print(“Celcius: “ + String(suhucelcius));

lcd.setCursor(0,1);

lcd.print(“Farenheit: “ + String(suhufarenheit));

// Menampilkan nilai sensor LM35

Serial.println(“Temperatur Celcius: “ + String(suhucelcius) +“ – “ +“Faren-heit: “ + String(suhufarenheit));

delay(1000);

if(suhucelcius >=34){

// Mengaktifkan relay ON dan menghidupkan kipas angin

// jika temperatur lebih dari sama dengan 34 derajat celcius

digitalwrite(pinLED, HIGH);

digitalwrite(pinRelay, HIGH);

} else {

digitalwrite(pinLED, LOW);

digítalWrite(pinRelay, LOW);

}

}

int getTemperatureCel(int pin){

int val = analogRead(pin);

float mv=( val / 1024.0) * 5000;

float cel= mv/ 10;

return(cel);

}

int celsius_to_fahrenheit(float cel) {

float farh =(cel * 9) / 5 + 32;

return (farh);

}

5.3 Menampilkan Tanggal & Jam di Layar OLED

Proyek ini bertujuan untuk menampilkan informasi tanggal dan jam secara realtime ke layar OLED yang beresolusi 128×64 pixel. Untuk mendapatkan informasi tanggal dan jam dibutuhkan modul real-time clock RTC-DS3231 seperti tampak pada Gambar 5.15.

Gambar 5.15 Rea/ Time Clock DS3231

Bahan Jumlah Nilai
Modul OLED Pixel SSDI 306 1 pcs
Modul Real Time Clock DS3231 1 pcs
Resistor ¼ watt 2 pcs 4.7K

Kebutuhan Bahan

Description

Rangkai semua komponen seperti tampak pada diagram sketch. Di sini ditambahkan resistor pull-up bernilai 4.7K ohm yang terhubung dengan tegangan positif dan terhubung pula dengan pin SDA dan pin SCL dari modul OLED dan modul RTC. Fungsi utama resistor pull-up dan pull-down (bila resistor terhubung ke ground) adalah untuk mencegah kesalahan pembacaan akibat nilai mengambang (floating) pada suatu rangkaian, agar terdefinisi menjadi nilai “HIGH” dan “LOW” dengan benar.

Description

Rangkaian pull-down atau pull-up sering digunakan pada push-button atau rangkaian yang berbagi sumber daya secara bersama pada diagaram sketch di atas, dimana anatarmuka lc pin SDA dan pin SCL pada modul RTC-DS3231 dan modul OLED saling terhubung ke pin SDA dan pin SCL Arduino.

Pada contoh proyek kali ini dibutuhkan tiga library pendukung, antara lain:

Instal semua library file .zip di atas melalui menu Sketch -> Include Library Add .ZIP Library atau instal secara online pada menu Sketch -> include Library -> Managed Libraries.

Description

Description

Berikut fungsi-fungsi di dalam library DS3231 yang sering digunakan:

  1. setTime (hour,minute,second);

fungsi : Setting/adjust waktu pada RTC

contoh : rtc.setTime (10, 30, 00); //jam 10 menit 30 detik 00

  1. setDate (date,month,year);

fungsi : Setting/adjust tanggal pada RTC

contoh : rtc.setDate (1, 8, 2016); //tanggal 1 Agustus 2016

  1. setDow (uint8_t dow);

fungsi Setting/adjust urutan Hari dalam Minggu (0-6 untuk minggusabtu), setDow akan berpengaruh pada setDate

contoh : rtc.setDow (1); //setting hari sebagai Senin

  1. getTimeStr ();

fungsi : Mengambil data Waktu dari RTC,hasil berupa String

contoh : rtc.getTimeStr(); > > result : 09:30:33 //jam 9, menit ke 30, detik ke 33

  1. getDateStr ();

fungsi : Mengambil data Tanggal dari RTC,hasil berupa String

contoh : rtc.getDateStr(); >>result : 01.05.2016 //tanggal 1 Mei 2016

  1. getDowStr (uint8_t);

fungsi : Mengambil data nama Hari dari RTC,hasil berupa String (English Name)

contoh : rtc.getDowStr(); > > Result : Monday //day Long

contoh : rtc.getDowStr(1); >>Result : Mon //day Short

contoh : rtc.getDowStr(2); >>Result : Monday //day Long

  1. getMonthStr (uint8_t);

fungsi Mengambil data nama Bulan dari RTC,hasil berupa String (English Name)

contoh . rtc.getMonthStr(); > > Result : January //day Long

contoh . rtc.getMonthStr(1); >>Result : Jan //day Short

contoh rtc.getMonthStr(2); >>Result : January //day Long

Kode Program

#include <SPI.h>

#include <Wire.h>

#include <DS3231.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <Adafruit_TFTLCD.h>

#include <Fonts/FreeSansBold18pt7b.h>

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);

DS3231 rtc(SDA,SCL);

//DS3231 rtc();

void setup(){

rtc.begin();

// setting tanggal dilakukan hanya satu kali, disesuaikan dengan tanggal komputer

// selanjutnya beri tanda remark “//” agar tidak diset ulang

// Bila RTC DS3231 di isi battery maka tidak perlu set tanggal lagi //

//——————————————

// rtc.setDOW(MONDAY); // Set Day-of-Week to SUNDAY

// rtc.setTime(10,17,8);// set the time to 12:00:00(24hr format)

// rtc.setDate(17,9, 2018); // Set the date to June 6th,2017

//——————————————

display. begin(5S01306_SwITCHCAPVCC, ex3C); // inisialisasi OLED 128×64 atau 0.96”

display.clearDisplay(); // Bersihkan layar OLED

display.setTextColor(WHITE); // Atur warna tulisan putih

display.setFont(&FreeSansBold18pt7b); // Ubah jenis foont, cek di folder C:\

rogram Files (x86)\Arduino\libraries\Adafruit-GFX-Library-master

display.setCursor(ø, 27); // Posisi koordinat tulisan (x,y)

display.print(“DS”); // Cetak tulisan ‘DS’

display.setFont(); // Kembalikan jenis font menjadi normal

display.setCursor(75, 7); // Posisi koordinat tulisan(x,y)

display.println(“Hore”); // Cetak tulisan

display.setCursor(56, 16); // Posisi koordinat tulisan(x,y)

display.println(“Aku Bisa !!”);

display.fllRect(53, 2, 73, 2, WHITE);

display.fillRect(53, 26, 73, 2, WHITE);

display.display(); // Terapkan konfgurasi OLED

delay(4000);

display.clearDisplay(); // Bersihkan layar OLED

display.setFont(); // Kembalikan jenis font menjadi normal

display.setTextColor(WHITE);

display. setCursor(22, 14);

display·println(“Proyek OLED”);

display.display();

delay(5000);

display.clearDisplay();

}

void loop(){

tampilHari();

}

void tampilHari() {

String jam, menit, detik;

Time waktu = rtc.getTime();

display.clearDisplay();

display.setTextColor(WHITE);

display.setTextSize(2);

display. setCursor(0,0);

if (waktu.hour <10) {

jam = “0” + String(waktu.hour);

} else{

jam = String(waktu.hour);

}

íf (waktu.min < 10) {

menit = “0” + String(waktu.min);

} else {

menit = String(waktu.min);

}

if(waktu.sec < 10) {

detik =“0”+ String(waktu.sec);

} else {

detik = String(waktu.sec);

}

display.print(jam +“:” + menit);

display.setTextSize(1);

display. setFont(&FreeSansBold18pt7b);

display.setCursor(76,28);

display.print(detik);

display.setFont();

display.drawRect(70, θ, 51, 32, WHITE);

display.setTextSize(1);

display.setCursor(0, 16);

display.print(rtc.getDoWStr());

display.setCursor(8, 25);

display-print(rtc. getDateStr());

display.display();

}

Description

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.