Sistem penyiraman otomatis pabrik lainnya menggunakan ESP8266 dan Blynk

Suatu ketika, ketika saya bersantai dengan teman-teman di kemah mahasiswa di MEPhI, salah satu dari mereka mengatakan kepada saya bahwa dia baru-baru ini memutuskan untuk mencoba menanam stroberi di sebidang tanah. Saya membeli pot, menggali tanah di suatu tempat, dan membawa selang air. Dan semua akan baik-baik saja, pemiliknya tidur - stroberi tumbuh, tetapi mereka hanya harus pergi ke negara itu secara stabil seminggu sekali atau bahkan lebih sering agar tanaman tidak mengering tanpa air.

Teringat sepasang Arduino yang tergeletak di dalam laci, serta keinginan lama untuk mencapai sesuatu yang lebih dari sekadar LED yang berkedip, saya segera memutuskan untuk mengambil tugas ini dan melakukan kali ini, jika mungkin, sampai akhir.



Sebagai antarmuka manajemen sistem, diputuskan untuk memberikan kontrol manual "dari tombol", serta menerapkan kontrol jarak jauh melalui Internet. Arduino Mega dipilih sebagai pengontrol kepala, karena perisai dengan layar LCD dan tombol-tombolnya mudah dihubungkan, dan ia juga memiliki cukup memori dan GPIO untuk tugas ini.

Skema umum sistem:



Untuk berinteraksi dengan jaringan global, motherboard ESP8266, yang secara aktif mendapatkan popularitas, dipilih. Pilihan protokol transfer data nirkabel adalah karena, selain biaya rendah modul Wi-Fi, dengan adanya router Wi-Fi yang terus-menerus ada di dacha pelanggan, yang menghindari menarik koneksi kabel di dalam rumah.

Terlepas dari kenyataan bahwa ESP8266 muncul di cakrawala komunitas DIY baru-baru ini, sumber daya pengembang pada chip ini sudah aktif berkembang di RuNet, di mana Anda selalu dapat mencari jawaban untuk pertanyaan Anda, menemukan contoh menghubungkan papan ESP tertentu atau meminta bantuan dengan masalah.

Perkiraan proyek


Untuk memantau kelembaban tanah saat ini, sensor standar dengan Ebay dipesan.

Untuk menampilkan dan memasukkan informasi, diputuskan untuk menggunakan pelindung Keypad LCD, yang merupakan modul elektronik dengan layar LCD dan 6 tombol yang terhubung ke satu input analog.

Sebagai alat kontrol untuk pasokan air, keran mekanis 12 volt dengan 2 kabel dipilih, yang penutup-pembukaannya dilakukan dengan mengubah tanda-tanda tegangan yang disediakan. Oleh karena itu, selain keran, modul relai 4-channel telah dipesan (dua relay mengubah polaritas yang disediakan, satu bertanggung jawab untuk memasok tegangan, satu lagi tersisa sebagai cadangan).

Sebagai ESP8266 di Ebay, versi paling sederhana dipesan - ESP-01. Hal utama adalah untuk mengingat bahwa ESP8266 ditenagai secara eksklusif dari 3,3 V, yang harus dijaga terlebih dahulu.

Daftar peralatan yang diperlukan:

  • Derek bermotor
  • Arduino mega
  • Modul WiFi (ESP8266)
  • Relay 4 saluran
  • Sensor kelembaban tanah
  • Layar LCD dengan tombol

Total biaya (tidak termasuk biaya semua yang diperlukan untuk penyolderan, perakitan, serta catu daya): $ 61,01. Kontribusi utama untuk biaya akhir sistem saya dibuat oleh derek bertenaga ($ 23,32) dan resmi Arduino Mega 2560 ($ 26,80).

Fungsionalitas sistem


Setelah sedikit refleksi, saya memutuskan bahwa sistem penyiraman otomatis harus dapat berfungsi dalam tiga mode berikut:

  • Manual ("dari tombol"). Dalam mode ini, pengguna memutuskan waktu mulai irigasi berdasarkan informasi yang diberikan kepadanya dari sensor kelembaban tanah atau berdasarkan pengalaman pribadi;
  • Mode terjadwal. Pengguna hanya menetapkan parameter irigasi sesuai dengan jadwal (frekuensi, durasi), setelah itu sistem itu sendiri mengairi sesuai dengan pengaturan yang dipilih;
  • Mode sensor. Penyiraman dilakukan secara otomatis ketika ambang kelembaban yang telah ditentukan tercapai. Pengguna hanya perlu mengatur nilai kelembaban ambang dan durasi penyiraman;
  • Remote (dari smartphone atau komputer). Ini mencakup kemampuan untuk mengontrol sistem dari jarak jauh menggunakan logika salah satu dari tiga mode yang tercantum di atas.

