Proyek 1. Kontrol Suhu

Apakah rekan-rekan ingin membuat proyek yang murah namun menarik untuk dipelajari? 
Semoga proyek kontrol suhu ini dapat menjawab pertanyaan tersebut.

Proyek kontrol suhu yang akan saya tunjukkan berikut ini, dapat digunakan untuk mensimulasikan sistem HVAC. Apa itu HVAC? HVAC singkatan dari Heating Ventilation and Air-ConditioningHVAC adalah teknologi yang menyediakan sistem pemanas dan pendingin serta sirkulasi udara dalam suatu ruangan, sehingga diperoleh sirkulasi dan suhu udara yang optimal.

Untuk membuat sistem kontrol suhu ini, ada 5 tahapan berikut ini:
  1. Pembuatan Rangkaian Kontrol
  2. Pembuatan Program Arduino
  3. Pembuatan Program LabVIEW untuk Kontrol Suhu Open Loop
  4. Pembuatan Program LabVIEW untuk Kontrol Suhu Closed Loop
  5. Pembuatan Program LabVIEW untuk Kontrol Suhu PID
  6. Pembuatan Program LabVIEW untuk Simulasi HVAC

1. PEMBUATAN RANGKAIAN KONTROL

Berikut ini gambar skematik rangkaian kontrol:

Gambar 1. Rangkaian kontrol suhu dengan Arduino, Sensor Suhu LM35, Resistor Pemanas (Heater) dan Kipas Angin Pendingin (Cooler)
    
Catatan: Sensor LM35 harus dipasang menempel di dinding resistor pemanas yang berbentuk kotak putih berbahan keramik. Berikut gambar dari resistor pemanas 10 ohm 5W.

Gambar 2. Resistor berbentuk kotak berbahan keramik

Berikut ini tabel sambungan kaki IO Arduino ke komponen rangkaian dan keterangan fungsinya.

Tabel 1. Sambungan kaki I/O Arduino dan keterangannya


Berikut ini foto hasil jadi rangkaian kontrol suhu:

Gambar 3. Rangkaian kontrol suhu tampak samping kiri


Gambar 4. Rangkaian kontrol suhu tampak samping kanan


Gambar 5. Rangkaian kontrol suhu tampak atas


2. PEMBUATAN PROGRAM ARDUINO

Berikut ini kode program Arduino:

1. unsigned long skr = 0;
2. float suhu = 0;
3. void setup() {
4.      Serial.begin(9600);
5.      pinMode(3, OUTPUT);
6.      pinMode(5, OUTPUT);
7.      analogReference(INTERNAL);
8.      skr = millis();
9. }
10. void loop() {
11.      suhu = analogRead(A0) * 110.0 / 1023;
12.      if (millis() - skr > 50) {
13.           Serial.println(suhu);
14.           skr = millis();
15.      }
16. }
17. void serialEvent() {
18.      while (Serial.available()) {
19.           int pemanas = Serial.parseInt();
20.           int pendingin = Serial.parseInt();
21.           if (Serial.read() == char(13)) {
22.                analogWrite(3, pemanas);
23.                analogWrite(5, pendingin);
24.           }
25.      }
26. }


Berikut ini keterangan kode program di atas:
  • Baris 1-2 untuk deklarasi variabel skr dan suhu
  • Baris 3-9 untuk seting komunikasi serial dengan baudrate = 9600, penugasan kaki output di D3 dan D5 untuk kontrol pemanas resistor dan pendingin kipas angin, seting pembacaan analog dengan AREF = 1,1V, dan pengisian variabel skr dengan output millis().
  • Baris 10-16 untuk pembacaan nilai suhu dari LM35, dan pengiriman data pembacaan tersebut ke komunikasi serial setiap 100 milidetik. Untuk membuat pengiriman setiap 100 milidetik, dalam program di sini tidak menggunakan delay, tetapi menggunakan fungsi millis(). Dengan fungsi millis() ini Arduino akan dapat mengerjakan hal lain, tidak perlu menunggu apabila nilai waktu 100 milidetik belum tercapai. Sebaliknya apabila menggunakan delay, Arduino harus menunggu selama 100 milidetik barulah dapat mengerjakan hal lain. 
  • Baris 17-26 untuk menerima data dari komunikasi serial, dan menggunakan data tersebut untuk kontrol pwm ke pemanas resistor dan pendingin kipas angin.

