25 KiB
Penyiraman tanaman otomatis
Sketchnote oleh Nitya Narasimhan. Klik gambar untuk versi yang lebih besar.
Pelajaran ini diajarkan sebagai bagian dari IoT untuk Pemula Proyek 2 - Seri Pertanian Digital dari Microsoft Reactor.
Kuis sebelum pelajaran
Pendahuluan
Pada pelajaran sebelumnya, Anda telah belajar cara memantau kelembapan tanah. Dalam pelajaran ini, Anda akan belajar cara membangun komponen inti dari sistem penyiraman otomatis yang merespons kelembapan tanah. Anda juga akan mempelajari tentang waktu - bagaimana sensor membutuhkan waktu untuk merespons perubahan, dan bagaimana aktuator membutuhkan waktu untuk mengubah properti yang diukur oleh sensor.
Dalam pelajaran ini kita akan membahas:
- Mengontrol perangkat berdaya tinggi dari perangkat IoT berdaya rendah
- Mengontrol relay
- Mengontrol tanaman Anda melalui MQTT
- Waktu sensor dan aktuator
- Menambahkan waktu ke server kontrol tanaman Anda
Mengontrol perangkat berdaya tinggi dari perangkat IoT berdaya rendah
Perangkat IoT menggunakan tegangan rendah. Meskipun ini cukup untuk sensor dan aktuator berdaya rendah seperti LED, tegangan ini terlalu rendah untuk mengontrol perangkat keras yang lebih besar, seperti pompa air yang digunakan untuk irigasi. Bahkan pompa kecil yang dapat digunakan untuk tanaman rumah membutuhkan arus terlalu besar untuk kit pengembangan IoT dan dapat merusak papan.
🎓 Arus, diukur dalam Ampere (A), adalah jumlah listrik yang bergerak melalui sirkuit. Tegangan memberikan dorongan, arus adalah seberapa banyak yang didorong. Anda dapat membaca lebih lanjut tentang arus di halaman arus listrik di Wikipedia.
Solusinya adalah menghubungkan pompa ke sumber daya eksternal, dan menggunakan aktuator untuk menyalakan pompa, mirip dengan cara Anda menyalakan lampu. Dibutuhkan sedikit daya (dalam bentuk energi dari tubuh Anda) untuk jari Anda membalikkan saklar, dan ini menghubungkan lampu ke listrik utama yang berjalan pada 110v/240v.
🎓 Listrik utama mengacu pada listrik yang disalurkan ke rumah dan bisnis melalui infrastruktur nasional di banyak bagian dunia.
✅ Perangkat IoT biasanya dapat menyediakan 3.3V atau 5V, dengan arus kurang dari 1 amp (1A). Bandingkan ini dengan listrik utama yang paling sering berada pada 230V (120V di Amerika Utara dan 100V di Jepang), dan dapat menyediakan daya untuk perangkat yang membutuhkan 30A.
Ada sejumlah aktuator yang dapat melakukan ini, termasuk perangkat mekanis yang dapat Anda pasang ke saklar yang ada untuk meniru jari yang menyalakannya. Yang paling populer adalah relay.
Relay
Relay adalah saklar elektromekanis yang mengubah sinyal listrik menjadi gerakan mekanis yang menyalakan saklar. Inti dari relay adalah elektromagnet.
🎓 Elektromagnet adalah magnet yang dibuat dengan mengalirkan listrik melalui kumparan kawat. Ketika listrik dinyalakan, kumparan menjadi magnet. Ketika listrik dimatikan, kumparan kehilangan sifat magnetnya.
Dalam relay, sirkuit kontrol memberi daya pada elektromagnet. Ketika elektromagnet menyala, ia menarik tuas yang menggerakkan saklar, menutup sepasang kontak dan menyelesaikan sirkuit keluaran.
Ketika sirkuit kontrol mati, elektromagnet mati, melepaskan tuas dan membuka kontak, mematikan sirkuit keluaran. Relay adalah aktuator digital - sinyal tinggi ke relay menyalakannya, sinyal rendah mematikannya.
Sirkuit keluaran dapat digunakan untuk memberi daya pada perangkat keras tambahan, seperti sistem irigasi. Perangkat IoT dapat menyalakan relay, menyelesaikan sirkuit keluaran yang memberi daya pada sistem irigasi, dan tanaman mendapatkan air. Perangkat IoT kemudian dapat mematikan relay, memutus daya ke sistem irigasi, mematikan air.
Dalam video di atas, relay dinyalakan. LED pada relay menyala untuk menunjukkan bahwa relay menyala (beberapa papan relay memiliki LED untuk menunjukkan apakah relay menyala atau mati), dan daya dikirim ke pompa, menyalakannya dan memompa air ke tanaman.
💁 Relay juga dapat digunakan untuk beralih antara dua sirkuit keluaran daripada menyalakan dan mematikan satu. Saat tuas bergerak, ia memindahkan saklar dari menyelesaikan satu sirkuit keluaran ke menyelesaikan sirkuit keluaran yang berbeda, biasanya berbagi koneksi daya umum, atau koneksi ground umum.
✅ Lakukan penelitian: Ada beberapa jenis relay, dengan perbedaan seperti apakah sirkuit kontrol menyalakan atau mematikan relay saat daya diterapkan, atau beberapa sirkuit keluaran. Cari tahu tentang jenis-jenis ini.
Saat tuas bergerak, Anda biasanya dapat mendengar suara klik yang jelas saat tuas membuat kontak dengan elektromagnet.
💁 Relay dapat dihubungkan sehingga membuat koneksi sebenarnya memutus daya ke relay, mematikan relay, yang kemudian mengirimkan daya ke relay menyalakannya kembali, dan seterusnya. Ini berarti relay akan berbunyi klik sangat cepat membuat suara berdengung. Ini adalah cara beberapa bel pintu listrik pertama bekerja.
Daya relay
Elektromagnet tidak membutuhkan banyak daya untuk mengaktifkan dan menarik tuas, ia dapat dikontrol menggunakan keluaran 3.3V atau 5V dari kit pengembangan IoT. Sirkuit keluaran dapat membawa daya yang jauh lebih besar, tergantung pada relay, termasuk tegangan utama atau bahkan tingkat daya yang lebih tinggi untuk penggunaan industri. Dengan cara ini, kit pengembangan IoT dapat mengontrol sistem irigasi, dari pompa kecil untuk satu tanaman, hingga sistem industri besar untuk seluruh pertanian komersial.
Gambar di atas menunjukkan relay Grove. Sirkuit kontrol terhubung ke perangkat IoT dan menyalakan atau mematikan relay menggunakan 3.3V atau 5V. Sirkuit keluaran memiliki dua terminal, salah satunya dapat menjadi daya atau ground. Sirkuit keluaran dapat menangani hingga 250V pada 10A, cukup untuk berbagai perangkat yang menggunakan daya utama. Anda dapat menemukan relay yang dapat menangani tingkat daya yang lebih tinggi.
Dalam gambar di atas, daya disuplai ke pompa melalui relay. Ada kabel merah yang menghubungkan terminal +5V dari catu daya USB ke salah satu terminal sirkuit keluaran relay, dan kabel merah lainnya menghubungkan terminal lain dari sirkuit keluaran ke pompa. Kabel hitam menghubungkan pompa ke ground pada catu daya USB. Ketika relay menyala, ia menyelesaikan sirkuit, mengirimkan 5V ke pompa, menyalakan pompa.
Mengontrol relay
Anda dapat mengontrol relay dari kit pengembangan IoT Anda.
Tugas - mengontrol relay
Ikuti panduan yang relevan untuk mengontrol relay menggunakan perangkat IoT Anda:
- Arduino - Wio Terminal
- Komputer papan tunggal - Raspberry Pi
- Komputer papan tunggal - Perangkat virtual
Mengontrol tanaman Anda melalui MQTT
Sejauh ini relay Anda dikontrol langsung oleh perangkat IoT berdasarkan satu pembacaan kelembapan tanah. Dalam sistem irigasi komersial, logika kontrol akan terpusat, memungkinkan pengambilan keputusan penyiraman menggunakan data dari beberapa sensor, dan memungkinkan konfigurasi apa pun diubah di satu tempat. Untuk mensimulasikan ini, Anda dapat mengontrol relay melalui MQTT.
Tugas - mengontrol relay melalui MQTT
-
Tambahkan pustaka/paket pip MQTT yang relevan dan kode ke proyek
soil-moisture-sensor
Anda untuk terhubung ke MQTT. Beri nama ID klien sebagaisoilmoisturesensor_client
dengan awalan ID Anda.⚠️ Anda dapat merujuk ke instruksi untuk terhubung ke MQTT di proyek 1, pelajaran 4 jika diperlukan.
-
Tambahkan kode perangkat yang relevan untuk mengirim telemetri dengan pengaturan kelembapan tanah. Untuk pesan telemetri, beri nama properti
soil_moisture
.⚠️ Anda dapat merujuk ke instruksi untuk mengirim telemetri ke MQTT di proyek 1, pelajaran 4 jika diperlukan.
-
Buat beberapa kode server lokal untuk berlangganan telemetri dan mengirim perintah untuk mengontrol relay dalam folder bernama
soil-moisture-sensor-server
. Beri nama properti dalam pesan perintah sebagairelay_on
, dan tetapkan ID klien sebagaisoilmoisturesensor_server
dengan awalan ID Anda. Pertahankan struktur yang sama seperti kode server yang Anda tulis untuk proyek 1, pelajaran 4 karena Anda akan menambahkan kode ini nanti dalam pelajaran ini.⚠️ Anda dapat merujuk ke instruksi untuk mengirim telemetri ke MQTT dan mengirim perintah melalui MQTT di proyek 1, pelajaran 4 jika diperlukan.
-
Tambahkan kode perangkat yang relevan untuk mengontrol relay dari perintah yang diterima, menggunakan properti
relay_on
dari pesan. Kirim true untukrelay_on
jikasoil_moisture
lebih besar dari 450, jika tidak kirim false, sama seperti logika yang Anda tambahkan untuk perangkat IoT sebelumnya.⚠️ Anda dapat merujuk ke instruksi untuk merespons perintah dari MQTT di proyek 1, pelajaran 4 jika diperlukan.
💁 Anda dapat menemukan kode ini di folder code-mqtt.
Pastikan kode berjalan di perangkat dan server lokal Anda, dan uji dengan mengubah tingkat kelembapan tanah, baik dengan mengubah nilai yang dikirim oleh sensor virtual, atau dengan mengubah tingkat kelembapan tanah dengan menambahkan air atau mengeluarkan sensor dari tanah.
Waktu sensor dan aktuator
Pada pelajaran 3, Anda membuat lampu malam - LED yang menyala segera setelah tingkat cahaya rendah terdeteksi oleh sensor cahaya. Sensor cahaya mendeteksi perubahan tingkat cahaya secara instan, dan perangkat dapat merespons dengan cepat, hanya dibatasi oleh panjang penundaan dalam fungsi loop
atau while True:
. Sebagai pengembang IoT, Anda tidak selalu dapat mengandalkan umpan balik yang begitu cepat.
Waktu untuk kelembapan tanah
Jika Anda melakukan pelajaran terakhir tentang kelembapan tanah menggunakan sensor fisik, Anda mungkin memperhatikan bahwa diperlukan beberapa detik untuk pembacaan kelembapan tanah turun setelah Anda menyiram tanaman Anda. Ini bukan karena sensor lambat, tetapi karena air membutuhkan waktu untuk meresap ke dalam tanah.
💁 Jika Anda menyiram terlalu dekat dengan sensor, Anda mungkin melihat pembacaan turun dengan cepat, lalu naik kembali - ini disebabkan oleh air di dekat sensor yang menyebar ke seluruh tanah lainnya, sehingga mengurangi kelembapan tanah di sekitar sensor.
Pada diagram di atas, pembacaan kelembapan tanah menunjukkan angka 658. Tanaman disiram, tetapi pembacaan ini tidak langsung berubah karena air belum mencapai sensor. Penyiraman bahkan bisa selesai sebelum air mencapai sensor dan nilai turun untuk mencerminkan tingkat kelembapan baru.
Jika Anda menulis kode untuk mengontrol sistem irigasi melalui relay berdasarkan tingkat kelembapan tanah, Anda perlu mempertimbangkan penundaan ini dan membangun pengaturan waktu yang lebih cerdas ke dalam perangkat IoT Anda.
✅ Luangkan waktu sejenak untuk memikirkan bagaimana Anda bisa melakukannya.
Mengontrol waktu sensor dan aktuator
Bayangkan Anda ditugaskan untuk membangun sistem irigasi untuk sebuah lahan pertanian. Berdasarkan jenis tanah, tingkat kelembapan tanah yang ideal untuk tanaman yang ditanam telah ditemukan sesuai dengan pembacaan tegangan analog sebesar 400-450.
Anda bisa memprogram perangkat dengan cara yang sama seperti lampu malam - selama sensor membaca di atas 450, nyalakan relay untuk menyalakan pompa. Masalahnya adalah air membutuhkan waktu untuk mengalir dari pompa, melalui tanah, hingga mencapai sensor. Sensor akan menghentikan air ketika mendeteksi tingkat 450, tetapi tingkat air akan terus turun karena air yang dipompa terus meresap ke dalam tanah. Hasil akhirnya adalah pemborosan air dan risiko kerusakan akar.
✅ Ingat - terlalu banyak air bisa sama buruknya bagi tanaman seperti terlalu sedikit, dan membuang sumber daya yang berharga.
Solusi yang lebih baik adalah memahami bahwa ada penundaan antara aktuator yang menyala dan perubahan properti yang dibaca oleh sensor. Ini berarti tidak hanya sensor harus menunggu beberapa saat sebelum mengukur nilai lagi, tetapi aktuator juga perlu dimatikan untuk sementara waktu sebelum pengukuran sensor berikutnya dilakukan.
Berapa lama relay harus menyala setiap kali? Lebih baik berhati-hati dan hanya menyalakan relay untuk waktu yang singkat, lalu menunggu air meresap, kemudian memeriksa kembali tingkat kelembapan. Bagaimanapun, Anda selalu bisa menyalakan pompa lagi untuk menambahkan lebih banyak air, tetapi Anda tidak bisa mengeluarkan air dari tanah.
💁 Pengaturan waktu seperti ini sangat spesifik untuk perangkat IoT yang Anda bangun, properti yang Anda ukur, serta sensor dan aktuator yang digunakan.
Sebagai contoh, saya memiliki tanaman stroberi dengan sensor kelembapan tanah dan pompa yang dikontrol oleh relay. Saya telah mengamati bahwa ketika saya menambahkan air, dibutuhkan sekitar 20 detik agar pembacaan kelembapan tanah stabil. Ini berarti saya perlu mematikan relay dan menunggu 20 detik sebelum memeriksa tingkat kelembapan. Saya lebih memilih terlalu sedikit air daripada terlalu banyak - saya selalu bisa menyalakan pompa lagi, tetapi saya tidak bisa mengeluarkan air dari tanaman.
Ini berarti proses terbaik adalah siklus penyiraman yang seperti ini:
- Nyalakan pompa selama 5 detik
- Tunggu 20 detik
- Periksa kelembapan tanah
- Jika tingkatnya masih di atas yang dibutuhkan, ulangi langkah-langkah di atas
5 detik mungkin terlalu lama untuk pompa, terutama jika tingkat kelembapan hanya sedikit di atas tingkat yang diperlukan. Cara terbaik untuk mengetahui pengaturan waktu yang tepat adalah mencobanya, lalu menyesuaikan berdasarkan data sensor, dengan umpan balik yang terus-menerus. Ini bahkan bisa mengarah pada pengaturan waktu yang lebih rinci, seperti menyalakan pompa selama 1 detik untuk setiap 100 di atas tingkat kelembapan tanah yang diperlukan, daripada waktu tetap 5 detik.
✅ Lakukan penelitian: Apakah ada pertimbangan waktu lainnya? Apakah tanaman bisa disiram kapan saja saat kelembapan tanah terlalu rendah, atau ada waktu tertentu dalam sehari yang baik dan buruk untuk menyiram tanaman?
💁 Prediksi cuaca juga bisa dipertimbangkan saat mengontrol sistem penyiraman otomatis untuk tanaman di luar ruangan. Jika hujan diperkirakan akan turun, maka penyiraman bisa ditunda hingga hujan selesai. Pada saat itu, tanah mungkin sudah cukup lembap sehingga tidak perlu disiram, jauh lebih efisien daripada membuang air dengan menyiram tepat sebelum hujan.
Tambahkan pengaturan waktu ke server kontrol tanaman Anda
Kode server dapat dimodifikasi untuk menambahkan kontrol seputar pengaturan waktu siklus penyiraman, dan menunggu tingkat kelembapan tanah berubah. Logika server untuk mengontrol pengaturan waktu relay adalah:
- Pesan telemetri diterima
- Periksa tingkat kelembapan tanah
- Jika sudah cukup, tidak perlu melakukan apa-apa. Jika pembacaan terlalu tinggi (berarti kelembapan tanah terlalu rendah), maka:
- Kirim perintah untuk menyalakan relay
- Tunggu selama 5 detik
- Kirim perintah untuk mematikan relay
- Tunggu selama 20 detik agar tingkat kelembapan tanah stabil
Siklus penyiraman, proses dari menerima pesan telemetri hingga siap memproses tingkat kelembapan tanah lagi, memakan waktu sekitar 25 detik. Kami mengirimkan tingkat kelembapan tanah setiap 10 detik, sehingga ada tumpang tindih di mana pesan diterima saat server sedang menunggu tingkat kelembapan tanah stabil, yang bisa memulai siklus penyiraman lainnya.
Ada dua opsi untuk mengatasi ini:
- Ubah kode perangkat IoT untuk hanya mengirim telemetri setiap menit, dengan cara ini siklus penyiraman akan selesai sebelum pesan berikutnya dikirim
- Berhenti berlangganan telemetri selama siklus penyiraman
Opsi pertama tidak selalu menjadi solusi yang baik untuk lahan pertanian besar. Petani mungkin ingin menangkap tingkat kelembapan tanah saat tanah sedang disiram untuk analisis di kemudian hari, misalnya untuk mengetahui aliran air di berbagai area di lahan pertanian guna memandu penyiraman yang lebih terarah. Opsi kedua lebih baik - kode hanya mengabaikan telemetri saat tidak bisa menggunakannya, tetapi telemetri tetap ada untuk layanan lain yang mungkin berlangganan.
💁 Data IoT tidak dikirim dari hanya satu perangkat ke hanya satu layanan, melainkan banyak perangkat dapat mengirim data ke broker, dan banyak layanan dapat mendengarkan data dari broker. Misalnya, satu layanan dapat mendengarkan data kelembapan tanah dan menyimpannya dalam database untuk analisis di kemudian hari. Layanan lain juga dapat mendengarkan telemetri yang sama untuk mengontrol sistem irigasi.
Tugas - tambahkan pengaturan waktu ke server kontrol tanaman Anda
Perbarui kode server Anda untuk menjalankan relay selama 5 detik, lalu tunggu 20 detik.
-
Buka folder
soil-moisture-sensor-server
di VS Code jika belum terbuka. Pastikan lingkungan virtual diaktifkan. -
Buka file
app.py
-
Tambahkan kode berikut ke file
app.py
di bawah impor yang sudah ada:import threading
Pernyataan ini mengimpor
threading
dari pustaka Python, threading memungkinkan Python menjalankan kode lain saat sedang menunggu. -
Tambahkan kode berikut sebelum fungsi
handle_telemetry
yang menangani pesan telemetri yang diterima oleh kode server:water_time = 5 wait_time = 20
Ini mendefinisikan berapa lama relay harus berjalan (
water_time
), dan berapa lama harus menunggu setelahnya untuk memeriksa kelembapan tanah (wait_time
). -
Di bawah kode ini, tambahkan yang berikut:
def send_relay_command(client, state): command = { 'relay_on' : state } print("Sending message:", command) client.publish(server_command_topic, json.dumps(command))
Kode ini mendefinisikan fungsi bernama
send_relay_command
yang mengirimkan perintah melalui MQTT untuk mengontrol relay. Telemetri dibuat sebagai dictionary, lalu dikonversi menjadi string JSON. Nilai yang diteruskan kestate
menentukan apakah relay harus menyala atau mati. -
Setelah fungsi
send_relay_code
, tambahkan kode berikut:def control_relay(client): print("Unsubscribing from telemetry") mqtt_client.unsubscribe(client_telemetry_topic) send_relay_command(client, True) time.sleep(water_time) send_relay_command(client, False) time.sleep(wait_time) print("Subscribing to telemetry") mqtt_client.subscribe(client_telemetry_topic)
Ini mendefinisikan fungsi untuk mengontrol relay berdasarkan pengaturan waktu yang diperlukan. Dimulai dengan berhenti berlangganan telemetri sehingga pesan kelembapan tanah tidak diproses saat penyiraman sedang berlangsung. Selanjutnya, mengirimkan perintah untuk menyalakan relay. Kemudian menunggu selama
water_time
sebelum mengirimkan perintah untuk mematikan relay. Akhirnya, menunggu tingkat kelembapan tanah stabil selamawait_time
detik. Kemudian berlangganan kembali ke telemetri. -
Ubah fungsi
handle_telemetry
menjadi berikut:def handle_telemetry(client, userdata, message): payload = json.loads(message.payload.decode()) print("Message received:", payload) if payload['soil_moisture'] > 450: threading.Thread(target=control_relay, args=(client,)).start()
Kode ini memeriksa tingkat kelembapan tanah. Jika lebih besar dari 450, tanah membutuhkan penyiraman, sehingga memanggil fungsi
control_relay
. Fungsi ini dijalankan pada thread terpisah, berjalan di latar belakang. -
Pastikan perangkat IoT Anda berjalan, lalu jalankan kode ini. Ubah tingkat kelembapan tanah dan amati apa yang terjadi pada relay - relay harus menyala selama 5 detik lalu tetap mati setidaknya selama 20 detik, hanya menyala jika tingkat kelembapan tanah tidak mencukupi.
(.venv) ➜ soil-moisture-sensor-server ✗ python app.py Message received: {'soil_moisture': 457} Unsubscribing from telemetry Sending message: {'relay_on': True} Sending message: {'relay_on': False} Subscribing to telemetry Message received: {'soil_moisture': 302}
Cara yang baik untuk menguji ini dalam sistem irigasi simulasi adalah menggunakan tanah kering, lalu tuangkan air secara manual saat relay menyala, berhenti menuangkan saat relay mati.
💁 Anda dapat menemukan kode ini di folder code-timing.
💁 Jika Anda ingin menggunakan pompa untuk membangun sistem irigasi nyata, maka Anda dapat menggunakan pompa air 6V dengan catu daya terminal USB. Pastikan daya ke atau dari pompa terhubung melalui relay.
🚀 Tantangan
Bisakah Anda memikirkan perangkat IoT atau perangkat listrik lainnya yang memiliki masalah serupa di mana dibutuhkan waktu agar hasil dari aktuator mencapai sensor? Anda mungkin memiliki beberapa di rumah atau sekolah Anda.
- Properti apa yang mereka ukur?
- Berapa lama waktu yang dibutuhkan agar properti berubah setelah aktuator digunakan?
- Apakah tidak apa-apa jika properti berubah melewati nilai yang diperlukan?
- Bagaimana cara mengembalikannya ke nilai yang diperlukan jika diperlukan?
Kuis setelah kuliah
Tinjauan & Studi Mandiri
- Baca lebih lanjut tentang relay termasuk penggunaannya secara historis dalam pertukaran telepon di halaman Wikipedia relay.
Tugas
Bangun siklus penyiraman yang lebih efisien
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.