SmartAgro: Solusi IoT Canggih untuk Pertanian Presisi
Komponen dan Perlengkapan
Arduino MKR GSM 1400 – 1 unit
Kartu SIM IoT Global SORACOM Air – 1 unit
Arduino MKR MEM Shield – 1 unit
Modul Suhu dan Kelembaban GY21 – 1 unit
Sensor Cahaya UV Adafruit SI1145 – 1 unit
Sensor Kelembaban Tanah SparkFun (dengan Terminal Sekrup) – 1 unit
Sensor Suhu Digital Resist Air Adafruit DS18B20 – 1 unit
Kabel Jumper (umum) – 1 set
Alat dan Mesin yang Diperlukan
Pakuin (umum)
Tentang Proyek Ini
Ringkasan
Lahan pertanian adalah sumber daya yang berharga, sangat diperlukan untuk kelangsungan masyarakat modern. Namun, begitu banyak tantangan dihadapi dalam pertanian. Anda perlu mendapatkan suhu, kelembaban dan sinar matahari yang tepat untuk tanaman, dan kemudian Anda harus memastikan tidak ada yang merusak tanaman.
Konsep smart farming telah berkembang dalam beberapa tahun terakhir, ide untuk memantau kondisi tanaman Anda dari jarak jauh. Namun, revolusi dalam pertanian ini datang dengan biaya yang tinggi. Sebagian besar sistem yang tersedia terlalu mahal untuk diterapkan di pertanian kecil dan sistem mungkin tidak mencakup pertanian besar.
SmartAgro bertujuan untuk membuat jaringan perangkat yang mudah digunakan dan dapat ditempatkan di lapangan yang dipantau. Perangkat ini mengumpulkan data atmosfer, parameter terkait tanah dan nilai cahaya, lalu mengirim semua data ke cloud tempat data ditampilkan di dasbor.
Ini memungkinkan setiap pertanian, setiap ukuran, 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 menerapkan armada perangkat di lapangan yang dipantau. Perangkat ini mengambil sampel dari sensor pada interval waktu yang ditentukan.
Data kemudian dicatat ke file .csv pada kartu SD dan dikirim ke backend tempat data divisualisasikan di dasbor. Proyek ini terdiri dari front-end dan backend.
Front-End
Front-end proyek ini merujuk pada perangkat fisik yang ditempatkan di lapangan. Perangkat ini mengambil sampel data dari sensor mereka, membakarnya ke kartu SD dan mengirim data ke backend. Berikut adalah gambaran umum fungsionalitas proyek.
Sebuah MKR GSM digunakan untuk front-end. Perangkat mengumpulkan data dan kemudian mengirimnya ke Soracom, tempat divisualisasikan. Berikut adalah langkah-langkah yang diambil oleh perangkat saat mengumpulkan data.
SD Card
Perangkat akan mencatat data yang diperoleh dari sensor ke kartu SD yang dilampirkan padanya. Data akan ditambahkan ke file .csv yang kemudian dapat diunduh.
Dalam pengaturan, perangkat mencari apakah file .csv untuk ditulis tersedia dan akan menambahkannya jika sudah ada. Ini akan membuat file baru jika tidak ada. Berikut beberapa gambar dari file tersebut.
Baterai
Perangkat dapat diberi daya melalui beberapa cara. Ini dapat diberi daya oleh baterai LiPo melalui port yang disediakan pada perangkat, oleh power bank atau dengan menghubungkan baterai melalui port VIN pada perangkat.
Umur pakai perangkat sangat bergantung pada daya baterai. Perangkat masuk ke mode tidur antara pembaca untuk menghemat sejumlah energi yang mungkin.
Mengirim Data
Data dikirim ke Soracom melalui koneksi GSM ke server. Data dikirim sebagai payload JSON. Data ini kemudian diterima oleh backend dan diproses. Berikut adalah contoh payload.
Backend aplikasi ini merujuk pada Soracom. Data diterima oleh Soracom, diproses dan kemudian ditampilkan di dasbor.
Dasbor
Dasbor untuk proyek ini dihosting di Soracom Lagoon. Data diterima oleh Soracom Air di backend, Soracom Harvest mengumpulkan data dan kemudian Lagoon mengkuerinya dari Harvest.
Lokasi setiap perangkat dalam armada dan semua data sensor diplot di dasbor. Tangkapan layar dasbor ada di bawah.
Peringatan
Pengguna juga dapat mengatur backend untuk menerima notifikasi email jika indeks UV atau kelembaban tanah yang dikumpulkan oleh perangkat abnormal. Dengan cara ini, pengguna akan tahu apakah tanaman memerlukan perhatian.
Manfaat
Pengguna yang mengoperasikan proyek ini akan memiliki banyak manfaat:
Visualisasikan data kapan saja, di mana saja menggunakan dasbor.
Skala dengan mudah perangkat dan gunakan sebagai banyak.
Biaya lebih rendah dari solusi biasa di pasar.
Membangun Proyek
Langkah 1: Alat yang Diperlukan
Proyek ini memerlukan daftar sensor dan bahan lainnya. Daftar lengkap bahan yang diperlukan ada di bawah ini.
1, Arduino MKR GSM
1, Arduino MEM Shield
1, Modul suhu dan kelembaban GY-21
1, Sensor suhu resist air
1, Sensor Cahaya 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 Rangkaian
Sebuah pakuin akan diperlukan untuk memengerlang semua komponen bersama. Skema dirilis dalam file fritzing di bawah ini.
Ingat untuk memasang MEM shield ke papan!
Mempersiapkan MKR GSM
Arduino MKR GSM perlu disiapkan. Saya memberdayakan papan dengan 2 baterai AA melalui port VIN. Langkah-langkahnya ada di bawah ini.
Langkah 3: Memahami Kode
Ada 4 bagian utama dari kode yang digunakan untuk proyek ini.
Persiapkan SD
Kumpulkan Data
Bakar Data ke SD
Kirim Data ke Soracom
Semua bagian ini dijelaskan dan rinci di bawah ini.
Persiapkan SD
bool createFile() { // membuat file .csv di kartu SD Serial.println("Creating File"); Serial.println(" OK - Creating and Opening File"); File dataFile = SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println(" OK - File Created"); Serial.println(" OK - Appending Legend to File"); Serial.print(" OK - Appending "); Serial.println(legend); dataFile.println(legend); dataFile.close(); Serial.println(" Success - Data Appended"); } else { Serial.println(" Error - File Not Detected"); Serial.println(" OK - Trying Again in 5 seconds"); Serial.println("________________________________________"); Serial.println(""); dataFile.close(); delay(5000); return false; } Serial.println("________________________________________"); Serial.println(""); return true; } void checkFile() { Serial.println("Checking .csv"); Serial.println("________________________________________"); Serial.println("Setting Up File"); Serial.println(" OK - Checking for File Presence"); if(SD.exists("datalog.csv")) // periksa apakah file .csv sudah ada { // tambahkan ke file yang ada jika ada Serial.println(" OK - File Exists"); Serial.println(" OK - Will Append to Existing File"); Serial.println("________________________________________"); Serial.println(""); } else { // buat file baru untuk ditambahkan Serial.println(" OK - File Not Present"); Serial.println(" OK - Creating File"); Serial.println(""); while(!createFile()) {}; } }
Fungsi checkFile() memeriksa apakah file .csv yang seharusnya ditambahkan oleh perangkat ada. Jika file ada, fungsi berakhir, jika tidak, ia memanggil createFile() yang membuat file .csv baru untuk ditambahkan.
Kumpulkan Data
void collectData() { Serial.println("Gathering Data"); Serial.println("________________________________________"); Serial.println("Getting Data from Sensors"); Serial.println(" OK - Contacting all Sensors"); // mengambil data dari semua sensor soilSens.requestTemperatures(); soilTemp = soilSens.getTempCByIndex(0); soilHumidity = analogRead(A1); soilHumidity = map(soilHumidity, 1023, 0, 0, 100); atmoTemp = gy21.readTemperature(); atmoHumidity = gy21.readHumidity(); visibleLight = uv.readVisible(); irLight = uv.readIR(); rawUVLight = uv.readUV(); uvLight = (rawUVLight / 100); Serial.println(" OK - Data Collected"); Serial.println(" OK - Dumping Data"); Serial.print("[Light] Visible "); Serial.println(visibleLight); Serial.print("[Light] Infrared "); Serial.println(irLight); Serial.print("[Light] Ultraviolet "); Serial.println(uvLight); Serial.print("[Atmo] Temperature "); Serial.println(atmoTemp); Serial.print("[Atmo] Humidity "); Serial.println(atmoHumidity); Serial.print("[Soil] Temperature "); Serial.println(soilTemp); Serial.print("[Soil] Humidity "); Serial.println(soilHumidity); Serial.println(" Success - Data Dumped"); Serial.println("________________________________________"); Serial.println(""); }
Bagian kode ini mengumpulkan data dari semua sensor di papan. Ini menghubungi sensor untuk suhu dan kelembaban atmosfer, kelembaban dan suhu tanah dan indeks UV, nilai cahaya IR dan cahaya terlihat.
Bakar Data ke SD
bool burnData(String data) { Serial.println("Burning Data"); Serial.println("________________________________________"); Serial.println("Burning Data to SD Card"); Serial.println(" OK - Opening File"); File dataFile = SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println(" OK - File is Present"); Serial.print(" OK - Appending "); Serial.println(data); Serial.println(" OK - Burning data"); dataFile.println(data); // bakar data ke kartu SD dataFile.close(); Serial.println(" Success - Data Appended"); Serial.println("________________________________________"); Serial.println(""); } else { Serial.println(" Error - File Not Present"); Serial.println(" OK - Trying Again in 5 Second"); Serial.println("________________________________________"); Serial.println(""); delay(5000); } Serial.println(""); }
Fungsi ini membakar data yang sebelumnya dikompilasi menjadi baris file .csv ke kartu SD. Data ditambahkan ke file pada kartu.
Kirim Data ke Soracom
void parseData(String dataToSend) { Serial.println("Sending Data"); Serial.println("________________________________________"); Serial.println("Sending Data to Soracom"); Serial.println(" OK - Setting Up Connection"); if(client.connect(url, 80)) // siapkan koneksi dan format kirim { Serial.println(" OK - Connection Established, Parsing Data"); client.println("POST / HTTP/1.1"); client.println("Host: harvest.soracom.io"); client.println("User-Agent: Arduino/1.0"); client.println("Connection: close"); client.print("Content-Length: "); client.println(dataToSend.length()); client.println(""); client.println(dataToSend); Serial.println(" OK - Data Parsed"); } Serial.println(" OK - Getting Responce"); Serial.println(""); // baca kembali dari server while(1) { if(client.available()) { char c = client.read(); Serial.print(c); } if(!client.connected()) { break; } } Serial.println(" Success - Data is Parsed"); Serial.println("________________________________________"); Serial.println(""); }
Akhirnya, data dikirim ke Soracom. Perangkat membangun koneksi dengan server dan kemudian menyiapkan kredensial. Data kemudian dikirim ke server dan respons dicetak ke Serial Monitor.
Perangkat kemudian tidur untuk jumlah waktu yang ditentukan dan mengulangi langkah-langkahnya lagi.
Langkah 4: Mengatur Variabel
Beberapa variabel harus diedit oleh pengguna sebelum proyek dapat digunakan. Variabel yang dapat diedit ada di file utama kode. Ini dijelaskan di bawah ini.
deviceName mewakili nama kustom perangkat. Ini dikirim bersama dengan payload ke Soracom, berguna untuk mengidentifikasi perangkat saat mengelola armada perangkat.
sleepTime adalah jumlah waktu (dalam milidetik) yang akan ditidurkannya perangkat antara pembacaan. Perangkat akan tidur antara pembacaan untuk mengurangi baterai yang dikonsumsi.
proDebug diatur ke true jika proses debug dan ke false jika tidak. Jika proDebug diaktifkan, perangkat memerlukan koneksi ke komputer dengan serial monitor nyala untuk bekerja. Atur ke true saat debugging tetapi pastikan diatur ke false jika berada di lapangan. Perhatikan bahwa perangkat tetap akan mencetak ke serial meskipun proDebug false;
Langkah 5: Mengatur 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 mempersiapkan kartu SD.
Langkah 6: Unggah Kode
Sebelum menyiapkan backend, data harus dikirim ke sana.
Untuk melakukannya, hubungkan MKR GSM Anda ke komputer dan unggah kode ke perangkat, pastikan mode perangkat diatur ke 1 untuk pengaturan ini. Setelah kode diunggah, letakkan semua sensor dalam air.
Sekarang tekan tombol pada perangkat dan tunggu sampai data dikumpulkan dan dikirim. Ulangi ini beberapa kali untuk mengisi Soracom Air.
Langkah 7: Mengatur Soracom
Langkah ini dibagi menjadi 2 bagian, bagian pertama akan membahas pembuatan akun di Soracom dan pendaftaran SIM Anda sementara bagian lain akan membahas pengaturan Soracom Harvest untuk mengumpulkan data dari Air. Jika Anda sudah memiliki akun di Soracom, lewati bagian pertama.
Bagian 1: Membuat Akun
Bagian 2: Grup dan Harvest
Langkah 8: Mengatur Soracom Lagoon
Hal terakhir yang harus diatur di Soracom adalah Lagoon, ini adalah alat yang akan kita gunakan untuk memvisualisasikan data kita dan membuat peringatan email jika data tidak baik. Ikuti langkah-langkah di bawah ini.
Pustaka
ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence pustaka ini berada di domain publik
MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence pustaka ini berada di domain publik
Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence pustaka ini berada di domain publik
OneWire (c) 2007 Jim Studt GNU General Public Licence pustaka ini berada di domain publik
DallasTemperature GNU General Public Licence pustaka ini berada di domain publik
RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence pustaka ini berada di domain publik
SPI (c) 2015 Hristo Gochkov Lesser GNU Lesser General Public Licence pustaka ini berada di domain publik
SD (C) 2010 SparkFun Electronics GNU General Public Licence pustaka ini berada di domain publik
Akhir
Akhirnya saya mendesain kotak pelindung untuk proyek ini, akan lebih baik jika bagian atas kotak pelindung transparan sehingga sensor UV dapat ditempatkan di dalam kotak pelindung, saya menempatkan sensor saya di luar kotak pelindung untuk mencegah gangguan apa pun.
Akhirnya, pastikan semua variabel telah diatur dan kemudian letakkan perangkat di lapangan, seharusnya sudah siap memantau semua parameter sekarang.
Menggunakan Modul Kartu SD
Saya memilih untuk menggunakan Arduino MKR MEM shield karena mudah digunakan dan cukup kompak. Modul kartu SD juga dapat digunakan meskipun sebagian besar bekerja dengan 5v sementara MKR GSM hanya dapat menyediakan 3.3v, oleh karena itu konverter level diperlukan untuk menaikkan 3.3v ke 5v.
Latar Belakang
Saya mendapat ide ini saat naik bus melewati ladang. Saya ingat telah membaca tentang perangkat baru yang digunakan untuk memantau lahan pertanian tetapi saya dibuat menyadari biaya yang sebagian besar tidak terjangkau bagi petani.
Jadi saya memutuskan untuk menggunakan Arduino dengan biaya rendah untuk memantau berbagai parameter di pertanian dan mengizinkan setiap pertanian, besar atau kecil, untuk memasuki era IoT dan smart farming.