Integrasi Pemanasan Tengah dengan Arduino untuk Kontrol Cerdas
Komponen dan Perlengkapan
Arduino UNO
×
1
Shield OpenTherm Arduino
×
1
Sumber daya 24V
×
1
Tentang Proyek Ini
Pernahkah Anda bertanya kapan dan mengapa boiler Anda berjalan dan memanasi rumah Anda? Apakah Anda ingin mengotomatisasi sistem pemanasan Anda dengan Arduino? Shield OpenTherm dirancang untuk Anda. Ini akan memungkinkan Anda memantau dan mengontrol boiler OpenTherm Anda dengan Arduino.
Latar Belakang
Tahun lalu saya ingin menggabungkan boiler gas saya dengan pengatur perapian. Boiler BAXI dan termostat saya cukup cerdas jadi saya secara alami ingin memperluas boiler untuk mengontrol perapian juga. Saya bosan dengan semua ekstensi resmi BAXI yang mahal yang akan memungkinkan saya untuk melakukannya.
Jadi saya membangun gateway OpenTherm sendiri yang memungkinkan saya untuk menyeka komunikasi antara termostat dan boiler dan menempatkan algoritma yang akan menyalakan boiler atau menggunakan panas dari perapian - [selengkapnya tentang pengatur].
Karena ada banyak orang yang ingin sesuatu yang serupa, saya memutuskan untuk membuat sebuah modul - shield Arduino - yang akan memungkinkan siapa pun dengan sangat mudah untuk mengontrol pemanasan rumah mereka.
Manfaat Shield Ini?
Buat boiler Anda sendiri berbasis Arduino dengan termostat OpenTherm yang ada. Tidak mungkin siapa pun akan melakukan itu tetapi itu memungkinkan.
Gunakan shield untuk membangun termostat Anda sendiri berbasis Arduino untuk sepenuhnya mengambil alih boiler dan pemanasan rumah Anda. Sempurna untuk otomatisasi rumah. Aplikasi ini hanya membutuhkan sumber daya eksternal 5V.
Tempatkan shield OpenTherm di garis antara boiler dan termostat yang ada dan buat monitor untuk melihat kapan dan bagaimana boiler memanasi rumah Anda. Anda bahkan dapat menyeka komunikasi untuk misalnya mengontrol pemanasan secara nirkabel.
OpenTherm memungkinkan memiliki perangkat gateway (man-in-the-middle) yang berkomunikasi dengan baik boiler dan termostat. Ini adalah cara saya menggunakan shield untuk membuat pengatur OpenTherm.
Data dan Perintah yang Tersedia
Suhu ruangan
Titik set suhu ruangan
Suhu air pemanasan
Suhu air kembali
Suhu air panas rumah tangga*
Tekanan air panas rumah tangga*
Debit air panas rumah tangga*
Suhu luar ruangan*
Status boiler (berjalan / tidak berjalan / error)
Tingkat modulasi
Suhu gas buang*
Statistik berapa lama boiler berjalan
* catat bahwa ini hanya tersedia jika boiler Anda dilengkapi dengan aksesori yang diperlukan
Membangun Shield
Sirkuit elektronik berdasarkan proyek gateway OpenTherm yang menggunakan mikrokontroler PIC. Saya telah menyesuaikannya untuk Arduino dan membuat tata letak kompatibel Arduino UNO yang bagus.
Anda dapat menggunakan skema dan file Gerber di atas untuk membuat shield sendiri. Saya memproduksi papan saya dengan PCBWay - PCB Prototype the Easy Way. Anda dapat meminta mereka untuk membuat dan mengirimkan biru indah ini hanya dalam seminggu. Masker solder biru sama harganya dengan hijau dasar! Saya juga suka layanan pelanggan mereka, tidak ada masalah. Atau Anda dapat memesan kit DIY siap pakai.
Menggunakan Shield untuk Membuat Termostat
Contoh pertama akan menunjukkan kepada Anda cara menggunakan shield untuk membuat termostat kustom Anda sendiri. Yang Anda butuhkan:
Boiler OpenTherm
Arduino UNO, WeMos D1, atau papan Arduino UNO kompatibel apa saja. Satu-satunya persyaratan untuk papan adalah dukungan interrupt pin pada pin 2 dan 3.
Sumber daya 5V. Tidak perlu sumber daya 24V dalam pengaturan ini karena hanya diperlukan jika Anda berkomunikasi dengan termostat.
Hubungkan boiler Anda dengan shield OpenTherm Arduino seperti yang ditunjukkan dalam gambar di atas, pasang shield pada Arduino Anda dan Anda dapat mulai memprogram. Perpustakaan Arduino OpenTherm IO berisi contoh berikut untuk menunjukkan kepada Anda cara berkomunikasi dengan boiler.
void loop() { if (OPENTHERM::isIdle()) { message.type = OT_MSGTYPE_READ_DATA; message.id = OT_MSGID_SLAVE_CONFIG; message.valueHB = 0; message.valueLB = 0; Serial.print("-> "); OPENTHERM::printToSerial(message); Serial.println(); OPENTHERM::send(BOILER_OUT, message); // send message to boiler } else if (OPENTHERM::isSent()) { OPENTHERM::listen(BOILER_IN, 800); // wait for boiler to respond } else if (OPENTHERM::getMessage(message)) { // boiler responded OPENTHERM::stop(); Serial.print("<- "); OPENTHERM::printToSerial(message); Serial.println(); Serial.println(); delay(100); // minimal delay before next communication } else if (OPENTHERM::isError()) { OPENTHERM::stop(); Serial.println("<- Timeout"); Serial.println(); } }
Pertama, periksa apakah tidak ada perintah tertunda dengan OPENTHERM::isIdle. Jika tidak, Anda dapat mengirim selanjutnya. Dalam contoh ini, Anda meminta flag konfigurasi slave. Jika perintah berhasil dikirim, Anda harus mulai mendengarkan balasan dari boiler dengan panggilan OPENTHERM::listen. Metode OPENTHERM::getMessage akan mengembalikan true segera ada balasan tertunda dari slave dan jika ada kesalahan atau timeout terjadi metode OPENTHERM::isError mengembalikan true. Perpustakaan berisi struktur pesan OpenTherm yang berisi data yang terdekode dari protokol jadi Anda tidak perlu mempedulikan format sama sekali. Periksa kode sumbernya, sudah didokumentasikan dengan baik. Semua jenis pesan tercantum dalam konstanta atau Anda dapat memeriksa dokumentasi OpenTherm.
Menggunakan Shield untuk Membuat Monitor, Gateway, atau Pengatur
Contoh kedua akan menunjukkan kepada Anda cara melampirkan perangkat man-in-the-middle ke bus OpenTherm untuk memantau boiler dan termostat atau menyeka komunikasi mereka. Yang Anda butuhkan:
Termostat OpenTherm
Sumber daya 24V 500mA
Hubungkan shield ke bus antara boiler dan termostat seperti yang ditunjukkan dalam gambar di atas. Anda dapat melihat bahwa itu mengganggu bus antara kedua perangkat ini. Sekarang komunikasi Anda terputus kecuali Anda mengunggah perangkat lunak gateway ke Arduino Anda yang akan meneruskan perintah dan balasan dari termostat ke boiler dan sebaliknya. Lagi ada contoh yang bagus dalam perpustakaan Arduino OpenTherm IO.
void loop() { if (mode == MODE_LISTEN_MASTER) { if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) { OPENTHERM::listen(THERMOSTAT_IN); } else if (OPENTHERM::getMessage(message)) { Serial.print("-> "); OPENTHERM::printToSerial(message); Serial.println(); OPENTHERM::send(BOILER_OUT, message); // forward message to boiler mode = MODE_LISTEN_SLAVE; } } else if (mode == MODE_LISTEN_SLAVE) { if (OPENTHERM::isSent()) { OPENTHERM::listen(BOILER_IN, 800); // reply need to be send back in 800ms } else if (OPENTHERM::getMessage(message)) { Serial.print("<- "); OPENTHERM::printToSerial(message); Serial.println(); Serial.println(); OPENTHERM::send(THERMOSTAT_OUT, message); // send message back to thermostat mode = MODE_LISTEN_MASTER; } else if (OPENTHERM::isError()) { mode = MODE_LISTEN_MASTER; Serial.println("<- Timeout"); Serial.println(); } } }
Gateway cukup mulai mendengarkan perintah termostat. Jika ada permintaan yang terdeteksi, gateway akan mengurai dan meneruskan ke boiler. Gateway sekarang akan mulai mendengarkan balasan boiler. Jika ada balasan yang diterima dalam 800ms, gateway akan meneruskan balasan kembali ke termostat. Keduanya termostat dan boiler tidak akan tahu ada sesuatu yang tambahan di antara mereka. Seperti yang Anda lihat, ada banyak ruang untuk menulis kode Anda sendiri yang dapat menangkap pesan dan membaca informasi yang berguna dari mereka (status, suhu, tekanan, statistik, ...). Anda bahkan dapat mengganti atau membuang permintaan atau balasan yang tidak Anda sukai.
Seperti yang Anda lihat, sangat mudah untuk berkomunikasi dengan sistem pemanasan pintar Anda dan membuatnya lebih cerdas lagi. Dalam artikel selanjutnya saya akan menunjukkan penggunaan praktis lebih banyak dari hardware ini dalam pengatur OpenTherm saya.