ShioTiny: pengudaraan bilik basah (contoh projek)

ShioTiny: pengudaraan bilik basah (contoh projek)

Perkara utama atau maksud artikel ini

Kami meneruskan siri artikel tentang ShioTiny - pengawal berasaskan cip boleh diprogramkan secara visual ESP8266.

Artikel ini menerangkan, menggunakan contoh projek kawalan pengudaraan di bilik mandi atau bilik lain dengan kelembapan tinggi, cara program dibina untuk ShioTiny.

Artikel terdahulu dalam siri ini.

ShioTiny: automasi kecil, Internet perkara atau "enam bulan sebelum bercuti"
ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

rujukan

Perisian tegar binari, litar pengawal dan dokumentasi
Arahan dan penerangan komponen
Menyediakan broker MQTT cloudmqtt.com
Papan pemuka MQTT untuk Android

Pengenalan

Tiada pemahaman tanpa pengalaman. Ini adalah kebenaran yang diuji oleh zaman dan generasi. Oleh itu, tidak ada yang lebih baik untuk mempelajari kemahiran praktikal daripada mencuba melakukan sesuatu sendiri. Dan contoh yang menunjukkan perkara yang boleh anda lakukan dan perkara yang anda tidak patut cuba akan berguna di sini. Kesilapan orang lain, sudah tentu, tidak dapat menghalang berlakunya kesilapan anda sendiri, tetapi ia boleh membantu mengurangkan bilangan yang terakhir.

Soalan dan surat daripada pembaca artikel terdahulu mendorong saya membuat projek kecil - contoh kawalan pengudaraan untuk menunjukkan cara nod ShIoTiny berfungsi.

Idea asal dari mana pengawal itu dilahirkan ShioTiny - stesen pam dan pengairan - tidak sesuai untuk semua orang dan tidak akan menarik minat semua orang. Oleh itu, saya mengambil sistem kawalan pengudaraan yang boleh difahami dan berguna kepada ramai sebagai contoh.

Saya akan mengatakan bahawa idea projek itu bukan milik saya, tetapi Saya mendapatnya dari sini dan kemudian disesuaikan dengan ShioTiny.

Fahami dahulu apa yang anda mahukan

Proses penambahbaikan tidak berkesudahan. Dan harta inilah yang telah merosakkan banyak idea dan projek yang baik. Pembangun, bukannya mengeluarkan sesuatu yang tidak sesuai, tetapi masih berfungsi, terus memperbaikinya. Dan dia memperbaikinya sehingga pesaing memintasnya, mengeluarkan penyelesaian yang berfungsi, walaupun tidak ideal (dan selalunya benar-benar lemah), tetapi berfungsi.

Oleh itu, adalah sangat penting untuk mengetahui di mana untuk menamatkan projek itu. Atau, dalam erti kata lain, kita perlu menentukan apa yang ingin kita perolehi pada akhir projek daripada apa yang kita ada pada permulaannya. Dalam bahasa Rusia, untuk dokumen yang disusun dengan tepat dengan tujuan untuk menerangkan jalan untuk mencipta sesuatu, terdapat perkataan "rancangan" yang pendek dan padat yang indah, yang mana penterjemah terencat akal dan pengurus yang cacat baru-baru ini atas sebab tertentu mula memanggil "jalan". peta”. Ya Allah berkatilah mereka.

Rancangan kita akan jadi begini. Mari kita anggap bahawa terdapat bilik di mana kelembapan boleh meningkat dengan ketara pada masa-masa tertentu. Contohnya, seperti bilik mandi atau dapur. Kelembapan adalah perkara yang tidak menyenangkan dan cara untuk memeranginya adalah setua dunia: ventilasi bilik. Terdapat beberapa cara untuk pengudaraan. Tetapi kami, mungkin, akan meninggalkan kaedah eksotik dan kuno seperti orang kulit hitam dengan kipas dan berpegang pada kipas biasa. Peminat lebih murah dan mudah didapati di kawasan kami.

Pendek kata, kami mahu mengawal kipas: hidupkannya dan, dengan itu, matikannya. Lebih tepat lagi, kami mahu ia dihidupkan dan dimatikan apabila diperlukan.

