Sebagian besar artikel ditulis dengan prinsip "Saya / kami melakukannya / dan lihat betapa kerennya itu!". Publikasi yang sama dikhususkan untuk proyek yang gagal. Selamat datang di kucing ...
Ini adalah kelanjutan dari publikasi saya.Pengembangan perangkat pintar pada contoh kontroler lantai yang dipanaskan pada ESP8266
Mari kita mulai dari jauh
Saya tinggal di sebuah rumah kecil, yang dibangun sesuai dengan proyek saya. Layout - euro-grid, koridor, ruang dapur di lantai dasar, kamar mandi, kamar anak-anak dan kamar tidur di lantai kedua. Dari non-standar - dinding arbolit, fondasi UShP, pemanasan secara eksklusif TP. Dalam hal ini, lantainya terbuat dari kayu, di lantai dua ada lantai mengambang, TP - di pelat GVL. Di lantai pertama ada 3 loop pipa TP (sebenarnya satu ruangan), di kedua - juga tiga, tetapi masing-masing loop bertanggung jawab untuk satu kamar (kamar tidur, kamar mandi, kamar anak-anak) .Pompa gas yang dipasang di dinding 14 kW bertanggung jawab untuk panas. Boiler dikendalikan oleh termostat nirkabel mingguan yang dapat diprogram dalam bahasa Cina. Pada setiap hari dalam seminggu ada empat periode, dalam setiap periode Anda dapat mengatur suhu yang diinginkan. Otak baterai, relay tersembunyi. Ini bekerja dengan baik. Tetapi saya sering membutuhkan lebih dari yang saya miliki. Saya ingin kontrol suhu kamar. Saya melihat solusi yang diusulkan, saya tidak suka apa pun. Dan kata "Arduino" menarik perhatianku. Dan menurut profesi saya seorang programmer. Dan kita pergi ...
Besi
Saya tidak kuat dalam besi. Menyolder papan pengembangan adalah ketinggian kemampuan saya. Tapi Arduino adalah hal sederhana yang saya sadari - bahkan dengan pengetahuan elektronik saya, saya bisa membuat pengontrol suhu di rumah yang cocok untuk saya.
Sensor suhu
Saya tidak suka kabel di pedalaman. Saya mencoba mengecualikan atau menyembunyikannya, jika saya tidak bisa mengecualikannya. Dan dengan cara yang agak berliku, saya datang untuk menggunakan sensor nirkabel dari stasiun cuaca China sebagai sensor suhu kamar. Sensor beroperasi pada baterai untuk waktu yang lama dan disiarkan pada frekuensi 433 MHz. Cukup bagus, Anda dapat memilih warna yang berbeda, dengan dan tanpa layar. Ke depan, saya akan mengatakan bahwa setiap produsen stasiun cuaca menciptakan protokol sendiri untuk mentransmisikan data dengan sensor. Selama percobaan, saya menganalisis protokol 5 jenis sensor - semuanya memiliki format transfer data yang berbeda. Saya mengembangkan perpustakaan yang menerima data dari 4 jenis sensor. Saya tidak menghubungi yang kelima - protokolnya tidak sama dengan yang lain karena kurangnya batas paket. Alat utama untuk analisis data telah menjadi penganalisis logika Cina. Tanpa alat seperti itu, analisis protokol hampir tidak mungkin. Biayanya sedikit, mudah digunakan - saya sarankan Anda untuk semua arduins.
Saya menerapkan perpustakaan pada prinsip pengambilan sampel, frekuensi 10kHz. Pendekatan ini memungkinkan kami untuk meratakan kebisingan di udara dan mengurangi beban pada prosesor, dibandingkan dengan pendekatan dengan interupsi ketika level pada pin penerima berubah. Untuk debugging, penganalisis logis digunakan:
Sinyal debug
3 ... 6 saluran - data untuk debugging
Saya akan memberikan contoh sensor dan fitur-fiturnya.
- Tipe 1: Transfer data setiap 35 detik. Periode tidak berubah dan ini merupakan masalah ketika menggunakan 3 atau lebih sensor - jam dalam sensor sedikit berbeda, sinyal kadang-kadang bisa tumpang tindih, dan satu atau dua sensor putus selama satu jam, dua atau tiga kali seminggu atau dua. 6 paket data dalam 0.8sec. ID sensor berubah setiap kali dihidupkan. Tidak ada data status baterai.
Data
Atas penerima data, panah menunjukkan gangguan
Di bawah ini adalah data pemancar.
- Tipe 2: Periode transmisi data - 40 ... 80 detik, tergantung pada salurannya. Protokol terbaik menurut saya adalah 15 paket data dalam 0,6 detik, ada sebuah checksum. ID sensor berubah ketika dihidupkan, ada transmisi data status baterai. Pemancar terlemah - saat Anda meletakkan receiver di dalam sebuah kotak, kualitas penerimaan terasa semakin buruk. Mungkin dirawat dengan antena eksternal untuk penerima.
Data
tidak ada gangguan
- Tipe 3: Periode transfer data 50.,55 detik, tergantung pada salurannya. 7 paket dalam 0.6sec. ID berubah ketika dihidupkan, ada transmisi data status baterai. Pilihan yang bagus.
DataHampir identik dengan tipe 1
- Tipe 4: Periode transmisi data 56 ... 76 detik, tergantung pada salurannya. Tidak ada layar. ID yang dapat diubah saat diaktifkan tidak terdeteksi. Apakah ada perbedaan ID antara berbagai kejadian? Saya tidak tahu, saya punya satu sensor seperti itu. Data pada status baterai - adalah. Sinyal yang kuat, melewatkan transmisi hampir tidak pernah diamati.
- Tipe 5: Saya tidak mengukur periode transmisi, tidak ada saklar saluran, saya tidak menganalisis protokol secara mendalam.
Akibatnya, unit penerima diimplementasikan pada Arduino Pro Mini dengan transfer data melalui budak i2c.
Arduino mega
Ini adalah platform pertama di mana saya membuat controller. Pengontrol saya memiliki antarmuka perintah, dikendalikan oleh perintah yang dimasukkan melalui UART. Pada tahap itu, saya berencana membuat antarmuka WEB di ESP8266 dan berkomunikasi dengan Mega di UART. Saya memiliki papan Robotdyn Mega dikombinasikan dengan ESP8266 dan saya berencana membangun pengembangan ini di papan ini. Keuntungan khusus dari papan adalah sejumlah besar port eksternal. Tetapi dalam proses untuk mengenal ESP8266, saya menyadari bahwa chip kecil ini cukup mampu menggabungkan fungsi-fungsi pengontrol dan antarmuka.
ESP8266
Saya menggunakan opsi mini board WeMos D1, ia memiliki dimensi kecil dan jumlah pin yang cukup untuk saya - dengan mempertimbangkan penggunaan port expander. Ada sejumlah besar perpustakaan untuk forum ini. Sebagai contoh, me-no-dev / ESPAsyncWebServer adalah pustaka server web yang hebat dengan dukungan untuk soket web. Saya memasang pengontrol di papan ini. Mengembangkan antarmuka web. Semuanya bekerja dengan indah. Tetapi untuk alasan yang tidak dapat dimengerti bagi saya - waktu kerja tidak lebih dari satu hari. Entah saya melakukan sesuatu yang bengkok, atau beberapa perpustakaan yang digunakan bengkok. Selain itu, ada batas 5 koneksi simultan. Jika melebihi - restart atau bahkan beku (meskipun ada pengawas yang ada. Saya berjuang dengan hang menggunakan pengawas eksternal). Mengingat antarmuka web saya terdiri dari hampir selusin file, dan browser memuat halaman dalam 5 aliran paralel, mudah untuk memulai ulang. Bagi saya sendiri, saya memutuskan - papan ini hanya dapat digunakan sebagai klien. Saya mulai mencari solusi lain.
Tangkapan layar antarmuka ESP32
Ini seperti pewaris ESP8266. ESP32 memiliki paling - frekuensi, memori, kaki, ... Tapi masalahnya adalah - perpustakaan me-no-dev / ESPAsyncWebServer tidak berfungsi di dalamnya dalam hal soket web. Tentu saja Kecelakaan. Sesuatu yang terkait dengan multithreading. Saya tidak menemukan perpustakaan server web lain dengan dukungan untuk soket web.
SOC
Pada tahap ini, saya memutuskan untuk menggunakan board dengan linux - saya tidak menemukan yang lebih cocok.
Persyaratan papan tulis saya. Sepertinya tidak banyak dari mereka:
- Saya tidak perlu layar.
- Karena kurangnya layar untuk pengaturan awal, papan harus dapat bekerja dalam mode titik akses.
- Saya memerlukan fungsionalitas sistem operasi minimum.
Orange Pi i96
Papan ini cocok dalam segala hal - tidak ada output video, WiFi, memori flash built-in, slot kartu SD. Anda dapat menempatkan Ubuntu atau DietPi di memori internal. Tetapi masalah dengan papan ini adalah perangkat lunaknya. Anda tidak dapat membuat jalur akses. Nah, masalah terbesar - ketika Anda me-restart, alamat MAC berubah dan tidak ada yang dilakukan dengan ini. Di tungku. (Pada saat penulisan, di w3bsit3-dns.com, di utas yang didedikasikan untuk analog papan ini (2g IOT), sebuah pesan muncul mengatakan bahwa adalah mungkin untuk mengalahkan perubahan MAC)
Bawang Omega 2+
Dokumentasi mewah. Dengan firmware di luar kotak, semuanya dimulai, layar tidak diperlukan, UART tidak diperlukan. SSH diaktifkan secara default. Node.js dikirim (versi 4.x, tetapi itu tidak masalah bagi saya). Pustaka sqlite dan i2c untuk Node.js dikirim (menggunakan rebana)
Selain i2c, saya tidak lagi membutuhkan antarmuka perangkat keras. Dibandingkan dengan varian pengembangan saya, pengontrol Arduino Pro Mini terpisah ditambahkan ke ESP8266 untuk menganalisis data penerima data sensor suhu. Pengontrol penerima terhubung ke Omega sebagai budak i2c. Sensor berkabel dengan antarmuka 1wire terhubung melalui jembatan 1-2 <-> i2c (DS2482-100). Ada perpustakaan untuk node.js untuk jembatan ini, tetapi tidak berfungsi untuk saya dalam hal mencari sensor. Saya tidak mengerti, saya porting ke js bahwa perpustakaan DS2482 yang bekerja pada ESP8266.
Tetapi masalahnya adalah bahwa WiFi di Omega-2 tidak bekerja secara stabil, tidak terhubung kembali setelah me-reboot router. Masalah ini diselesaikan oleh firmware versi 2, tidak dalam status rilis, tetapi berfungsi. Itu menjadi jauh lebih baik. Tapi masalahnya ternyata - kadang-kadang papan jatuh dari router Zyxel dan menghubungkan kembali setelah me-reboot router atau setelah satu jam, dua atau tiga sendiri tanpa me-reboot router. Atau mulai sangat membosankan - masalah ini hilang setelah mengubah skema daya (papan benar-benar menyukai 3.3V atau sedikit lebih tinggi) dan menambahkan antena eksternal - omega sangat senang tentang hal itu. Jadi, pada prinsipnya, saya puas dengan board - fakta bahwa kadang-kadang tidak ada akses tidak terlalu mengganggu saya - sebagai antarmuka utama, saya menggunakan smartphone lama di dock yang terhubung ke titik akses Omega. Dan akses jarak jauh akan sangat diperlukan - Saya bisa mereboot router dari jarak jauh. Ini menyebabkan kesalahpahaman - Omega-2 memiliki dua pin RST - satu harus diserahkan +, seperti yang saya mengerti, ini diproses secara terprogram. Apa yang harus diarsipkan untuk yang kedua dan bagaimana menghubungkan pengawas eksternal yang memberi makan - saya belum tahu.
Logika pengontrol
Saya telah menjelaskan arsitektur perangkat lunak pengontrol - belum berubah (mis. Mengelola perintah teks yang dikirimkan melalui soket web). Antarmuka web telah dimigrasi dengan ESP8266 dengan perubahan kosmetik. Banyak prosedur / fungsi kode pengontrol hanya diterjemahkan dari C ++ ke JS. Hal lain adalah bahwa kehadiran linux (OpenWRT) memberi saya kesempatan untuk menggunakan database SQL - sqlite. Jadi, saya mengatur semua logika pada pertanyaan SQL. Ini sebenarnya pengalaman pertama saya dengan sqlite. Saya terutama menyukai kemungkinan menggunakan database dalam memori - Saya menempatkan semua data sementara dan saat ini dalam database ini (misalnya, data sensor, data pada suhu yang diperlukan saat ini, ...).
Kode sumberSaya biasanya berbagi ide, bukan kode sumber. Bagi saya ini menstimulasi aktivitas mental, saya, dan pembaca. Ingin mendapatkan sumber - tulis secara pribadi.
Majelis
Saya mengumpulkan semuanya dalam besi, diatur dalam sebuah kotak. Selanjutnya - tes sumber daya. Setelah satu minggu aktif, saya memutuskan bahwa tes itu berlalu. Dimungkinkan untuk menginstal.
Instalasi
Tahap ini sangat sukses. Saya menggantung kotak di sebelah kolektor, memasang dan menghubungkan kepala termal. Saya sangat senang dengan ide saya untuk menyimpan semua data, pengaturan dan parameter dalam database - dengan cepat saya dapat mengkonfigurasi relay dan zona dengan cara yang tidak direncanakan, yaitu, tiga relay per zona, dan memindahkan semua relay lainnya (yang asli idenya adalah satu zona - satu relay). Proyek ini mencakup penggunaan satu set sensor layanan DS18B20, untuk memantau suhu media pemanas pada aliran, dalam pengembalian setiap loop lantai hangat, dan suhu total pengembalian - sensor ini juga berhasil dihubungkan dan dikonfigurasikan (seluruh pengaturan adalah untuk menunjukkan nama sensor yang dapat dipahami).
Saya menghubungkan relai boiler.
Luncurkan
Pengontrol bekerja sesuai rencana.
Untuk tes, saya memutuskan untuk sedikit meningkatkan suhu di salah satu kamar di lantai dua.
Ketel mulai terlalu panas dan mati.
Dan kemudian sensor layanan berguna. Ternyata suhu air di pintu keluar dari loop ruangan ini hanya beberapa persepuluh derajat kurang dari di pintu masuk! Air tidak dingin! Ini berarti bahwa itu tidak melepaskan panas. Dan seluruh rumah terasa hangat pada suhu berapa pun di luar (tujuannya adalah untuk sedikit menurunkan suhu di lantai dua). Jadi lantai pertama memberikan semua panas, dan TP di lantai dua hampir tidak memanaskan lantai. Akibatnya, pengaturan pemanasan ruangan-demi-kamar dalam kondisi seperti itu tidak dimungkinkan.
Kesimpulan
Dengan demikian, pengaruh fitur fisika dan desain rumah saya mengakhiri perkembangan saya. Terlepas dari kenyataan bahwa controller itu sendiri berfungsi dengan baik, saya tidak bisa menggunakannya dalam sistem pemanas rumah saya. Mungkin saya akan membuatnya downgrade sehingga dia mengontrol iklim di rumah seperti termostat Cina - menurut satu sensor, tapi sejauh ini saya tidak mengerti intinya.
Namun, proyek ini secara keseluruhan tidak berhasil, selama proses pengembangan saya berkenalan dengan banyak teknologi yang hampir tidak saya kenal sebelumnya:
- Pemrograman pengontrol
- Saya belajar tentang bus data 1wire, i2c, uart, ...
- Memperoleh beberapa pengetahuan di perangkat server web
- Tampaknya menjadi pemahaman yang baik tentang pengembangan web-frontend: html, JavaScript, vue.js
- Dia menguasai pengembangan Web-backend: node.js
Jadi, saya mendapatkan banyak pengalaman pada proyek gagal, yang mungkin berguna pada proyek lain.
Mereka yang telah membaca ke tempat ini dapat melihat apa yang terjadi .
(tiga pengaturan terakhir diblokir)
Papan PS Ideal untuk DIY
Dalam proses penulisan artikel, masalah lain dengan Omega-2 ditemukan - modul mulai membeku. Keras, reset tidak membantu, matikan saja daya. Apa masalahnya - saya belum tahu. Mungkin dia tidak menyukai kekuatan yang meningkat - sekarang dia diberi makan 3.8V. Saya akan mencoba mengganti modul daya. Terlepas dari kenyataan bahwa proyek tidak memenuhi fungsinya, untuk saat ini saya akan membiarkannya dalam mode termometer (seperti yang mereka katakan, jangan melakukan apa pun di Arduino - Anda akan mendapatkan stasiun cuaca). Tetapi bagaimanapun juga, topiknya menarik bagi saya, saya ingin mencapai ketersediaan sistem 100% 24/7. Jika mengganti catu daya tidak membantu, saya akan mencoba sistem LinkIt Smart 7688. Sepertinya hardware-identik dengan Omega. Mungkin lebih stabil.
Tambahan: setelah mengganti stabilizer linier 5-> 3.3v dengan pulsa, Onion Omega 2+ tidak memiliki masalah dengan WiFi - operasi yang stabil selama seminggu. Kemudian dia menulis suplemen ini.
Berdasarkan ini - Saya belum menemukan papan pilihan ideal untuk produk buatan sendiri :(
Mungkin sebagai otak dari proyek selanjutnya saya akan mencoba menggunakan smartphone di android - Anda harus menghubungkan sensor ke sana melalui wifi, tetapi praktis tidak ada masalah dengan stabilitas ponsel bermerek. Dan node.js tampaknya diletakkan di telepon.
Saya akan berterima kasih jika Anda membagikan visi Anda tentang memilih papan untuk DIY.