BAB III PERANCANGAN PERANGKAT KERAS DAN LUNAK
3.1
Gambaran Umum Sistem Smart Home ini meliputi dua Perancangan yaitu perangkat keras
(hardware) dan perangkat lunak (software). Pembahasan perangkat keras meliputi
perancangan
mekanik
alat
dan
modul
elektronik
sedangkan
perancangan perangkat lunak meliputi perancangan pemograman.
3.2
Diagram Blok Pada perencanaan alat sistem Smarthome berbasis mikrokontroller
Arduino Uno via Telegram Messenger menggunakan 2 sensor yaitu sensor LDR dan DHT22. Sebelum merancang perangkat lunak, yang perlu diketahui lebih utama yaitu susunan sistem alat. Adapun blok diagram tersebut adalah sebagai berikut :
29 http://digilib.mercubuana.ac.id/
30
Gambar 3.1 Perancangan Blok Diagram
Pada peracangan blok diagram diatas menggambarkan bahwa, sistem smarthome tersebut memiliki dua buah sensor yaitu sensor cahaya (LDR) dan sensor DHT22. Pada bagian sistem yang dapat dikontrol sebanyak empat perangkat yaitu dua buah lampu (lampu garasi dan lampu dalam), satu buah kipas kecil tegangan AC dan satu buah terminal listrik yang memiliki dua buah port. Dalam fungsi dua sensor pada smarthome ini, masing-masing sensor memiliki tugasnya tersendiri yang sudah terintegrasi pada perintah bahasa pemograman. Berikut keterangan dua sensor yang sudah terintegrasi pada sistem smarthome yang dibahas pada tugas akhir ini: 1. Sensor cahaya (LDR) berfungsi mengukur nilai masuknya cahaya pada sensor LDR. Ada 4 tingkatan status ruangan pada tampilan bot telegram dari feedback arduino yang terhubung dari sensor cahaya yaitu :
Status Ruangan : Gelap
Status Ruangan : Cukup Gelap
Status Ruangan : Cukup Terang
Status Ruangan : Terang
http://digilib.mercubuana.ac.id/
31
Status diatas mempunyai fungsi untuk mengetahui kondisi tingkat pencahayaan pada ruangan. 2. Sensor temperatur dan kelembaban (DHT22) berfungsi untuk mengukur temperatur (celcius) dan kelembaban ruangan.
3.3
Perancangan Perangkat Keras (Hardware) Perancangan perangkat keras meliputi perancangan modul mikrokontroller
Arduino Uno yang mendukung sistem kerja alat ini. Pada input terdiri dari sensor DHT22 dan Light Dependent Resistor (LDR) sebagai penunjang membaca kondisi ruangan dari kegunaan sensor masing-masing dan sebagai otomatisasi pada sistem alat smarthome ini. Pada output terdiri dari relay yang dihubungkan pada dua buah lampu, satu buah terminal listrik dengan dua port, dan satu buah fan kecil bertegangan AC. Gambar rangkaian keseluruhan smarthome pada breadboard sebagai berikut :
Gambar 3.2 Rangkaian Smarthome Keseluruhan pada Breadboard
http://digilib.mercubuana.ac.id/
32
3.3.1
Sensor Cahaya Salah satu komponen sensor yang digunakan adalah Light Dependent
Resistor (LDR), Sensor LDR memiliki dua buah kaki, dimana kaki satu dihubungkan pada pinout analog A2 yang terhubung juga dengan resistor ground dan kaki ke dua terhubung dengan vcc dc 5V. Adapun penerapan sensor cahaya pada sistem smarthome ini yaitu tingkat cahaya yang masuk pada sensor LDR mempunyai empat tahapan/level status ruangan yang sudah dijelaskan sebelumnya dan masing-masing tahapan/level muncul pada bot telegram karena perintah arduino yang mendeteksi tingkat intensitas inputan cahaya dari sensor LDR lalu dikirimkan pada bot telegram. Pada sensor ini juga berfungsi sebagai otomatisasi pada relay channel 1 untuk memutus dan menghubungkan arus listrik, dimana pada relay channel 1 terhubung dengan lampu garasi. Berikut tabel kerja otomatis pada sensor LDR :
Tabel 3.1 Kerja Sensor LDR Dengan Lampu Garasi Tingkat Penerangan (Lux) <8 13-14 14-25 >25
Status Ruangan Gelap Cukup Gelap Cukup Terang Terang
Status Lampu Garasi Mati/Hidup (Otomatis) Mati (Otomatis) Hidup Mati/Hidup
Kontrol Lampu Garasi Dapat dikontrol Tidak dapat dikontrol Tidak dapat dikontrol Dapat dikontrol
Dengan mengambil sampel pada hasil tabel 3.1 kerja otomatis sensor LDR dengan lampu garasi, bahwa pada saat status ruangan “Cukup Gelap” dikarenakan kurang cahaya masuk pada sensor LDR menyebabkan lampu garasi otomatis mati dan tidak dapat dikontrol. Apabila cahaya masuk pada sensor LDR semakin terang maka status ruangan “Cukup Terang” menyebabkan lampu garasi otomatis
http://digilib.mercubuana.ac.id/
33
hidup dan tidak dapat dikontrol. Apabila status ruangan pada posisi “Gelap” atau “Terang” maka lampu garasi dapat dikontrol melalui perintah pada bot telegram messenger.
Gambar 3.3 Simbol dan Bentuk Sensor Cahaya (LDR)
3.3.2
Sensor Suhu dan Kelembaban Selain menggunakan sensor Light Dependent Resistor (LDR) sebagai
penunjang alat smarthome pada tugas akhir ini, maka diperlukan sensor DHT22 untuk membaca suhu dan kelembaban ruangan. DHT22 memiliki 4 buah kaki dimana satu kaki terhubung pada pinout digital 8 pada arduino dengan kaki yang lainnya terhubung pada 5 volt DC dan ground. Kontribusi DHT22 yaitu sebagai salah satu fitur pada smarthome untuk membaca suhu, kelembaban ruangan dan sebagai otomatisasi sistem smarthome. DHT22 melalui bahasa pemograman arduino terintegrasi dengan relay channel 4 yang terhubung dengan perangkat kipas untuk memutus dan menghubungkan arus listrik secara otomatis tergantung kondisi temperatur ruangan.
http://digilib.mercubuana.ac.id/
34
Tabel 3.2 Kerja Sensor DHT22 Dengan Kipas Temperatur (°C) <31 32 33-40 >41
Status Kipas Mati/Hidup (Otomatis) Hidup Mati/Hidup (Otomatis) Mati
Kontrol Kipas Dapat dikontrol Tidak dapat dikontrol Dapat dikontrol Tidak dapat dikontrol
Penjelasan pada tabel 3.2 apabila suhu berada pada posisi 32 derajat celcius otomatis merubah status kipas menjadi “Hidup” sesuai dengan kondisi perangkat dan “Tidak dapat dikontrol”. Jika temperatur diatas 40 derajat celcius otomatis akan merubah status kipas menjadi “Hidup” dan “Tidak dapat dikontrol. Apabila temperatur <31 derajat celcius dan 33-40 derajat celcius maka kipas dapat dikontrol melalui perintah pada bot telegram messenger. Berikut gambar skema dan bentuk sensor DHT22 :
Gambar 3.4 Skema dan Bentuk Sensor Suhu dan Kelembaban
3.3.3
Relay Perancangan pada smarthome ini selain menggunakan hardware sensor,
diperlukan relay 4 channel sebagai saklar ke setiap channel yang terhubung pada perangkat listrik yang memerlukan tegangan dan arus yang besar. Adapun 4 channel pada relay yang terhubung ke perangkat listrik pada sistem alat smarthome ini yaitu :
http://digilib.mercubuana.ac.id/
35
1. Channel 1, satu buah lampu dengan label lampu garasi. 2. Channel 2, satu buah lampu dengan label lampu dalam. 3. Channel 3, satu buah terminal listrik dua port. 4. Channel 4, satu buah kipas.
Gambar 3.5 Simbol dan Bentuk Relay
3.4
Perancangan Perangkat Lunak (Software) Perancangan
perangkat
lunak
pada
sistem
smart
home
ini
menggunakan dua bahasa pemograman yaitu bahasa pemograman C untuk perintah mikrokontroler dan bahasa pemograman python sebagai jembatan untuk mengirim dan menerima pesan ke telegram messenger yang sudah diintegrasi ke mikrokontroler.
Untuk mengetahui proses cara kerja alat
diperlukan flowchart sebagai garis besar ruang lingkup alat. Adapun gambar flowchart pada alat sebagai berikut :
http://digilib.mercubuana.ac.id/
36
Gambar 3.6 Flowchart sistem program
http://digilib.mercubuana.ac.id/
37
Dilihat flowchart diatas, terdapat 3 bagian program keluaran pada telegram messenger dari user yang menggunakan bot telegram pada alat smarthome, terdiri dari : 1.
Program input pesan “Kontrol device” pada aplikasi telegram messenger yang telah diintegrasi ke alat. Tujuan pesan tersebut agar dapat mengontrol perangkat listrik.
2.
Program input pesan “Petunjuk” pada aplikasi telegram messenger yang telah diintegrasi ke alat. Tujuan input pesan tersebut hanya menampilkan pesan pada bot telegram keterangan masing-masing button.
3.
Program input pesan “Pemantauan” pada aplikasi telegram messenger yang telah diintegrasi ke alat. Bertujuan untuk memantau sensor DHT22, LDR maupun status perangkat listrik.
3.4.1
Komunikasi Serial Python Pada Laptop Dengan Arduino Uno Komunikasi serial sangat penting pada sistem smarthome yang dibuat pada tugas
akhir ini, dikarenakan sebagai penghubung antara arduino dan telegram. Pada mikrokontroler yang digunakan yaitu Arduino Uno menggunakan bahasa pemograman C sebagai perintah untuk menjalankan fungsi arduino. Cara menghubungkan antara mikrokontroler dan telegram messenger yaitu menggunakan bahasa pemograman python yang terintegrasi pada laptop dengan arduino melalui kabel serial-USB. Berikut gambar topologi sistem :
http://digilib.mercubuana.ac.id/
38
Gambar 3.7 Komunikasi Serial
Adapun skrip proses komunikasi serial melalui pemograman python sebagai berikut :
import telepot, time,datetime, serial from twx.botapi import TelegramBot, ReplyKeyboardMarkup ser = serial.Serial('COM10', 9600, timeout = 1) ser.write(b'[disesuaikan pada karakter di pemograman arduino]')
Skrip diatas berfungsi sebagai tanda pengenal pemasangan komunikasi serial berada di ‘COM 10’ dengan bitrate 9600 disamakan dengan pemograman pada arduino uno. Pada skrip pemograman pada arduino uno agar dapat berkomunikasi dengan pemograman python maka dibuat skrip sebagai berikut : void setup() { // initialization Serial.begin(9600); } void perintah() { if (Serial.available()) {
http://digilib.mercubuana.ac.id/
39
int inByte = Serial.read(); switch(inByte) { case '[disesuaikan pada karakter di pemograman python]': #Sistem yang ingin diperintah; break;
3.4.2
Program Pengendalian Perangkat Melalui Telegram Messenger Saat arduino terhubung pada laptop melalui kabel serial-USB,. skrip
program pada arduino akan inisialisasi secara otomatis sesuai dengan perintah. Apabila kita mengirim pesan melalui bot telegram maka akan memanggil fungsi bahasa pemograman python dan bahasa pemograman bahasa C pada arduino akan merespon dan menjalankan fungsi sesuai perintah. Berikut skrip perintah bahasa pemograman python yang terintegrasi pada laptop sebagai kontrol perangkat : #!/usr/bin/python import telepot, time,datetime, serial from twx.botapi import TelegramBot, ReplyKeyboardMarkup ser = serial.Serial('COM10', 9600, timeout = 1)
def handle(msg): userName = msg['from']['first_name']+" "+msg['from']['last_name'] content_type, chat_type, chat_id = telepot.glance2(msg) if (content_type == 'text'): command = msg['text'] print ('Got command: %s' % command)
elif 'Kontrol Device' in command: keyboard = [ ['Lampu garasi ON', 'Lampu garasi OFF'], ['Lampu dalam ON', 'Lampu dalam OFF'], ['Terminal ON', 'Terminal OFF'], ['Kipas ON', 'Kipas OFF'],
http://digilib.mercubuana.ac.id/
40
['Kembali'] ] reply_markup = ReplyKeyboardMarkup.create(keyboard) bot.sendMessage(chat_id, text='Kontrol Device :', reply_markup=reply_markup)
elif 'Lampu garasi ON' in command: ser.write(b'a') bot.sendMessage(chat_id, "Lampu garasi : ON")
elif 'Lampu garasi OFF' in command: ser.write(b'b') bot.sendMessage(chat_id, "Lampu garasi : OFF")
elif 'Lampu dalam ON' in command: ser.write(b'c') bot.sendMessage(chat_id, "Lampu dalam : ON")
elif 'Lampu dalam OFF' in command: ser.write(b'd') bot.sendMessage(chat_id, "Lampu dalam : OFF")
elif 'Terminal ON' in command: ser.write(b'e') bot.sendMessage(chat_id, "Terminal : ON")
elif 'Terminal OFF' in command: ser.write(b'f') bot.sendMessage(chat_id, "Terminal : OFF")
elif 'Kipas ON' in command: ser.write(b'g') bot.sendMessage(chat_id, "Kipas : ON")
elif 'Kipas OFF' in command: ser.write(b'h') bot.sendMessage(chat_id, "Kipas : OFF")
http://digilib.mercubuana.ac.id/
41
bot = telepot.Bot(‘[TOKEN]’) bot.notifyOnMessage(handle)
while 1: time.sleep(10);
Pemograman diatas menggunakan skrip penulisan komunikasi serial a-h sebagai kode unik kontrol perangkat ke arduino. Maka untuk dapat menjalankan fungsi dari sisi arduino menggunakan skrip sebagai berikut : const int lampu1 =2; const int lampu2 =3; const int kipas =4; const int colokan=5;
void setup() { // initialization Serial.begin(9600); dht.begin(); pinMode(lampu1, OUTPUT); pinMode(lampu2, OUTPUT); pinMode(kipas, OUTPUT); pinMode(colokan, OUTPUT); digitalWrite(kipas, HIGH); digitalWrite(lampu2, HIGH); digitalWrite(colokan, HIGH); }
void perintah() { if (Serial.available()) { int inByte = Serial.read(); switch(inByte)
http://digilib.mercubuana.ac.id/
42
{
case 'a': digitalWrite(lampu1, LOW); break; case 'b': digitalWrite(lampu1, HIGH); break; case 'c': digitalWrite(lampu2, LOW); break; case 'd': digitalWrite(lampu2, HIGH); break; case 'e': digitalWrite(kipas, LOW); break; case 'f': digitalWrite(kipas, HIGH); break; case 'g': digitalWrite(colokan, LOW); break; case 'h': digitalWrite(colokan, HIGH); break; } } }
Pada program dijelaskan bahwa masing-masing case pada pemograman arduino akan menjalankan masing-masing fungsi
untuk
memutus
dan
menghidupkan arus perangkat melalui relay. Relay menggunakan active-LOW, yaitu bermakna kebalikan terhadap active-HIGH. Dengan mengambil contoh
http://digilib.mercubuana.ac.id/
43
skrip “lampu1,LOW” maka lampu1 yang terhubung pada relay akan hidup. Sebaliknya “lampu1, HIGH” lampu1 yang terhubung pada relay akan mati.
3.4.3
Program Monitoring Perangkat dan Sensor Melalui Telegram Messenger Saat arduino terhubung pada laptop melalui kabel serial-USB, skrip
program pada arduino akan inisialisasi secara otomatis sesuai dengan perintah. Apabila user mengirimkan pesan “Pemantauan” melalui bot telegram maka pesan “pemantauan” akan dikonversi oleh pemograman python dan memanggil fungsi arduino untuk merespon pesan “pemantauan” untuk segera menampilkan status perangkat dan sensor yang sudah terintegrasi. Berikut pemograman python yang fungsinya sebagai konversi pesan dari bot telegram : #!/usr/bin/python import telepot, time,datetime, serial from twx.botapi import TelegramBot, ReplyKeyboardMarkup ser = serial.Serial('COM10', 9600, timeout = 1)
def handle(msg): userName = msg['from']['first_name']+" "+msg['from']['last_name'] content_type, chat_type, chat_id = telepot.glance2(msg) if (content_type == 'text'): command = msg['text'] print ('Got command: %s' % command) elif 'Pemantauan' in command: keyboard = [ ['Status Perangkat', 'Status Sensor',], ['Petunjuk', 'Kembali'] ] reply_markup = ReplyKeyboardMarkup.create(keyboard)
http://digilib.mercubuana.ac.id/
44
bot.sendMessage(chat_id,
text='Monitoring
Smarthome
:',
reply_markup=reply_markup) elif 'Status Perangkat' in command: ser.write(b'i') message = ser.read(300) print (message) bot.sendMessage(chat_id, message)
elif 'Status Sensor' in command: ser.write(b'j') message = ser.read(400) print (message) bot.sendMessage(chat_id, message) else : bot.sendMessage(chat_id, "Keyword tersebut tidak disetting!")
bot = telepot.Bot('[TOKEN]') bot.notifyOnMessage(handle) while 1: time.sleep(10);
Pemograman python diatas melalui komunikasi serial memanggil arduino untuk menjalankan fungsi serial ‘i’ dan ‘j’. Arduino akan mengkonversi panggilan unik tersebut dengan memindai masing-masing kode unik pada status perangkat dan sensor. Berikut pemograman bahasa C untuk mengetahui status perangkat dan sensor : void loop() { perintah(); LDR_(); suhu(); } void perintah() {
http://digilib.mercubuana.ac.id/
45
if (Serial.available()) { int inByte = Serial.read(); switch(inByte) { case 'i': statusku(); break; case 'j': statusku2(); break; } } }
void statusku(){ if (digitalRead(lampu1)==LOW && digitalRead(lampu2)==LOW) { Serial.print("Kontrol\nLampu dalam : ON\nLampu Garasi : ON"); bacakipas_(); bacacolokan_(); } else if (digitalRead(lampu1)==HIGH && digitalRead(lampu2)==HIGH) { Serial.print("Kontrol\nLampu dalam : OFF\nLampu Garasi : OFF"); bacakipas_(); bacacolokan_(); } else if (digitalRead(lampu1)==HIGH && digitalRead(lampu2)==LOW) { Serial.print("Kontrol\nLampu dalam : ON\nLampu garasi : OFF"); bacakipas_(); bacacolokan_(); } else if (digitalRead(lampu1)==LOW && digitalRead(lampu2)==HIGH) {
http://digilib.mercubuana.ac.id/
46
Serial.print("Kontrol\nLampu dalam : OFF\nLampu garasi : ON"); bacakipas_(); bacacolokan_(); } }
void statusku2(){ hum = dht.readHumidity(); temp= dht.readTemperature(); int LDR_ = analogRead(LDR); if (digitalRead(lampu1)==LOW && digitalRead(lampu2)==LOW) { Serial.print("Sensor\nSuhu : "); Serial.print(temp); Serial.print(" C\nHumidity : "); Serial.print(hum); bacaLDR(); Serial.print("\nNilai LDR Pada Arduino : "); Serial.print(LDR_); kontrol(); Serial.print("\nKipas : "); StatusKipas(); } else if (digitalRead(lampu1)==HIGH && digitalRead(lampu2)==HIGH) { Serial.print("Sensor\nSuhu : "); Serial.print(temp); Serial.print(" C\nHumidity : "); Serial.print(hum); bacaLDR(); Serial.print("\nNilai LDR pada Arduino : "); Serial.print(LDR_); kontrol(); Serial.print("\nKipas : "); StatusKipas(); }
http://digilib.mercubuana.ac.id/
47
else if (digitalRead(lampu1)==HIGH && digitalRead(lampu2)==LOW) { Serial.print("Sensor\nSuhu : "); Serial.print(temp); Serial.print(" C\nHumidity : "); Serial.print(hum); bacaLDR(); Serial.print("\nNilai LDR pada Arduino : "); Serial.print(LDR_); kontrol(); Serial.print("\nKipas : "); StatusKipas(); } else if (digitalRead(lampu1)==LOW && digitalRead(lampu2)==HIGH) { Serial.print("Sensor\nSuhu : "); Serial.print(temp); Serial.print(" C\nHumidity : "); Serial.print(hum); bacaLDR(); Serial.print("\nNilai LDR pada Arduino : "); Serial.print(LDR_); kontrol(); Serial.print("\nKipas : "); StatusKipas(); } }
Pemograman bahasa C diatas menunjukan komunikasi serial yang dilakukan
menggunakan
gabungan
antara
fungsi
if
dan
switch.
Menggunakan fungsi if dan switch sebagai induk fungsi untuk membaca status komponen yang terhubung pada arduino dan setelah itu memberikan pesan status sensor maupun perangkat ke bot telegram.
http://digilib.mercubuana.ac.id/