Ia masih untuk menentukan: dalam keadaan apa kipas harus dihidupkan dan dalam keadaan apa ia harus dimatikan.

Segala-galanya jelas di sini: jika kelembapan melebihi had tertentu, kipas dihidupkan dan mengeluarkan udara; Kelembapan telah kembali normal - kipas dimatikan.

Pembaca yang penuh perhatian akan segera menarik perhatiannya pada perkataan "diberikan". Diberi oleh siapa? Seperti yang dinyatakan?

Anda boleh menetapkan kelembapan ambang dalam beberapa cara. Kami akan melihat dua daripadanya: yang pertama - menggunakan rintangan berubah-ubah dan yang kedua - melalui rangkaian melalui protokol MQTT. Setiap kaedah ini mempunyai kelebihan dan kekurangan, yang akan dibincangkan kemudian.

Bagi mereka yang tidak faham, saya akan menerangkan bahawa "kelembapan ambang" ialah tahap kelembapan di atasnya kipas mesti dihidupkan.

Soalan seterusnya ialah: adakah pengguna diberi hak untuk menghidupkan kipas secara terus? Iaitu, tanpa mengira tahap kelembapan, dengan menekan butang? Kami akan menyediakan kemungkinan sedemikian. Lagipun, kipas mungkin diperlukan bukan sahaja apabila terdapat kelembapan yang tinggi, tetapi juga untuk mengeluarkan dari bilik, sebagai contoh, bau yang tidak menyenangkan, yang popular dipanggil "bau".

Jadi, kami faham apa yang kami mahu dan sedikit pun bagaimana ia akan berfungsi. Mari kita senaraikan secara ringkas semua fungsi sistem kawalan pengudaraan kami:

  • menetapkan tahap kelembapan ambang (dua pilihan);
  • pengukuran tahap kelembapan;
  • kipas automatik dihidupkan;
  • penutupan kipas automatik;
  • pengaktifan kipas manual (dengan menekan butang).

Jadi, rancangan itu jelas. Ia adalah perlu untuk melaksanakan semua fungsi di atas dalam program kami. Kami akan bertindak berdasarkan "rancangan" ini. Mula-mula, mari kita lukis gambarajah blok peranti.

Gambar rajah blok peranti

Secara umumnya, kita akan mempunyai dua skim sedemikian. Yang pertama adalah untuk pilihan di mana tahap kelembapan ambang ditetapkan oleh rintangan berubah-ubah. Skim kedua adalah untuk pilihan di mana tahap kelembapan ambang ditetapkan melalui rangkaian melalui protokol MQTT.

Tetapi oleh kerana litar ini akan berbeza dengan hanya satu elemen - perintang pembolehubah "menetapkan tahap kelembapan ambang", kami hanya akan melukis satu gambar rajah blok. Sudah tentu, gambarajah blok mengikut GOST kelihatan berbeza. Tetapi kami tidak memberi tumpuan kepada jurutera bison, tetapi kepada generasi muda. Oleh itu, penglihatan adalah lebih penting.

ShioTiny: pengudaraan bilik basah (contoh projek)

Jadi, apa yang kita lihat dalam gambar? Kipas disambungkan ke geganti Relay1 pengawal ShioTiny. Sila ambil perhatian bahawa kipas adalah peranti voltan tinggi. Oleh itu, jika sesiapa melakukan ini sendiri, berhati-hati. Iaitu, sekurang-kurangnya, sebelum anda memasukkan jari anda atau alat pengukur ke dalam litar, sekurang-kurangnya matikan kuasa ke kipas. Dan nota kedua. Jika kipas anda lebih berkuasa daripada 250W, kemudian sambungkannya terus ke ShioTiny tidak berbaloi - hanya melalui pemula.

Kami menyusun kipas. Kini butang "menghidupkan" kipas secara manual. Ia disambungkan kepada input Input1. Tiada apa lagi yang perlu dijelaskan di sini.