Berikut ini Flowchart kode program di atas:
Gambar 6. Flowchart program Arduino


3. PEMBUATAN PROGRAM LABVIEW UNTUK KONTROL OPEN LOOP

Dari gambar rangkaian kontrol paqda Gambar 1 di atas, diinginkan resistor pemanas dapat diatur panasnya secara manual, secara langsung dengan slider, begitu juga dengan kipas angin pendingin, dapat diatur kecepatan putarannya secara manual dengan slider, sehingga dapat membuat nilai suhu pada resistor pemanas ada di antara 40-70 0C. Berikut ini contoh program kontrol Open Loop di LabVIEW:

Gambar 7. Front Panel program kontrol Open Loop

Perhatikan pada Gambar 7 di atas, tampak ada 2 buah Slider dengan nilai 0 – 255, untuk mengontrol pemanas (resistor pemanas) dan pendingin (kipas angin), serta sebuah grafik untuk menampilkan nilai suhu, yang merupakan nilai di read buffer. Di samping slider dan grafik suhu, ada kotak Port COM untuk memilih COM yang digunakan oleh Arduino dan tombol Stop untuk menghentikan program. 

Gambar 8. Block Diagram program kontrol Open Loop


Gambar 8 di atas menunjukkan program di Block Diagram. Secara garis besar, program di Block Diagram di atas dapat diuraikan sebagai berikut:
1. Mula-mula, Arduino membaca nilai suhu pada resistor pemanas dengan bantuan sensor LM35, dengan instruksi suhu = analogRead(A0) * 110.0 / 1023.

Catatan: Mengapa analogRead(A0) dikali dengan 110.0/1023, bukan 500.0/1023 seperti pada umumnya program untuk LM35? Hal ini dikarenakan tegangan referensi yang digunakan untuk pembacaan nilai analog ini bukan lagi 5V, tetapi 1,1V, yang dibuat dengan mengaktifkan AREF internal.
 
2. Nilai suhu ini kemudian dikirimkan ke LabVIEW melalui komunikasi serial dengan instruksi Serial.println(suhu).

3. Di LabVIEW, nilai suhu tersebut diterima oleh VISA Read, yang kemudian ditampilkan nilainya di indikator read buffer.

4. Agar nilai suhu yang berbentuk String (teks) ini dapat ditampilkan di grafik, nilai suhu ini diubah dengan bantuan fungsi Fract/Exp String to Number.

5. Berikutnya, agar grafik tidak hanya menampilkan nilai suhu saja, tetapi juga garis batas suhu minimum (angka konstan 40) dan suhu maksimum (angka konstan 70), maka ketiga input grafik tersebut disatukan dengan icon Bundle, yang diambil dari kategori Cluster.

6. Berikutnya, agar resistor pemanas dapat dinaik-turunkan suhunya dengan Slider pemanas, digunakan VISA Write yang akan mengirimkan data dari Slider pemanas ke Arduino melalui komunikasi serial. Nilai Slider pemanas ini dibatasi dari 0 – 255 sesuai dengan nilai pwm Arduino yang berukuran 8 bit. 

7. Agar kipas angin juga dapat dinaik-turunkan kecepatannya dengan Slider pendingin, maka nilai Slider pendingin ini juga dikirimkan ke Arduino melalui VISA Write. 

8. Baik Slider pemanas maupun Slider pendingin, harus diubah datanya dari angka menjadi String (teks) dengan icon Number to Decimal String agar bisa dikirimkan melalui komunikasi serial.

9. Agar kedua data tersebut dapat dikirimkan bersama-sama, maka digunakan icon Concatenate Strings yang menggabungkan kedua data tersebut, dengan diberi pemisah koma dan diakhiri dengan karakter Carriage Return (ASCII 13).

10. Di Arduino, data yang dikirimkan dari VISA Write itu diterima dengan 2 buah instruksi Serial.parseInt(). Serial.parseInt() yang pertama akan mengambil angka integer sebelum koma, dan Seriall.parseInt() yang kedua akan mengambil angka integer setelah koma.

