연결된 벌통은 기술을 사용하여 내부 꿀벌의 건강과 행동을 모니터링하는 벌집의 한 유형입니다. 이것은 하이브 내부에있는 센서 및 기타 장치를 사용하여 수행됩니다.
센서는 벌집 내부의 온도, 생산되는 꿀의 양, 꿀벌의 활동 수준과 같은 다양한 요인에 대한 데이터를 수집할 수 있습니다. 이 데이터는 중앙 데이터베이스로 전송되어 양봉가와 연구원이 분석 할 수 있습니다.
연결된 벌집의 주요 이점 중 하나는 양봉가가 꿀벌의 건강을 실시간으로 모니터링 할 수 있다는 것입니다. 이를 통해 문제를 조기에 식별하고 문제를 해결하기위한 조치를 취하여 벌통의 전반적인 상태를 개선 할 수 있습니다.
또한 연결된 벌통에서 수집 한 데이터는 꿀벌의 행동을 연구하고 꿀벌이 어떻게 기능하는지 더 잘 이해하는 데 사용될 수 있습니다. 이것은 연구자들이 꿀벌 건강을 개선하고 건강한 꿀벌 개체군의 성장을 지원하기위한 새로운 전략을 개발하는 데 도움이 될 수 있습니다.
전반적으로 연결된 벌통은 꿀벌을 연구하고 돌보는 새로운 방법을 제공하며 이러한 중요한 수분 매개체를 관리하는 방식에 혁명을 일으킬 잠재력이 있습니다.
공급
소프트웨어
사물 네트워크 (TTN)
1 단계 : TTN이있는 안녕하세요 세계
아두 이노 MKR WAN 1310을 사용하여 센서의 모든 데이터를 전송합니다. lora 네트워크를 사용하여 값을 보냅니다., 이 네트워크를 사용하면 장거리에서 데이터를 보낼 수 있지만 매우 낮은 유량으로 데이터를 보낼 수 있습니다. 이 네트워크는 IOT 세계에서 매우 사용됩니다.
먼저 사물 네트워크에서 계정을 만들어야 합니다.
사물 네트워크는 LoRaWAN 표준을 준수하는 LoRa 기술을 기반으로 하는 커뮤니티 네트워크입니다. 이 기술을 통해 물체는 매우 적은 에너지를 소비하면서 소량의 정보를 전송할 수 있습니다. 커뮤니티는 인터넷에 연결된 게이트웨이를 배포합니다.
- TTN에서 계정 만들기
- 응용 프로그램 만들기
- 장치 등록하기
자세한 내용은 공식 문서를 따르십시오.
https://docs.arduino.cc/tutorials/mkr-wan-1310/the-things-network
아두 이노 근처에 게이트웨이가 있는지 확인하십시오.
arduino에서 데이터를 보내려면 다음 코드를 사용할 수 있습니다.
#include <MKRWAN.h>
/*information for connection in LoraWan*/
LoRaModem modem;
char output[64];
String appEui = "0000000000000000";
String appKey = "4D740505194EA0BEE9F6EF3A786F5A64";
bool connected;
int err_count;
int con;
short value1, value2, value3 = 3; // data to send
void setup() {
//Initialisaion Lora
modem.begin(EU868);
}
void loop() {
if ( !connected ) {
int ret=modem.joinOTAA(appEui, appKey);
if ( ret ) {
connected=true;
modem.minPollInterval(60);
Serial.println("Connected");
modem.dataRate(5); // switch to SF7
delay(100); // because ... more stable
err_count=0;
}
}
con++;
Serial.print("Join test : ");
Serial.println(con);
if ( connected ) {
int err=0;
/*Envoie des valeurs*/
modem.beginPacket();
modem.write(value1);
modem.write(value2);
modem.write(value3);
err = modem.endPacket(true); //Send packet
/*confirmation of transmission*/
if ( err <= 0 ) {
// Confirmation not received - jam or coverage fault
err_count++;
if ( err_count > 50 ) {
connected = false;
}
// wait for 2min for duty cycle with SF12 - 1.5s frame
for ( int i = 0 ; i < 120 ; i++ ) {
delay(1000);
}
} else {
err_count = 0;
}
}
}
2단계: 모든 센서 연결
그림 세트는 구성 요소를 연결하는 방법을 보여줍니다. 또한 일반 연결 다이어그램을 통해 스위치, 저항 및 Lipo Rider를 넣는 방법을 볼 수 있습니다.
우리는 두 개의 금속 구조로 측정 게이지를 조립합니다. 이 세트는 무게를 측정하기 위해 벌집 아래에 배치됩니다.
측정 게이지를 X711 Grove 101020712 증폭기와 연결합니다.
3단계: 모든 센서 프로그래밍
#include <DHT.h>
#define PIN 6
#define DHTTTYPE DHT22
DHT dht(PIN, DHTTTYPE);
void setup() {
dht.begin();
}
void loop(){
/*reading data from the sensor*/
Serial.println(dht.readTemperature());
Serial.println(dht.readHumidity());
}
// Sensor of the temperature DS18B20
uint8_t address_DS18B20[8];
DS18B20 ds(3);
int nbrCapteurTempDS18B20 = 2;
float tabTempDS18B20[2]; // one wire sensor table
void setup() {
}
void loop(){
tempDS18B20();
for(int i = 0; i < nbrCapteurTempDS18B20; i++){
Serial.println(tabTempDS18B20[i]); //reading the value of the component i
}
}
void tempDS18B20(void){
int j = 0;
for(int i = 0; i < 2; i++){
tabTempDS18B20[nbrCapteurTempDS18B20] = -1;
}
while(ds.selectNext()){
ds.getAddress(address_DS18B20);
Serial.print("Address:");
for (uint8_t i = 0; i < 8; i++) {
Serial.print(" ");
Serial.print(address_DS18B20[i]);
}
Serial.print("\n");
tabTempDS18B20[j] = ds.getTempC();
Serial.print("Temperature: ");
Serial.println(tabTempDS18B20[j]);
j=j+1;
}
}
싱글 포인트 로드셀 H40A & Amplificateur HX711 Grove 101020712
#include <HX711.h>
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 1;
const int LOADCELL_SCK_PIN = 2;
const float TARE = 133024;
//definition for the weight
HX711 scale;
void setup() {
//Initialisation of the sensor of the weight
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}
void loop(){
Serial.println(poids()); //reading the value
}
float poids (void){
scale.power_up(); // wake up the sensor
float reading = (scale.read()- TARE)/28413;
if(reading < 0) reading = 0;
Serial.print("poids reading : ");
Serial.println(reading);
scale.power_down(); // power down to save power
return reading;
}
4 단계 : 태양 광 패널에 의한 전원 공급 장치
Accu 리튬 이온 3,7V 1050mAh PR474446 + 리포 라이더 프로 + 셀룰 솔레어 SOL2W
우리는 우리의 arduine 보드에 전원을 공급하기 위해 LipoRider 보드를 추가했습니다. 배터리 관리를 관리하고 태양 전지판을 연결할 수 있습니다.
에너지를 절약하기 위해 저는 시스템을 딥 슬립 모드로 사용합니다. 자율성은 며칠에서 한 달 이상으로 증가합니다.
//Low power mode in Arduino
#include "ArduinoLowPower.h"
void loop(){
/*
main program
*/
// go in low power mode
LowPower.deepSleep(600000); // 3min for the test || 1000 * 60 * 60 * 24 = 3600000 for 1 measurement / hour (3min)
delay(1000); // Time to fully wake up the card
}
5단계: PCB 생성
모든 센서를 연결하고 브레드 보드에서 프로토 타입을 완성한 후 PCB를 개발할 수 있습니다.
먼저 자신의 카드를 그리려면 Kikad를 설치해야합니다. 내 PCB 프로토 타입을 공유하고 싶다면 여기.
6 단계 : TTN을 비프음에 연결
이제 모든 측정 값을 경고음으로 보내 여러 그래프에 기록하고 표시 할 수 있도록해야합니다. 이를 위해서는 첫 번째 첨부 된 다이어그램의 파란색으로 각 블록을 구현해야합니다.
I) 첫 번째 블록은
이진 프레임을 정수로 변환하십시오.
- TTN으로 이동
- 응용 프로그램으로 이동 -> endDivices -> 페이로드 포맷터 -> 업링크
- "포맷터 유형"을 "사용자 정의 자바 스크립트 포맷터"로 설정하십시오.
- 경고음으로 주어진 변수의 이름을 따르십시오.
- 나중에 어디에서 찾을 수 있는지 알 수 있지만 경고음 하이브의 열쇠입니다.
- Payload formater 생성
function decodeUplink(input) {
var decoded = {};
decoded.key ="0sd6rz7kll3zcq0s";
decoded.bv = (input.bytes[1] << 8 | (input.bytes[0])) / 100; // battery
decoded.weight_kg = (input.bytes[3] << 8 | (input.bytes[2])) / 100; // weight
decoded.t = (input.bytes[5] << 8 | (input.bytes[4])) / 100; // temp1
decoded.t_0 = (input.bytes[7] << 8 | (input.bytes[6])) / 100; // temp2
decoded.t_1 = (input.bytes[9] << 8 | (input.bytes[8])) / 100; // temp3
decoded.h = (input.bytes[11] << 8 | (input.bytes[10])) / 100; // hum 1
decoded.t_3 = (input.bytes[13] << 8 | (input.bytes[12])) / 100; //temp
decoded.h_i = (input.bytes[15] << 8 | (input.bytes[14])) / 100; // hum 2
decoded.l = (input.bytes[17] << 8 | (input.bytes[16])) / 100; // luminosity
return {
data: decoded,
};
}
II) 두 번째 블록은 TTN에서 보낸 데이터의 형식을 지정하여 경고음에 대한 형식을 지정하는 데 사용됩니다. (일반적으로 bepp은 TTN 프레임을 이해하지만 작동하지 못했습니다.)
- 선택한 서버 (AZUR, AWS)에서 URI 서버 주소 / ttnToBeep이있는 REST API를 만듭니다.
- 포맷터 추가
- "decoded_payload"만 복구
- 함수 형식(메시지){return message.uplink_message.decoded_payload;}
- TTN에 위브훅 추가
- 응용 프로그램 -> 통합 -> Weebhooks로 이동하십시오.
- "사용자 지정 웹후크 추가"를 클릭합니다.
- 위브 후크에 위브훅 ID를 부여하세요 예: 삐
- "기본 URL"에 서버의 끝점을 추가하십시오.
- 장치가 데이터를 보낼 때 POST 데이터에 대한 메시지를 선택합니다.
- You need Bearer Token nous pour nous identifier nous allons voir dans la partie III.2 comment le récuprer.
- 메시지가 수신되면 "https://api.beep.nl/api/lora_sensors?key=0sd6rz7kll3zcq0s"에 대한 POST 요청을 수행합니다.
- TTN 페이로드 포맷터에 추가한 키 매개 변수를 사용합니다. 자세한 내용은 여기를 참조하십시오.
III) 경고음에 대한 데이터를 시각화 할 수있는 마지막 블록의 마지막 블록의 경우 경고음에 대한 카운트를 생성해야합니다. 그리고 측정 장치를 추가하십시오
- 경고음에 계정 생성
- 연결시 브라우저의 네트워크 부분으로 Bearer 토큰을 검색 할 수 있습니다.
- 왼쪽 상단의 햄버거 메뉴를 클릭하십시오.
- "장치"섹션으로 이동
- "자신의 장치 추가"로 새 장치 만들기
- 하이브에 이름 지정
- "장치 고유 식별자"를 복사합니다.
- TTN의 "페이로드 포맷터"로 돌아가서 장치 고유 식별자를 복사합니다.
7단계: 통합
모든 구성 요소를 방수 정션 박스에 넣었습니다. 센서는 땀샘을 통과합니다. 모든 센서를 하이브의 올바른 위치에 배치했습니다.
댓글