4. Penampil LCD

Mendapat pertanyaan dari rekan di grup Facebook, yang menanyakan mengenai bagaimana program Outseal untuk kontrol suhu dengan sensor termokopel, dengan jangkauan suhu antara 80 sampai 230, menggunakan pemanas dan kipas angin, maka berikut ini hasil coba-coba yang saya lakukan. Sebelum membahas langkah-langkahnya, saya tulis kembali permintaannya.

Fitur yang diinginkan:
1. Sebuah alat kontrol yang dapat menjaga suhu antara 80 - 230 derajat Celsius.
2. Menggunakan Outseal sebagai alat kontrolnya.
3. Menggunakan Termokopel sebagai sensor suhunya.
4. Menggunakan pemanas (Heater) dan kipas angin (Fan) sebagai aktuatornya.

Fitur tambahan:
1. Penampil LCD untuk menampilkan data sensor (mengapa LCD? agar sesuai dengan judul).
2. Batas suhu minimal dan maksimal bisa diatur melalui komunikasi serial (HP lewat bluetooth).

Ide alternatif solusi:
1. Menambahkan Arduino Nano dan library modbus-esp8266.
2. Arduino Nano akan membaca suhu dari termokopel (dengan penguat MAX6675). 
3. Outseal Nano dijadikan Master dan Arduino Nano dijadikan Slave.
4. Karena antara Arduino Nano dengan Outseal Nano terhubung melalui komunikasi modbus, maka nilai batas minimal, nilai batas maksimal, nilai sensor dan nilai output Outseal ditempatkan di alamat modbus Holding Register, dengan indeks mulai dari 0 sampai dengan 3 secara berturut-turut. Dengan pengalamatan ini, maka nanti di LCD hanya tinggal menampilkan data di keempat alamat tersebut.
5. Agar lebih menarik, batas minimal dan maksimal bisa diubah melalui komunikasi serial dari HP dengan bantuan Bluetooth HC-05.

Lalu bagaimana langkah-langkahnya?
Sebelum sampai ke pembuatan alternatif solusi, agar rekan-rekan bisa memahami ide saya, berikut ini saya bahas dulu kontrol Outseal pada Heater dan Fan, dengan input berupa sinyal analog Potensio, seperti ditunjukkan pada rangkaian berikut ini:

Gambar 1. Outseal Nano dengan input Potensio dan Output Relay untuk mengendalikan Heater & Fan

Karena menggunakan Potensio dengan ADC 10 bit, maka jangkauan nilainya adalah antara 0 - 1023. Anggap bahwa batas minimum 300 dan batas maksimum adalah 700. Ketika nilai di bawah 300, maka Heater=ON dan Fan=OFF. Ketika nilai tersebut dinaikkan, Heater tetap ON dan Fan tetap OFF, hingga nilai tersebut lebih dari 700, barulah Heater=OFF dan Fan=ON. Berikutnya ketika nilai diturunkan, Heater tetap OFF dan Fan tetap ON, hingga nilainya di bawah 300, barulah Heater=ON kembali dan Fan=OFF, demikian seterusnya.


Kontrol Outseal Nano dengan Input Potensio

Untuk membuat hal tersebut, berikut ini langkah-langkahnya:
1. Buat program Ladder Diagram Outseal Nano berikut ini:

Gambar 2. Program Outseal Nano dengan sensor Potensio

Keterangan program:
  1. Anak tangga pertama untuk mengaktifkan ADC di kaki A6 dan A7. Di Outseal Nano, kaki A6 dan A7 merupakan kaki analog A.1 dan A.2 di Outseal Nano. Di rangkaian Gambar 1 di atas, potensio dihubungkan ke kaki A6 Arduino, yang merupakan kaki A.1 Outseal Nano.
  2. Anak tangga kedua dan ketiga untuk membandingkan nilai analog potensio (A.1) tersebut dengan nilai batas 300 dan 700. Apabila nilai A.1 lebih besar dari 700 mengaktifkan R1, apabila lebih kecil dari 300 mengaktifkan R2.\
  3. Anak tangga keempat untuk menghasilkan nilai output kontrol; apabila R2 aktif, maka output R3 akan bernilai 1, dan akan tetap bernilai 1 sekalipun R2 sudah tidak aktif. Output R3 hanya akan bernilai 0 apabila R1 aktif, dan akan tetap 0 sekalipun R1 sudah tidak aktif. demikian seterusnya.

