Aplikasi Arduino : Thermostat 4 Channel
Apa kabar sahabat semua ? Semoga senantiasa dalam keadaan baik, tambah sehat tambah ilmu dan tambah barokah… Kali ini kita akan membuat aplikasi Arduino yang berhubungan dengan kontrol suhu yaitu Thermostat. Jika pada artikel sebelumnya ( 6 Channel Sensor Suhu) hanya membaca suhu saja, kali ini kita tambahkan kontrolnya. Prinsip kerjanya membaca suhu kemudian membandingkan dengan Set Point. Jika Set Point > suhu terukur maka pemanas (relay) akan ON, jika Set Point < suhu terukur maka pemanas (relay) akan OFF. Thermostat biasanya dipakai untuk mesin yang membutuhkan pengaturan panas secara otomatis seperti mesin penetas telur.
Thermostat dengan Arduino ini terdiri dari 4 sensor suhu LM35 yang akan membaca perubahan temperature pada 4 ruang/system yang dikontrol. Hasil pembacaan sensor suhu kemudian dibandingkan dengan masing – masing Set Point.
- Jika suhu sensor 1 < Set point 1 maka pamanas (relay 1) ON
- Jika suhu sensor 1 > Set point 1 maka pemanas (relay 1) OFF
- Jika suhu sensor 2 < Set point 2 maka pamanas (relay 2) ON
- Jika suhu sensor 2 > Set point 2 maka pemanas (relay 2) OFF
- Jika suhu sensor 3 < Set point 3 maka pamanas (relay 3) ON
- Jika suhu sensor 3 > Set point 3 maka pemanas (relay 3) OFF
- Jika suhu sensor 4 < Set point 4 maka pamanas (relay 4) ON
- Jika suhu sensor 4 > Set point 4 maka pemanas (relay 4) OFF
Hasil pembacaan sensor suhu juga ditampilkan ke LCD Display 16×2. Sekarang kita siapkan komponen untuk membuat aplikasi Arduino berupa Thermostat 4 channel, kemudian kita buat rangkaiannya.
- Arduino UNO (1)
- LCD Modul (1)
- Sensor suhu LM35 (4)
- Relay modul 4 channel (1)
- Kabel konektor
- Breadboard
Ok, rangkaian sudah jadi selanjutknya kita buat program Arduino-nya, buka Arduino IDE kemudian tulis program berikut.
/******************************** * THERMOSTAT 4 Channel Arduino * Input : 4 Channel LM35 * Output: Relay 4 Ch, LCD * www.ardutech.com ********************************/ #include <LiquidCrystal.h> int adc; float volt,s1,s2,s3,s4,s5,s6; LiquidCrystal lcd(7,6,5, 4, 3, 2); float SP1,SP2,SP3,SP4; #define RL1 8 #define RL2 9 #define RL3 10 #define RL4 11 //=========================== void setup() { lcd.begin(16, 2); SP1=30; SP2=35; SP3=40; SP4=32; pinMode(RL1,OUTPUT); pinMode(RL2,OUTPUT); pinMode(RL3,OUTPUT); pinMode(RL4,OUTPUT); digitalWrite(RL1,HIGH); digitalWrite(RL2,HIGH); digitalWrite(RL3,HIGH); digitalWrite(RL4,HIGH); delay(2000); } void loop() { adc = analogRead(0); //baca sensor 1 volt = adc * (5000 / 1023.0); //konversi ke tegangan (mV) s1=volt/10; //konversi ke suhu delay(20); adc = analogRead(1); //baca sensor 2 volt = adc * (5000 / 1023.0);//konversi ke tegangan (mV) s2=volt/10;//konversi ke suhu delay(20); adc = analogRead(2);//baca sensor 3 volt = adc * (5000 / 1023.0);//konversi ke tegangan (mV) s3=volt/10;//konversi ke suhu delay(20); adc = analogRead(3);//baca sensor 4 volt = adc * (5000 / 1023.0);//konversi ke tegangan (mV) s4=volt/10;//konversi ke suhu delay(20); //-------display LCD lcd.setCursor(0,0); lcd.print("S1="); lcd.print(s1); lcd.print(" S2="); lcd.print(s2); lcd.setCursor(0,1); lcd.print("S3="); lcd.print(s3); lcd.print(" S4="); lcd.print(s4); //------control Relay 1 if(s1>SP1+0.5){//jika suhu 1> Set Point 1 digitalWrite(RL1,HIGH); //Relay 1 OFF } else if(s1<SP1-0.5){//jika suhu 1< Set Point 1 digitalWrite(RL1,LOW); //Relay 1 ON } //------control Relay 2 if(s2>SP2+0.5){//jika suhu 2> Set Point 2 digitalWrite(RL2,HIGH); //Relay 2 OFF } else if(s2<SP2-0.5){//jika suhu 2< Set Point 2 digitalWrite(RL2,LOW); //Relay 2 ON } //------control Relay 3 if(s3>SP3+0.5){//jika suhu 3> Set Point 3 digitalWrite(RL3,HIGH); //Relay 3 OFF } else if(s3<SP3-0.5){//jika suhu 3< Set Point 3 digitalWrite(RL3,LOW); //Relay 3 ON } //------control Relay 4 if(s4>SP4+0.5){//jika suhu 4> Set Point 4 digitalWrite(RL4,HIGH); //Relay 4 OFF } else if(s4<SP4-0.5){//jika suhu 4< Set Point 4 digitalWrite(RL4,LOW); //Relay 4 ON } delay(1000); }
Simpan (save) programnya kemudian Upload ke board Arduino UNO. Perhatikan jalannya alat, jika suhu 1 terbaca lebih kecil dari Set Point 1 (s1 < SP1) maka relay 1 akan ON. Jika suhu 1 terbaca lebih besar dari Set Point 1 (s1>SP1) maka relay akan OFF. Untuk relay dapat anda sambungkan dengan perangkat pemanas (heater) pada system sebenarnya.
Kita lihat di awal program berupa penyertaan library LCD dan deklarasi variable. Ada juga pembuatan alias (#define) untuk pin yang terhubung ke relay, ini hanya untuk memudahkan penulisan pemrograman saja.
#include <LiquidCrystal.h> int adc; float volt,s1,s2,s3,s4,s5,s6; LiquidCrystal lcd(7,6,5, 4, 3, 2); float SP1,SP2,SP3,SP4; #define RL1 8 #define RL2 9 #define RL3 10 #define RL4 11
Berikutnya variable set point (SP) diisi dengan sebuah nilai, jadi kalau mau merubah nilai set point memang harus dari program, kurang fleksibel sih, nah kalau mau lebih mudah dalam mengganti nilai set point, dapat ditambahkan keypad/tombol untuk entri set point-nya, tentu juga merubah programnya.
SP1=30; SP2=35; SP3=40; SP4=32;
Pin yang terhubung ke relay semua diseting sebagai pin output dengan logika awal “HIGH”. Kenapa “HIGH” ? betul… karena relay-nya aktif “LOW” jadi untuk mengontrol relay :
- HIGH (1) maka Relay OFF
- LOW (0) maka relay ON
pinMode(RL1,OUTPUT); pinMode(RL2,OUTPUT); pinMode(RL3,OUTPUT); pinMode(RL4,OUTPUT); digitalWrite(RL1,HIGH); digitalWrite(RL2,HIGH); digitalWrite(RL3,HIGH); digitalWrite(RL4,HIGH);
Berikutnya pada program utama loop () Arduino membaca sensor suhu, mulai dari sensor LM35 pertama. Hasilnya dikonversi ke tegangan (mV) dengan rumus : adc*(5000/1023). Nilai 5000 adalah tegangan referensi ADC (5000 mV = 5V) dan nilai 1023 adalah resolusi ADC ( 10 bit). Hasilnya trus dikonversi ke suhu/temperature dengan rumus : suhu=tegangan/10. Nilai output sensor LM35 linear 10 mV/0Celcius sehingga tinngal membagi dengan angka 10 akan didapatkan nilai suhu/temperature.
adc = analogRead(0); //baca sensor 1 volt = adc * (5000 / 1023.0); //konversi ke tegangan (mV) s1=volt/10; //konversi ke suhu
Mekanisme pembacaan sensor suhu LM35 yang pertama, sama dengan sensor 2, sensor 3 dan sensor 4.
Program berikutnya menampilkan ke LCD.
//-------display LCD lcd.setCursor(0,0); lcd.print("S1="); lcd.print(s1); lcd.print(" S2="); lcd.print(s2); lcd.setCursor(0,1); lcd.print("S3="); lcd.print(s3); lcd.print(" S4="); lcd.print(s4);
Program Arduino terakhir merupakan inti kontrol thermostat. Pada program diberikan “dead band” 10C. Maksudnya agar kontrol “ON-OFF” pada thermostat lebih stabil maka perlu diberikan ‘toleransi’. Misalnya set point (SP) 500C. Jika suhu > 500C maka relay OFF dan jika suhu < 500C relay ON, sistemnya akan tidak stabil ketika suhu pas (sekitar) set point. “ON” – “OFF” akan bergantian cepat. Untuk mengatasinya perlu “dead band”.
//------control Relay 1 if(s1>SP1+0.5){//jika suhu 1> Set Point 1 digitalWrite(RL1,HIGH); //Relay 1 OFF } else if(s1<SP1-0.5){//jika suhu 1< Set Point 1 digitalWrite(RL1,LOW); //Relay 1 ON } //------control Relay 2 if(s2>SP2+0.5){//jika suhu 2> Set Point 2 digitalWrite(RL2,HIGH); //Relay 2 OFF } else if(s2<SP2-0.5){//jika suhu 2< Set Point 2 digitalWrite(RL2,LOW); //Relay 2 ON } //------control Relay 3 if(s3>SP3+0.5){//jika suhu 3> Set Point 3 digitalWrite(RL3,HIGH); //Relay 3 OFF } else if(s3<SP3-0.5){//jika suhu 3< Set Point 3 digitalWrite(RL3,LOW); //Relay 3 ON } //------control Relay 4 if(s4>SP4+0.5){//jika suhu 4> Set Point 4 digitalWrite(RL4,HIGH); //Relay 4 OFF } else if(s4<SP4-0.5){//jika suhu 4< Set Point 4 digitalWrite(RL4,LOW); //Relay 4 ON }
Alhamdulillah sudah selesai, silakan ditambahkan komponen tambahan keypad dan programnya untuk membuat thermostat ini dapat diganti set point tanpa merubah programnya. Semoga bermanfaat.