11. Angka integer yang pertama diberikan ke kaki D3 untuk mengontrol pwm pada resistor pemanas, sedangkan angka integer yang kedua diberikan ke kaki D5 untuk mengontrol pwm pada kipas angin pendingin.

12. Karena ditempatkan di dalam While Loop, maka baik VISA Read maupun VISA Write akan dijalankan terus menerus setiap 50 milidetik  dengan bantuan icon Wait Until Next ms Multiple. Agar data yang ditampilkan di grafik benar-benar tepat dengan satuan waktu detik, maka di Properties Waveform Chart perlu ditambahkan faktor pengali sebesar 0.05, yaitu di Tab Scales, di pilihan Waktu (detik) X-axis, seperti ditunjukkan pada Gambar 9.

Gambar 9. Pengaturan skala di Properties Waveform Chart. Karena fungsi Wait diisi 50 ms, maka agar waktu grafik tepat, kolom Multiplier di Scaling Factors diisi 0.05

13. Gambar 10 berikut ini menunjukkan hasil program Arduino dan program LabVIEW. Pada grafik suhu terlihat 3 buah garis dari bawah ke atas berturut-turut berwarna merah, hijau dan biru. Garis merah menunjukkan batas suhu minimum, garis biru menunjukkan batas suhu maksimum dan garis hijau menunjukkan nilai suhu hasil pembacaan sensor LM35 yang dikirimkan oleh Arduino ke LabVIEW melalui komunikasi serial.

Gambar 10. Grafik di atas menampilkan 3 buah nilai suhu, yang terdiri dari batas suhu minimum (merah), batas suhu maksimum (biru), dan nilai suhu pembacaan sensor LM35 (hijau)


4. PEMBUATAN PROGRAM LABVIEW UNTUK KONTROL CLOSED LOOP

Kelebihan dari program kontrol Open Loop di atas adalah mudahnya pengaturan suhu pemanas dan kecepatan kipas pendingin, yaitu dengan hanya menggerakkan slider di LabVIEW. 

Namun demikian, kontrol Open Loop tersebut memiliki beberapa kelemahan, di antaranya adalah:

1. Pengaturan suhu secara manual memaksa operator untuk terus-menerus memberikan pemantauan/pengawasan pada sistem.
 
2. Ketika ada aktuator yang gagal bekerja, misal kipas pendingin rusak, pemanas tidak akan bisa mati sendiri. Pemanas harus dimatikan segera secara manual agar tidak merusak komponen yang lain.  

3. Karena nilai kontrol untuk Slider Pemanas dalam satuan pwm, bukan satuan derajat Celsius, maka bisa mengakibatkan ketidaktepatan nilai output, yaitu ketika tegangan suplai ke resistor pemanas berubah besarnya. Untuk tegangan suplai 12V, nilai pwm sebesar 50 akan menghasilkan tegangan 50/255 x 12V = 2,35V. Ketika tegangan suplai berubah menjadi 5V, maka nilai pwm sebesar 50 akan menghasilkan tegangan sebesar 50/255 x 5V = 0,98V. Jadi sekalipun nilai pwm pada Slider Pemanas dijaga tetap nilainya, belum tentu bisa menghasilkan suhu yang sama, terutama bila tegangan suplainya berubah.

Dengan mempertimbangkan faktor keamanan (kelemahan no. 1), kemudahan penanganan (kelemahan no. 2) dan juga ketepatan pengaturan suhu (kelemahan no. 3), maka perlu penerapan kontrol suhu Closed Loop, atau bisa disebut juga sebagai kontrol suhu Otomatis. 

Berikut ini Front Panel program kontrol suhu Closed Loop:

Gambar 11. Front Panel program kontrol Closed Loop

Bila dibandingkan dengan Front Panel kontrol Open Loop pada Gambar 7, berikut ini perbedaannya dengan Front Panel kontrol Closed Loop Gambar 11 di atas:
1. Ada tambahan sebuah Vertical Pointer Slide untuk pengaturan nilai setpoint Suhu.

2. Slider Pemanas dan Slider Pendingin telah diganti menjadi Indicator, yang mana nilai pwm-nya tidak lagi dapat diubah oleh pengguna, tetapi dikontrol secara otomatis oleh program.

3. Ada tambahan kotak nilai beda yang menampilkan selisih nilai antara setpoint Suhu dengan nilai suhu hasil pembacaan sensor LM35.

4. Ada 2 kotak nilai di grafik yang menampilkan nilai setpoint Suhu dan nilai suhu hasil pembacaan sensor LM35. Kedua kotak nilai tersebut dimunculkan dengan cara meng-klik kanan objek grafik di Front Panel, dan memilih Visible Items, dan centang pada Digital Display, seperti ditunjukkan pada Gambar 12 berikut ini (catatan: secara default kotak digital display akan muncul di sisi kanan di luar kotak grafik, untuk itu harus digeser ke dalam kotak grafik).

Gambar 12. Memunculkan Digital Display pada Grafik di Front Panel

Gambar 13. Block Diagram program kontrol Closed Loop deadband -2 s/d 2

Untuk Block Diagram, bila dibandingkan dengan Block Diagram kontrol Open Loop pada Gambar 8, maka Block Diagram kontrol Closed Loop Gambar 13 di atas, memiliki perbedaan sebagai berikut:
1. Program kontrol Closed Loop memasukkan umpan balik, yaitu dengan cara mengurangi nilai setpoint Suhu dengan nilai suhu hasil pembacaan sensor LM35 di VISA Read, apabila hasilnya positif maka Pemanas (Heater) dihidupkan dengan nilai beda atau selisih dikali 10, sedangkan apabila hasilnya negatif maka Pendingin (Cooler) dihidupkan dengan nilai selisih dikali 50. 

2. Karena nilai maksimum pwm Pemanas dan Pendingin hanya 255, maka apabila nilai yang dihasilkan dari perhitungan lebih dari 255, maka nilai Pemanas dan Pendingin tersebut diisi 255.

3. Agar tidak ruwet dengan banyaknya garis data, maka program Block Diagram di atas menggunakan struktur Formula Node, yang diambil dari palet Functions di kategori Structures.

4. Untuk menghindari terjadinya on-off pada Pemanas dan Pendingin berulang kali ketika suhu hasil pembacaan mendekati nilai setpointnya, maka disini ditambahkan deadband pada program, dengan jangkauan 2 di sekitar nilai setpoint Ini berarti ketika suhu yang dibaca mendekati nilai setpoint dengan selisih kurang dari 2 (baik lebih besar maupun lebih kecil), maka baik Pemanas maupun Pendingin akan dimatikan. 

Catatan: Apa itu deadband? Deadband adalah sebuah daerah yang membuat perubahan input tidak menghasilkan perubahan output.

5. Gambar 14 berikut ini menunjukkan hasil program Arduino dan program LabVIEW. Pada grafik suhu terlihat 2 buah garis berwarna hijau dan biru. Garis biru menunjukkan nilai setpoint dan garis hijau menunjukkan nilai suhu hasil pembacaan sensor LM35 yang dikirimkan oleh Arduino ke LabVIEW melalui komunikasi serial.

Grafik 14. Grafik di atas menampilkan 2 buah garis yang terdiri dari nilai setpoint (biru) dan nilai suhu pembacaan sensor LM35 (hijau)


5. PEMBUATAN PROGRAM LABVIEW UNTUK KONTROL PID

Kelebihan dari program kontrol Closed Loop di atas adalah operator tidak perlu memberikan pengawasan terus-menerus, cukup dengan mengatur setpoint Suhu, maka secara otomatis Pemanas dan Pendingin bekerja secara bergantian untuk menghasilkan nilai suhu sesuai setpoint. Di samping itu, ketika  ada aktuator yang gagal bekerja, misal kipas pendingin rusak, maka pemanas akan bisa mati sendiri. Karena nilai setpointnya adalah suhu, bukan nilai tegangan, maka tidak akan terjadi ketidaktepatan akibat perubahan tegangan suplai, karena hasil pembacaan oleh sensor LM35 selalu dibandingkan dengan nilai setpoint Suhu. 

Kontrol PID di sini sama sebenarnya dengan kontrol Closed Loop, hanya bedanya memiliki respon yang lebih lengkap. Apabila kontrol Closed Loop hanya bisa membuat respon (perubahan output) yang proporsional dengan nilai errornya, maka dengan kontrol PID, tidak hanya perubahan Proporsional yang bisa dibuat, tetapi juga perubahan output yang Integral dan Derivatif terhadap error. Error yang dimaksudkan di sini adalah selisih atau beda antara nilai Setpoint dengan nilai pembacaan sensor. Respon atau perubahan output yang proporsional dengan error memiliki kelemahan tidak bisa menghilangkan error yang “ajeg” atau steady state. Lebih jelasnya, berikut ini  tabel pengaruh respon yang bersifat Proporsional Integral dan Derivatif terhadap unjuk kerja sistem yang dikontrol.

Tabel 2. Pengaruh respon PID terhadap unjuk kerja sistem



Dari Tabel 2 di atas terlihat bahwa untuk membuat unjuk kerja sistem yang bagus, harus menggabungkan ketiga sifat respon di atas dengan nilai yang tepat, sehingga dapat membuat rise-time dan settling-time sistem menjadi lebih kecil waktunya, juga overshoot dan steady state error bisa hilang atau semakin kecil. 

Gambar 15 berikut menunjukkan Front Panel program kontrol suhu dengan PID LabVIEW. Front Panel kontrol PID ini sebenarnya sama seperti Front Panel kontrol Closed Loop pada Gambar 10, hanya di kontrol PID ini ada tambahan kotak pengaturan nilai output range, PID gains serta kotak nilai PID output. 

Gambar 15. Front Panel program kontrol PID


Gambar 16 berikut menunjukkan Block Diagram program kontrol PID. Dibandingkan dengan program kontrol Closed Loop di Gambar 13, di program kontrol PID ada tambahan icon PID, yang membutuhkan 5 input, yang terdiri dari:
  1. Nilai setpoint Suhu, 
  2. Nilai pembacaan sensor suhu, 
  3. Seting parameter PID (Kc, Ti dan Td), 
  4. Batas jangkauan output (output range), 
  5. Periode waktu siklus PID dijalankan (dt). 

Gambar 16. Block Diagram program kontrol PID dengan deadband -2 s/d 2

Icon PID tersebut akan menghasilkan nilai output PID yang diperlukan untuk mengatasi error. Error di sini adalah selisih antara nilai setpoint Suhu dengan nilai pembacaan sensor suhu. Nilai error ini sama dengan nilai beda, yang dituliskan dalam Formula Node. 

Apabila output PID bernilai positif, maka nilai output PID itu akan menjadi nilai pwm untuk Resistor Pemanas, sedangkan apabila output PID bernilai negatif, maka nilai output PID itu akan menjadi nilai pwm untuk Kipas Angin Pendingin. Nilai maksimum untuk output PID tersebut diatur di output range, yang dalam contoh di sini diisi dengan nilai 255. Untuk menghindari panas yang terlalu tinggi, nilai pwm untuk Pemanas dibagi 2.

Gambar 17 berikut menunjukkan hasil program kontrol PID di LabVIEW untuk kontrol suhu. Dengan mengatur nilai PID gains (Kc, Ti dan Td) akan bisa didapatkan unjuk kerja sistem yang optimal.

Gambar 17. Grafik Suhu menampilkan hasil program kontrol PID dalam bentuk tampilan 2 buah garis, yang terdiri dari nilai setpoint (biru) dan nilai suhu pembacaan sensor LM35 (hijau)

6. PEMBUATAN PROGRAM LABVIEW UNTUK SIMULASI HVAC

Pada program kontrol PID di atas, antara Pemanas dan Pendingin tidak pernah bekerja bersamaan. Untuk sebuah sistem HVAC (Heating Ventilation and Air-Conditioning) yang baik, tidak hanya bisa mengontrol suhu udara secara otomatis, tetapi juga harus menyediakan sirkulasi udara yang baik, sehingga kipas angin seharusnya tidak pernah mati. Untuk mensimulasikan sistem HVAC ini, buat agar kipas angin dapat diatur kecepatannya dengan Slider secara manual, sedangkan suhu pada resistor pemanas diatur secara otomatis dengan kontrol PID. 