2. Sebelum program Gambar 4 di atas dikompilasi dengan menekan tombol Test, pastikan bahwa hardware yang dipilih adalah Nano V5, dengan membuka menu Settings.

Gambar 3. Atur Settings Hardware = Nano V5.

3. Setelah itu tekan tombol Test bergambar centang. Apabila program sudah benar, maka akan muncul tulisan "Tidak terdapat kesalahan" seperti gambar berikut ini.

Gambar 4. "Tidak terdapat kesalahan" ketika tombol Test ditekan, berarti program sudah benar

4. Berikutnya, buat rangkaian di Proteus seperti ditunjukkan pada Gambar 1 di atas. Kemudian klik 2 kali komponen ATmega328 hingga muncul jendela Edit Component seperti berikut ini.

Gambar 5. Isi 4 kolom di jendela Edit Component ATmega328 sesuai langkah no. 5
 
5. Isi 4 kolom pada jendela Edit Component tersebut seperti isian berikut:

Program File

:

C:\Users\....\AppData\Local\Temp\Outseal\Hasil.hex

CLKDIV8 (Divide clock by 8)

:

(1) Unprogrammed

CKSEL Fuses

:

(0000) Ext. Clock

Clock Frequency

:

16 MHz

Catatan: isi titik-titik di kolom isian Program File dengan nama user di komputer 

6. Setelah keempat kolom terisi sesuai tabel, klik OK dan jalankan Proteus. Lakukan pengubahan nilai Potensio, maka Relay akan bekerja mengendalikan Heater dan Fan sesuai permintaan di atas. Berikut ini tampilan simulasinya:

Gambar 6. Ketika nilai Potensio kurang dari 300, Heater=ON, Fan=OFF

Gambar 7. Ketika nilai Potensio dinaikkan hingga lebih dari 600, Heater tetap ON, Fan tetap OFF

Gambar 8. Ketika nilai Potensio dinaikkan hingga lebih dari 700, Heater=OFF, Fan=ON

Gambar 9. Ketika nilai Potensio diturunkan hingga kurang dari 300, Heater=ON, Fan=OFF

7. Sampai di sini simulasi kontrol menggunakan sensor Potensio, dan aktuator Heater dan Fan serta Outseal Nano sebagai alat kontrolnya. 


Kontrol Outseal Nano dengan penghubung Arduino Nano

Lalu bagaimana jika diinginkan menggunakan Termokopel sebagai sensor suhu? Berikut ini langkah-langkahnya:

1. Berhubung sinyal Termokopel sangat kecil, maka di sini dibutuhkan tambahan penguat sinyal. Modul penguat untuk Termokopel yang cukup ekonomis adalah MAX6675. Rekan-rekan bisa mencari di toko online. Berikut ini contoh modul penguat dengan sensor termokopelnya yang bisa digunakan:

Gambar 10. Contoh modul MAX6675 beserta dengan sensor termokopel

2. Berhubung untuk mendapatkan data suhu dari sensor termokopel dan penguat MAX6675 ini memerlukan perhitungan yang cukup kompleks, maka saya menggunakan library Arduino (GyverMAX6675) yang bisa langsung menghasilkan nilai suhu. Karena alasan inilah, kita perlu menambahkan Arduino agar bisa membantu Outseal membaca sensor termokopel. Selain untuk bisa membaca sensor suhu termokopel. Arduino ini nantinya juga kita perlukan untuk menampilkan data di LCD, dan menerima data dari HP lewat bluetooth melalui komunikasi serial. Untuk lebih jelasnya, berikut ini rangkaian yang akan digunakan:

Gambar 11. Rangkaian kontrol suhu dengan sensor termokopel, Outseal Nano dan Arduino Nano