Sulit membayangkan implementasi fungsi seperti itu tanpa menu paling sederhana, navigasi yang akan dilakukan menggunakan tombol perisai LCD-Keypad. Anda dapat membaca tentang implementasi menu di Arduino, misalnya, di sini .

Blynk


Memikirkan implementasi kendali irigasi jarak jauh, saya menemukan proyek Blynk yang menarik, penggalangan dana untuk implementasi yang diluncurkan di Kickstarter pada 16 Januari 2015 .

Selama satu bulan, proyek tersebut mengumpulkan $ 49.235 dan bukan $ 10.000, yang tampaknya mencerminkan minat besar pada proyek-proyek semacam itu dari komunitas geek global.

Tujuan utama Blynk adalah menciptakan platform yang terjangkau untuk kontrol nirkabel perangkat elektronik buatan sendiri dari smartphone. Seperti yang direncanakan oleh penulis, akses Internet bukan prasyarat - Blynk Server dapat diunduh dan digunakan di jaringan rumah Anda, setelah menerima otonomi penuh di rumah Anda.

Daftar lengkap platform yang didukung (di antaranya, tentu saja, adalah Arduino, Raspberry PI dan Intel Edison), di mana Blynk direncanakan akan diangkut, ada di sini .

Secara skematis, prinsip operasi Blynk disajikan dalam gambar berikut:

gambar

Dalam daftar fitur antarmuka program untuk ponsel cerdas untuk mengendalikan perangkat jarak jauh dan menampilkan informasi yang diterima darinya, berbagai elemen ("widget") diumumkan. Kami memilih yang utama:

  • Tombol
  • Bilah geser
  • Joystick monoaxial dan biaksial;
  • Manajemen menggunakan giroskop dan akselerometer telepon;
  • Berbagai macam tombol kontrol;
  • Bagan
  • Indikator panah;
  • Pemberitahuan munculan.

Daftar lengkap item dapat ditemukan di halaman proyek Blynk di Kickstarter.

Perlu dicatat bahwa proyek ini dalam tahap pengembangan aktif, oleh karena itu, tidak semua fungsi yang dinyatakan oleh pengembang telah dilaksanakan sejauh ini. Namun, menurut mereka, ini hanya masalah waktu saja. Fungsi yang tersedia untuk proyek kami sudah cukup.

Implementasi teknis


Diagram skematis perangkat:



Seperti dapat dilihat dari diagram yang disajikan, pertukaran informasi antara Arduino dan ESP8266 akan dilakukan melalui UART. Agar tidak mengalami masalah saat menginstal controller, kami menghubungkan modul Wi-Fi ke kontak D2, D3, mengatur UART perangkat keras (Serial3) pada kaki-kaki ini dan mengatur kecepatan ke 11520 baud.

Pembaca yang penuh perhatian harus memiliki pertanyaan logis - bagaimana Arduino didukung oleh logika 5-volt dan ESP8266 3.3-volt berkomunikasi? Setelah mempelajari masalah ini di Internet, saya sampai pada kesimpulan bahwa mayoritas tidak benar-benar mementingkan masalah ini (seperti yang ternyata kemudian - tidak sia-sia) dengan langsung menghubungkan kaki yang sesuai dari dua papan ini. Hanya beberapa artikel yang menyarankan penggunaan pembagi tegangan paling sederhana, atau konverter yang dirancang khusus. Secara alami, saya tidak memiliki konverter, jadi pada awalnya suatu upaya dilakukan untuk mengimplementasikan komunikasi menggunakan pembagi, tetapi itu tidak mengarah ke hasil apa pun, dan saya bergabung dengan serangkaian masalah penutup mata yang disebutkan sebelumnya (manfaatnya bekerja tanpa koordinasi level logis) .

Beberapa kata tentang kekuatan ESP8266


