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
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
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
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 Status Status Lampu Kontrol Lampu Penerangan (Lux) Ruangan Garasi Garasi <8 Gelap Mati/Hidup Dapat dikontrol 13-14 Cukup Gelap (Otomatis) Mati Tidak dapat dikontrol 14-25 Cukup Terang (Otomatis) Hidup Tidak dapat dikontrol >25 Terang Mati/Hidup 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
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.
34 Tabel 3.2 Kerja Sensor DHT22 Dengan Kipas Temperatur ( C) Status Kipas Kontrol Kipas <31 Mati/Hidup Dapat dikontrol 32 (Otomatis) Hidup Tidak dapat dikontrol 33-40 Mati/Hidup Dapat dikontrol >41 (Otomatis) Mati 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 :
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 :
36 Gambar 3.6 Flowchart sistem program
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 :
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())
39 int inbyte = Serial.read(); switch(inbyte) case '[disesuaikan pada karakter di pemograman python]': #Sistem yang ingin diperintah; 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'],
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")
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)
42 case 'a': digitalwrite(lampu1, LOW); case 'b': digitalwrite(lampu1, HIGH); case 'c': digitalwrite(lampu2, LOW); case 'd': digitalwrite(lampu2, HIGH); case 'e': digitalwrite(kipas, LOW); case 'f': digitalwrite(kipas, HIGH); case 'g': digitalwrite(colokan, LOW); case 'h': digitalwrite(colokan, HIGH); 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
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)
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()
45 if (Serial.available()) int inbyte = Serial.read(); switch(inbyte) case 'i': statusku(); case 'j': statusku2(); 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)
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();
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.