Pada kesempatan ini saya akan membahas mengenai Pengendali Suhu Pada Ruangan Berbasis Arduino, yang merupakan tugas kuliah dengan mata kuliah Perancangan Berbasis Mikrokontroler, dengan dosen pengampu Bapak Ir. Eko Ihsanto, M. Eng. Tugas ini dikerjakan oleh saya dan rekan satu tim dengan profil sebagai berikut:
Nama : Edison Cipto Panjaitan NIM : 41417110020 Jurusan/Prodi : Teknik Elektro Kelas : Reguler II Universitas Mercu Buana Nama : Debora Agape NIM : 41417110097 Jurusan/Prodi : Teknik Elektro Kelas : Reguler II Universitas Mercu Buana
Pada proyek ini, saya hanya akan membuat simulasi pengendali suhu ruangan menggunakan Proteus7. Sebelum masuk ke pembahasan lebih lanjut, ada baiknya saya menjelaskan terlebih dahulu komponen-komponen yang digunakan pada sistem kontrol suhu ruangan ini.
Arduino Uno, sesuai dengan judulnya sistem ini menggunakan Arduino Uno sebagai controller-nya. Klik spoiler berikut untuk melihat gambar komponen.
Arduino:
Sensor suhu LM35, sensor suhu ini digunakan sebagai parameter untuk mengukur kondisi suhu di dalam ruangan, dimana akan ditentukan setpoint suhu minimal dan maksimal sebagai parameter suhu ruangan. Klik spoiler berikut untuk melihat gambar komponen.
LM35:
Servo Motor, merupakan penggerak tuas jendela. Servo motor ini digunakan untuk membuka dan menutup jendela ruangan berdasarkan suhu yang diukur oleh sensor suhu LM35. Klik spoiler berikut untuk melihat gambar komponen.
Servo Motor:
Fan Motor, merupakan kipas yang digunakan untuk menurunkan suhu ruangan sesuai dengan yang dibutuhkan. Fan akan menyala sesuai dengan kondisi suhu yang diukur oleh sensor suhu LM35. Klik spoiler berikut untuk melihat gambar komponen.
Fan Motor:
Fan Driver, komoponen ini terdiri dari beberapa transistor yang berfungsi untuk mengatur kecepatan fan motor dengan menyesuaikan PWM (Pulse Width Modulator)-nya. Klik spoiler berikut untuk melihat gambar komponen.
Fan Driver:
LCD, digunakan untuk menampilkan tampilan utama sistem dan tampilan saat sistem beroperasi (nilai suhu yang diukur sensor suhu LM35). Klik spoiler berikut untuk melihat gambar komponen.
LCD:
Push Button, merupakan komponen interupsi untuk mengalihkan sistem dari kondisi STANDBY ke kondisi sistem beroperasi, dan sebaliknya. Klik spoiler berikut untuk melihat gambar komponen.
Push Button:
Gambar rangkaian Pengendali Suhu Pada Ruangan Berbasis Arduino secara keseluruhan, klik spoiler berikut untuk melihat gambar rangkaian.
Rangkaian:
Beberapa hal yang perlu diketahui:
Posisi servo motor 180 derajat: Jendela Menutup.
Posisi servo motor -180 derajat: Jendela Membuka
Posisi awal servo motor diatur 180 derajat, yang artinya jendela menutup
Ada tiga kondisi suhu ruangan yang digunakan pada sistem ini, yaitu: SUHU DINGIN (dibawah setpoint minimal), SUHU ADEM (diantara setpoint minimal dan maksimal), dan SUHU PANAS (diatas setpoint suhu maksimal).
Setpoint suhu minimal : 28°C, setpoint suhu maksimal : 39°C.
Cara kerja sistem kontrol suhu pada ruangan ini.
Pada saat sistem pertama kali dinyalakan, maka sistem akan masuk ke kondisi STANDBY dimana LCD akan menampilkan status sistem yaitu 'STANDBY' dan terdapat perintah untuk menekan tombol push button untuk masuk ke kondisi sistem beroperasi.
Ketika tombol push button ditekan untuk penekanan pertama, maka sistem akan beralih dari kondisi STANDBY ke kondisi sistem beroperasi. Pada kondisi ini, Arduino Uno sebagai controller akan mengolah data analog yang dikirim oleh sensor suhu LM35 untuk selanjutnya data suhu tersebut akan ditampilkan ke LCD. Data analog sensor suhu LM35 yang telah diolah oleh Arduino Uno akan menjadi parameter untuk mengoperasikan servo motor dan fan motor.
Pada kondisi sistem beroperasi, sensor suhu LM35 akan terus mengukur kondisi suhu di dalam ruangan. Apabila suhu ruangan telah mencapai atau melebihi setpoint suhu maksimal, maka servo motor akan berputar -180 derajat untuk membuka jendela, fan motor (kipas) akan berputar full (kecepatan penuh), dan LCD akan menampilkan nilai suhu pada ruangan dan menampilkan status suhu ruangan 'SUHU PANAS'.
Setelah jendela terbuka, akan terjadi sirkulasi udara dari luar ke dalam ruangan dan sebaliknya. Sirkulasi udara ini ditambah fan motor yang berputar dengan kecepatan penuh mempengaruhi suhu di dalam ruangan, sehingga suhu di dalam ruangan akan turun.
Ketika suhu turun dibawah setpoint suhu maksimal, kecepatan fan motor akan berkurang hingga setengah kecepatan penuh, dan LCD akan menampilkan nilai suhu pada ruangan dan menampilkan status suhu ruangan 'SUHU ADEM'. Sementera servo motor tetap pada posisi sebelumnya, yaitu terbuka
Apabila suhu pada ruangan terus menurun dan mencapai atau dibawah setpoint suhu minimal, maka servo motor akan berputar 180 derajat untuk menutup jendela, kecepatan fan motor akan berkurang hingga berhenti berputar, dan LCD akan menampilkan nilai suhu pada ruangan dan menampilkan status suhu ruangan 'SUHU DINGIN'.
Demikian seterusnya cara kerja sistem kontrol ini.
Pada saat sistem dalam kondisi beroperasi, kemudian push button ditekan untuk penekanan kedua, maka sistem akan kembali ke kondisi STANDBY.
Listing program:
Listing Program:
=============================================================
#include < LiquidCrystal.h >
#include < Servo.h >
int inputPB1=2;//variabel mendefinisikan input push button di pin 8
int kondisiInputPB1=1;//variabel untuk menyimpan kondisi awal input push button
int hitung;
int pwm=12;//variabel mendefinisikan pwm fan ada di pin 12
int Tr1=1;//variabel mendefinisikan driver transistor 1 di pin 1
int Tr2=0;//variabel mendefinisikan driver transistor 2 di pin 0
int Tr3=10;//variabel mendefinisikan driver transistor 3 di pin 10
int Tr4=11;//variabel mendefinisikan driver transistor 4 di pin 11
Servo runservo; // membuat nama objek servo untuk pengontrolan servo
int posisi=180; // variable untuk menyimpan posisi servo
float suhu;//variabel suhu bertipe data float
int maks= 39;//variabel mendefinisikan nilai suhu maksimal
int minimal= 28;//variabel mendefinisikan nilai suhu minimal
LiquidCrystal lcd (7,6,5,4,3,8);//deklarasi pin LCD
void setup()
{
pinMode(inputPB1, INPUT); //memberikan status variabel inputPB1 sebagai INPUT
pinMode(Tr1, OUTPUT);//memberikan status variabel Tr1 sebagai OUTPUT
pinMode(Tr2, OUTPUT);//memberikan status variabel Tr2 sebagai OUTPUT
pinMode(Tr3, OUTPUT);//memberikan status variabel Tr3 sebagai OUTPUT
pinMode(Tr4, OUTPUT);//memberikan status variabel Tr4 sebagai OUTPUT
pinMode(pwm, OUTPUT);//memberikan status variabel pwm sebagai OUTPUT
runservo.attach(9); // objek servo diletakan pada pin 9
lcd.begin(16,2);//memulai lcd 16x2
EICRA = 0; EIMSK = 0; EIFR = 0;
EICRA |= (1 << ISC01);
EIMSK |= (1 << INT0);
EIFR |= (1 << INT0);
interrupts();
}
//subrutin program untuk menutup jendela (dalam hal ini menggerakkan motor servo +180 derajat)
void jend_tutup(){
for(posisi = 0; posisi < 180; posisi ++) // start dari 0 derajar sampai 180 derajat
{
// pada posisi 1 derajat
// memberitahu servo untuk pergi ke posisi 'pos'
runservo.write(180);
delay(15); // tunggu 15ms untuk pencapaian posisi servo
}}
//subrutin program untuk membuka jendela (dalam hal ini menggerakkan motor servo -180 derajat)
void jend_buka(){
for(posisi = 180; posisi > 0; posisi --) // start dari 180 derajar sampai 0 derajat
{
// pada posisi 1 derajat
// memberitahu servo untuk pergi ke posisi 'pos'
runservo.write(0);
delay(15); // tunggu 15ms untuk pencapaian posisi servo
}}
//subrutin program untuk tampilan dan speed pwm kipas pada suhu adem ( > 28 degC & < 39 degC )
void pwm_adem(){
analogWrite(pwm, 128);//mengaktifkan pwm dengan nilai 128
analogWrite(Tr1,128);//mengaktifkan Tr1 dengan nilai 128
digitalWrite(Tr2, HIGH);//mengaktifkan Tr2 dengan nilai HIGH
digitalWrite(Tr3, HIGH);//mengaktifkan Tr3 dengan nilai HIGH
analogWrite(Tr4, 128);//mengaktifkan Tr4 dengan nilai 128
lcd.setCursor(0,0);//menempatkan karakter pada baris 0 dan kolom 0 LCD
lcd.print("SUHU ADEM");//mencampilkan karakter SUHU ADEM pada LCD
lcd.setCursor(0,1);//menempatkan karakter pada baris 1 kolom 0 LCD
lcd.print("Suhu:");//menampilkan karakter Suhu: pada LCD
lcd.setCursor(6,1);//menempatkan karakter pada baris 1 kolom 6 LCD
lcd.print(suhu);//instruksi menampilkan nilai suhu ke LCD
lcd.setCursor(12,1);//menempatkan karakter pada baris 1 dan kolom 12 LCD
lcd.print("degC"); //menampilkan karakter degC pada LCD
}
//subrutin program untuk tampilan dan speed pwm kipas pada suhu dingin ( < 28 degC )
void pwm_dingin(){
//tampilan ketika tombol ditekan kedua kalinya
void mulai(){
lcd.setCursor(0,0);
lcd.print("STANDBY");
lcd.setCursor(0,1);
lcd.print("ON: TEKAN TOMBOL");
//set posisi awal jendela dengan posisi motor servo 180 derajat
for(posisi = 0; posisi < 180; posisi ++) // start dari 0 derajar sampai 180 derajat
{
// pada posisi 1 derajat
// memberitahu servo untuk pergi ke posisi 'pos'
runservo.write(180);
delay(15); // tunggu 15ms untuk pencapaian posisi servo
}}
//subrutin program utama untuk sistem
kondisiInputPB1=digitalRead(inputPB1);//membaca nilai digital pada pin inputPB1
if(kondisiInputPB1==0){ //interupsi jika pushbutton ditekan maka nilai variable 'kondisiInputPB1'akan bernilai 0
for(hitung=0;hitung<3:hitung akan="" bertambah="" br="" ditekan="" hitung="" maka="" nilai="" pengulangan="" pushbutton="" setiap="" variable="">
lcd.clear();
while(hitung==1){ //kondisi jika nilai variable 'hitung' sudah bernilai 1 sesuai dengan jumlah penekanan pushbutton
suhu= analogRead(5); //membaca nilai adc sensor
suhu=suhu*500/1023; //konversi data analog menjadi milivolt & konversi kedalam derajat celsius dengan persamaan 1derajat/10mv
if(suhu>minimal && suhu
{
pwm_adem(); //memanggil subrutin program pwm_adem()
}
else if(suhu<=minimal) //kondisi jika suhu dibawah suhu minimal
{
pwm_dingin(); //memanggil subrutin program pwm_dingin()
jend_tutup(); //memanggil subrutin program jend_tutup()
lcd.clear(); //perintah merefresh layar
}
else if(suhu>maks)//kondisi suhu jika suhu diatas suhu maksimal
{
pwm_panas(); //memanggil subrutin pwm_panas()
jend_buka(); //memanggil subrutin program jend_buka()
lcd.clear(); //perintah merefresh layar
}
else{jend_tutup();}
}
while(hitung==2){ //kondisi jika nilai variable 'hitung' sudah bernilai 2 sesuai dengan jumlah penekanan pushbutton
mulai(); } //memanggil subrutin mulai()
Untuk melengkapi penjelasan di atas, berikut saya sertakan video mulai dari cara penggunaan Proteus7, penjelasan mengenai program pengendali suhu ruangan ini, dan sistem kerja sistem pengendali suhu ruangan ini.
0 comments
Post a Comment