Seperti yang telah disebutkan dalam banyak tutorial, untuk operasi normal ESP Anda memerlukan catu daya yang stabil di kisaran 3,0-3,6 volt. Untuk melakukan ini, Anda dapat menggunakan berbagai konverter linier, misalnya, AMS1117 3.3 populer saat ini. The Datasheet AMS1117 menunjukkan bahwa tegangan input mungkin sampai 15 V. Namun, untuk operasi yang stabil dari arus keluaran dari modus sekitar 1 A dianjurkan untuk menurunkan tegangan input (dalam praktek cukup 5-6 V). Dari pengalaman saya sendiri, saya akan mengatakan bahwa ketika konverter terhubung ke sumber 12 V, AMS mulai memanaskan secara aktif, yang dengan cepat menyebabkan penurunan tegangan output dan, sebagai hasilnya, reboot ESP8266.

Konfigurasikan ESP8266


Interaksi Arduino dan ESP8266 saat menggunakan Blynk dapat diimplementasikan dalam dua cara berbeda:

  • «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
  • ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).

Kedua opsi memiliki pro dan kontra, tetapi opsi pertama lebih mudah karena tidak perlu bekerja dengan dua program dan terus-menerus memantau kompatibilitas kedua perangkat.

Untuk mengontrol menggunakan Blynk, Anda harus dapat mengunggah firmware yang diinginkan ke ESP8266. Dalam kasus kami, versi AT firmware v0.22 SDK v1.0.0 akan digunakan .

Untuk mem-flash papan ESP8266, Anda memerlukan konverter USB-TTL (misalnya, satu ), namun, Anda juga dapat menggunakan Arduino dengan menutup kaki RST dan GND di atasnya dan menghubungkan modul RX Wi-Fi ke kaki RX Arduino, mirip dengan TX ke TX. Selanjutnya, masukkan ESP8266 ke mode flashing (untuk melakukan ini, tutup output GPIO0 ke ground), dan menggunakan utilitas XTCom Util, isi firmware, seperti dijelaskan di sini. Tetap hanya untuk meningkatkan kecepatan UART menjadi 115200 baud dengan perintah AT AT + UART_DEF = 115200,8,1,0,0, setelah itu konfigurasi modul Wi-Fi akan selesai.

Sketsa untuk Arduino


Perpustakaan utama untuk bekerja dengan Blynk di bawah Arduino IDE adalah perpustakaan BlynkSimpleEsp8266.h. Pertimbangkan fungsi utamanya.

1) Blynk.begin (auth, "ssid", "pass")
Seperti yang mungkin sudah Anda duga, fungsi tersebut menerima parameter untuk menghubungkan ke titik Wi-Fi - SSID dan kata sandinya, serta token autent dari perangkat kami untuk terhubung ke server Blynk.

Penting! Proses menghubungkan ke server Blynk dimulai hanya setelah salah satu dari fungsi berikut dipanggil dalam program untuk pertama kalinya: Blynk.run () atau Blynk.connect ().

Untuk memutuskan / terhubung ke server Blynk, fungsi Blynk.disconnect () dan Blynk.connect () digunakan, mengembalikan hasilnya dalam tipe boolean. Untuk membuat koneksi (batas waktu dalam detik), Blynk.connect digunakan (secara default, batas waktu diatur ke 30 detik).

2) Blynk.run ()
Fungsi utama untuk menyinkronkan perangkat dengan server Blynk dan menerima perintah dari telepon pintar. Biasa digunakan dalam satu lingkaran. Selain itu, fungsi ini memungkinkan Anda untuk mengontrol input dan output papan ESP (dalam mode "Standalone") tanpa menggunakan fungsi seperti digitalRead, digitalWrite, analogRead, analogWrite di mana saja dalam kode. Cukup menambahkan elemen yang diperlukan ke layar kontrol dalam aplikasi pada smartphone dan menghubungkannya dengan GPIO ESP8266 yang diperlukan.

3) Bekerja dengan kontak virtual ("Pin Virtual")
Salah satu fitur Blynk adalah penggunaan kontak virtual. Istilah ini mengacu pada saluran logis untuk mentransmisikan berbagai informasi antara aplikasi seluler dan perangkat, baik itu variabel Boolean, nilai numerik (bilangan bulat atau panjang) atau data teks sebagai string. Kontak virtual tidak memiliki koneksi langsung dengan terminal perangkat dan digunakan terutama untuk interaksi dengan perpustakaan modul periferal (LCD, servos, dll.) Atau antarmuka aplikasi seluler.

