
이 프로젝트는 정밀 농업 응용 프로그램을위한 독립적 인 농업 기상 태양 광 발전 스테이션을 구축하는 것을 목표로합니다. 정밀 농업 응용 프로그램을위한이 장치는 항공 온도 및 습도를위한 초음파 및 습도를위한 Raspberry Pi & Arduino 및 DHT22를 기반으로하며 응용 프로그램 또는 특정 날씨 요구에 따라 이용할 수있는 기타 애드온을위한 DHT22를 기반으로합니다. 데이터 및 분석 정보는 지역적으로 전송되는 JSON 패키지가 필요합니다. Dongle), Farmos는 한 플랫폼에서 모든 농장 센서와 보고서를 모니터링하면서 큰 센서 데이터를 쉽게 관리하는 데 도움이되며 다른 응용 프로그램의 DAA 역할을 할 수도 있습니다. 이 제품은 Farmtopia IOF (Farm of Farm) 라인의 첫 번째이며 Easy & Open Agriculture Data를 위해 Godan Mission을 지원하기 위해 OpenSourced입니다. 여기에서 설명한대로 집에서 쉽게 복제 할 수 있습니다.
| 측정 된 데이터 | 어떻게 |
|---|---|
| 3 차원 방향의 풍속 및 주파수 | 초음파 오류를 계산하여 |
| 기온 및 습도 | AM2301 센서 |
| GPS 위치 | USB GBS Dongle |
| 토양 수분 | 저항성 토양 센서 |
| 선택적 애드온 | / |
Raspberry Pi Set : Raspberry OS로 사전로드 된 SD가있는 RP 컴퓨터 및 Pinoir 카메라 (선택 사항) 6xultrasonic anmometer : 서로 다른 유동 또는 다른 트리거가있는 네트워크로 서로 마주보고있는 수직 방향 (xyz)에 배치됩니다. Dongles : GPS Dongle (선택 사항/GPS 조정을 수동으로 입력 할 수 있음), 4G 동글 (선택 사항) WiFi 커버리지 태양 광 시스템이없는 경우 : MPPT 태양열 충전기를 통해 메인 슈퍼 폴리머 배터리를 충전하는 기본 30W 태양 전지 패널입니다. USB 케이블을 통해 배터리 팩을 통해 배터리 팩에 전원을 공급하는 데 도움이되는 MPPT 솔라 충전기를 통해 메인 슈퍼 폴리머 배터리를 충전합니다. 구성은 RPI 전원 공급 장치 Farmos를 안정화하는 것을 목표로합니다. 이는 센서 데이터를보고 분석하기위한 시스템의 인터페이스 역할을하는 농업 오픈 소스 관리 시스템입니다.
| 숫자 | 장치 |
|---|---|
| 1 | Raspberry Pi 4, 8GB 버전 |
| 1 | SD 카드 128 |
| 1 | Arduino Mega 2560 |
| 1 | Arduino USB 케이블 |
| 6 | JSNR04T 초음파 (40cm 간격으로 배치) |
| 1 | AM2301 온도 및 습도 센서 |
| 1 | Arduino 토양 수분 센서 모듈 |
| 1 | Raspberry Pi 4 배터리 팩 업 |
| 1 | 미니 USB에서 USB 케이블 |
| 1 | USB 출력이있는 MPPT 태양열 충전기 컨트롤러 20A 12/24VDC |
| 1 | 12V 슈퍼 폴리머 리-이온 배터리 -6800 mah |
| 1 | 태양 전지판 18V 30W |
| 1 | 기상 관측소 프레임 3D 인쇄 또는 Stanlesteel 인클로저 |
| 숫자 | 장치 |
|---|---|
| 1 | 터치 스크린 |
| 1 | Raspberry Pinoir 2 카메라 |
| 1 | 라즈베리 USB GPS 동글 |
| 1 | MLX9046 IR 센서 |

