Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Un sistem automat de colectare a informațiilor aplicat plantației de ceai. Face parte din colectarea inteligentă a informațiilor agricole.
Pasul 1: Lucruri utilizate în acest proiect
Componente hardware
- Grove - Senzor de dioxid de carbon (MH-Z16)
- Grove - senzor digital de lumină
- Grove - Senzor de praf (PPD42NS)
- Grove - Senzor de oxigen (ME2-O2-Ф20)
- Senzor de umiditate și temperatură a solului
- LoRa LoRaWAN Gateway - Kit 868MHz cu Raspberry Pi 3
- Grove - Senzor de temp & Humi și barometru (BME280)
Aplicații software și servicii online
Microsoft Visual Studio 2015
Pasul 2: Poveste
Agricultura inteligentă este de a aplica tehnologia Internetului obiectelor agriculturii tradiționale, folosind senzori și software pentru a controla producția agricolă prin intermediul platformelor mobile sau computerizate, făcând agricultura tradițională mai „inteligentă”.
Pe muntele Mengding la nord-est de Ya’an, Sichuan, creasta montană se îndreaptă spre vest spre est, într-o mare verde. Aceasta este o priveliște familiară pentru Deng, în vârstă de 36 de ani, unul dintre puținii producători de ceai Mengding din generația sa, cu o plantație de 50mu (= 3,3 hectare) situată la 1100m nivel deasupra mării. Deng provine dintr-o familie de producători de ceai, dar continuarea moștenirii familiei nu este o sarcină ușoară. „Ceaiurile noastre sunt cultivate la mare altitudine într-un mediu organic pentru a asigura calitatea sa excelentă. Dar, în același timp, densitatea de creștere este scăzută, costul este ridicat și înmugurirea este inegală, ceea ce face ca ceaiul să fie greu de recoltat. De aceea, ceaiurile de munte sunt în mod normal recolte mici, iar valorile lor nu se reflectă pe piață. În ultimii doi ani, Deng a încercat să sensibilizeze consumatorii cu privire la ceaiul de munte pentru a le promova valoarea. Și când l-a întâlnit pe Fan, care căuta o plantație pentru a implementa tehnologia IoTea a lui Seeed, s-a făcut o potrivire perfectă pentru o soluție. Soluția Seeed IoTea își propune să ajute fermierii de ceai să gestioneze mai bine plantațiile fără a modifica practicile tradiționale de cultivare a ceaiului și să prezinte date de mediu în timp real din plantații pe o platformă deschisă.
Compus din senzori, noduri și gateway-uri, IoTea colectează date în timp real ale factorilor care pot afecta calitatea ceaiului în timpul cultivării și proceselor de producție, inclusiv temperatura și umiditatea, CO2, O2, PM și expunerea la lumină. Datele sunt colectate de senzori, trimise de noduri către gateway și în cele din urmă către cloud și sunt accesibile clienților finali pe o pagină web.
Pasul 3: Conexiune hardware
Pasul 1: conexiune gateway
Gateway-ul este instalat separat într-o cutie. Având în vedere problema disipării căldurii, am adăugat 2 ventilatoare. Una este pentru disiparea căldurii Raspberry Pi, cealaltă este pentru circulația aerului intern și extern. Cutia de intrare este plasată în casa unui fermier, deci nu este nevoie să luăm în considerare problema alimentării sale.
Pasul 2: Conexiune nod
Nodul este terminalul datelor, iar toate datele originale sunt obținute de aici. Există 6 senzori conectați la nod. În plus față de senzorul de umiditate și temperatură a solului, punem alți senzori în cutia de ferestre.
Nodul este plasat într-o cutie impermeabilă. Pentru a avea o conexiune mai bună la nod, realizăm o placă de adaptor. În cele din urmă, vom furniza linkul de descărcare a schemei acestei plăci. Așa cum se arată mai jos, cablurile senzorilor sunt conectate la placa adaptorului prin blocuri de borne. Folosim 3 tuburi MOS (SI2301) pentru a construi circuite de comutare pentru a controla pornirea și oprirea senzorilor și a ventilatorului. Ventilatorul este folosit pentru a se răci. Avem un senzor de temperatură (DS18B20) montat pe placă. Ne poate spune temperatura internă a cutiei și apoi microcontrolerul decide dacă porniți ventilatorul. Folosim mai multe rezistențe pentru a realiza un circuit divizor de tensiune pentru a măsura tensiunea bateriei plumb-acid. În cele din urmă, rezervăm 3 interfețe IIC și port serial pe placă pentru extindere și depanare ulterioară.
Să vorbim despre problema alimentării cu energie a nodului. Nodul este plasat în plantația de ceai la întâmplare, astfel încât metoda tradițională de alimentare nu mai este aplicabilă. Utilizarea unei soluții de energie solară este o idee bună. Există multe soluții oferite pe piață în prezent. Putem selecta una dintre ele care să răspundă nevoilor noastre. Există 3 părți în soluția pe care am ales-o: panou solar, regulator de încărcare solară și baterie cu plumb acid. Pentru a capta mai bine energia solară, punem panoul solar pe partea superioară a suportului și ajustăm unghiul acestuia pentru a ne asigura că este orientat spre soare. Am plasat controlerul de încărcare solară în aceeași cutie cu nod. Deoarece nu există spațiu suplimentar în interiorul cutiei, a trebuit să găsim o nouă cutie impermeabilă pentru a plasa bateria cu plumb acid.
Pasul 4: Configurarea software-ului
Nodul
În această secțiune, vom introduce în principal configurația software a nodului.
DataFormat
Date încărcate de nod către gateway:
unsigned char Lora_data [15] = {0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
Înțelesul fiecărui bit de date:
Lora_data [0] temperature Temperatura aerului, ℃
Lora_data [1] humidity Umiditatea aerului,%
Lora_data [2] : Altitudine mare opt, m
Lora_data [3] : Altitudine scăzută opt
Lora_data [4] concentration Concentrație de CO2 ridicată opt, ppm
Lora_data [5] concentration Concentrație de CO2 scăzută opt
Lora_data [6] : Concentrație de praf mare opt, bucăți / 0,01cf
Lora_data [7] : Concentrație de praf scăzută opt
Lora_data [8] : Intensitate luminoasă mare opt, lux
Lora_data [9] intensity Intensitatea luminii scăzută opt
Lora_data [10] concentration Concentrație de O2,% (date brute împărțite la 1000)
Lora_data [11] : Temperatura solului, ℃
Lora_data [12] : Umiditatea solului,%
Lora_data [13] voltage Tensiunea bateriei, v
Lora_data [14] code Cod de eroare al senzorilor
Cod de eroare:
Lora_data [14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
Înțelesul fiecărui bit:
bit 0: 1 ---- Eroare senzor Temp & Humi & Barometer (BME280)
bit 1: 1 ---- Eroare senzor dioxid de carbon (MH-Z16)
bit 2: 1 ---- Eroare senzor de praf (PPD42NS)
bit 3: 1 ---- Eroare senzor digital de lumină
bit 4: 1 ---- Eroare senzor oxigen (ME2-O2-Ф20)
bit 5: 1 ---- Umiditatea solului și eroarea senzorului de temperatură
bit 6: Rezervat
bit 7: Rezervat
Am făcut un Error_code_transform.exe, îl deschidem și introducem codul de eroare în hexazecimal, veți ști rapid ce senzor este eroare. Linkul de descărcare se află la sfârșitul acestui articol.
Reglarea parametrilor: a) Ciclul de transmitere a datelor
// seeedtea.ino
#defineinterval_time 600 // secundă
Acest parametru poate fi modificat pentru a modifica ciclul de transmisie a datelor. În fiecare ciclu, achiziția de date durează aproximativ 1 minut. Deci, nu este recomandat să modificați această valoare la mai puțin de 60 de secunde.
b) Timp de încălzire a senzorului de praf
//seeedtea.ino
#definePreheat_time 30000 // DustSensor timp de încălzire, miliseond //Dust_other.cpp #definesampletime_ms 30000 // samplingtime30s
c) Coeficientul de tensiune
//POWER_Ctrl.cpp
#defineBattery_coefficient 0.159864 // Valoarea ADC × Battery_coefficient = battery_voltage #defineSolar_coefficient 0.22559 // ADC value × Solar_coefficient = solar_voltage
Acești doi parametri sunt calculați pe baza circuitului divizor de tensiune.
d) Pragul temperaturii de deschidere a ventilatorului
//POWER_Ctrl.cpp
#defineFan_start_temp 45 // temperaturaethreshold #defineFan_start_light 500 // intensitatea luminii
Când temperatura reală depășește pragul, ventilatorul va începe să se răcească.
e) Parametru de inițializare a senzorului O2
//Oxygen.cpp
# defineO2_percentage 208.00 //20.8%
f) Comutator macro
//seeedtea.ino
. *** Mod de control DS18B20 ********************** / #defineSlower_Mode // Mod lent cu temperatura. Comentariul este modul rapid
g) Maparea pinilor
D2: indicator LED și microcontroler extern de resetare IIC: SCL și SDA
//Dust_other.h
#defineDust_pin 3 // Senzor de praf //CO2.cpp # defineCO2_serial Serial1 // utilizează hardwareserial port (D0 & D1) //seeedtea.ino #definedataPin 6 // Solul de date pin #defineclockPin 7 // Solul ceas pin // POWER_Ctrl. h # defineDS18B20_pin 8 // DS18B20 #defineFan_pin 9 // Fan #defineAir_CtrlPin 10 // Pin de control pentru senzorii amplasați în fereastră #defineSoil_CtrlPin 11 // Umiditatea solului și pinul comutatorului senzorului de temperatură #defineBattery_pin A2 // Măsurați tensiunea bateriei #defineSolar_pin A3 / / Măsurați tensiunea panoului solar //Oxygen.h # defineO2_pin A1 // O2 senzor
h) Cronometru de supraveghere
Cronometrul câinelui de pază este utilizat pentru a monitoriza starea de funcționare a sistemului. Când sistemul funcționează anormal, nodul va fi resetat, astfel încât să poată rula continuu pentru o lungă perioadă de timp.
Biblioteca la care se face referire:
- Adafruit_SleepyDog.h a fost adăugat la proiect
- Adafruit_ASFcore-master.zip este ambalat în folderul proiectului și trebuie adăugat manual la Arduino IDE.
Funcții conexe:
Activați câinele de pază
int WatchdogSAMD:: enable (int maxPeriodMS, bool isForSleep)
Parametrii de intrare:
Int maxPeriodMS: Timp de așteptare în milisecunde. Maximul permis este de 16000 de milisecunde.
valoare returnată:
Tipul Int, returnează timpul efectiv de așteptare
Resetați câinele de pază
void WatchdogSAMD:: reset ()
Apelați această funcție pentru a reseta cronometrul câinelui de pază, denumit „hrănirea câinelui”. Depășirea timpului de așteptare fără resetare va determina repornirea nodului.
Oprește câinele de pază
void WatchdogSAMD:: disable ()
Gateway
În această secțiune vom introduce cum să vă conectați la serverul Loriot.
Pasul 1: Înregistrare Loriot Server Gateway
a) Noul utilizator trebuie mai întâi să înregistreze un cont, faceți clic pe adresa de înregistrare. Completați Numele de utilizator, Parola și adresa de e-mail pentru a vă înregistra, după înregistrare vă va fi trimis un e-mail, vă rugăm să urmați instrucțiunile din e-mail pentru a activa.
b) După activarea cu succes, faceți clic aici pentru a vă conecta. Nivelul implicit este „Rețea comunitară”, acesta acceptă 1 Gateway (RHF2S001) și 10 noduri.
c) Introduceți tabloul de bord -> Gateway, faceți clic pe Add Gateway start pentru a adăuga Gateway.
d) Selectați Raspberry Pi 3
e) Setați după cum urmează:
- Front-end radio -> RHF2S001 868/915 MHz (SX1257)
- BUS -> SPI
f) Completați adresa MAC a RHF2S001, trebuie să fie în format b8: 27: eb: xx: xx: xx. Și, de asemenea, introduceți informații despre locația gateway-ului.
g) Faceți clic pe „Înregistrați gateway-ul Raspberry Pi” pentru a finaliza înregistrarea.
h) Faceți clic pe gateway-ul înregistrat pentru a intra în pagina de configurare, comutați manual „Planul de frecvență”, planul dvs. aici este decis de tipul tipului dvs. RHF2S001, planul disponibil este CN470 , CN473 , CN434 , CN780 , EU868, după selectare vă rugăm să reîmprospătați pagina pentru a obține canalul exact. În acest wiki alegem EU868.
i) Rulați comanda în terminalul de chit :
cd /home/rxhf/loriot/1.0.2
sudo systemctl stop pktfwd sudo gwrst wget > -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io
j) Finish gateway registration. You will see the gateway is Connected now. Next is to register node.
Pasul 2: dispozitivul Loriot Server Connect Node
a) Obțineți canalele gateway disponibile
Canalele gateway-ului curent pot fi obținute de la Tabloul de bord -> Gateway -> Gateway-ul dvs., puteți vedea canalele disponibile ca în imaginea de mai jos.
b) Configurare GPS Seeeduino LoRAWAN (RHF3M076)
Deschideți monitorul serial al ArduinoIDE, atingeți comanda de mai jos.
la + ch
Pentru a confirma canalul implicit al GPS-ului dvs. Seeeduino_LoRAWAN, veți primi 3 canale. Dacă nu există un canal disponibil, puteți schimba canalele Seeeduino_LoRAWAN prin comanda de mai jos.
la + ch = 0, 868,1
la + ch = 1, 868,3 la + ch = 2, 868,5
Apoi puteți utiliza din nou la + ch pentru a verifica.
c) Adăugați GPS Seeeduino_LoRAWAN ca ABP NodeLog în serverul Loriot, Faceți clic pe Dash Board -> Aplicații -> SimpleApp. Faceți clic pe Import ABP , input de sub elemente
- DevAddr: Seeeduino_LoRAWAN GPS trece prin comanda "AT + ID" (Notă: Loriot nu acceptă conectorul de colon, trebuie să îl eliminați manual)
- FCntUp : Setto 1
- FCntDn : Setto 1
- NWKSKEY : Valoare implicită 2B7E151628AED2A6ABF7158809CF4F3C
- APPSKEY : Valoare implicită 2B7E151628AED2A6ABF7158809CF4F3C
- EUI : DEVEUI, Seeeduino_LoRAWAN GPS trece prin comanda „AT + ID”
Faceți clic pe butonul Import dispozitiv pentru a finaliza importul dispozitivului. Acum alegeți Tablou de bord-> Aplicații -> SampleApp, veți vedea noul nod ABP pe care tocmai l-ați adăugat.
d) Trimiteți date de la Seeeduino_LoRAWAN
ATENŢIE! Acesta este doar un test.
Înapoi la monitorul serial al ArduinoIDE, trimiteți comanda:
AT + CMSGHEX = "0a 0b 0c 0d 0e"
Apoi accesați Tablou de bord -> Aplicații -> SampleApp -> Dispozitiv, faceți clic pe Node Device EUI sau DevAddr, veți găsi datele pe care tocmai le-ați trimis aici.
Pentru detalii, vă rugăm să consultați acest wiki.
Pasul 5: Construirea site-ului web
Instrumente conexe
- virtualenv
- Python3
- Gunicorn
- Supervizor
- Nginx
- MySQL
Folosim CentOS7 ca mediu de implementare de testare
virtualenv
Utilizați virtualenv pentru a crea un mediu de producție python3 independent
a) instalați
pip instala virtualenv
b) creați un mediu virtual python3
virtualenv -p python3 iotea
c) porniți mediul virtual și introduceți directorul iotea
coș sursă / activați
d) există mediu
dezactivați
Python3
a) instalați
instalează epel-release
instalează python36
b) instalați biblioteca dependentă PyMySQL, DBUtils, Flask, websocket-client, configparser
pip instalează pymysql
pip install dbutils pip install flask pip install websocket-client pip install configparser
Gunicorn
a) instalați (în mediul Python3)
pip instala gunicorn
b) rulați proiectul balon (sub directorul de proiecte iotea)
gunicorn -w 5 -b 0.0.0.0:5000 app: app
c) rulați websocket-clint pentru a obține date loriot
gunicorn loriot: app
d) vizualizarea arborelui procesului Gunicorn
pstree -ap | grep gunicorn
Supervizor
a) instalați (utilizator root)
supraveghetor instalare pip
b) generați fișiere de configurare
echo_supervisord_conf> /etc/supervisord.conf
c) creați un director și introduceți o configurație de director
mkdir -p /etc/supervisor/conf.d
Editați /etc/supervisord.conf și modificați câmpul de fișiere sub [include] la sfârșitul fișierului.
Rețineți că trebuie să eliminați „;” în fața acestor două rânduri, care este personajul de comentariu.
[include]
Files = /etc/supervisor/conf.d/*.conf
Mijloace pentru a introduce /etc/supervisor/conf.d/. Următorul fișier de configurare este utilizat ca fișier de configurare a procesului (monitorizat de supraveghetor).
d) configurație primită (sub directorul iotea)
cp iotea.conf /etc/supervisor/conf.d/
cp loriot.conf /etc/supervisor/conf.d/
e) deschide iotea serve
superviosrctl reîncarcă #reload fișierul de configurare
superviosrctl start loriot #open loriot data reception superviosrctl start iotea #open the iotea flask application
f) alte operațiuni comune
supervisorctl reîncarcă # reîncarcă fișierul de configurare
supervisorctl update supervorctl start xxx supervisorctl stop xxx supervisorctl status xxx supervisorctl help # view more command
Nginx
a) instalați
instalează -y nginx
b) configurare
cp NginxIotea.conf /etc/nginx/conf.d/
c) porniți Nginx
systemctl pornește nginx.service
MySQL
a) parametrii aferenți
user = 'root'
passwd = '1234' db = 'iotea' port = 3306
b) dosar
iotea_iotea.sql
c) fișier de configurare
db.ini