3. Dengan menggunakan rangkaian Gambar 11 di atas, berikut ini kode program Arduino Nano untuk membaca data sensor suhu termokopel, menempatkannya di alamat modbus Holding Register, menampilkan datanya di LCD I2C, dan menerima data nilai batas minimal dan maksimal melalui komunikasi serial. 

Kode program U1 (Arduino Nano) dengan sensor Termokopel:
  1. #include <ModbusRTU.h>
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial S(3, 2);
  4. #include <LiquidCrystal_I2C.h>
  5. LiquidCrystal_I2C lcd(0x27, 16, 2);
  6. #include "GyverMAX6675.h"
  7. #define alamat1 0  //data min
  8. #define alamat2 1  //data maks
  9. #define alamat3 2  //data sensor
  10. #define alamat4 3  //data output
  11. #define slave_ID 1
  12. #define DT 8
  13. #define CK 9
  14. #define SS 10
  15. unsigned long skr = 0;
  16. int min = 80;
  17. int mak = 230;
  18. int suhu = 0;
  19. ModbusRTU mb;
  20. GyverMAX6675<CK, DT, SS> sensor;
  21. void setup() {
  22.   Serial.begin(9600);
  23.   S.begin(9600);
  24.   mb.begin(&S);
  25.   mb.setBaudrate(9600);
  26.   mb.slave(slave_ID);
  27.   lcd.init();
  28.   lcd.clear();
  29.   mb.addHreg(alamat1);    //min
  30.   mb.addHreg(alamat2);    //mak
  31.   mb.addHreg(alamat3);    //suhu
  32.   mb.addHreg(alamat4);    //out
  33.   mb.Hreg(alamat1, min);  //isi min
  34.   mb.Hreg(alamat2, mak);  //isi mak
  35.   delay(1000);
  36. }
  37. void loop() {
  38.   if (millis() - skr > 100) {
  39.     if (sensor.readTemp()) {
  40.       suhu = sensor.getTemp();
  41.       mb.Hreg(alamat3, suhu);
  42.     }
  43.     lcd.setCursor(0, 0);
  44.     lcd.print("min=     mak=   ");
  45.     lcd.setCursor(4, 0);
  46.     lcd.print(min);
  47.     lcd.setCursor(13, 0);
  48.     lcd.print(mak);
  49.     lcd.setCursor(0, 1);
  50.     lcd.print("suh=     out=   ");
  51.     lcd.setCursor(4, 1);
  52.     lcd.print(suhu);
  53.     lcd.setCursor(13, 1);
  54.     lcd.print(mb.Hreg(alamat4));
  55.     skr = millis();
  56.     mb.task();
  57.   }
  58. }
  59. void serialEvent() {
  60.   while (Serial.available()) {
  61.     int a = Serial.parseInt();
  62.     int b = Serial.parseInt();
  63.     if (Serial.read() == char(13)) {
  64.       min = a;
  65.       mak = b;
  66.       mb.Hreg(alamat1, min);
  67.       mb.Hreg(alamat2, mak);
  68.     }
  69.   }
  70. }

4. Berikut ini program Ladder Diagram Outseal Nano untuk membaca 3 buah data di Holding Register Slave 1 (Arduino Nano), dengan indeks 0 - 2, yang secara berturut-turut berupa data nilai batas minimal, nilai batas maksimal, dan nilai suhu. Nilai suhu ini kemudian dibandingkan dengan nilai batas maksimal dan batas minimal. Apabila suhu lebih besar dari batas maksimal maka Fan saja yang hidup sedangkan Heater mati. Kondisi tersebut tidak akan berubah sekalipun suhu turun. Kondisi akan berubah hanya ketika suhu lebih kecil dari batas minimal, yang membuat Heater hidup dan Fan mati, demikian seterusnya. Untuk membuat output kontrol tersebut ditampilkan di LCD, Outseal Nano mengirimkan data output ke alamat Holding Register dengan indeks 3.

Kode program U2 (Outseal Nano) :