Sensor suhu dan kelembapan DHT-11 (Atau DHT-22 atau analog mereka). Terdapat input khas pada pengawal untuk sambungannya. ShioTiny. Seperti yang anda lihat dalam rajah, menyambungkan sensor sedemikian juga tidak menjadi masalah.

Dan akhirnya, rintangan berubah-ubah, yang menetapkan tahap ambang kelembapan. Lebih tepat lagi, pembahagi yang terdiri daripada rintangan berubah dan tetap. Tiada masalah dengan sambungannya, tetapi izinkan saya menerangkan bahawa ADC terbina dalam adalah ESP8266 direka untuk maksimum 1 Volt. Oleh itu, pembahagi voltan kira-kira 5 kali diperlukan.

Dan izinkan saya mengingatkan anda sekali lagi bahawa pembahagi ini tidak diperlukan jika tahap kelembapan ambang ditetapkan melalui rangkaian menggunakan protokol MQTT.

Mari mula mencipta algoritma untuk peranti dalam editor ElDraw ShIoTiny. Bagaimana untuk pergi ke sana, kepada editor ini, boleh dibaca dalam artikel terdahulu atau dalam arahan, pautan ke yang berada di permulaan artikel.

Pilihan satu, paling mudah

Mari kita mulakan dengan sesuatu yang mudah: menghidupkan geganti Relay1 apabila tahap kelembapan ambang melebihi untuk masa yang ditentukan.

ShioTiny: pengudaraan bilik basah (contoh projek)

Seperti yang anda lihat, tiada yang rumit: hanya empat nod, tidak mengira nod komen. DHT11 - ini ialah sensor suhu dan kelembapan itu sendiri (boleh diganti dengan DHT22).

berterusan KONST β€” tahap kelembapan ambang, dalam peratus.

Pembanding - nod yang membandingkan dua nombor dan mengeluarkan 1 jika syarat tertentu dipenuhi dan 0 jika syarat tidak dipenuhi.

Dalam kes kami, keadaan ini akan menjadi A>BJika A ialah tahap kelembapan yang diukur oleh penderia, dan B β€” tahap ambang kelembapan yang sama.

Sebaik sahaja tahap kelembapan diukur (A) akan melebihi paras kelembapan ambang (B), di sana pada output pembanding A>B 1 akan muncul dan geganti akan dihidupkan. Sebaliknya, sebaik sahaja tahap kelembapan kembali normal (iaitu. A<=B), di sana pada output pembanding A>B 0 akan muncul dan geganti akan dimatikan.

Semua siap? Bagi mereka yang tidak begitu selesa, baca sekali lagi atau lihat penerangan operasi unit dalam arahan.

Ambil perhatian bahawa data daripada sensor DHT11 dikemas kini kira-kira sekali setiap 10 saat. Oleh itu, geganti tidak akan dapat dihidupkan dan dimatikan lebih kerap daripada sekali setiap 10 saat.

Semuanya akan baik-baik saja, tetapi kami ingin menetapkan tahap kelembapan ambang menggunakan perintang berubah-ubah. Tiada yang lebih mudah!

ShioTiny: pengudaraan bilik basah (contoh projek)

Mari gantikan nod malar dengan nod ADC. Lagipun, ia adalah kepada ADC yang kami sambungkan pembahagi voltan dengan perintang berubah-ubah.

Voltan pada input ADC berbeza dari 0 hingga 1 Volt. Tetapi kelembapan pada output sensor berbeza dari 0 hingga 100%. Bagaimana kita membandingkan mereka? Mudah sahaja. nod ADC masuk ShioTiny bukan sahaja mengukur voltan input, tetapi juga tahu bagaimana untuk skala dan anjakan.

Iaitu, output nod ADC1 (ADC) akan mempunyai nilai X, dikira dengan formula

ShioTiny: pengudaraan bilik basah (contoh projek)

