Advertisement
  1. Computer Skills
  2. Electronics

Mambuat sebuah Raspberry Pi Moisture Sensor untuk Mengawasi Tanaman Kamu

Scroll to top
Read Time: 18 min

Indonesian (Bahasa Indonesia) translation by Kang Abbad (you can also view the original English article)

Dalam tutorial ini, Saya akan memanfaatkan keangkeran dari Raspberry Pi untuk membangun sebuah sensor kelembaban untuk pot tanaman kamu. Kamu akan bisa mengawasi sensor secara lokal di LCD atau dari jarak jauh, melalui ControlMyPi.com, dan menerima email harian jika kelembaban menurun di bawah tingkat yang ditentukan.

Sepanjang jalan aku akan:

  • menaikkan dan membaca nilai dari sensor analog di atas SPI menggunakan papan breadboard
  • susunan sensor membaca dengan baik di konsol
  • Menampilkan sensor membaca RGB LCD Display
  • meminta Raspberry Pi mengirim email dengan pembacaan sensor
  • mengawasi sensor dengan mudah dan membaca beberapa riwayat di web

Raspberry Pi Moisture SensorRaspberry Pi Moisture SensorRaspberry Pi Moisture Sensor
Ini adalah apa yang kita ciptakan dalam pelajaran ini.

Kebutuhan Hardware

Urutan untuk mendapatkan hasil maksimal dari pelajaran ini, Kamu disarankan untuk memperoleh hal-hal berikut:

The ComponentsThe ComponentsThe Components
Komponen

Beberapa Komponen Alternatif

  • Sebagai gantinya sensor kelembaban tanah, kamu dapat menggunakan berbagai jenis sensor analog tegangan atau bahkan hanya resistor variabel untuk pengujian.
  • Kamu dapat menggunakan MCP3004 kecil (4-Channel ADC SPI) jika kamu inginkan, tetapi kabel akan berbeda.
  • Kamu bisa mengabaikan RGB LCD atau menggantikan itu dengan layar alternatif. Kamu harus menghapus atau mengubah beberapa baris di skrip akhir jika kamu melakukannya.

Biaya

Setelah menambahkan beberapa dollar untuk kabel jumper total biaya proyek sekitar $55 tanpa LCD dan $82. Ingat juga kamu dapat menyimpan perangkat elektronik - semua bagian ini bisa digunakan lagi untuk proyek lain.


1. Kabel

Jika kamu menggunakan LCD dengan susunan rapi kemudian sekarang sambungkan itu dengan Raspberry Pi. Dua tahap pertama dari perangkat lunak tidak menggunakan LCD tetapi akan menghemat waktu pemasangan kembali nanti jika kamu memasangnya sekarang.

Peringatan: Kabel yang salah dapat menyebabkan kerusakan pada Raspberry Pi kamu. Pastikan untuk memeriksa kembali semua koneksimu dengan hati-hati sebelum menyalakannya.

Langkah 1: Power dan Ground Rails

Power and Ground RailsPower and Ground RailsPower and Ground Rails
Kekuatan dan tanah rel

Sebelah kiri foto kamu dapat melihat jumper merah dan hitam menuju ke + dan - rail di breadboard. Untuk membantu menggambarkan koneksi dari header silahkan melihat tabel warna kabel. Setiap sel dalam tabel mengacu kepada sebuah pin di Raspberry Pi Header. Warna dari sel sesuai dengan warna dari kabel jumper seperti pada gambar:

Wiring ChartWiring ChartWiring Chart
Tabel Pengkabelan

Hubungkan pin 1 ke rail positif dan pin 6 ke ground rail.

Langkah 2: MCP3008

Penting: Chip harus berada diatas lembah breadboard dengan indikator pin 1, tekukan, kanan atas seperti di foto.

MCP3008MCP3008MCP3008
MCP3008

Lihat tabel warna kawat ini dan datasheet saat memasang chip ini:

Wire colour tableWire colour tableWire colour table
Tabel Warna Kabel

Semua sambungan dari rail dan header ke chip MCP3008 memanjang dengan rapi di sepanjang baris bawah chip dalam orientasi ini. Pertama hubungkan power dan tanah seperti yang ditunjukkan pada foto di atas:

  • Ground rail ke DGND
  • Ground rail ke AGND
  • Power rail ke VREF
  • Power rail ke VDD

Selanjutnya, sambungkan pi Raspberry Pi SPI header ke chip:

  • Header 26 ke CS
  • Header 19 ke DIN
  • Header 21 ke DOUT
  • Header 23 ke CLK
MCP3008 Wired upMCP3008 Wired upMCP3008 Wired up
MCP3008 Telah siap

Langkah 3: Sensor

Wiring up the moisture sensorWiring up the moisture sensorWiring up the moisture sensor
Mempersiapkan sensor kelembaban

Kabel sensornya sederhana; ada 3 sambungan dibuat:

  • Sensor kuning ke CH5
  • Sensor merah ke power rail
  • Sensor hitam ke ground rail
Tip: Jika kamu memilki pin header cadangan di toolboxmu, kamu bisa memasukkan ini ke tancapan female di Octopus sensor untuk membentuk steker tiga pin. Ini membuatnya mudah untuk memasukkan ke breadboard. Alternatifnya, kabel jumper bisa dipakai langsung ke tancapan.
Sensor wiringSensor wiringSensor wiring
Kabel sensor

Akhirnya, jika kamu memegang pot tanaman sekarang kamu bisa memasukkan kedalam tanah. Pastikan tidak terlalu dalam, cukup sedikit saja:

The moisture sensorThe moisture sensorThe moisture sensor
Sensor kelembaban

2. Menyiapkan Perangkat-Perangkat Lunak

Langkah 1: Sistem Operasi

Proyek ini dibuat dengan Occidentalis v0.2 dari Adafruit, yang sudah siap dengan driver SPI hardware. Ikuti instruksi di Adafruit untuk menginstall itu ke Raspberry Pi kamu.

Tip: Jika kamu menggunakan unduhan Wheezy dari situs Raspberry Pi, kamu perlu mencari dan mengikuti beberapa step untuk mengaktifkan SPI driver kamu..

Langkah 2: Utilitas yang Diperlukan

git – Kamu seharusnya memiliki ini (ketik git) jika tidak maka install ini dengan: sudo apt-get install git
pip – install ini dengan: sudo apt-get install python–pip

Langkah 3: Pembungkus SPI Python

Semua kode untuk proyek ini ditulis dengan Python. Kita membutuhkan sebuah pembungkus Phyton untuk SPI driver sehingga kita bisa membaca nilai dari sensor di SPI:

Langkah 4: Adafruit Python Library

Kamu sudah menginstall Adafruit Library saat merakit dan menguji LCD kamu. Pastikan kamu tahu lokasi dari library itu karena ini akan dibutuhkan oleh kode proyek.

Langkah 5: ControlMyPi Library

ControlMyPi adalah layanan untuk dengan cepat dan mudah membuat panel kontrol di Internet dari skrip Raspberry Pi Python kamu. Gunakan pip untuk menginstalnya:

Langkah 6: Kode Proyek

Semua kode dari pelajaran ini bisa diunduh dengan cara:

Kamu perlu merubah beberapa file ini untuk memberikan nama pengguna, kata sandi, dan jalur file. Ini dijelaskan lebih lanjut.


3. Membaca Nilai dari Sensor

MCP3008 mengkonversi arus masukan ke sebuah angka dari 0 sampai 1023 (10bits). Kamu bisa langsung baca nilai ini di SPI (Sambungan hijau dan putih ke header di Pi). Paket py-spidev memungkinkan kita untuk melakukan ini dari Python.