Gambar 12. Program Ladder Diagram Outseal Nano dengan batas nilai suhu 80 - 230

5. Kompilasi program Arduino Nano di atas dengan menekan tombol Verify (centang), dan isikan lokasi file Hex hasil kompilasi software IDE Arduino di kolom Program File, di jendela Edit Component ATmega328 U1. Begitu pula untuk program Ladder Diagram Outseal Nano, tekan tombol Test untuk kompilasi. Apabila tidak terdapat kesalahan, isikan lokasi file Hex hasil kompilasi software Outseal di kolom Program File, di jendela Edit Component ATmega328 U2. Jangan lupa untuk mengatur isian yang lain, yaitu  CLKDIV8=Unprogrammed, CKSEL Fuses=Ext. Clock dan Clock Frequency= 16MHz.

6. Setelah semuanya terisi, jalankan simulasi Proteus dengan menekan tombol Run. Berikut ini tampilan simulasi Proteus untuk perubahan nilai suhu sensor termokopel dan nilai batas minimal dan maksimal.

Gambar 13. Ketika suhu = 60 dengan batas min 80 dan mak 230, maka Heater ON dan Fan OFF

Gambar 14. Ketika suhu = 233 dengan batas min 80 dan mak 230, maka Heater OFF dan Fan ON

Gambar 15. Ketika data "90,100" diikuti Enter diketikkan di Serial Monitor, maka nilai min dan mak di LCD berubah menjadi 90 dan 100 dari yang semula 80 dan 230

Gambar 16. Dengan batas maksimal diubah ke 100, maka ketika suhu mencapai 195, Heater menjadi OFF dan Fan menjadi ON

7. Sampai di sini simulasi kontrol suhu dengan sensor Termokopel dan aktuator Heater dan Fan, serta Outseal Nano sebagai pengendali dan Arduino Nano sebagai penghubung, dan LCD I2C sebagai penampil data, serta Serial Monitor sebagai alat input untuk mengubah nilai batas minimal dan maksimal.


Implementasi pada Hardware riil

Bagaimana penerapan simulasi Proteus tesebut pada hardware riilnya? 
Berhubung saya tidak memiliki Outseal Nano dan juga saya tidak memiliki sensor Termokopel beserta penguatnya, maka sebagai implementasi hardware, saya menggunakan komponen berikut ini:
  • 1 buah Potensio sebagai simulasi sensor
  • 2 buah Arduino Nano, satu Arduino Nano sebagai Outseal Nano.
  • 2 buah LED sebagai indikator Heater dan Fan.
  • 1 buah LCD I2C sebagai penampil data
  • 1 buah modul Bluetooth HC-05 sebagai penghubung HP ke Arduino Nano melalui komunikasi serial (menggunakan aplikasi Serial Bluetooth Terminal)
Gambar 17. Rangkaian hardware untuk penampil data Outseal di LCD I2C dengan bantuan Arduino


Berikut ini gambar skematik rangkaian hardware di Gambar 17 di atas:

Gambar 18. Potensio sebagai sensor, dan 2 buah Arduino Nano (satu Arduino Nano sebagai Outseal Nano), dan 2 buah LED sebagai indikator Heater dan Fan, serta LCD I2C

Catatan: Modul HC-05 yang terlhat di Gambar 17, ditampilkan dalam bentuk Serial Monitor (Virtual Terminal) di Proteus. Sambungan kaki Rx-Tx Arduino Nano ke Rx-Tx Modul HC-05 ini dibuat silang, yaitu Tx Arduino terhubung ke Rx Outseal, dan Tx Outseal terhubung ke Rx Arduino.  