Jika ShioTiny: pengudaraan bilik basah (contoh projek) β€” voltan pada input ADC (dari 0 hingga 1V); k - julat (julat ADC) dan b-offset (offset ADC). Oleh itu, jika anda menetapkan k = 100 ΠΈ b=0, kemudian apabila berubah ShioTiny: pengudaraan bilik basah (contoh projek) dalam julat dari 0 hingga 1, nilai X pada output nod ADC akan berbeza dalam julat dari 0 hingga 100. Iaitu, secara berangka sama dengan julat perubahan kelembapan dari 0 hingga 100%.

Atau, secara ringkas, dengan memutar peluncur rintangan berubah, anda boleh menetapkan tahap kelembapan ambang dari 0 hingga 100. Satu-satunya kesulitan ialah tiada peranti paparan. Tetapi dalam praktiknya, jika anda membuat 6 bahagian motor rintangan berubah (0%, 20%, 40%, 60%, 80%, 100%) - maka ini sudah cukup untuk menetapkan tahap kelembapan ambang.

Bagaimanakah kita menetapkan kemungkinan? k - julat (julat ADC) dan b-offset (ADC offset)? Ya, lebih mudah daripada lobak kukus! Halakan penunjuk tetikus anda pada nod ADC1 dan serta-merta anda akan melihat tetingkap tetapan. Anda boleh meletakkan semua yang anda perlukan di dalamnya. Untuk kes kami, ia akan menjadi tetingkap seperti dalam rajah.

ShioTiny: pengudaraan bilik basah (contoh projek)

Jadi, kami mempunyai penyelesaian kerja yang paling mudah. Mari kita mula memperbaikinya.
Dengan cara ini, penyelesaian paling mudah mempunyai satu kelebihan - ia tidak memerlukan Internet. Ia adalah autonomi sepenuhnya.

Pilihan kedua, sambungkan butang

Semuanya berfungsi dan semua orang gembira. Tetapi nasib malang, kita tidak boleh menghidupkan pengudaraan secara paksa. Kami sudah bersetuju bahawa di pintu masuk Input1 kami akan mempunyai butang yang disambungkan yang akan menghidupkan dan mematikan kipas secara paksa, tanpa mengira penderia kelembapan.
Sudah tiba masanya untuk memproses butang ini dalam rajah program kami.

ShioTiny: pengudaraan bilik basah (contoh projek)

Blok pemprosesan klik butang diserlahkan dengan garis oren. Ia adalah pembilang untuk menekan butang, yang ditetapkan semula kepada sifar apabila nilai pada outputnya melebihi satu (garisan hijau, output nod CT).

Segala-galanya di sini berfungsi semudah dahulu: kaunter CT mengira tekanan butang yang disambungkan ke input Input1. Iaitu, nilai pada output pembilang ini meningkat sebanyak 1 dengan setiap tekan butang.

Sebaik sahaja nilai ini menjadi sama dengan dua (iaitu, lebih besar daripada 1), serta-merta pada output pembanding A>B 1 akan muncul. Dan 1 ini akan menetapkan semula kaunter CT kepada sifar. Ini bermakna pembanding, yang paling bawah dalam rajah!

Oleh itu, butang kami mempunyai dua keadaan - 0 dan 1. Jika kami memerlukan lebih banyak keadaan (3 atau 4 atau lebih) - kami hanya perlu menukar pemalar KONST dari satu nilai kepada nilai yang lain.

Jadi, kami mempunyai dua syarat untuk menghidupkan kipas: melebihi tahap kelembapan tertentu dan menekan butang sekali. Jika mana-mana syarat dipenuhi, kipas akan dihidupkan. Dan ia akan berfungsi sehingga butang ditekan semula И tahap kelembapan tidak akan kembali normal.

Anda boleh, tentu saja, merumitkan algoritma lebih banyak lagi, tetapi kami tidak akan melakukan ini - kami akan memberi ruang untuk kreativiti kepada mereka yang mahu.

Pilihan ketiga, sambung ke Internet

Semua yang kami huraikan agak boleh dilaksanakan. Bagaimana dengan pertunjukan? Lagipun, mana-mana penggodam keropok hipster berjerawat akan mentertawakan seseorang yang memulas tombol dan menekan butang daripada mengawalnya daripada telefon pintar! Memusing pemegang adalah "tidak bergaya." Tetapi merangkak dengan jari anda pada telefon pintar anda, menggosok jari anda berdarah - ini adalah kemuncak keinginan seorang hipster-hacker-cracker (saya tidak pernah dapat membezakan semuanya - jadi jika saya salah, maafkan saya).

Tetapi marilah kita berlembut terhadap individu ini. Terdapat kelebihan sebenar untuk mengurus melalui Internet. Pertama, ia adalah keterlihatan. Terdapat banyak aplikasi untuk semua platform yang membolehkan anda mencipta panel kawalan yang boleh digunakan sepenuhnya untuk pengawal Carlson kami dengan beberapa tweak. Kedua, ini adalah peluang untuk memantau keadaan kelembapan di dalam bilik dari jauh. Dan ketiga, anda boleh melihat bukan sahaja apa yang dilakukan oleh kipas - berputar atau tidak, tetapi juga tahap kelembapan ambang yang ditetapkan. Dan kemudian kipas dihidupkan secara automatik atau manual. Secara umum, semua yang anda mahukan.

Sudah tentu, ia adalah satu penghormatan bagi sesetengah peminat untuk menerima begitu banyak perhatian. Tetapi ini hanya contoh.

Jadi, untuk menyambung ke Internet kita akan menggunakan teknologi MQTT dan protokol dengan nama yang sama.
Untuk memanfaatkan teknologi ini, kita perlu Broker MQTT. Ini adalah pelayan khas yang berfungsi Pelanggan MQTT, Mis SHIOTIny dan telefon pintar anda.

Inti teknologi MQTT terdiri daripada fakta bahawa mana-mana pelanggan menerbitkan data sewenang-wenangnya kepada broker (pelayan) MQTT di bawah nama tertentu (dipanggil topik dalam istilah MQTT). Pelanggan lain boleh melanggan data sewenang-wenang menggunakan nama mereka (topik) dan menerima data yang baru diterbitkan. Iaitu, semua pertukaran data mengikut prinsip klien-broker-klien.

Π― saya tidak akan fokus pada perincian. Terdapat banyak artikel dan tutorial di Internet tentang cara ia berfungsi. MQTT dan apakah program yang ada untuk mencipta panel kawalan. Saya hanya akan menunjukkan kepada anda cara kami boleh menerima dan menerbitkan data menggunakan ShioTiny.

Sebagai broker yang saya gunakan www.cloudmqtt.com, tetapi prinsipnya adalah sama di mana-mana.

Jadi, kami akan menganggap bahawa anda telah mendaftar untuk Broker MQTT. Secara amnya, broker akan memberi anda (atau memerlukan anda membuat) nama pengguna dan kata laluan (untuk kebenaran), serta port untuk sambungan. Untuk memasangkan ShioTiny ΠΊ Broker MQTT mungkin dalam dua cara - sambungan biasa dan melalui TLS (SSL).

Semua parameter ini dalam ShioTiny dimasukkan pada tab Rangkaian, bab Sambungan MQTT ke pelayan.

ShioTiny: pengudaraan bilik basah (contoh projek)

Sekiranya anda Broker MQTT tidak memerlukan kebenaran - jangan masukkan log masuk dan kata laluan anda (biarkan medan ini kosong).

Parameter Awalan topik MQTT memerlukan penjelasan yang berasingan.

Awalan parameter MQTT ialah rentetan yang dilampirkan pada nama topik (topik) apabila menerbitkan dan melanggan broker MQTT. untuk memasang Awalan MQTT untuk pengawal anda, anda hanya perlu memasukkannya dalam medan input "Awalan Topik MQTT"("Awalan topik MQTT"). Awalan sentiasa bermula dengan garis miring ("/")! Jika anda tidak memasukkan garis miring dalam medan input, ia akan ditambah secara automatik. Anda tidak boleh menggunakan simbol dalam awalan "#" ΠΈ "+". Tiada sekatan lain.

Contohnya, jika anda menerbitkan parameter "terkini" (atau melanggannya) dan awalan anda ditetapkan kepada "/mengerikan/", maka parameter ini akan diterbitkan pada broker di bawah nama "/shiotiny/status" Jika anda mempunyai awalan kosong, maka semua parameter pada broker akan bermula dengan garis miring ("/"): "terkini"akan diterbitkan sebagai"/status'.

Jadi, kami percaya anda telah mendaftar untuk Broker MQTT dan menerima log masuk, kata laluan dan port. Kemudian anda memasukkan parameter ini pada tab Rangkaian, bab Sambungan MQTT ke pelayan pengawal ShioTiny.

Kami menganggap bahawa awalan ditetapkan kepada "/bilik/'.

Mari mulakan dengan menerbitkan status semua parameter utama: geganti Realay1, keadaan pensuisan manual, keadaan pensuisan automatik dan akhirnya tahap ambang dan kelembapan semasa. Nah, bonus adalah suhu di dalam bilik. Bagaimana untuk melakukan ini, lihat angka itu.

ShioTiny: pengudaraan bilik basah (contoh projek)

Seperti yang anda lihat, perbezaan dari versi sebelumnya hanyalah nod "MQTT Publish" Dengan mengambil kira awalan, parameter berikut diterbitkan:
ShioTiny: pengudaraan bilik basah (contoh projek)

Seperti yang anda lihat, kami mempunyai keseluruhan keadaan sistem di tapak tangan kami!

Tetapi kita bukan sahaja mahu melihat, tetapi juga untuk mengawal. Apa patut saya buat? Sangat ringkas. Kami akan menolak untuk menetapkan tahap kelembapan ambang menggunakan ADC dan perintang berubah-ubah dan kami akan menetapkan tahap kelembapan ambang ini mengikut MQTT terus dari telefon pintar anda!

ShioTiny: pengudaraan bilik basah (contoh projek)

Kami mengeluarkan nod ADC daripada litar dan memasukkan tiga nod baharu di sana: kedai FLASH, Pemulihan FLASH ΠΈ MQTT menerangkan.

Fungsi nod MQTT menerangkan jelas: ia menerima parameter /bilik/trigHset (paras kelembapan ambang) s Broker MQTT. Tetapi apa yang dilakukannya dengan data seterusnya? Hanya berikan mereka kepada nod kedai FLASH, yang seterusnya menyimpan data ini dalam memori tidak meruap di bawah nama trigH. Selepas ini, nod Pemulihan FLASH membaca data daripada memori tidak meruap di bawah nama trigH dan kita sudah tahu apa yang berlaku seterusnya.

Mengapa kesukaran sedemikian? Mengapakah data yang diterima tidak boleh dihantar segera ke input pembanding?

Seperti yang dikatakan oleh Komrad S. Holmes - ia adalah asas! Tiada siapa yang menjamin bahawa selepas menghidupkan peranti anda, peranti itu akan bergabung Broker MQTT. Dan kelembapan perlu diukur. Dan kipas mesti dihidupkan. Tetapi tanpa maklumat tentang tahap kelembapan ambang, ini adalah mustahil! Oleh itu, apabila dihidupkan, peranti kami mendapatkan semula tahap kelembapan ambang yang disimpan sebelum ini daripada memori tidak meruap dan menggunakannya untuk membuat keputusan. Dan apabila sambungan diwujudkan dengan Broker MQTT dan seseorang akan menyiarkan nilai baharu /bilik/trigHset, maka nilai baharu ini akan digunakan.

Kemudian anda boleh membuat apa sahaja yang anda mahu. Sebagai contoh, sebagai tambahan kepada kelembapan, juga memperkenalkan perakaunan suhu. Atau tambahkan kawalan pencahayaan "pintar" (kami masih mempunyai dua geganti dan dua input yang tidak digunakan). Semua di tangan anda!

Kesimpulan

Oleh itu, kami melihat beberapa contoh pelaksanaan pengawal yang pada asasnya mudah berdasarkan ShIoTiny. Mungkin ini akan berguna kepada seseorang.

Seperti biasa, cadangan, hasrat, soalan, kesilapan menaip, dsb. - melalui e-mel: [e-mel dilindungi]

Sumber: www.habr.com

Tambah komen