Ada beberapa komplikasi halus saat membaca angka 10-bit dalam sistem 8-bit. SPI driver akan mengembalikan 2 kata 8-bit dan kita tertarik dengan 2 bits terakhir dari kata pertama diikuti oleh semua lanjutan kata dari 8-bit. Untuk mengubah ini menjadi sebuah angka yang bisa kita kerjakan, kita perlu menyamarkan dan kemudian geser 2 bit ke kiri sebanyak 8 dari kata pertama sebelum menambahkan kata kedua.

Kamu tidak perlu khawatir tentang kodingannya, seperti pada unduhan saya telah menyertakan modul mcp3008.py untuk mengurusnya. Kamu dapat menggunakan Python Shell interaktif untuk menguji pengaturan SPI dan kabel kamu seperti:

Penting: Kamu perlu menjalankan Python dengan sudo sehingga kamu bisa mengakses SPI device driver.

Jika kamu mendapat masalah, pertama periksa kembali pemasangan kabel kamu. Kemudian periksa kembali langkah-langkah instalasi software. Jika kamu menggunakan Octopus moisture sensor, pegang sambungan untuk membuat sambungan dengan tangan kamu. Jika tidak, kemungkinan besar  itu hanya akan terbaca nol.

Kamu dapat mengambil sensor dari persamaan di sini dengan menghubungkan jumper dari power rail ke, katakanlah, CH1 dan kemudian menggunakan readadc (1). Ini seharusnya mengembalikan 1023 (atau mendekati). Juga, sebuah sambungan dari ground rail seharusnya mengembalikan 0.


Program

Program 1: Pengawasan Di Konsol

Program pertama hanya memperluas apa yang kami praktikkan di konsol interaktif untuk menyertakan loop sehingga nilai dari sensor dicetak terus menerus:

Perhatikan ada sleep setengah detik di dalam perulangan. Ini adalah hasil program; itu memberi jalan untuk memproses yang lain. Kalau tidak itu akan menghabiskan banyak waktu CPU dan proses lain yang kamu jalankan tidak akan berjalan dengan baik. Pembacaan dua kali per detik mungkin terlalu banyak, tentu saja untuk sensor kelembaban.

Keluaran harus seperti:

Hanya tekan Control-C ketika kamu selesai dan program akan keluar seperti di atas.

Program 2: Pengawasan Konsol Lebih Baik

Program ini meningkatkan tampilan ke kosol. Daripada mencetak nilai ke layar di jendela bergulir, skrip ini akan membuat efek dashboard. Setiap pembacaan sensor ditulis di bagian atas dari yang terakhir sehingga jendela kamu tidak dapat digulir.

Juga latar belakang merah, kuning, dan hijau digunakan sebagai lampu trafik. Ketika tanah disirami dengan baik, latar belakang akan menjadi hijau. Saat terlalu kering, warnanya akan merah.