Kode program Outseal Nano di rangkaian Gambar 18 di atas sama seperti Gambar 12. Sedangkan kode program Arduino Nano untuk sensor Potensio adalah seperti berikut ini:
  1. #include <ModbusRTU.h>
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial S(3, 2);
  4. #include <LiquidCrystal_I2C.h>
  5. LiquidCrystal_I2C lcd(0x27, 16, 2);
  6. #define alamat1 0  //data min
  7. #define alamat2 1  //data maks
  8. #define alamat3 2  //data sensor
  9. #define alamat4 3  //data output
  10. #define slave_ID 1
  11. unsigned long skr = 0;
  12. int min = 80;
  13. int mak = 230;
  14. ModbusRTU mb;
  15. void setup() {
  16.   Serial.begin(9600);
  17.   S.begin(9600);
  18.   mb.begin(&S);
  19.   mb.setBaudrate(9600);
  20.   mb.slave(slave_ID);
  21.   lcd.init();
  22.   lcd.backlight();
  23.   lcd.clear();
  24.   mb.addHreg(alamat1);    //min
  25.   mb.addHreg(alamat2);    //mak
  26.   mb.addHreg(alamat3);    //suhu
  27.   mb.addHreg(alamat4);    //out
  28.   mb.Hreg(alamat1, min);  //isi min
  29.   mb.Hreg(alamat2, mak);  //isi mak
  30.   delay(1000);
  31. }
  32. void loop() {
  33.   if (millis() - skr > 100) {
  34.     int suhu = analogRead(0);
  35.     mb.Hreg(alamat3, suhu);
  36.     lcd.setCursor(0, 0);
  37.     lcd.print("min=     mak=   ");
  38.     lcd.setCursor(4, 0);
  39.     lcd.print(min);
  40.     lcd.setCursor(13, 0);
  41.     lcd.print(mak);
  42.     lcd.setCursor(0, 1);
  43.     lcd.print("suh=     out=   ");
  44.     lcd.setCursor(4, 1);
  45.     lcd.print(suhu);
  46.     lcd.setCursor(13, 1);
  47.     lcd.print(mb.Hreg(alamat4));
  48.     skr = millis();
  49.     mb.task();
  50.   }
  51. }
  52. void serialEvent() {
  53.   while (Serial.available()) {
  54.     int a = Serial.parseInt();
  55.     int b = Serial.parseInt();
  56.     if (Serial.read() == char(13)) {
  57.       min = a;
  58.       mak = b;
  59.       mb.Hreg(alamat1, min);
  60.       mb.Hreg(alamat2, mak);
  61.     }
  62.   }
  63. }

Berikut ini berturut-turut hasil simulasi baik di hardware yang riil maupun di Proteus:

Gambar 19. Ketika nilai Potensio diatur lebih kecil dari nilai batas minimal, yaitu sebesar 72, maka Heater ON dan Fan OFF

Gambar 20. Ketika nilai Potensio diatur lebih besar dari nilai batas maksimal, yaitu sebesar 300, maka Heater OFF dan Fan ON

Gambar 21. Menggunakan aplikasi Serial Bluetooth Terminal di HP, yang disimulasikan dengan Serial Monitor di Proteus, dikirim nilai batas minimal sebesar 300 dan nilai batas maksimal sebesar 700, tampak LCD menampilkan nilai batas minimal dan maksimal sesuai data yang dikirimkan

Gambar 22. Fan tetap ON dan Heater tetap OFF ketika nilai Potensio diatur melebihi nilai batas maksimal

Gambar 23. Nilai batas minimal diganti menjadi 250 dan nilai batas maksimal diganti menjadi 750, Fan tetap ON dan Heater tetap OFF

Gambar 24. Ketika nilai Potensio diatur kurang dari nilai batas minimal, Heater menjadi ON dan Fan menjadi OFF

Sampai di sini langkah-langkah implementasi hardware penampil LCD I2C untuk Outseal Nano. Untuk memudahkan rekan-rekan dalam mempelajari materi di halaman ini, rekan-rekan bisa mengunduh semua file yang diperlukan dalam pembuatan aplikasi di halaman ini, termasuk file rangkaian Proteus, Ladder Diagram Outseal Nano dan kode program Arduino Nano di link berikut ini: 

Agar lebih jelas, berikut ini video pembuatan tampilan data Outseal di LCD I2C yang dibuat mengikuti materi di halaman ini. 

Video pembuatan tampilan data Outseal di LCD I2C 


2 comments: