
Proyek ini bertujuan untuk membangun stasiun bertenaga surya pertanian pertanian yang independen untuk aplikasi pertanian presisi perangkat ini didasarkan pada raspberry pi & arduino dengan anemometer ultrasonik dan sensor tanah resistif dan dht22 untuk tuan rumah & kelembaban yang tersedia sesuai dengan apa pun yang tersedia sesuai dengan apa pun yang disediakan oleh loco, dan informasi yang diserahkan oleh loco yang tersedia secara spesifik, data dan informasi analisis, dan informasi analisis yang dikirimkan secara spesifik, dan informasi analisis. Dongle), Farmos membantu Anda mengelola data sensor besar dengan mudah sambil memantau semua sensor dan laporan pertanian dalam satu platform, itu juga dapat bertindak sebagai DAA untuk aplikasi lain. Produk ini adalah yang pertama dari lini Farmtopia IOF (Internet of Farm) dan dibuka untuk mendukung Misi Godan untuk data pertanian yang mudah & terbuka yang dapat bekerja baik stasioner dan mobile dan dapat dengan mudah direplikasi di rumah seperti yang dijelaskan di sini
| Data yang diukur | Bagaimana |
|---|---|
| Kecepatan angin & frekuensi dalam arah 3-dimensi | Dengan menghitung kesalahan ultrasonik |
| Suhu & Kelembaban Udara | Sensor AM2301 |
| Lokasi GPS | USB GBS Dongle |
| Kelembaban tanah | Sensor tanah resistif |
| Add-on opsional | / |
Raspberry Pi Set: yang merupakan komputer RP dengan SD yang dimuat dengan Raspberry OS, dan kamera pinoir (opsional) 6xultrasonic anemometer: ditempatkan dalam arah tegak lurus yang saling berhadapan (XYZ) sebagai jaringan dengan alat yang berbeda atau pemicu yang berbeda. Dongles: GPS Dongle (Opsional/Anda dapat memasukkan Koordinat GPS secara manual), 4G Dongle (Opsional) Jika tidak ada Cakupan Surya WiFi: Panel Surya 30W dasar yang menagih baterai Polymer Super -Power yang juga mengarahkan power yang juga mengarahkan Paket Paket UPS melalui Kabel USB yang bertanggung jawab untuk memberi daya pada Rasp yang mengarah ke Paket UPS. Konfigurasi ini bertujuan untuk menstabilkan Farmos Catu Daya RPI: yang merupakan sistem manajemen open-source pertanian yang akan bertindak sebagai antarmuka sistem untuk melihat dan menganalisis data sensor.
| Nomor | Perangkat |
|---|---|
| 1 | Versi Raspberry Pi 4, 8GB |
| 1 | Kartu SD 128 |
| 1 | Arduino mega 2560 |
| 1 | Kabel USB Arduino |
| 6 | JSNR04T Ultrasonics (ditempatkan terpisah 40 cm) |
| 1 | AM2301 Sensor Suhu & Kelembaban |
| 1 | Modul Sensor Kelembaban Tanah Arduino |
| 1 | Raspberry Pi 4 Battery Pack Ups |
| 1 | Kabel Mini-USB ke USB |
| 1 | MPPT Solar Charger Controller 20A 12/24VDC dengan output USB |
| 1 | 12V Super Polymer Li-Ion Baterai-6800 MAh |
| 1 | Panel surya 18V 30W |
| 1 | Bingkai stasiun cuaca 3D dicetak atau kandang stanlesteel |
| Nomor | Perangkat |
|---|---|
| 1 | Layar sentuh |
| 1 | Kamera Raspberry Pinoir 2 |
| 1 | Dongle GPS Raspberry USB |
| 1 | Sensor IR MLX9046 |

| Nama file | Keterangan |
|---|---|
| Readme.md | Pendahuluan Proyek |
| Arduino_weather.ino | Aplikasi Arduino Sensing Cuaca Utama |
| DHT.CPP | DHT Driver & Class Functionalites untuk AM2301 |
| DHT.H | File header untuk DHT Class & Function Documentation |
| Khusus_debug_functions.ino | Kasus Uji Unit sebagai Program Debug |
| Wind_auto.cpp | Fungsi Pengukuran Cuaca |
| Wind_auto.h | File Header untuk Kelas Angin & Dokumentasi Fungsi |
| agregator.sh | RPI Bash Script Untuk Menangkap Paket JSON Serial dan Agregat Arduino ke Server Farmos |
-Pert Install RPI OS (Versi Lengkap) pada kartu SD 128GB, disarankan agar SD secepat mungkin untuk meningkatkan kinerja PI secara keseluruhan. Jika Anda menggunakan PI tanpa kepala, aktifkan SSH pada file konfigurasi, Anda dapat menemukannya di partisi boot
-Sebagian besar dependensi ini mungkin diinstal sebelumnya namun itu ide yang bagus untuk memeriksa ulang:
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo apt-get install php5 -y
sudo apt install php-gd php-xml php-xmlrpc
sudo apt install mariadb-server
sudo apt-get install apache2 -y
sudo apt-get install gpsd gpsd-clients python-gps
sudo apt-get install arduino
git clone https://github.com/tbird20d/grabserial
-Instal Docker dengan CLI
sudo curl -sSL https://get.docker.com | sudo sh
sudo pip3 install docker-compose
sudo systemctl enable docker
-Instalasi Farmos secara lokal di Docker
Farmos adalah aplikasi berbasis web untuk manajemen pertanian, perencanaan, dan pencatatan. Ini dikembangkan oleh komunitas petani, pengembang, peneliti, dan organisasi dengan tujuan menyediakan platform standar untuk pengumpulan dan manajemen data pertanian.
Kami menggunakan FarmOS untuk berinteraksi dengan cepat dengan sensor dan menganalisis data besar mereka
git clone https://github.com/farmOS/farmOS.git
cd farmOS
sudo docker build -t farmos .
sudo docker run -p 80:80 -v ${PWD}/.data/www:/var/www/html farmos
Anda harus merujuk ke panduan ini di situs web resmi Farmos untuk lebih jelasnya
Anda dapat merujuk ke panduan online ini untuk membantu Anda mengonfigurasi instalasi FarmOS
Pertama, pastikan modul sensor di FarmOS diaktifkan, Anda dapat mengaktifkan dan menambahkan modul melalui cabang pengembangan (hanya benar -benar pengguna super di platform lokal), jika Anda menggunakan layanan hosting, pastikan untuk meminta mereka untuk mengaktifkan modul Sensor.
Instal perpustakaan berikut dengan Manajer Perpustakaan Arduino Anda di Sketsa> Sertakan Perpustakaan> Kelola Perpustakaan ... Softwareserial
Anda dapat merujuk ke perpustakaan DHT Adafruit untuk doucmentasi DHT, namun untuk beberapa alasan mereka tidak membaca suhu & kelembaban bersama -sama sehingga kami akan menggunakan fungsi DHT.Read dengan data [] buffer dalam fungsi baru yang disebut Renew_temp_hu (DHT, Float*, Float*).
Dibangun di atas dua kelas, JSNR04T yang merupakan kelas antarmuka yang memberikan contoh chip ultrasonik JSNR04T dalam mode otomatis , dengan fungsi yang diperlukan untuk menggunakan perangkat sebagai alat pengukuran angin dengan menggunakan perbedaan dalam membaca pengukuran ultrasonik dengan kecepatan suara yang dikoreksi sendiri yang dihitung dari suhu & kelembaban udara. dan kelas angin yang membentuk logika matematika pada data yang direkam untuk menghasilkan detail cuaca yang diperlukan.
| Nama fungsi | Masukan | Kembali | Keterangan |
|---|---|---|---|
| JSNR04T (Konstruktor) | uint8_t enpin, uint8_t rxpin, tipe uint8_t, uint16_t max_range) | ruang kosong | Membangun objek baru tipe JSNR0RT yang berperilaku sebagai contoh driver ultrasonik dengan enpin untuk mengaktifkan ground, rxpin untuk echo & jenis untuk jenis operasi. |
| Jsnr04t.begin | ruang kosong | ruang kosong | Mengaktifkan (pemicu) ultrasonik kemudian mengidentifikasi & memulai komunikasi serial baru dengannya. |
| Jsnr04t.virtual_trigger | ruang kosong | ruang kosong | Atur pin ground untuk ultrasonik ke rendah sehingga memulai operasi normal. |
| JSNR04T.ResetTimeout | UInt8_t Timeout | ruang kosong | Ubah batas waktu milidetik dari ukuran ultrasonik untuk mengubah jangkauan. |
| Jsnr04t.normalize | ruang kosong | ruang kosong | Jarak remeasure antara dua ultrasonik dalam kondisi tanpa angin untuk memperbarui nowind_distance. |
| Jsnr04t.readjsnr04tserial | ruang kosong | int | Membaca output gema serial dari ultrasonik dan mengubahnya menjadi int/nan jika terjadi pembacaan yang tidak valid. |
| Jsnr04t.get_selfecho | ruang kosong | uint16_t | Reset waktu tunggu untuk mengubah jangkauan sehingga sensor hanya membacanya gema. |
| Jsnr04t.get_selfwindspeed | ruang kosong | int | Membaca waktu yang dibutuhkan untuk ultrasonik untuk membaca gema sendiri (perjalanan pulang pergi) dan mengubahnya menjadi kecepatan angin. |
| Jsnr04t.transform_read | uint16_t x | mengambang | Mengubah jarak yang diukur dengan ultrasonik dari mm ke kecepatan angin (relatif terhadap kecepatan suara). |
| Angin (konstruktor) | Jsnr04t*, jsnr04t* | ruang kosong | Membangun objek angin tipe yang menggunakan sepasang ultrasonik untuk mengukur kecepatan angin di antara mereka. |
| Wind.update | ruang kosong | ruang kosong | Perbarui Nilai Kelas Kecepatan Angin Dengan Membaca Baru, juga menghitung laju perubahan kecepatan angin. |
| Wind.get_avergewind | ruang kosong | mengambang | Menghitung rata -rata 4 pengukuran antara pasangan ultrasonik sesuai dengan mode kerja. |
| Wind.get_echofromahead | ruang kosong | uint16_t | Membaca gema sensor yang menghadap. |
| Renew_temp_hu | Dht, float* temp, float* hum | ruang kosong | memperbarui nilai suhu dan kelembaban untuk sensor DHT yang diberikan |
| get_speedofsound | Float TC, float RH | mengambang | memperkirakan kecepatan suara dalam suhu udara dan kelembaban yang diberikan menurut |
| set_windsensor | DHT | ruang kosong | melewati penunjuk DHT ke kelas angin |
| get_echofromahead | Jsnr04t u1, jsnr04t u2 | int | Fungsi indepandt juga membaca gema sensor menghadap (untuk pengujian). |
| Wind_cycle | Angin* windx, angin* berangin, angin* windz | ruang kosong | menghitung dan memperbarui kecepatan angin dan rata -rata (50 rata -rata pengukuran) kecepatan angin dari 3 objek angin yang mewakili angin dalam 3D. |
Tentukan nilai & konfigurasi pin yang diperlukan, buat objek siklus sesuai dengan jenis konfigurasi & sensor pin, identifikasi variabel siklus
#define DHTPIN 53
#define mutual 0
#define soil_analog A0
#define soil_max 550
#define soil_min 10
#define Cycle_offset 10
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);
JSNR04T Ux1(45,10,mutual,2000) ,Ux2(37,13,mutual,2000),Uy1(47,50,mutual,2000),Uy2(31,10,mutual,2000) ,Uz1(41,12,mutual,2000),Uz2(39,11,mutual,2000);
Wind WindX(&Ux1,&Ux2), WindY(&Uy1,&Uy2) ,WindZ(&Uz1,&Uz2);
float CycTemp , CycHum , _CSS=340 , winspeed;
Hubungi wind_cycle untuk memperbarui semua nilai
wind_cycle(&WindX ,&WindY, &WindZ);
Atau hubungi wind.pdate untuk memperbarui kecepatan instan dari dimensi apa pun
Windx.update();
Cetak nilai ke port serial sebagai JSON.
"parameter": "nilai",
Serial.print(""Wind_Speed_x": ");Serial.print(""");Serial.print(WindX.avgwind);Serial.print(""");Serial.print(" , ");
Serial.print(""Maximum_Speed_x": ");Serial.print(""");Serial.print(WindX.maxwind);Serial.print(" , ");
Serial.print(""Minmimum_Speed_x": ");Serial.print(""");Serial.print(WindX.minwind);Serial.print(""");Serial.print(" , ");
Serial.print(""Wind_frequencyofchange_x": ");Serial.print(""");Serial.print(WindX.gust);Serial.print(""");Serial.print(" , ");
Gunakan AllMiss untuk mengadaptasi penundaan siklus untuk kesalahan pengukuran sebagai berikut
cycledelay=19000; // or as you preferred settings depending on power consumption
allmiss=(WindX._selfmiss+WindY._selfmiss+WindZ._selfmiss)*selfecho_timeout; // adobt self cycle delay into main delay
allmiss+=(WindX._aheadmiss+WindY._aheadmiss+WindZ._aheadmiss)*headecho_timeout;
allmiss+= _tempmiss;
_tempmiss=0;
cycledelay-=allmiss;
delay(cycledelay);
Gunakan spesial_debug_functions.ino untuk mendiagnosis aplikasi dengan tes unit loncatan.
if(dht.working) //doesn't update before 2 seconds
delay(10);
ultradis=Uz1.get_selfecho();
Serial.print("ultrasonic z1 is ");Serial.println(ultradis);
winspeed=Uz1.transform_read(ultradis);
Serial.print("ultrasonic z1 windspeed "); Serial.println(winspeed);
ultradis=Uz2.get_selfecho();
Serial.print("ultrasonic z2 is ");Serial.println(ultradis);
winspeed=Uz2.transform_read(ultradis);
Serial.print("average is");Serial.println(winspeed);
delay(1000);
winspeed=WindZ.get_avergewind();
Serial.print("average wind is ");Serial.println(winspeed);
wind_cycle(&WindX ,&WindY, &WindZ);
allmiss=(WindX._selfmiss+WindY._selfmiss+WindZ._selfmiss)*selfecho_timeout;
allmiss+=(WindX._aheadmiss+WindY._aheadmiss+WindZ._aheadmiss)*headecho_timeout;
allmiss+= _tempmiss;
//build the diagnostic or unit test according to your needs
Pekerjaan cron mengaktifkan skrip setiap 10 menit, penggunaan skrip gabungan untuk menangkap serial Arduino selama 30 detik dan me -restart penghitungan ketika menangkap braket paket JSON dan berhenti ketika braket dekat terlihat saat mengambil Arduino 10 detik (100 sampel rata -rata) untuk merekam pembacaan baru, batas siklus dapat diadopsi dengan mereduksi penangkapan. Penggunaan skrip (ganti! Public_key &! Private_key dengan konfigurasi sensor Anda
python3 /home/pi/grabserial/grabserial -d /dev/ttyACM0 -b 9600 -o /home/pi/serialtest.json -e 30 -m "^{.*" -q "}"
curl -H "Content-Type: application/json" -X POST -d "@/home/pi/serialtest.json" https://farmtopia.farmos.net/farm/sensor/listener/!public_key?private_key=!private_key --verbose
Proyek OpenSource ini dan semua komponennya adalah satu -satunya tanggung jawab pengembangnya, dan meskipun Farmtopia menggunakan perangkat serupa untuk membangun versi komersial dari stasiun cuaca ini, ia tidak selalu menggunakan kode sumber kode atau logika atau perangkat keras yang sama atau tidak bertanggung jawab atas validitas atau penerapan proyek openSource ini.
Lisensi MIT