Sebagai tantangan permasalahan, diinginkan suhu dijaga tetap sebesar 55 derajat Celsius, dengan kecepatan kipas angin yang bervariasi, yang bisa diatur dengan Slider atau diacak secara otomatis. Untuk membuat itu, tambahkan sebuah checkbox, yang diambil dari Palet Controls di Front Panel, di kategori System, di Boolean, dan tempatkan di atas Slider Pendingin. Apabila checkbox ini dicentang, akan membuat input pwm kipas angin dibangkitkan dengan fungsi Random Number, dengan nilai antara 50 – 255.

Berikut ini alternatif program LabVIEW untuk menyelesaikan permasalahan tersebut.

Gambar 18. Untuk menghindari suhu yang dihasilkan terlalu tinggi, buat output range High = 100 dan output range Low = 0

Tampak pada Gambar 18 di atas ada 2 buah nilai yang ditampilkan pada Grafik suhu, yang secara berturut-turut menampilkan nilai setpoint Suhu, nilai pembacaan sensor, dan nilai pwm kipas angin Pendingin. Karena nilai pwm kipas angin Pendingin dari 50 – 255, maka nilai maksimum sumbu Y axis dibuat 255. Kemudian karena output PID hanya digunakan untuk nilai pwm resistor Pemanas, maka output range untuk output High diisi 100, sedangkan untuk output Low dibuat 0. Output High diisi 100 untuk menghindari suhu yang terlalu tinggi yang bisa dihasilkan Pemanas. Output range Low diisi 0 karena output PID tidak lagi digunakan untuk mengontrol nilai pwm kipas angin Pendingin.

Gambar 19 berikut ini menunjukkan program di Block Diagram untuk menghasilkan kontrol pid untuk suhu Pemanas dengan nilai pwm kipas angin Pendingin dapat diatur secara manual dengan slider atau secara otomatis dengan nilai acak.

Gambar 19. Block Diagram program kontrol PID untuk simulasi HVAC dengan nilai pwm kipas angin pendingin dapat diatur secara manual dengan slider atau secara otomatis dengan nilai acak

Berikut ini beberapa hal yang perlu diperhatikan dari Block Diagram di atas:
1. Fungsi acak dengan nilai antara 50 – 255 dapat dibuat dengan icon Random Number dikali dengan angka 205, dibulatkan, lalu dijumlah dengan angka 50. 

2. Hasil dari fungsi acak diberikan sebagai nilai pwm Slider Pendingin. Untuk pengisian nilai ke Slider Pendingin, gunakan local variable, yang dimunculkan dengan cara meng-klik kanan icon Cooler, pilih Create, pilih Local Variable.  

3. Agar pengisian nilai acak ke icon Local Variable Slider Pendingin hanya dilakukan Ketika checkbox Acak dicentang, maka tambahkan Case Structure, dan hubungkan terminal Selector (?) ke output icon checkbox Acak. 

Gambar 20 berikut menunjukkan hasil program kontrol PID untuk simulasi HVAC, dengan checkbox Acak dicentang, dan suhu dijaga tetap 55 derajat Celsius.

Gambar 20. Grafik Suhu menampilkan hasil program kontrol PID untuk simulasi sistem HVAC dalam bentuk tampilan 3 buah garis, yang terdiri dari nilai setpoint (merah), nilai suhu pembacaan sensor LM35 (hijau) dan nilai pwm kipas angin (biru) yang bernilai acak

Sampai di sini Proyek 1 Kontrol Suhu selesai. Bagi rekan-rekan yang membutuhkan file-file program untuk pengerjaan Proyek 1 Kontrol Suhu ini, silahkan bisa meng-klik link unduhan berikut ini.
Agar lebih jelas, rekan-rekan dapat melihat video penjelasan Proyek 1 Kontrol Suhu berikut ini: 

Video Proyek 1 Kontrol Suhu

Semoga bermanfaat, dan terimakasih sudah berkunjung di blog ini.

Tidak ada komentar:

Posting Komentar