| 파일 이름 | 설명 |
|---|---|
| readme.md | 프로젝트 소개 |
| Arduino_weather.ino | 주요 날씨 감지 Arduino 응용 프로그램 |
| DHT.CPP | AM2301의 DHT 드라이버 및 클래스 기능성 |
| dht.h | DHT 클래스 및 기능 설명서 용 헤더 파일 |
| Special_debug_functions.ino | 디버그 프로그램으로서 단위 테스트 케이스 |
| Wind_auto.cpp | 날씨 측정 기능 |
| Wind_auto.h | 바람 클래스 및 기능 문서를위한 헤더 파일 |
| Aggregator.sh | RPI Bash 스크립트 Arduino Serial 및 Aggregate JSON 패키지를 Farmos Server로 잡습니다. |
-28GB SD 카드에 RPI OS (정식 버전)를 설치하면 PI의 전반적인 성능을 향상시키기 위해 SD가 가능한 한 빠른 것이 좋습니다. Headless Pi를 사용하는 경우 구성 파일에서 SSH를 활성화합니다. 부팅 파티션에서 찾을 수 있습니다.
-이 종속성의 대부분은 사전 설치 될 수 있지만이를 다시 확인하는 것이 좋습니다.
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
-CLI와 함께 Docker를 설치하십시오
sudo curl -sSL https://get.docker.com | sudo sh
sudo pip3 install docker-compose
sudo systemctl enable docker
-Docker에 현지에서 Farmos를 설치하십시오
Farmos는 농장 관리, 계획 및 레코드 유지를위한 웹 기반 응용 프로그램입니다. 농업 데이터 수집 및 관리를위한 표준 플랫폼을 제공하기 위해 농민, 개발자, 연구원 및 조직의 커뮤니티가 개발했습니다.
우리는 Farmos를 사용하여 센서와 빠르게 인터페이스하고 빅 데이터를 분석합니다.
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
자세한 내용은 Farmos 공식 웹 사이트 에서이 안내서를 참조해야합니다.
이 온라인 가이드를 참조하여 Farmos 설치를 구성 할 수 있습니다.
먼저 Farmos의 센서 모듈이 활성화되어 있는지 확인하십시오. 호스팅 서비스를 사용하는 경우 센서 모듈을 활성화하도록 요청하십시오.
Sketch> 포함 Arduino Library Manager와 함께 다음 라이브러리 설치 도서관> 라이브러리 관리 ... SoftWareserial
DHT 의심을 위해 Adafruit DHT 라이브러리를 참조 할 수 있지만, 어떤 이유로 든 온도 및 습도를 함께 읽지 않으므로 Renew_temp_hu (dht, float*, float*)라는 새로운 함수에서 Dath.Read 기능 [] 버퍼와 함께 DHT.Read 기능을 사용합니다.
두 가지 클래스를 기반으로 JSNR04T는 자동 모드 에서 JSNR04T 초음파 칩 인스턴스를 제공하는 인터페이스 클래스이며, 공기 온도 및 습도에서 계산 된 자체 교정 된 음속으로 초음파 측정에서 발산을 사용하여 장치를 바람 측정 도구로 사용하는 데 필요한 기능이 있습니다. 그리고 필요한 날씨 세부 사항을 출력하기 위해 기록 된 데이터의 수학적 논리를 사전 형성하는 바람 클래스.
| 기능 이름 | 입력 | 반품 | 설명 |
|---|---|---|---|
| JSNR04T (생성자) | uint8_t enpin, uint8_t rxpin, uint8_t 유형, uint16_t max_range) | 무효의 | 접지 활성화 용 ENPIN을 갖는 초음파 드라이버의 인스턴스, ECHO 용 RXPIN 및 작동 유형의 유형으로 동작하는 JSNR0RT 유형의 새로운 객체를 구성합니다. |
| JSNR04T.BEGIN | 무효의 | 무효의 | 초음파를 활성화 (트리거)하면 새로운 직렬 커뮤니케이션을 식별하고 시작합니다. |
| jsnr04t.virtual_trigger | 무효의 | 무효의 | 초음파의 접지 핀을 낮은 상태로 설정하여 정상적인 작동을 시작합니다. |
| JSNR04T.RESETTIMEOUT | UINT8_T 타임 아웃 | 무효의 | 초음파 측정의 밀리 초 타임 아웃을 변경하여 범위를 변경하십시오. |
| JSNR04T | 무효의 | 무효의 | Wind 조건이없는 두 개의 초음파 사이의 리모션 거리를 업데이트 할 Nowind_distance. |
| JSNR04T.READJSNR04TSERIAL | 무효의 | int | 초음파의 직렬 에코 출력을 읽고 유효하지 않은 판독의 경우 int/nan으로 변환합니다. |
| jsnr04t.get_selfecho | 무효의 | UINT16_T | 시간 초과를 재설정하여 범위를 변경하여 센서가 에코 만 읽습니다. |
| jsnr04t.get_selfwindspeed | 무효의 | int | 초음파가 자신의 에코 (왕복)를 읽는 데 필요한 시간을 읽고 윈드 스피드로 변환합니다. |
| jsnr04t.transform_read | UINT16_T X | 뜨다 | 초음파로 측정 된 거리를 MM에서 풍속으로 변환합니다 (음속에 비해). |
| 바람 (생성자) | JSNR04T*, JSNR04T* | 무효의 | 한 쌍의 초음파를 사용하여 그들 사이의 풍속을 측정하는 유형 바람의 물체를 구성합니다. |
| 바람 .update | 무효의 | 무효의 | 새로운 읽기를 통해 풍속의 클래스 값을 업데이트하면 풍속 변화 속도를 계산합니다. |
| wind.get_wergewind | 무효의 | 뜨다 | 작업 모드에 따라 초음파 쌍 사이의 평균 4 개의 측정을 계산합니다. |
| wind.get_echofromahead | 무효의 | UINT16_T | 얼굴 센서의 에코를 읽습니다. |
| Renew_temp_hu | dht, float* temp, float* hum | 무효의 | 주어진 DHT 센서의 온도 및 습도 값을 업데이트합니다. |
| get_speedofsound | float tc, float rh | 뜨다 | 주어진 공기 온도와 습도에서 소리의 속도를 추정합니다. |
| set_windsensor | DHT | 무효의 | DHT의 포인터를 Wind 클래스로 전달합니다 |
| get_echofromahead | JSNR04T U1, JSNR04T U2 | int | Facing Censor (테스트 용)의 에코를 읽는 Indpedandt 기능. |
| Wind_cycle | 바람* 바람, 바람* 바람, 바람* windz | 무효의 | 3D의 바람을 나타내는 3 개의 바람 물체의 풍속 및 평균 (50 측정 평균) 풍속을 계산하고 업데이트합니다. |
필요한 핀 값 및 구성 정의, 핀 구성 및 센서 유형에 따라 사이클 개체 구성, 사이클 변수 식별
#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;
모든 값을 업데이트하려면 Wind_cycle에 전화하십시오
wind_cycle(&WindX ,&WindY, &WindZ);
또는 wind.update에 전화하여 모든 차원의 즉각적인 속도를 업데이트하십시오.
Windx.update();
값을 직렬 포트에 JSON으로 인쇄하십시오.
"매개 변수": "value",
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(" , ");
AllMiss를 사용하여주기 지연을 다음과 같이 측정 오류에 적응하십시오.
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);
Special_Debug_Functions.ino를 사용하여 단계적 단위 테스트를 통해 응용 프로그램을 진단하십시오.
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
CRON 작업은 10 분마다 스크립트를 활성화합니다. 스크립트는 Grabserial을 사용하여 Arduino Serial을 30 초 동안 잡고 JSON 패킷 브래킷을 잡을 때 카운트를 다시 시작하고 Arduino 10 초 (100 샘플 평균)를 볼 때 종료 될 때 카운트를 다시 시작합니다. Arduino 10 초 (100 샘플 평균)가 새로운 판독 값을 기록하면 샘플링 속도를 줄여주기 한계를 채택 할 수 있습니다. 스크립트 사용량 (센서 구성으로 대체! public_key &! private_key
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
이 OpenSource 프로젝트 및 모든 구성 요소는 개발자의 유일한 책임이며 Farmtopia는 비슷한 장치를 사용 하여이 기상 관측소의 상용 버전을 구축하지만 반드시 동일한 Sourcecode 또는 Logic 또는 Hardware 구성 요소를 사용 하거나이 Opensource 프로젝트의 유효성 또는 적용을 담당하는 것은 아닙니다.
MIT 라이센스