Poin-poin penting atau tentang artikel ini
Kami melanjutkan serangkaian artikel tentang
ShIoTiny - pengontrol yang dapat diprogram secara visual berdasarkan chip
ESP8266 .
Artikel ini menjelaskan contoh proyek kontrol ventilasi di kamar mandi atau ruang lembab lainnya tentang cara membuat program untuk
ShIoTiny .
Artikel sebelumnya dalam seri.
ShIoTiny: otomatisasi kecil, Internet, atau "enam bulan sebelum liburan"ShIoTiny: node, tautan, dan acara atau fitur program menggambarReferensi
Situs Proyek ShIoTinyFirmware biner, sirkuit pengontrol, dan dokumentasiInstruksi dan deskripsi nodeMenyiapkan broker MQTT cloudmqtt.comPanel kontrol dasbor MQTT untuk AndroidPendahuluan
Tidak ada pemahaman di luar pengalaman. Ini adalah kebenaran yang diuji oleh waktu dan generasi. Oleh karena itu, tidak ada yang lebih baik untuk mempelajari keterampilan praktis daripada mencoba melakukan sesuatu sendiri. Dan contoh-contoh yang menunjukkan apa yang bisa dilakukan dan apa yang tidak patut dicoba, akan berguna. Kesalahan orang lain, tentu saja, tidak dapat mencegah terjadinya kesalahan mereka sendiri, tetapi dapat membantu mengurangi jumlah kesalahan yang terakhir.
Pertanyaan dan surat dari para pembaca artikel sebelumnya mengilhami saya untuk membuat proyek kecil, contoh kontrol ventilasi, untuk menunjukkan bagaimana simpul ShIoTiny bekerja.
Gagasan awal, atas dasar di mana kontroler
ShIoTiny muncul - stasiun
pompa dan irigasi - jauh dari cocok untuk semua orang dan akan menarik. Karena itu, saya mengambil contoh bagi semua orang sistem kontrol ventilasi yang dapat dipahami dan bermanfaat.
Saya
akan mengatakan bahwa ide proyek itu bukan milik saya, tetapi
saya mendapatkannya dari sini dan kemudian mengadaptasinya ke
ShIoTiny .
Pertama mengerti apa yang Anda inginkan
Proses budidaya tidak ada habisnya. Dan properti inilah yang menghancurkan banyak ide dan proyek bagus. Pengembang, bukannya merilis, jika bukan yang ideal, tetapi hal yang bekerja, terus memperbaikinya. Dan dia menyempurnakannya sampai para pesaingnya mengelak, melepaskan, jika bukan yang ideal (dan seringkali terus terang celaka), tetapi solusi yang berhasil.
Oleh karena itu, sangat penting untuk mengetahui di mana harus mengakhiri proyek. Atau, dengan kata lain, perlu untuk menentukan apa yang ingin kita dapatkan di akhir proyek dari apa yang kita miliki di awal. Di Rusia, untuk dokumen yang disusun hanya untuk menggambarkan cara membuat sesuatu, ada kata "rencana" yang pendek dan luas, yang para penerjemah dan manajer yang cacat mental baru-baru ini mulai memanggil "peta jalan" karena suatu alasan. Ya Tuhan memberkati mereka.
Rencana kami akan seperti itu. Misalkan ada ruangan di mana kelembaban kadang-kadang dapat meningkat secara dramatis. Misalnya, seperti kamar mandi atau dapur. Kelembaban adalah hal yang tidak menyenangkan dan cara mengatasinya sama tuanya dengan dunia: ventilasi ruangan. Ada beberapa metode penayangan. Tapi kami, mungkin, akan menolak cara-cara eksotis dan kuno seperti orang kulit hitam dengan jaring dan berhenti di kipas biasa. Penggemar lebih murah, dan menemukannya di daerah kami lebih mudah.
Singkatnya, kami ingin mengontrol kipas: nyalakan dan matikan masing-masing. Lebih tepatnya, kami ingin dihidupkan dan dimatikan saat diperlukan.
Tetap menentukan: dalam kondisi apa kipas dihidupkan dan dalam kondisi apa - matikan.
Semuanya terlihat jelas di sini: jika kelembaban di atas batas yang telah ditentukan, kipas menyala dan menarik udara; kelembaban telah kembali normal - kipas mati.
Pembaca yang penuh perhatian akan segera menangkap kata "diberikan". Siapa yang diberikan? Bagaimana preset?
Ada beberapa cara untuk mengatur kelembaban ambang. Kami akan mempertimbangkan dua di antaranya: yang pertama - dengan bantuan resistensi variabel dan yang kedua - melalui jaringan melalui protokol MQTT. Masing-masing metode ini memiliki kelebihan dan kekurangan, yang akan dibahas nanti.
Bagi mereka yang tidak mengerti, saya akan menjelaskan bahwa "ambang batas kelembaban" adalah tingkat kelembapan, melebihi yang membutuhkan masuknya kipas.
Pertanyaan selanjutnya adalah apakah memberi pengguna hak untuk menyalakan kipas secara langsung? Artinya, terlepas dari tingkat kelembaban, dengan satu sentuhan tombol? Kami akan menyediakan kesempatan seperti itu. Bagaimanapun, kipas mungkin diperlukan tidak hanya dengan kelembaban tinggi, tetapi juga untuk mengeluarkan dari ruangan, misalnya, bau yang tidak menyenangkan, yang populer disebut "bau".
Jadi, kami mengerti apa yang kami inginkan dan bahkan sedikit cara kerjanya. Kami mendaftar secara singkat semua fungsi sistem kontrol ventilasi kami:
- mengatur tingkat kelembaban ambang (dua opsi);
- pengukuran kelembaban;
- pemasukan otomatis kipas;
- shutdown otomatis dari kipas;
- pemasukan kipas secara manual (dengan satu sentuhan tombol).
Jadi, rencananya jelas. Penting untuk mengimplementasikan semua fungsi di atas dalam program kami. Atas dasar "rencana" ini kami akan bertindak. Untuk memulai, gambarkan diagram blok perangkat.
Diagram blok perangkat
Secara umum, kita akan memiliki dua skema seperti itu. Yang pertama adalah untuk opsi di mana tingkat kelembaban ambang batas diatur oleh variabel resistensi. Skema kedua adalah untuk opsi di mana tingkat kelembaban ambang batas diatur melalui jaringan melalui protokol MQTT.
Tetapi karena sirkuit ini akan berbeda hanya dengan satu elemen - resistor variabel "mengatur tingkat kelembaban ambang", maka kita hanya akan menggambar satu diagram struktural. Tentu saja, skema struktural menurut GOST terlihat berbeda. Tapi kami fokus bukan pada insinyur bison, tetapi pada generasi muda. Karena itu, visibilitas lebih penting.

Jadi apa yang kita lihat dalam gambar? Kipas terhubung ke relai
Relay1 pada pengontrol
ShIoTiny . Saya menarik perhatian Anda pada fakta bahwa kipas adalah alat yang hidup di bawah tegangan tinggi. Karena itu, jika ada yang akan melakukan ini sendiri - berhati-hatilah. Itu, setidaknya, sebelum menjulurkan jari Anda atau alat ukur ke sirkuit - lepaskan setidaknya kipas. Dan poin kedua. Jika kipas Anda lebih kuat dari
250W , maka Anda tidak
harus menghubungkannya langsung ke
ShIoTiny - hanya melalui starter.
Kami menemukan kipas. Sekarang tombol "manual menyala" dari kipas. Terhubung ke input
Input1 . Tidak ada lagi yang bisa dijelaskan.
Sensor suhu dan kelembaban
DHT-11 (atau
DHT-22 atau analognya). Untuk menghubungkannya, input khusus disediakan pada pengontrol
ShIoTiny . Seperti yang Anda lihat pada gambar, menghubungkan sensor seperti itu juga tidak menimbulkan masalah.
Dan akhirnya, resistensi variabel yang menetapkan tingkat kelembaban ambang batas. Lebih tepatnya, pembagi yang terdiri dari resistensi variabel dan konstan. Tidak ada masalah dengan koneksinya, tetapi saya akan menjelaskan bahwa ADC
bawaan pada
ESP8266 dirancang untuk maksimum 1 volt. Oleh karena itu, pembagi tegangan diperlukan sekitar 5 kali.
Dan sekali lagi saya mengingatkan Anda bahwa pembagi ini tidak diperlukan jika tingkat kelembaban ambang diatur melalui jaringan menggunakan protokol MQTT.
Kami akan mulai menyusun algoritma perangkat di editor ElDraw ShIoTiny. Cara menuju ke sana, di editor ini, Anda dapat membaca di artikel sebelumnya atau di instruksi, tautan yang ada di awal artikel.
Opsi satu, yang paling sederhana
Mari kita mulai dengan yang sederhana: nyalakan relai
Relay1 ketika tingkat kelembaban ambang terlampaui untuk waktu tertentu.

Seperti yang Anda lihat, tidak ada yang rumit: hanya empat node, tidak termasuk node komentar.
DHT11 sebenarnya adalah sensor suhu dan kelembaban (dapat diubah menjadi
DHT22 ).
Konstanta CONST adalah tingkat kelembaban ambang batas, dalam persen.
Comparator - node yang membandingkan dua angka dan mengatur output 1 jika kondisi yang ditentukan terpenuhi dan 0 jika kondisi tidak terpenuhi.
Dalam kasus kami, kondisi ini adalah
A> B , di mana
A adalah tingkat kelembaban yang diukur oleh sensor, dan
B adalah tingkat ambang dari kelembaban yang sama.
Segera setelah tingkat kelembaban yang diukur (
A ) melebihi ambang batas tingkat kelembaban (
B ), 1 akan segera muncul pada output komparator
A> B dan relai akan menyala. Sebaliknya, segera setelah tingkat kelembaban kembali ke normal (yaitu,
A <= B ), segera pada output komparator
A> B, 0 akan muncul dan relai akan mati.
Apakah semuanya jelas? Untuk siapa tidak begitu - baca lagi atau lihat deskripsi operasi dari node dalam instruksi.
Saya perhatikan bahwa data dari sensor
DHT11 diperbarui sekitar sekali setiap 10 detik. Oleh karena itu, relai tidak dapat dihidupkan dan dimatikan lebih sering dari sekali setiap 10 detik.
Semuanya akan baik-baik saja, tetapi kami ingin mengatur tingkat kelembaban ambang menggunakan resistor variabel. Tidak ada yang lebih mudah!

Cukup ganti node konstan dengan node ADC. Bagaimanapun, itu ke ADC bahwa kita menghubungkan pembagi tegangan dengan resistor variabel.
Tegangan pada input ADC bervariasi dari 0 hingga 1 Volt. Tetapi kelembaban pada output sensor - bervariasi dari 0 hingga 100%. Bagaimana kita membandingkannya? Semuanya sederhana. Node ADC di
ShIoTiny tidak hanya mengukur tegangan input, tetapi juga tahu bagaimana mengatur
skala dan menggesernya .
Yaitu, pada output dari simpul ADC1 (ADC) akan ada nilai
X yang dihitung oleh rumus
dimana
- tegangan pada input ADC (dari 0 ke 1V);
k - range (range ADC) dan
b- offset (offset ADC). Dengan demikian, jika Anda mengatur
k = 100 dan
b = 0 , maka ketika berubah
dalam kisaran dari 0 hingga 1, nilai
X pada output unit ADC akan bervariasi dalam kisaran dari 0 hingga 100. Artinya, secara numerik sama dengan kisaran perubahan kelembaban dari 0 hingga 100%.
Atau, sederhananya, dengan memutar mesin resistensi variabel, Anda dapat mengatur tingkat kelembaban ambang dari 0 hingga 100. Satu-satunya ketidaknyamanan adalah bahwa tidak ada perangkat layar. Tetapi dalam prakteknya, jika mesin variabel perlawanan membuat 6 divisi 0%, 20%, 40%, 60%, 80%, 100%), maka ini cukup untuk mengatur tingkat kelembaban ambang batas.
Bagaimana kita mengatur koefisien
k - range (rentang ADC) dan
b- offset (offset ADC)? Ya, ini lebih mudah daripada lobak kukus! Klik dengan pointer mouse di simpul
ADC1 dan segera Anda akan melihat jendela pengaturan. Di dalamnya Anda dapat mengatur semua yang Anda butuhkan. Untuk kasus kami, itu akan menjadi jendela seperti itu, seperti pada gambar.

Jadi, kami memiliki solusi kerja yang paling sederhana. Mari kita mulai memperbaikinya.
Omong-omong, solusi paling sederhana memiliki satu keunggulan - tidak memerlukan Internet. Ini sepenuhnya otonom.
Opsi dua, hubungkan tombol
Semuanya berfungsi dan semua orang senang. Tapi nasib buruk, kita tidak bisa menyalakan ventilasi dengan paksa. Kami telah sepakat bahwa sebuah tombol akan terhubung ke input
Input1 , yang akan menghidupkan dan mematikan kipas secara paksa, tidak memperhatikan sensor kelembaban.
Saatnya memproses tombol ini di program rangkaian kami.

Unit pemrosesan klik tombol disorot dalam garis oranye. Ini adalah penghitung klik tombol yang diatur ulang ke nol ketika nilai pada outputnya melebihi satu (garis hijau, keluaran
CT node).
Semuanya berfungsi di sini
sejelas sebelumnya: penghitung
CT menghitung klik tombol yang terhubung ke
Input1 . Artinya, nilai pada output penghitung ini meningkat sebesar 1 dengan setiap klik tombol.
Begitu nilai ini menjadi sama dengan dua (yaitu, lebih dari 1), segera pada output komparator
A> B muncul 1. Dan 1 ini akan mereset counter
CT ke nol. Ini berarti pembanding, yang lebih rendah sesuai dengan skema!
Dengan demikian, tombol kita memiliki dua status - 0 dan 1. Jika kita membutuhkan lebih banyak status (3 atau 4 atau bahkan lebih) - itu akan cukup bagi kita untuk mengubah konstanta
CONST dari satu ke nilai lainnya.
Jadi, kami memiliki dua kondisi untuk menyalakan kipas: melebihi tingkat kelembaban yang ditetapkan dan menekan tombol satu kali. Jika salah satu kondisi terpenuhi, kipas akan menyala. Dan itu akan bekerja sampai tombol ditekan lagi
DAN tingkat kelembaban kembali normal.
Anda dapat, tentu saja, semakin mempersulit algoritme, tetapi kami tidak akan melakukan ini - kami akan memberikan ruang kreativitas bagi mereka yang menginginkannya.
Opsi Tiga, sambungkan ke Internet
Semua yang kami jelaskan cukup fungsional. Tapi bagaimana dengan pamer? Lagipula, semua hiper-hacker-cracker jerawat akan menertawakan seseorang yang memutar pena dan menekan tombol, dan tidak mengontrolnya dari smartphone! Memutar pegangannya adalah "tidak modis". Tetapi untuk merangkak jari Anda di smartphone, menghapus jari ini ke dalam darah - ini dia, puncak keinginan dari hipster-hacker-cracker (saya tidak pernah bisa membedakan semuanya - jadi jika saya membuat kesalahan, saya minta maaf).
Tetapi kita akan merendahkan orang-orang ini. Tata kelola internet memiliki keunggulan nyata. Pertama-tama, ini visual. Ada banyak aplikasi untuk semua platform yang memungkinkan beberapa colekan untuk membuat panel kontrol yang dapat digunakan sepenuhnya untuk pengontrol Carlson kami. Kedua, ini adalah kesempatan untuk memantau dari jarak jauh kondisi kelembaban di dalam ruangan. Dan ketiga, Anda tidak hanya dapat melihat apa yang dilakukan kipas - berputar atau tidak, tetapi juga tingkat ambang batas kelembaban yang ditetapkan. Dan kemudian - kipas dihidupkan secara otomatis atau manual. Secara umum, apa pun yang Anda inginkan.
Tentu saja, untuk beberapa penggemar ada banyak kehormatan - begitu banyak perhatian. Tapi ini hanya sebuah contoh.
Jadi, untuk menghubungkan ke Internet kita akan menggunakan teknologi
MQTT dan protokol dengan nama yang sama.
Untuk menggunakan teknologi ini, kami membutuhkan
broker MQTT . Ini adalah server khusus yang melayani
klien MQTT , misalnya,
ShIoTIny dan ponsel cerdas Anda.
Inti dari teknologi
MQTT adalah bahwa setiap klien menerbitkan data sewenang-wenang dengan nama tertentu (disebut
topik dalam terminologi
MQTT ) pada broker MQTT (server). Pelanggan lain dapat berlangganan data sewenang-wenang dengan nama (
topik ) mereka dan menerima data yang baru diterbitkan. Yaitu, seluruh pertukaran data berdasarkan prinsip klien-pialang-klien.
Saya
tidak akan fokus pada detail. Ada banyak artikel dan tutorial di Internet tentang cara kerja
MQTT dan program apa saja yang tersedia untuk membuat panel kontrol. Saya hanya akan menunjukkan kepada Anda bagaimana menerima dan mempublikasikan data menggunakan
ShIoTiny .
Sebagai broker, saya menggunakan
www.cloudmqtt.com , tetapi prinsipnya sama di mana-mana.
Jadi, kami akan menganggap bahwa Anda telah terdaftar di
broker MQTT . Secara umum, broker akan memberi Anda (atau perlu menemukan) nama pengguna dan kata sandi (untuk otorisasi), serta port untuk koneksi.
Ada dua cara untuk menghubungkan
ShIoTiny ke
broker MQTT - koneksi reguler dan
TLS (
SSL ).
Semua parameter ini di
ShIoTiny dimasukkan pada tab
Networking , bagian
MQTT Connection ke server .

Jika
broker MQTT Anda tidak memerlukan otorisasi, jangan masukkan login dan kata sandi Anda (biarkan bidang ini kosong).
Parameter
awalan topik MQTT memerlukan penjelasan terpisah.
Awalan parameter MQTT adalah baris yang ditambahkan ke judul topik saat menerbitkan dan berlangganan broker MQTT. Untuk mengatur
awalan MQTT untuk pengontrol Anda, Anda hanya perlu memasukkannya di bidang input "
awalan topik MQTT " ("
awalan topik MQTT "). Awalan selalu dimulai dengan garis miring (
"/" )! Jika Anda tidak memasukkan garis miring di bidang input, itu akan ditambahkan secara otomatis. Karakter
"#" dan
"+" tidak dapat digunakan di awalan. Tidak ada batasan lain.
Misalnya, jika Anda menerbitkan parameter "
status " (atau berlangganannya), dan awalan Anda diatur ke "
/ shiotiny / ", maka pada broker parameter ini akan dipublikasikan dengan nama "
/ shiotiny / status ". Jika Anda memiliki set awalan kosong, maka semua parameter pada broker akan dimulai dengan garis miring (
“/” ): “
status ” akan dipublikasikan sebagai “
/ status ”.
Jadi, kami yakin Anda telah terdaftar di
broker MQTT dan menerima login, kata sandi, dan port Anda. Kemudian Anda mengatur parameter ini pada tab
Networking , bagian
MQTT Connection ke server dari pengontrol
ShIoTiny .
Kami percaya bahwa awalan diatur ke "
/ room / ".
Untuk memulainya, kami akan menerbitkan status semua parameter utama: Relay
realay1 , manual pada keadaan, otomatis pada keadaan dan, akhirnya, ambang batas dan tingkat kelembaban saat ini. Nah dan bonus - suhu di dalam ruangan. Cara melakukan ini, lihat gambar.

Seperti yang Anda lihat, perbedaan dari versi sebelumnya hanya node
MQTT Publish . Diberikan awalan, parameter berikut dipublikasikan:

Seperti yang Anda lihat, seluruh kondisi sistem dalam tampilan penuh!
Tapi kami ingin tidak hanya melihat, tetapi juga mengontrol. Bagaimana menjadi Sangat sederhana. Kami akan menolak untuk mengatur tingkat kelembaban ambang menggunakan
ADC dan variabel resistor dan kami akan mengatur tingkat kelembaban ambang ini dengan
MQTT langsung dari smartphone!

Kami menghapus simpul ADC dari rangkaian dan memasukkan tiga simpul baru di sana:
toko FLASH ,
pengembalian FLASH , dan
uraikan MQTT .
Fungsi
MQTT menggambarkan simpul sudah jelas: ia menerima
parameter / room / trigHset (tingkat kelembaban batas) dari
broker MQTT . Tapi apa yang dia lakukan dengan data selanjutnya? Ini hanya memberi mereka ke simpul
toko FLASH , yang, pada gilirannya, menyimpan data ini dalam memori non-volatile dengan nama
trigH . Setelah itu, simpul
pemulihan FLASH membaca data dengan nama
trigH dari memori non-volatile dan kita sudah tahu apa yang terjadi selanjutnya.
Mengapa kesulitan seperti itu? Mengapa saya tidak bisa langsung mengirim data yang diterima ke input pembanding?
Seperti yang dikatakan Kamerad S. Holmes,
ini dasar ! Tidak ada yang menjamin bahwa setelah menghidupkan perangkat Anda, itu akan bergabung dengan
broker MQTT . Dan kelembaban harus diukur. Dan kipas angin harus dihidupkan. Tetapi tanpa informasi tentang tingkat kelembaban ambang, ini tidak mungkin! Oleh karena itu, ketika dinyalakan, perangkat kami mengekstraksi tingkat kelembaban ambang yang tersimpan sebelumnya dari memori non-volatil dan menggunakannya untuk pengambilan keputusan. Dan ketika koneksi dengan
broker MQTT dibuat dan seseorang menerbitkan nilai
/ ruang / trigHset baru , maka nilai baru ini akan digunakan.
Maka Anda dapat menciptakan apa pun yang Anda inginkan. Misalnya, selain kelembaban, masukkan juga catatan suhu. Atau tambahkan kontrol pencahayaan "pintar" (kami masih meninggalkan dua relay dan dua input yang tidak digunakan). Semuanya ada di tangan Anda!
Kesimpulan
Jadi kami melihat beberapa contoh implementasi pengontrol esensi paling sederhana berdasarkan ShIoTiny. Mungkin itu akan bermanfaat bagi seseorang.
Seperti biasa, saran, keinginan, pertanyaan, kesalahan ketik, dll.,
Melalui email:
shiotiny@yandex.ru