Dalam kode sketsa, memproses panggilan ke kontak virtual dengan nomor n terjadi menggunakan blok BLYNK_READ (Vn) {...} dan BLYNK_WRITE (Vn) {...}. Di dalam kurung keriting, kode pemrosesan untuk mengakses kontak virtual ditunjukkan. Misalnya, jika widget aplikasi meminta nilai kelembaban tanah untuk tampilan virtual No. 2 untuk ditampilkan sebagai grafik, maka kita perlu menulis sesuatu seperti ini di sketsa:

BLYNK_READ(V2)
{
//     ,    humidity:
  Blynk.virtualWrite(2, humidity);
}

Demikian pula, Anda dapat mempertimbangkan parameter yang dikirim, misalnya, melalui kontak virtual No. 9 dari pengguna aplikasi Blynk:

BLYNK_WRITE(V9)
{
//      x:
int x = param.asInt();
}

Ini menggunakan konversi variabel input ke nilai integer menggunakan param.asInt (). Konversi param.asStr () dan param.asDouble () juga diperbolehkan.

Penting! Prosedur BLYNK_READ / BLYNK_WRITE harus dijalankan secepat mungkin sehingga perangkat dapat mengatur untuk memproses semua permintaan dari aplikasi. Oleh karena itu, sangat disarankan untuk menggunakan fungsi sllep / delay di dalam rutinitas tersebut.

Informasi lebih rinci tentang fungsi Blynk dapat ditemukan di halaman github pengembang di folder contoh atau di halaman dokumen .

Sekarang, dengan bekal pengetahuan, mari kembali ke autowatering dan menulis sketsa. Kami akan memberikan kemungkinan berikut untuk aplikasi seluler untuk berinteraksi dengan sistem:

  • Pilihan mode operasi sistem: manual, berdasarkan sensor, berdasarkan jadwal;
  • Tampilan kelembaban tanah yang diterima dari sistem dan keluaran data historis;
  • Pertukaran informasi melalui elemen aplikasi terminal.

Saya mencoba mengomentari setiap bagian kode yang bertanggung jawab untuk fungsi tertentu dari sistem, jadi kami tidak akan membahas kode program secara terperinci. Saya hanya mencatat bahwa untuk kemudahan penggunaan, semua pengaturan yang dibuat oleh pengguna dicatat dalam memori Arduino yang tidak mudah menguap (EEPROM).

Sketsa dapat diunduh di GitHub.

Menyiapkan aplikasi seluler Blynk


Langkah terakhir ditinggalkan - mengatur aplikasi seluler. Dalam kasus saya, elemen-elemen berikut akan digunakan:

  • 4 indikator LED (Pin Virtual 1, 29, 30, 31);
  • 2 tombol (Pin Virtual 2, 3);
  • Terminal untuk pertukaran informasi (Virtual Pin 4);
  • Indikator numerik "Tampilan Nilai" (Virtual Pin 8);
  • Grafik dengan kemampuan untuk menampilkan data historis "Grafik Sejarah" (Virtual Pin 8);
  • Widget untuk mengaktifkan pekerjaan dengan surat ("Email");
  • Widget untuk mengaktifkan notifikasi pop-up ("Push").

Setelah menginstal aplikasi seluler Blynk , Anda harus mendaftar dan memilih perangkat yang ingin Anda kelola (dalam kasus kami, itu adalah ESP8266). Lebih lanjut, agar tidak hilang, kami mengirimkan sendiri token auth unik, yang digunakan dalam sketsa untuk otentikasi pada server Blynk. Di bawah ini adalah screenshot yang menggambarkan pengaturan aplikasi.

Buat proyek baru


Di jendela yang terbuka dari proyek yang dibuat di sudut kanan atas ada 3 tombol: pengaturan proyek global, menambahkan elemen (widget) ke formulir dan meluncurkan:

Formulir kosong untuk proyek baru


Tetap menambahkan kontrol ke formulir aplikasi dan mengonfigurasinya. Beberapa widget yang tersedia pada saat penulisan disajikan di bawah ini:

Daftar widget untuk ditambahkan ke formulir aplikasi


Untuk mengontrol operasi sistem, tambahkan 2 tombol ke formulir: satu akan bertanggung jawab untuk memilih mode operasi, yang kedua - untuk memulai irigasi dalam mode manual. Status sistem saat ini akan disusun menggunakan empat indikator LED. Satu indikator akan menyala selama irigasi, tiga lainnya diperlukan untuk menampilkan mode saat ini.

Tetap memilih warna elemen, menambahkan teks dan mengikatnya ke kontak virtual yang diinginkan.

Mengkonfigurasi indikator dan tombol LED


Untuk menampilkan dinamika kelembaban tanah, tambahkan ke bentuk grafik dengan kemampuan untuk menampilkan data historis ("Grafik Sejarah"). Kami akan menampilkan nilai kelembaban saat ini pada tampilan digital ("Value Display").

Tambahkan Grafik Sejarah dan Elemen Tampilan Nilai


Untuk kenyamanan konfigurasi parameter sistem jarak jauh, serta memperoleh informasi yang lebih lengkap tentang keadaan saat ini, kami menambahkan terminal ke aplikasi. Dan untuk menerima notifikasi melalui email dan telepon, Anda juga harus menempatkan elemen "Push" dan "Email" pada formulir.

Tambahkan Terminal, Push dan Elemen Email


Tetap menempatkan pada semua widget yang dijelaskan di atas dan kita akan mendapatkan sesuatu seperti ini:



Hasil


Di bawah ini adalah beberapa foto dari sistem dalam keadaan saat ini dan video dari pekerjaan autowatering dan Blynk.
Saya akan segera memesan bahwa saya tidak menghubungkan keran mekanis di apartemen dan memasok air ke pot bunga, dan tidak ada kebutuhan mendesak - pada saat menguji sistem, proses penyiraman (ketika keran dibuka) berhasil ditiru oleh istri saya dan kaleng penyiraman normal.

Foto No. 1:



Foto No. 2:



Video:



Alih-alih sebuah kesimpulan


Meringkas pembuatan sistem penyiraman otomatis menggunakan Blynk, kita dapat mengatakan yang berikut:

1. Dengan sendirinya, layanan Blynk adalah alat yang sangat mudah dan mudah dipelajari sehingga, berkat banyaknya papan dan perangkat yang didukung, dapat dengan mudah diintegrasikan ke dalam hampir semua perangkat. Bersama dengan harga rendah dari modul Wi-Fi ESP8266, keunggulan ini memungkinkan Anda untuk menambahkan kontrol jarak jauh ke proyek tertentu dengan sedikit usaha.
Kerugian menggunakan solusi seperti itu, tentu saja, adalah kurang fleksibel dalam menyesuaikan sistem untuk diri sendiri dan ketergantungan pada pengembang aplikasi, yang, bagaimanapun, tidak sedikit pun mengurangi manfaatnya ketika digunakan dalam proyek DIY kecil.

2. Dua kelemahan utama dari penerapan sistem irigasi otomatis di atas adalah biaya dan rendahnya kualitas sensor kelembaban tanah yang digunakan.

Kerugian pertama disebabkan, seperti yang disebutkan di atas, oleh tingginya biaya keran elektromagnetik dan papan Arduino Mega resmi. Namun, ini dapat dikurangi secara signifikan dengan menggunakan, misalnya, Arduino-analog atau dengan menerapkan seluruh bagian elektronik pada MK lain yang sesuai. Sayangnya, crane tidak dapat ditemukan lebih murah, dan ini bukan tujuan saya.
Sedangkan untuk sensor kelembaban, untuk meningkatkan masa pakai dan mengurangi produk-produk elektrolisis di antara kontaknya, pertama-tama, perlu untuk menerapkan tegangan hanya sebelum mengukur kelembaban (yang diterapkan dalam sistem saya), dan kedua, lebih baik untuk mengganti itu baik pada batang grafit, atau menggunakan kontak stainless steel.

Dalam waktu dekat ini direncanakan untuk merakit bagian elektronik bersama-sama dan meletakkannya di beberapa bangunan yang layak dan, saya harap, akhirnya menginstal semua yang ada di negara ini.

Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id388589/


All Articles