Tentang proyek ini
Ikhtisar
Lahan pertanian adalah sumber daya yang berharga, diperlukan untuk kelangsungan hidup masyarakat modern. Namun begitu banyak tantangan yang dihadapi dalam pertanian pertanian, Anda perlu mendapatkan suhu, kelembaban, dan sinar matahari yang tepat untuk tanaman, dan kemudian Anda harus memastikan tidak ada yang merusak tanaman.
Konsep bertani cerdas telah terbentuk dalam beberapa tahun terakhir, gagasan untuk mengawasi keadaan tanaman Anda dari jarak jauh. Tetapi revolusi dalam pertanian ini membutuhkan biaya yang besar, sebagian besar sistem yang tersedia terlalu mahal untuk diterapkan di pertanian kecil dan sistem mungkin tidak mencakup pertanian besar.
SmartAgro bermaksud untuk membuat jaringan perangkat, mudah digunakan yang dapat ditempatkan di lapangan yang sedang dipantau. Perangkat mengumpulkan data atmosfer, parameter terkait tanah, dan nilai cahaya, mengirimkan semua data ke awan yang ditampilkan di dasbor.
Hal ini memungkinkan pertanian apa pun, ukuran apa pun untuk memasuki era baru pertanian, menerapkan armada perangkat yang dapat diskalakan di seluruh lahan mereka yang dapat memperingatkan mereka jika kekeringan mendekat.
Video
Gambar
Fungsionalitas
SmartAgro memungkinkan pengguna untuk dengan mudah mengimplementasikan armada perangkat di lapangan yang dipantau. Perangkat ini mengambil sampel dari sensor pada interval waktu yang ditentukan.
Data kemudian masuk ke file a.csv pada kartu SD dan dikirim ke backend tempat data divisualisasikan di dasbor. Proyek ini terdiri dari front-end dan backend.
Front-End
Bagian depan proyek mengacu pada perangkat fisik yang ditempatkan di lapangan. Perangkat ini mengambil sampel data dari sensornya, membakarnya ke kartu SD dan mengirimkan data ke backend. Di bawah ini adalah ikhtisar fungsionalitas proyek.
GSM MKR digunakan untuk front-end, perangkat mengumpulkan data dan kemudian mengirimkannya ke Soracom, di mana itu divisualisasikan. Berikut adalah langkah-langkah yang dilakukan perangkat saat mengumpulkan data.
Kartu SD
Perangkat akan mencatat data yang diperoleh dari sensor ke kartu SD yang terpasang padanya. Data akan ditambahkan ke file a.csv yang kemudian dapat diunduh.
Dalam pengaturan, perangkat akan mencari apakah file a.csv untuk menulis tersedia dan akan menambahkannya jika sudah ada. Ini akan membuat file baru jika tidak ada. Di bawah ini adalah beberapa gambar dari file tersebut.
Baterai
Perangkat dapat diaktifkan melalui berbagai cara. Ini dapat ditenagai oleh baterai LiPo melalui port yang disediakan pada perangkat, oleh bank daya, atau dengan menghubungkan baterai melalui port VIN pada perangkat.
Masa pakai perangkat sangat bergantung pada kekuatan baterai. Perangkat beralih ke mode tidur di antara pembacaan untuk menghemat energi sebanyak mungkin.
Pengiriman Data
Data dikirim ke Soracom melalui koneksi GSM ke server. Data dikirim sebagai payload JSON. Data ini kemudian diterima oleh backend dan kemudian diproses. Di bawah ini adalah contoh payloadnya.
{ "Lintang":53.3570404, "Bujur":-6.2609935, "soilTemp":20.56, "soilHumidity":40, "atmoTemp":22.12, "atmoHumidity":62, "uvLight":0.00, "irLight":257, "deviceName":"device1"}
Latar Belakang
Bagian belakang aplikasi mengacu pada Soracom. Data tersebut diterima oleh Soracom, diproses dan kemudian ditampilkan di dashboard.
Dasbor
Dasbor untuk proyek ini di-host di Soracom Lagoon. Data diterima oleh Soracom Air di backend, Soracom Harvest mengumpulkan data dan kemudian Lagoon menanyakannya dari Harvest.
Lokasi setiap perangkat di armada dan semua data sensor diplot di dasbor. Tangkapan layar dasbor ada di bawah.
Peringatan
Pengguna juga dapat mengatur backend untuk menerima pemberitahuan email jika indeks UV atau kelembaban tanah yang dikumpulkan oleh perangkat tidak normal. Dengan cara ini, pengguna akan tahu jika tanaman membutuhkan perhatian.
Manfaat
Pengguna yang mengoperasikan proyek ini akan mendapatkan banyak manfaat:
- Visualisasikan Data di mana saja kapan saja, di mana saja menggunakan dasbor.
- Skalakan perangkat dengan mudah dan gunakan beberapa perangkat.
- Biaya lebih rendah dari solusi biasa yang ada di pasaran.
Membangun Proyek
Langkah 1:Aparat yang Diperlukan
Proyek ini membutuhkan daftar sensor dan bahan lainnya. Daftar lengkap bahan yang dibutuhkan ada di bawah ini.
- 1, Arduino MKR GSM
- 1, Perisai MEM Arduino
- 1, modul suhu dan kelembaban GY-21
- 1, Sensor suhu tahan air
- 1, Sensor Sinar UV SI-1145
- 1, Sensor Kelembaban Tanah
- 1, Kotak Baterai 2AA (dengan baterai) atau baterai LiPo
- 1, Kartu Sim Soracom
- 1, Kartu SD
- Kabel Jumper
Langkah 2:Menghubungkan Sirkuit
Besi solder akan dibutuhkan untuk menyolder semua komponen bersama-sama. Skema diilustrasikan dalam file fritzing di bawah ini.
Ingatlah untuk memasang pelindung MEM ke papan!
Menyiapkan MKR GSM
Arduino MKR GSM perlu disiapkan. Saya memberi daya pada papan dengan 2 baterai AA melalui port VIN. Langkah-langkahnya ada di bawah.
Langkah 3:Mengenali Kode
Ada 4 bagian utama dari kode yang digunakan untuk proyek.
- Siapkan SD
- Kumpulkan Data
- Membakar Data ke SD
- Kirim Data ke Soracom
Semua bagian ini dijelaskan dan dirinci di bawah ini.
Siapkan SD
bool createFile(){ // buat file .csv di kartu SD Serial.println("Membuat File"); Serial.println("OK - Membuat dan Membuka File"); File dataFile =SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println("OK - File Dibuat"); Serial.println("OK - Menambahkan Legenda ke File"); Serial.print("OK - Menambahkan "); Serial.println(legenda); dataFile.println(legenda); dataFile.close(); Serial.println("Berhasil - Data Ditambahkan"); } else { Serial.println("Kesalahan - File Tidak Terdeteksi"); Serial.println("OK - Mencoba Lagi dalam 5 detik"); Serial.println("___________________________"); Serial.println(""); dataFile.close(); penundaan(5000); kembali salah; } Serial.println("____________________________"); Serial.println(""); return true;} void checkFile(){ Serial.println("Memeriksa .csv"); Serial.println("___________________________"); Serial.println("Menyiapkan File"); Serial.println("OK - Memeriksa Keberadaan File"); if(SD.exists("datalog.csv")) // periksa apakah file .csv sudah ada { // tambahkan ke file yang ada apakah ada Serial.println(" OK - File Exists"); Serial.println("OK - Akan Menambahkan File yang Ada"); Serial.println("___________________________"); Serial.println(""); } else { // buat file baru untuk ditambahkan ke Serial.println(" OK - File Tidak Ada"); Serial.println("OK - Membuat File"); Serial.println(""); while(!createFile()) {}; }}
checkFile()
fungsi memeriksa apakah file .csv yang seharusnya ditambahkan perangkat ada. Jika file ada, fungsi akan berakhir, jika tidak maka akan memanggil createFile()
yang membuat file new.csv untuk ditambahkan.
KumpulkanData
void collectData(){ Serial.println("Mengumpulkan Data"); Serial.println("___________________________"); Serial.println("Mendapatkan Data dari Sensor"); Serial.println("OK - Menghubungi semua Sensor"); // mengumpulkan data dari semua sensor soilSens.requestTemperatures(); soilTemp =soilSens.getTempCByIndex(0); kelembaban tanah =analogBaca(A1); kelembaban tanah =peta(Kelembaban tanah, 1023, 0, 0, 100); atmoTemp =gy21.readTemperature(); atmoHumidity =gy21.readHumidity(); visibleLight =uv.readVisible(); irLight =uv.readIR(); rawUVLight =uv.readUV(); uvLight =(rawUVLight / 100); Serial.println("Oke - Data Terkumpul"); Serial.println("OK - Membuang Data"); Serial.print("[Cahaya] Terlihat "); Serial.println(Cahaya terlihat); Serial.print("[Cahaya] Inframerah "); Serial.println(irLight); Serial.print("[Cahaya] Ultraviolet "); Serial.println(uvLight); Serial.print("[Atmo] Suhu "); Serial.println(atmoTemp); Serial.print("[Atmo] Kelembaban "); Serial.println(atmoHumidity); Serial.print("Suhu [Tanah] "); Serial.println(soilTemp); Serial.print("[Tanah] Kelembaban "); Serial.println(kelembaban tanah); Serial.println("Berhasil - Data Dibuang"); Serial.println("___________________________"); Serial.println("");}
Bagian kode ini mengumpulkan data dari semua sensor yang terpasang. Ini menghubungi sensor untuk suhu dan kelembaban atmosfer, kelembaban dan suhu tanah dan indeks UV, nilai cahaya IR, dan cahaya tampak.
Membakar Data ke SD
bool burnData(Data string){ Serial.println("Membakar Data"); Serial.println("___________________________"); Serial.println("Membakar Data ke Kartu SD"); Serial.println("Oke - Membuka File"); File dataFile =SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println("OK - File Ada"); Serial.print("OK - Menambahkan "); Serial.println(data); Serial.println("OK - Membakar data"); dataFile.println(data); // membakar data ke kartu SD dataFile.close(); Serial.println("Berhasil - Data Ditambahkan"); Serial.println("___________________________"); Serial.println(""); } else { Serial.println("Kesalahan - File Tidak Ada"); Serial.println("OK - Mencoba Lagi dalam 5 Detik"); Serial.println("___________________________"); Serial.println(""); penundaan(5000); } Serial.println("");}
Fungsi ini membakar data yang sebelumnya dikompilasi ke dalam baris file a.csv ke kartu SD. Data ditambahkan ke file di kartu.
Kirim Data ke Soracom
void parseData(String dataToSend){ Serial.println("Mengirim Data"); Serial.println("___________________________"); Serial.println("Mengirim Data ke Soracom"); Serial.println("OK - Mengatur Koneksi"); if(client.connect(url, 80)) // siapkan koneksi dan format kirim { Serial.println(" OK - Koneksi Dibuat, Parsing Data"); client.println("POST/HTTP/1.1"); client.println("Host:panen.soracom.io"); client.println("User-Agent:Arduino/1.0"); client.println("Koneksi:tutup"); client.print("Panjang Konten:"); client.println(dataToSend.length()); klien.println(""); klien.println(dataToSend); Serial.println("Oke - Data Diurai"); } Serial.println("OK - Mendapatkan Respon"); Serial.println(""); // membaca kembali dari server while(1) { if(client.available()) { char c =client.read(); Serial.print(c); } if(!client.connected()) { istirahat; } } Serial.println("Berhasil - Data Diurai"); Serial.println("___________________________"); Serial.println("");}
Akhirnya, data dikirim ke Soracom. Perangkat membuat koneksi dengan server dan kemudian menyiapkan kredensial. Data tersebut kemudian dikirim ke server dan tanggapannya dicetak ke Serial Monitor.
Perangkat kemudian tidur selama waktu yang ditentukan dengan mengulangi langkah-langkah tersebut lagi.
Langkah 4:Menyiapkan Variabel
Beberapa variabel harus diedit oleh pengguna sebelum proyek dapat digunakan. Variabel yang dapat diedit berada di file utama kode. Ini dijelaskan di bawah ini.
namaperangkat
mewakili nama kustom perangkat. Ini dikirim bersama dengan muatan ke Soracom, berguna untuk mengidentifikasi perangkat secara terpisah saat mengelola armada perangkat.
waktu tidur
adalah jumlah waktu (dalam milidetik) perangkat akan tidur di antara pembacaan. Perangkat akan tidur di antara pembacaan untuk mengurangi konsumsi baterai.
proDebug
disetel ke true jika mengganggu dan ke false jika tidak. Jika proDebug diaktifkan, perangkat harus terhubung ke komputer dengan monitor serial agar berfungsi. Setel ke true saat men-debug tetapi pastikan disetel ke false jika ada di lapangan. Perhatikan bahwa perangkat akan tetap mencetak ke serial meskipun proDebug salah;
Langkah 5:Menyiapkan Kartu SD
Kartu SD harus disiapkan sebelum dapat digunakan dengan perangkat. Kartu SD harus diformat sebagai FAT 32. Ikuti langkah-langkah di bawah ini untuk menyiapkan kartu SD.
Langkah 6:Unggah Kode
Sebelum menyiapkan backend, data harus dikirim ke sana.
Untuk melakukan ini, sambungkan MKR GSM Anda ke komputer Anda dan unggah kode ke perangkat, pastikan mode perangkat diatur ke 1 untuk pengaturan ini. Setelah kode diunggah, letakkan semua sensor di dalam air.
Sekarang tekan tombol pada perangkat dan tunggu data dikumpulkan dan dikirim. Ulangi ini beberapa kali untuk mengisi Soracom Air.
Langkah 7:Menyiapkan Soracom
Langkah ini dibagi menjadi 2 bagian, yang pertama akan mencakup pembuatan akun dengan Soracom dan mendaftarkan SIM Anda sementara yang lain akan mencakup pengaturan Soracom Harvest untuk mengumpulkan data dari Air. Jika Anda sudah memiliki akun di Soracom, lewati bagian pertama.
Bagian 1:Membuat Akun
Bagian 2:Kelompok dan Panen
Langkah 8:Menyiapkan Soracom Lagoon
Hal terakhir yang harus disiapkan di Soracom adalah Lagoon, ini adalah alat yang akan kita gunakan untuk memvisualisasikan data kita dan membuat peringatan email jika datanya tidak bagus. Ikuti langkah-langkah di bawah ini.
Perpustakaan
- ArduinoLowPower (c) 2016 Arduino LLC GNU Lisensi Publik Umum Lebih Rendah perpustakaan ini berada dalam domain publik
- MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
- Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
- OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
- DallasTemperature GNU General Public Licence this library is in the public domain
- RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
- SPI (c) 2015 Hristo Gochkov Lesser GNU Lesser General Public Licence this library is in the public domain
- SD (C) 2010 SparkFun Electronics GNU General Public Licence this library is in the public domain
Final
Finally I designed an enclosure for the project, it would be preferable if the top of the enclosure would be transparent so that the UV sensor can be placed within the enclosure, I placed my sensor outside the enclosure to prevent any interference.
Finally, ensure that all the variables are set and then place the device on the field, it should be ready to monitor all parameters now.
Using an SD Card Module
I have chosen to use the Arduino MKR MEM shield as it is easy to use and quite compact. An SD card module can also be used though most operate with 5v while the MKR GSM can only provide 3.3v, therefore a level convertor is needed to step up the 3.3v to 5v.
Background
I came up with this idea while going on a bus past fields. I remembered reading about new devices used to monitor agricultural fields but I was made aware of the costs which are mostly not affordable for farmers.
So I decided to use the low cost Arduino to monitor multiple parameters on the farm and allow any farm, big or small to step into the age of IoT and smart farming.
Kode
SmartAgro
The Full Code Skema
schematics_rrBJ3HiIfc.fzz