Untuk mencapai pewarnaan ini, kode khusus ANSI digunakan untuk mengirim perintah ke konsol. Setiap urutan kode dimulai dengan \x1b[ diikuti oleh kode perintah untuk menghasilkan efek.

Program membersihkan layar dan menampilan judul. Ini kemudian masuk ke loop perpetual lagi tetapi kali ini menggunakan thresholds untuk menentukan warna latar belakang. Akhirnya, urutan kode tadi dan teks dicetak diikuti oleh urutan RESET untuk mengalihkan pewarnaan. The PREVIOUS_LINE kode digunakan untuk memindahkan kursor kembali satu baris sehingga kita menulis di atas nilai sebelumnya setiap kali.

Jalankan contoh ini seperti:

Keluarannya seharusnya jadi seperti ini:

OutputOutputOutput
Keluaran

Program 3: Pengawasan LCD

Kita sekarang pergi jauh dari konsol dan beralih ke tampilan sensor di LCD. Sebelum melanjutkan pelajaran ini, pastikan kamu telah membuat Adafruit LCD kamu sendiri dengan tersusun dan kamu sudah mengujinya dengan mengikuti Adafruit tutorial.

Program kita akan menggunakan library Adafruit  jadi kita harus tahu sepenuhnya path ke direktori Adafruit_CharLCDPlate. Saya cukup membuat direktori py di pi user's home untuk menyimpan semua kode Python di satu tempat, jadi pada Raspberry Pi path saya:

Kamu mungkin harus menyesuaikan kode berikut jika path kamu berbeda.

Jalankan program seperti:

Kamu seharusnya melihat versi LCD dari warna konsol program. Saat ini indikator threshold merah, kuning dan hijau memanfaatkan backlight RGB.

Liquid Crystal Display (LCD)Liquid Crystal Display (LCD)Liquid Crystal Display (LCD)
Liquid Crystal Display (LCD)

Program 4: Pengawasan Jarak Jauh Dengan ControlMyPi

Di bagian ini kami akan menggunakan ControlMyPi untuk membuat sebuah dashboard di Internet. Berikut cara layanan dideskripsikan dari FAQ:

ControlMyPi menyediakan layanan berbasis web untuk memperbolehkan kode Python sederhana untuk dikontrol dari sebuah panel di internet. Kode Python kamu mendefinisikan sebuah tata letak widget label, tombol, status indikator dan lebih lagi untuk menampilkan ControlMyPi. Ketika sebuah tombol diklik kode kamu akan mendapatkan sebuah pesan. Jika kamu mempunyai beberapa status untuk dilaporkan, kode kamu bisa mengirim itu ke ControlMyPi disetiap saat dan itu akan muncul di web browser kamu.

Jika kamu belum meng-install paket Python, maka lakukan sekarang. Kamu juga membutuhkan sebuah akun XMPP. Saya akan merekomendasikan akun Google Gmail karena ini berfungsi dengan baik dan juga akan digunakan nanti ketika ingin skrip kita mengirim email. Ikuti instruksi di situs ControlMyPi untuk memulai dan menguji sambunganmu.

Iterasi pertama dari dashboard akan menunjukkan pengukur tunggal dengan pembacaan sensor. Kita akan memasukan catatan baru ke ControlMyPi setiap 30 detik untuk menghasilkan ini:

Moisture monitorMoisture monitorMoisture monitor
Pengawasan kelembaban

Kode untuk menghasilkan ini masih relatif lurus benar:

Diatas, kita sekarang mengimpor ControlMyPi class dan modul pencatatan. Jika kamu perlu men-debug masalah koneksi XMPP, ubah level log ke DEBUG.

on_msg function adalah apa yang akan dipanggil jika kita mendefinisikan semua tombol atau inputan lain di tata letak widget kita. Sejak kita hanya memiliki alat pengukur tidak ada masukan dan fungsi ini tidak melakukan apa-apa.

List, p, adalah dimana tata letak widget sudah ditentukan. Setiap entri dalam daftar menentukan deretan widget yang akan ditampilkan di dasbor. Kita memiliki satu baris dengan satu widget di atasnya, alat ukur. Moist adalah nama widgetnya, level adalah label untuk muncul pada alat ukur, 0 adalah level awal, 0 adalah level minimal dan 1023 adalah level maksimal.

Script kemudian membuat objek ControlMyPi dan dijalankan. Disini kamu harus mengisi alamat Gmail dan password kamu sendiri.

Tip: Ini adalah sebuah sambungan aman ke Google's server; password tidak terbagi ke lain service. Jika kamu tidak nyaman maka atur ke akun lain. Kenyataannya, rekening terpisah cukup berguna, terutama ketika kamu ingin kirim email otomatis dari Raspberry Pi kamu.

Akhirnya, perulangan utama mengambil pembacaan sensor seperti biasa tetapi bukannya mencetaknya ke konsol atau LCD itu memasukan nilai baru ke ControlMyPi. Pembaruan terkirim ke sebuah map dari widget name / value.

Jalankan kode menggunakan sudo seperti biasa:

Beberapa informasi sambungan akan tercetak ke konsol diikuti oleh "Registered with controlmypi". Sekarang menuju ke ControlMyPi.com dan masukan alamat Gmail kamu ke dalam form:

Control my PiControl my PiControl my Pi
Mengontrol Pi saya

Klik panel Find untuk menunjukkan daftar panel kontrol terkait dengan alamat Gmail kamu. Seharusnya ada satu di dalam daftar, Pengawasan Kelembaban. Klik ini untuk memulai panel kamu dan lihat live data masuk dari Raspberry Pi.

Setiap 30 detik, ketika pembacaan sensor baru diambil, nilai ini masuk melalui sambungan XMPPke ControlMyPi. Itu kemudian memasukan data ke semua pemirsa dari panel kamu (hanya kamu saat itu). Kamu akan melihat alat ukur bergerak sebelum matamu berkedip! Jika kamu suka, kamu bisa menyalin/menempelkan url dan pamerkan ke temanmu. Sekarang  pembaruan akan masuk ke kamu dan teman kamu.

Program 5: Menambahkan Line Chart

ControlMyPi memiliki sejumlah widget yang tersedia untuk kamu gunakan di dashboardmu. Salah satu yang paling berguna untuk visualisasi data adalah line chart Program di bagian ini menambahkan line chart untuk memplot perubahan tingkat kelembaban dari waktu ke waktu. Untuk memulainya, kita hanya akan memetakan titik baru di setiap tiga puluh detik saat kita membaca.

Di tata letak widget, p, kamu bisa melihat definisi dari diagram garis widget setelah pengukur. Namanya chart1, x axis adalah Waktu, y axis adalah Nilai dan nilai max dan min ditetapkan di 0 dan 100.

Tip: Saya telah mengubah skala dari rentang raw sensor (0 hingga 1023) menjadi nilai persentase yang lebih masuk akal. Modul mcp3008 menyediakan fungsi read_pct () untuk mengembalikan titik persentase bilangan bulat bukan nilai raw.

Untuk memperbarui diagram di dashboard, kamu cukup kirimkan list data points ke ControlMyPi. Data points disimpan di daftar c1 dalam program dan setiap points terdiri dari waktu dan nilai. Function append_chart_point() digunakan untuk menjaga daftar rolling dari sepuluh points terakhir, sehingga setiap nilai baru tiba, yang terlama akan dihapus.

Jalankan script menggunakan sudo seperti biasa:

Moisture monitor with widgetMoisture monitor with widgetMoisture monitor with widget
Pengawasan Kelembaban dengan widget

Program 6: Memperbaiki Line Chart

Kode ini meningkatkan kode dari versi sebelumnya:

  • Memperkenalkan kembali LCD sehingga kami memiliki pemantauan lokal dan online.
  • Merekam data points di line chart selama 24 jam
  • Menghaluskan fluktuasi pada chart dengan mengambil rata-rata.
  • Menyimpan data chart ke file sehingga kita tidak kehilangannya jika perlu me-restart program.

Anda harus mengenali isi fungsi update_lcd () dari program sebelumnya. Function ini sekarang dipanggil dari loop utama untuk memperbarui LCD pada setiap iterasi.

Tip: Jika kamu tidak mempunyai LCD hapus saja function ini dan kode yang menjalankan ini. Hapus juga path dan import dari atas dan baris lcd = Adafruit_CharLCDPlate().

Merekam Data

Untuk merekam data 24 jam di line chart, kita harus membaca setiap 30 menit dan menampilkan 48 points di chart. Function append_chart_point() telah diperbaharui untuk menyimpan 48 poin data. Pada loop utama sekarang kita memiliki waktu 30 menit di masa depan dalam variabel next_time.

Setiap loop kita periksa waktu saat ini terhadap next_time. Jika kita sudah melewati next_time data points ditambahkan ke chart dan next_time berpindah setiap 30 menit. Menggunakan jam adalah cara yang baik untuk melakukan tindakan pada perincian waktu yang berbeda tanpa harus memiliki beberapa penghitung perhitungan loop dan sebagainya. Kita akan menggunakan teknik ini lagi di program akhir untuk mengirim email harian.

Seperti yang kamu ketahui, pembacaan dari sensor berfluktuasi sedikit. Jenis sensor lain tidak akan selalu melakukan ini, tetapi yang ini tidak. Jadi, alih-alih mengambil satu bacaan dan merencanakan itu di grafik setiap setengah jam, kita akan merencanakan rata-rata semua pembacaan yang dilakukan dalam setengah jam terakhir. Daftar bacaan digunakan untuk menampung semua bacaan, int(round(sum(readings)/len(readings))) menghitung rata-rata ke bilangan bulat terdekat. Ini kemudian diplot pada grafik.

Python's pickle modules digunakan untuk menyimpan dan memuat data chart ke file. Ini hanya menyimpan daftar c1 jika kita harus menghentikan program dan memulainya lagi. Memulai ulang untuk pergantian baterai untuk contoh. function save() dipanggil setiap waktu kita perbaharui chart dan function load() dipanggil ketika program mulai.

Jalankan kode menggunakan sudo seperti biasanya:

Tangkapan layar menampilkan chart yang lebih halus sekarang:

Moisture monitor chartMoisture monitor chartMoisture monitor chart
Pengawasan chart kelembaban

Program Terakhir

Untuk menyelsaikan project ini, kita akan menambahkan 1 langkah terakhir: email. Kita bisa mengawasi sensor dari LCD dan melihat pembacaan saat ini dan riwayat di web, tapi kita mungkin lupa untuk memeriksanya setelah beberapa saat. Untuk mengatasi ini, kita akan meminta program untuk mengirim email setiap hari setiap kali pembacaan sensor di bawah nilai yang ditentukan.

Function send_gmail() mengurusi pengiriman email. Di loop utama, kita menggunakan teknik pemeriksaan jam untuk menentukan apakah satu hari telah berlalu sejak terakhir kali kami mengirim email. Jika sudah, kita akan bertemu lagi hari ini untuk pemeriksaan berikutnya. Selanjutnya, jika nilai kelembaban di bawah 40, kita mengirim email.

Program Selesai! Jalankan menggunakan sudo seperti biasa:

Ada satu hal lagi yang harus dilakukan: otomatis jalankan program di start up. Ini akan memungkinkan kamu untuk menjalankan Raspberry Pi kamu. Untuk melakukan ini ubah /etc/rc.local/ seperti ini:

Tambahkan baris ini ke file dan simpan:

Sekarang kamu bisa mematikan Raspberry Pi kamu, pindah ke tanaman yang mau diawasi, hidupkan dan program akan memulainya.


Kesimpulan

Di pelajaran ini, kamu belajar bagaimana cara mengatur dan menggunakan SPI di Raspberry Pi kamu dengan Analog-to-Digital converter. Kemudian kamu menggunakan sensor untuk mengawasi tingkat kelembaban dari tanah di pot tanaman. Software ini memungkinkan kita untuk melihat pembacaan sensor di konsol, di LCD, di pengukuran dan chart di internet dan melalui email harian.

Ada banyak yang dipelajari, tapi sekarang kamu bisa menggunakan teknik ini untuk semua sensor yang berbeda untuk mengukur temperatur, kelembaban, intensitas cahaya, dan sebagainya. Kamu bisa menghubungkannya ke akselerometer atau sensor jarak inframerah juga. Selamat bersenang-senang!

The finished projectThe finished projectThe finished project
Proyek selesai
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Computer Skills tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.