Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Automatyczny system zbierania informacji zastosowany na plantacji herbaty. Jest częścią inteligentnego zbierania informacji rolniczych.
Krok 1: Rzeczy użyte w tym projekcie
Komponenty sprzętowe
- Grove - czujnik dwutlenku węgla (MH-Z16)
- Grove - cyfrowy czujnik światła
- Grove - czujnik kurzu (PPD42NS)
- Grove - czujnik tlenu (ME2-O2-Ф20)
- Czujnik wilgotności gleby i temperatury
- LoRa LoRaWAN Gateway - zestaw 868MHz z Raspberry Pi 3
- Grove - Czujnik temperatury i wilgotności oraz barometryczny (BME280)
Aplikacje i usługi online
Microsoft Visual Studio 2015
Krok 2: Historia
Inteligentne rolnictwo polega na zastosowaniu technologii Internetu Rzeczy w tradycyjnym rolnictwie, wykorzystując czujniki i oprogramowanie do sterowania produkcją rolną za pośrednictwem platform mobilnych lub komputerowych, czyniąc tradycyjne rolnictwo bardziej „inteligentnym”.
Na Górze Mengding na północny wschód od Ya'an w Syczuanie grzbiet górski biegnie z zachodu na wschód w morzu zieleni. To najbardziej znany widok 36-letniego Denga, jednego z nielicznych producentów herbaty Mengding swojego pokolenia, z plantacją o powierzchni 50mu (=3,3 hektara) położoną na wysokości 1100 m n.p.m. Deng pochodzi z rodziny producentów herbaty, ale kontynuacja rodzinnej spuścizny nie jest łatwym zadaniem. „Nasze herbaty są uprawiane na dużych wysokościach w ekologicznym środowisku, aby zapewnić ich doskonałą jakość. Ale jednocześnie gęstość wzrostu jest niska, koszt wysoki, a pączkowanie jest nierównomierne, co sprawia, że herbata jest trudna do zebrania. Dlatego herbaty wysokogórskie to zazwyczaj niewielkie zbiory, a ich wartość nie znajduje odzwierciedlenia na rynku”. Od dwóch lat Deng stara się zwiększać świadomość konsumentów na temat herbat wysokogórskich, aby promować ich wartość. A kiedy spotkał Fana, który szukał plantacji do wdrożenia technologii IoTea firmy Seeed, znalazł idealne rozwiązanie. Seeed IoTea Solution ma na celu pomóc hodowcom herbaty w lepszym zarządzaniu plantacjami bez zmiany tradycyjnych praktyk uprawy herbaty, a także prezentować w czasie rzeczywistym dane środowiskowe z plantacji na otwartej platformie.
Składająca się z czujników, węzłów i bram, IoTea zbiera w czasie rzeczywistym dane dotyczące czynników, które mogą wpływać na jakość herbaty podczas procesów uprawy i produkcji, w tym temperatury i wilgotności, CO2, O2, PM i ekspozycji na światło. Dane są zbierane przez sensory, wysyłane przez węzły do bramy, a ostatecznie do chmury i udostępniane klientom końcowym na stronie internetowej.
Krok 3: Połączenie sprzętowe
Krok 1: Połączenie bramy
Bramka jest montowana osobno w pudełku. Biorąc pod uwagę problem rozpraszania ciepła, dodaliśmy 2 wentylatory. Jeden służy do rozpraszania ciepła Raspberry Pi, drugi do wewnętrznej i zewnętrznej cyrkulacji powietrza. Skrzynka wjazdowa jest umieszczona w domu rolnika, więc nie musimy rozważać jej problemu z zasilaniem.
Krok 2: Połączenie z węzłem
Węzeł jest terminalem danych i stąd pobierane są wszystkie oryginalne dane. Do węzła podłączonych jest 6 czujników. Oprócz czujnika wilgotności i temperatury gleby, w skrzynce żaluzji umieszczamy inne czujniki.
Węzeł umieszczony jest w wodoszczelnym pudełku. Aby mieć lepsze połączenie z węzłem, wykonujemy płytkę adaptera. Na koniec udostępnimy link do pobrania schematu tej płyty. Jak pokazano poniżej, kable czujników są podłączane do płytki adaptera za pomocą listew zaciskowych. Używamy 3 lamp MOS (SI2301) do budowy obwodów przełączających do sterowania włączaniem i wyłączaniem czujników i wentylatora. Wentylator służy do schładzania. Posiadamy czujnik temperatury (DS18B20) zamontowany na płytce. Może nam powiedzieć o wewnętrznej temperaturze skrzynki, a następnie mikrokontroler decyduje, czy włączyć wentylator. Używamy kilku rezystorów do wykonania obwodu dzielnika napięcia do pomiaru napięcia akumulatora kwasowo-ołowiowego. Na koniec rezerwujemy 3 interfejsy IIC i port szeregowy na płycie do późniejszej rozbudowy i debugowania.
Porozmawiajmy o problemie zasilania węzła. Węzeł jest losowo umieszczany na plantacji herbaty, więc tradycyjna metoda zasilania nie ma już zastosowania. Dobrym pomysłem jest wykorzystanie energii słonecznej. Obecnie na rynku dostępnych jest wiele rozwiązań. Możemy wybrać jedną z nich, która odpowiada naszym potrzebom. W rozwiązaniu, które wybraliśmy, znajdują się 3 części: panel słoneczny, regulator ładowania słonecznego i akumulator kwasowo-ołowiowy. Aby lepiej wychwytywać energię słoneczną, umieszczamy panel słoneczny na górze wspornika i dostosowujemy jego kąt, aby był skierowany w stronę słońca. Umieściliśmy kontroler ładowania słonecznego w tym samym pudełku z węzłem. Ponieważ w pudełku nie ma dodatkowej przestrzeni, musieliśmy znaleźć nowe wodoodporne pudełko do umieszczenia akumulatora kwasowo-ołowiowego.
Krok 4: Konfiguracja oprogramowania
Węzeł
W tej sekcji przedstawimy głównie konfigurację oprogramowania węzła.
Format danych
Dane przesłane przez węzeł do bramy:
unsigned char Lora_data[15] ={0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
Znaczenie każdego bitu danych:
Lora_data[0] :Temperatura powietrza, ℃
Lora_data[1] :Wilgotność powietrza, %
Lora_data [2] :Wysokość osiem, m
Lora_data [3] :Niska ósemka
Lora_data [4] :Stężenie CO2 wysokie osiem, ppm
Lora_data [5]: stężenie CO2 niskie osiem
Lora_data [6] :Stężenie pyłu wysokie osiem, szt./0.01cf
Lora_data[7] :Stężenie pyłu niskie osiem
Lora_data[8] :Natężenie światła wysokie osiem, luks
Lora_data[9] :Natężenie światła niska ósemka
Lora_data[10] :Stężenie O2, % (surowe dane podzielone przez 1000)
Lora_data[11]: Temperatura gleby, ℃
Lora_data[12] :Wilgotność gleby, %
Lora_data[13] :Napięcie baterii, v
Lora_data[14] :Kod błędu czujnika
Kod błędu:
Lora_data[14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
Znaczenie każdego bitu:
bit 0: 1---- Błąd czujnika temperatury i humi oraz barometru (BME280)
bit 1: 1---- Błąd czujnika dwutlenku węgla (MH-Z16)
bit 2: 1---- Czujnik kurzu (PPD42NS) błąd)
bit 3: 1---- Błąd cyfrowego czujnika światła
bit 4: 1---- Błąd czujnika tlenu (ME2-O2-Ф20)
bit 5: 1---- Błąd czujnika wilgotności i temperatury gleby;
bit 6: Zarezerwowany
bit 7: Zarezerwowany
Zrobiliśmy Error_code_transform.exe, otwórz go i wprowadź kod błędu w systemie szesnastkowym, szybko dowiesz się, który czujnik jest błędem. Link do pobrania znajduje się na końcu tego artykułu.
Regulacja parametrów: a) cykl transmisji danych
//seedtea.ino
#defineinterval_time 600 //sekundę
Ten parametr można zmienić, aby zmienić cykl transmisji danych. W każdym cyklu akwizycja danych trwa około 1 minuty. Dlatego nie zaleca się zmiany tej wartości na mniej niż 60 sekund.
b)Czas nagrzewania czujnika kurzu
//seedtea.ino
#definePreheat_time 30000 //Czas nagrzewania czujnika DustSensor, milisekunda //Dust_other.cpp #definesampletime_ms 30000 //samplingtime30s
c)Współczynnik napięcia
//POWER_Ctrl.cpp
#defineBattery_coefficient 0.159864 //wartość ADC× Battery_ coefficient = solar_voltage
Te dwa parametry są obliczane na podstawie obwodu dzielnika napięcia.
d)Próg temperatury otwarcia wentylatora
//POWER_Ctrl.cpp
#defineFan_start_temp 45 //temperaturethreshold #defineFan_start_light 500 //intensywność światła
Gdy rzeczywista temperatura przekroczy próg, wentylator zacznie się schładzać.
e) parametr inicjalizacji czujnika O2;
//Tlen.cpp
#defineO2_procent 208,00 //20,8%
f) Przełącznik makro
//seedtea.ino
#defineLORA_RUN //Po komentarzu inicjalizacja Lora i transmisja danych zostaną zatrzymane #defineSENSOR_RUN //Po komentarzu zewnętrzne czujniki przestaną działać //POWER_Ctrl.cpp #defineFAN_ON //Tylko fortestowanie, praktyczna aplikacja wymaga komentarza /**** ***Tryb sterowania DS18B20 **********************/ #defineSlower_Mode // Tryb wolny, aby uzyskać temperaturę. Komentarz jest trybem szybkim
g) Mapowanie pinów
D2: wskaźnik LED i zewnętrzny mikrokontroler resetowania IIC: SCL i SDA
//Pył_inny.h
#defineDust_pin 3 //Czujnik kurzu //CO2.cpp #defineCO2_serial Serial1 //użyj hardwareserial port (D0 i D1) //seeedtea.ino #definedataPin 6 //Pin danych gleby #defineclockPin 7 //Pin zegara gleby //POWER_Ctrl. h #defineDS18B20_pin 8 //DS18B20 #defineFan_pin 9 //Fan #defineAir_CtrlPin 10 // Pin sterujący czujnikami umieszczonymi w żaluzjach #defineSoil_CtrlPin 11 // Przełącznik czujnika wilgotności gleby i temperatury #defineBattery_pin A2 // Pomiar napięcia baterii_pin_3 AdefineSolar /Pomiar napięcia panelu słonecznego //Oxygen.h #defineO2_pin A1 //Czujnik O2
h) Zegar nadzoru
Zegar watchdoga służy do monitorowania stanu działania systemu. Gdy system działa nieprawidłowo, węzeł zostanie zresetowany, aby mógł działać nieprzerwanie przez długi czas.
Biblioteka, do której należy się odnieść:
- Adafruit_SleepyDog.h został dodany do projektu
- Adafruit_ASFcore-master.zip jest spakowany w folderze projektu i należy go ręcznie dodać do Arduino IDE.
Powiązane funkcje:
Włącz watchdog
int WatchdogSAMD::enable(int maxPeriodMS, bool isForSleep)
Parametry wejściowe:
Int maxPeriodMS: Czas oczekiwania w milisekundach. Maksymalna dozwolona wartość to 16000 milisekund.
zwracana wartość:
Typ Int, zwróć rzeczywisty czas oczekiwania
Zresetuj watchdog
nieważne WatchdogSAMD::reset()
Wywołaj tę funkcję, aby zresetować licznik czasu nadzoru, co jest określane jako „karmienie psa”. Przekroczenie czasu oczekiwania bez resetowania spowoduje ponowne uruchomienie węzła.
Zatrzymaj psa stróżującego
nieważny WatchdogSAMD::wyłącz()
wejście
W tej sekcji przedstawimy jak połączyć się z serwerem Loriot.
Krok 1: Rejestracja bramy Loriot Server
a) Nowy użytkownik musi najpierw zarejestrować konto, kliknąć adres rejestracyjny. Wpisz nazwę użytkownika, hasło i adres e-mail, aby się zarejestrować, po rejestracji zostanie wysłany do Ciebie e-mail, postępuj zgodnie z instrukcjami zawartymi w e-mailu, aby aktywować.
b) Po udanej aktywacji kliknij tutaj, aby się zalogować. Domyślna warstwa to „Sieć społecznościowa”, obsługuje 1 bramę (RHF2S001) i 10 węzłów.
c) Wejdź w Dashboard -> Gateway, kliknij Add Gateway start, aby dodać Gateway.
d) Wybierz Raspberry Pi 3
e) Ustaw jak poniżej:
- Radio front-end -> RHF2S001 868/915 MHz (SX1257)
- AUTOBUS -> SPI
f) Wpisz adres MAC swojego RHF2S001, powinien być w formacie b8:27:eb:xx:xx:xx. A także wprowadź informacje o lokalizacji bramy.
g) Kliknij „Zarejestruj bramkę Raspberry Pi”, aby zakończyć rejestrację.
h) Kliknij zarejestrowaną bramkę, aby wejść na stronę konfiguracji, ręcznie przełącz „Plan częstotliwości”, Twój plan tutaj zależy od typu Twojego typu RHF2S001, dostępny plan to CN470,CN473,CN434,CN780,EU868, po wybraniu odśwież stronę aby uzyskać dokładny kanał. W tej wiki wybieramy EU868.
i) Uruchom polecenie w terminalu putty:
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.
Krok 2: Urządzenie Loriot Server Connect Node
a) Uzyskaj dostępne kanały bramy
Aktualne kanały bramek można pobrać z Dashboard -> Gateway -> Your Gateway, dostępne kanały można zobaczyć jak na poniższym obrazku.
b) Konfiguracja Seeeduino LoRAWAN GPS (RHF3M076);
Otwórz monitor szeregowy ArduinoIDE, dotknij poniższego polecenia.
w+ch
Aby potwierdzić domyślny kanał twojego Seeeduino_LoRAWAN GPS, otrzymasz 3 kanały. Jeśli nie ma dostępnego kanału, możesz zmienić kanały Seeeduino_LoRAWAN za pomocą poniższego polecenia.
przy+ch=0, 868,1
przy+ch=1, 868,3 przy+ch=2, 868,5
Następnie możesz ponownie użyć at+ch, aby sprawdzić.
c) Dodaj Seeeduino_LoRAWAN GPS jako ABP NodeLog na serwerze Loriot, kliknij Dash Board -> Applications -> SimpleApp. Kliknij Importuj ABP (wpisz poniżej pozycji)
- DevAddr: Seeeduino_LoRAWAN GPS przechodzi przez polecenie „AT+ID” (Uwaga: Loriot nie obsługuje łącznika dwukropka, należy usunąć ręcznie)
- FCntUp:Ustaw 1
- FCntDn:Ustaw 1
- NWKSKEY:wartość domyślna 2B7E151628AED2A6ABF7158809CF4F3C
- APPSKEY: wartość domyślna 2B7E151628AED2A6ABF7158809CF4F3C
- EUI: DEVEUI, Seeeduino_LoRAWAN GPS uzyskaj polecenie „AT+ID”
Kliknij przycisk Importuj urządzenie, aby zakończyć import urządzenia. Teraz wybierz Dashboard-> Applications -> SampleApp, zobaczysz nowy węzeł ABP, który właśnie dodałeś.
d) Wyślij dane z Seeeduino_LoRAWAN
UWAGA! To tylko test.
Wróć do szeregowego monitora ArduinoIDE, wyślij polecenie:
AT+CMSGHEX="0a 0b 0c 0d 0e"
Następnie przejdź do Dashboard -> Applications -> SampleApp -> Device, kliknij Node Device EUI lub DevAddr, tutaj znajdziesz dane, które właśnie wysłałeś.
Aby uzyskać szczegółowe informacje, zapoznaj się z tym wiki.
Krok 5: Budowa strony internetowej
Powiązane narzędzia
- wirtualne środowisko
- Python3
- Gunicorn
- Kierownik
- Nginx
- MySQL
Używamy CentOS7 jako testowego środowiska wdrażania
wirtualne środowisko
Użyj virtualenv, aby zbudować samodzielne środowisko produkcyjne python3
a) zainstaluj
pip zainstaluj virtualenv
b) stworzyć wirtualne środowisko python3
virtualenv -p python3 iotea
c) uruchom środowisko wirtualne i wejdź do katalogu iotea
kosz źródłowy/aktywacja
d) istnieje środowisko
dezaktywować
Python3
a) zainstaluj
mniam zainstaluj epel-release
mniam zainstaluj python36
b) zainstaluj zależną bibliotekę PyMySQL, DBUtils, Flask, websocket-client, configparser
pip zainstaluj pymysql
pip install dbutils pip install flask pip install websocket-client pip install configparser
Gunicorn
a) zainstaluj (w środowisku Python3)
pip zainstaluj gunicorn
b) uruchom projekt kolby (w katalogu projektu iotea)
gunicorn -w 5 -b 0.0.0.0:5000 aplikacja:app
c) uruchom websocket-clint, aby uzyskać dane Loriot
gunicorn loriot: aplikacja
d) wyświetl drzewo procesu Gunicorn
pstree -ap|grep gunicorn
Kierownik
a) instalacja (użytkownik root)
kierownik instalacji pip
b) generowanie plików konfiguracyjnych
echo_supervisord_conf > /etc/supervisord.conf
c) utwórz katalog i wprowadź konfigurację katalogu
mkdir -p /etc/supervisor/conf.d
Edytuj /etc/supervisord.conf i zmodyfikuj pole plików pod [include] na końcu pliku.
Pamiętaj, że musisz usunąć ';' przed tymi dwoma wierszami, który jest znakiem komentarza.
[włączać]
Pliki = /etc/supervisor/conf.d/*.conf
Oznacza wprowadzenie /etc/supervisor/conf.d/. Poniższy plik konfiguracyjny jest używany jako plik konfiguracyjny procesu (monitorowany przez osobę nadzorującą).
d) konfiguracja przychodząca (w katalogu iotea)
cp iotea.conf /etc/supervisor/conf.d/
cp loriot.conf /etc/supervisor/conf.d/
e) otwarta iotea służyć
superviosrctl przeładuj #przeładuj plik konfiguracyjny
superviosrctl start loriot #otwórz odbiór danych loriot superviosrctl start iotea #otwórz aplikację kolby iotea
f) inne wspólne operacje
przeładowanie nadzorcy # przeładowanie pliku konfiguracyjnego
superwizor aktualizacja superwizorctl start xxx superwizorctl stop xxx superwizorctl status xxx superwizorctl pomoc # zobacz więcej polecenia
Nginx
a) zainstaluj
mniam zainstaluj -y nginx
b) konfiguracja
cp NginxIotea.conf /etc/nginx/conf.d/
c) uruchom Nginx
systemctl uruchom nginx.service
MySQL
a) powiązane parametry
użytkownik='root'
passwd='1234' db='iotea' port=3306
b) plik
iotea_iotea.sql
c) plik konfiguracyjny
db.ini