산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

부품 및 소모품

부품수량비고
아두이노 MKR GSM 14001
SORACOM Air 글로벌 IoT SIM1
아두이노 MKR MEM 쉴드1
GY-21 온도 및 습도 센서1
Adafruit SI1145 UV 라이트 센서1
SparkFun 토양 수분 센서 (나사 단자 포함)1
Adafruit 방수 DS18B20 디지털 온도 센서1
점퍼 와이어 (일반)1

필요한 도구 및 기계

프로젝트 소개

개요

농경지는 현대 사회의 생존을 위해 필수적인 귀중한 자원입니다. 하지만 농업에는 많은 과제가 있습니다. 작물에 적합한 온도, 습도, 햇빛을 맞추고, 작물을 파괴하는 요소가 없도록 해야 합니다.

스마트 팜 개념이 최근 몇 년간 형성되어 왔으며, 작물 상태를 원격으로 모니터링하는 아이디어입니다. 하지만 이 농업 혁명은 큰 비용이 듭니다. 시장에 나와 있는 대부분의 시스템은 소규모 농장에 구현하기에는 너무 비싸고, 대규모 농장을 커버하지 못할 수도 있습니다.

SmartAgro는 모니터링 중인 필드에 배치할 수 있는 사용하기 쉬운 디바이스 네트워크를 만드는 것을 목표로 합니다. 이 디바이스들은 대기 데이터, 토양 관련 매개변수, 조도 값을 수집하여 클라우드로 전송하고 대시보드에 표시합니다.

이를 통해 모든 규모의 농장이 새로운 농업 시대로 진입할 수 있으며, 가뭄이 다가오고 있음을 경고하는 확장 가능한 디바이스 플릿을 토지 전체에 구축할 수 있습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

기능

SmartAgro는 사용자가 모니터링 중인 필드에 디바이스 플릿을 쉽게 구축할 수 있게 합니다. 이 디바이스들은 정의된 시간 간격으로 센서에서 샘플을 채취합니다.

데이터는 SD 카드의 .csv 파일에 기록되고 백엔드로 전송되어 대시보드에서 시각화됩니다. 프로젝트는 프론트엔드와 백엔드로 구성됩니다.

프론트엔드

프로젝트의 프론트엔드는 필드에 배치된 물리적 디바이스를 의미합니다. 이 디바이스들은 센서에서 데이터를 샘플링하여 SD 카드에 기록하고 백엔드로 전송합니다. 아래는 프로젝트 기능 개요입니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

MKR GSM을 프론트엔드로 사용하며, 디바이스는 데이터를 수집하여 Soracom으로 전송하고 시각화합니다. 디바이스가 데이터를 수집할 때 수행하는 단계는 다음과 같습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션
SD 카드

디바이스는 센서에서 획득한 데이터를 부착된 SD 카드에 기록합니다. 데이터는 다운로드 가능한 .csv 파일에 추가됩니다.

설정 시, 디바이스는 쓸 .csv 파일이 있는지 확인하고 존재하면 추가하고, 없으면 새로 만듭니다. 아래는 파일 이미지입니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션
배터리

디바이스는 여러 방식으로 전원을 공급받을 수 있습니다. 디바이스의 제공된 포트를 통해 리포 배터리로, 파워 뱅크로, 또는 디바이스의 VIN 포트에 배터리를 연결하여 전원을 공급할 수 있습니다.

디바이스의 수명은 배터리 전력에 크게 의존합니다. 디바이스는 읽기 사이에 슬립 모드로 진입하여 가능한 한 많은 에너지를 절약합니다.

데이터 전송

데이터는 GSM 연결을 통해 Soracom 서버로 전송됩니다. 데이터는 JSON 페이로드로 전송됩니다. 이 데이터는 백엔드에서 수신되어 처리됩니다. 페이로드 예시는 다음과 같습니다.

{ "Latitude":53.3570404, "Longitude":-6.2609935, "soilTemp":20.56, "soilHumidity":40, "atmoTemp":22.12, "atmoHumidity":62, "uvLight":0.00, "irLight":257, "deviceName":"device1" }

백엔드

애플리케이션의 백엔드는 Soracom을 의미합니다. 데이터는 Soracom에서 수신되어 처리되고 대시보드에 표시됩니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션
대시보드

프로젝트 대시보드는 Soracom Lagoon에서 호스팅됩니다. 데이터는 백엔드의 Soracom Air에서 수신되고, Soracom Harvest가 데이터를 수집한 후 Lagoon이 Harvest에서 쿼리합니다.

플릿의 각 디바이스 위치와 모든 센서 데이터가 대시보드에 플로팅됩니다. 대시보드 스크린샷은 아래와 같습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션
알림

사용자는 디바이스가 수집한 UV 지수나 토양 수분이 비정상적일 때 이메일 알림을 받도록 백엔드를 설정할 수도 있습니다. 이렇게 하면 작물이 관리가 필요한지 알 수 있습니다.

이점

이 프로젝트를 운영하는 사용자는 많은 이점을 누릴 수 있습니다:

프로젝트 구성

1단계: 필수 장비

이 프로젝트는 센서 및 기타 재료 목록이 필요합니다. 필요한 전체 재료 목록은 다음과 같습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

2단계: 회로 연결

모든 부품을 납땜하기 위해 납땜 인두가 필요합니다. 회로도는 아래 프리칭 파일에 나와 있습니다.

MEM 쉴드를 보드에 부착하는 것을 잊지 마세요!

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

MKR GSM 준비

아두이노 MKR GSM을 준비해야 합니다. 저는 VIN 포트를 통해 2개의 AA 배터리로 보드에 전원을 공급했습니다. 단계는 아래와 같습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

3단계: 코드 이해

프로젝트에 사용된 코드에는 4가지 주요 섹션이 있습니다.

이 모든 섹션은 아래에 설명되어 있습니다.

SD 카드 준비
bool createFile() {
  Serial.println("Creating File");
  Serial.println(" OK - Creating and Opening File");
  File dataFile = SD.open("datalog.csv", FILE_WRITE);
  if (dataFile) {
    Serial.println(" OK - File Created");
    Serial.println(" OK - Appending Legend to File");
    Serial.print(" OK - Appending ");
    Serial.println(legend);
    dataFile.println(legend);
    dataFile.close();
    Serial.println(" Success - Data Appended");
  } else {
    Serial.println(" Error - File Not Detected");
    Serial.println(" OK - Trying Again in 5 seconds");
    Serial.println("________________________________________");
    Serial.println("");
    dataFile.close();
    delay(5000);
    return false;
  }
  Serial.println("________________________________________");
  Serial.println("");
  return true;
}

void checkFile() {
  Serial.println("Checking .csv");
  Serial.println("________________________________________");
  Serial.println("Setting Up File");
  Serial.println(" OK - Checking for File Presence");
  if (SD.exists("datalog.csv")) {
    Serial.println(" OK - File Exists");
    Serial.println(" OK - Will Append to Existing File");
    Serial.println("________________________________________");
    Serial.println("");
  } else {
    Serial.println(" OK - File Not Present");
    Serial.println(" OK - Creating File");
    Serial.println("");
    while (!createFile()) {};
  }
}

checkFile() 함수는 디바이스가 추가할 .csv 파일이 존재하는지 확인합니다. 파일이 존재하면 함수가 종료되고, 그렇지 않으면 createFile()을 호출하여 새 .csv 파일을 생성합니다.

데이터 수집
void collectData() {
  Serial.println("Gathering Data");
  Serial.println("________________________________________");
  Serial.println("Getting Data from Sensors");
  Serial.println(" OK - Contacting all Sensors");
  
  // 모든 센서에서 데이터 수집
  soilSens.requestTemperatures();
  soilTemp = soilSens.getTempCByIndex(0);
  soilHumidity = analogRead(A1);
  soilHumidity = map(soilHumidity, 1023, 0, 0, 100);
  atmoTemp = gy21.readTemperature();
  atmoHumidity = gy21.readHumidity();
  visibleLight = uv.readVisible();
  irLight = uv.readIR();
  rawUVLight = uv.readUV();
  uvLight = (rawUVLight / 100);
  
  Serial.println(" OK - Data Collected");
  Serial.println(" OK - Dumping Data");
  Serial.print("[Light] Visible "); Serial.println(visibleLight);
  Serial.print("[Light] Infrared "); Serial.println(irLight);
  Serial.print("[Light] Ultraviolet "); Serial.println(uvLight);
  Serial.print("[Atmo] Temperature "); Serial.println(atmoTemp);
  Serial.print("[Atmo] Humidity "); Serial.println(atmoHumidity);
  Serial.print("[Soil] Temperature "); Serial.println(soilTemp);
  Serial.print("[Soil] Humidity "); Serial.println(soilHumidity);
  Serial.println(" Success - Data Dumped");
  Serial.println("________________________________________");
  Serial.println("");
}

이 섹션은 보드의 모든 센서에서 데이터를 수집합니다. 대기 온도/습도, 토양 수분/온도, UV 지수, IR 라이트 값, 가시광선을 측정합니다.

SD 카드에 데이터 기록
bool burnData(String data) {
  Serial.println("Burning Data");
  Serial.println("________________________________________");
  Serial.println("Burning Data to SD Card");
  Serial.println(" OK - Opening File");
  File dataFile = SD.open("datalog.csv", FILE_WRITE);
  if (dataFile) {
    Serial.println(" OK - File is Present");
    Serial.print(" OK - Appending ");
    Serial.println(data);
    Serial.println(" OK - Burning data");
    dataFile.println(data); // 데이터를 SD 카드에 기록
    dataFile.close();
    Serial.println(" Success - Data Appended");
    Serial.println("________________________________________");
    Serial.println("");
  } else {
    Serial.println(" Error - File Not Present");
    Serial.println(" OK - Trying Again in 5 Second");
    Serial.println("________________________________________");
    Serial.println("");
    delay(5000);
  }
  Serial.println("");
}

이 함수는 이전에 .csv 파일의 한 줄로 컴파일된 데이터를 SD 카드에 기록합니다. 데이터는 카드의 파일에 추가됩니다.

Soracom으로 데이터 전송
void parseData(String dataToSend) {
  Serial.println("Sending Data");
  Serial.println("________________________________________");
  Serial.println("Sending Data to Soracom");
  Serial.println(" OK - Setting Up Connection");
  if (client.connect(url, 80)) {
    Serial.println(" OK - Connection Established, Parsing Data");
    client.println("POST / HTTP/1.1");
    client.println("Host: harvest.soracom.io");
    client.println("User-Agent: Arduino/1.0");
    client.println("Connection: close");
    client.print("Content-Length: ");
    client.println(dataToSend.length());
    client.println("");
    client.println(dataToSend);
    Serial.println(" OK - Data Parsed");
  }
  Serial.println(" OK - Getting Responce");
  Serial.println("");
  // 서버에서 응답 읽기
  while (1) {
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
    if (!client.connected()) {
      break;
    }
  }
  Serial.println(" Success - Data is Parsed");
  Serial.println("________________________________________");
  Serial.println("");
}

마지막으로 데이터가 Soracom으로 전송됩니다. 디바이스는 서버와 연결을 설정하고 자격 증명을 준비합니다. 데이터가 서버로 전송되고 응답이 시리얼 모니터에 출력됩니다.

디바이스는 정의된 시간 동안 슬립 모드로 진입한 후 단계를 반복합니다.

4단계: 변수 설정

프로젝트 사용 전에 사용자가 편집해야 할 몇 가지 변수가 있습니다. 편집 가능한 변수는 코드의 메인 파일에 있으며 아래에 설명되어 있습니다.

5단계: SD 카드 설정

SD 카드는 디바이스와 함께 사용하기 전에 준비해야 합니다. SD 카드는 FAT32로 포맷되어야 합니다. 아래 단계에 따라 SD 카드를 준비하세요.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

6단계: 코드 업로드

백엔드 설정 전에 데이터가 전송되어야 합니다.

MKR GSM을 컴퓨터에 연결하고 코드를 디바이스에 업로드하세요. 이 설정에서는 디바이스 모드가 1로 설정되어 있는지 확인하세요. 코드 업로드 후 모든 센서를 물에 담그세요.

이제 디바이스의 버튼을 누르고 데이터가 수집되고 전송될 때까지 기다리세요. Soracom Air를 채우기 위해 이 과정을 몇 번 반복하세요.

7단계: Soracom 설정

이 단계는 2개 섹션으로 나뉩니다. 첫 번째는 Soracom 계정 생성 및 SIM 등록, 두 번째는 Soracom Harvest 설정으로 Air에서 데이터 수집. 이미 Soracom 계정이 있다면 첫 번째 섹션을 건너뛰세요.

섹션 1: 계정 생성

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

섹션 2: 그룹 및 Harvest

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

8단계: Soracom Lagoon 설정

Soracom에서 마지막으로 설정할 것은 Lagoon입니다. 이 도구로 데이터를 시각화하고 데이터가 좋지 않을 때 이메일 알림을 생성합니다. 아래 단계를 따르세요.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

라이브러리

마무리

마지막으로 프로젝트용 인클로저를 설계했습니다. UV 센서를 인클로저 내부에 배치할 수 있도록 상단이 투명하면 좋겠지만, 간섭을 방지하기 위해 센서를 외부에 배치했습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션
SD 카드 모듈 사용

아두이노 MKR MEM 쉴드를 선택한 이유는 사용이 쉽고 컴팩트하기 때문입니다. SD 카드 모듈도 사용할 수 있지만 대부분 5V로 동작하는 반면 MKR GSM은 3.3V만 제공하므로 3.3V를 5V로 승압하는 레벨 컨버터가 필요합니다.

배경

버스를 타고 들판을 지나가다 이 아이디어를 떠올렸습니다. 농업 필드 모니터링에 사용되는 새로운 디바이스에 대해 읽은 기억이 났지만, 대부분 농부들이 감당하기 어려운 비용이라는 것을 알게 되었습니다.

그래서 저렴한 아두이노를 사용하여 농장의 여러 매개변수를 모니터링하고, 크고 작은 모든 농장이 IoT와 스마트 농업의 시대로 진입할 수 있게 하기로 결정했습니다.

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션

코드

SmartAgro

전체 코드

회로도

SmartAgro: 정밀 농업을 위한 고급 IoT 솔루션 schematics_rrBJ3HiIfc.fzz

제조공정

  1. 아두이노 센서: 종류, 응용, 실전 프로젝트
  2. 가정용 저렴한 무선 센서 네트워크 구축하기
  3. K30 CO2 센서: 실시간 실내 공기질 모니터링
  4. 디지털 신장계 제작: 아두이노 & 레이저 센서로 키 측정하기
  5. 아두이노로 간단한 장애물 센서 만들기 - IR LED & 포토다이오드 튜토리얼
  6. DFRobot 정전식 지문 인식 센서 아두이노/ESP8266 연동 가이드
  7. 아두이노 클라우드 센서 타워 만들기: 온도, 모션, 가스 모니터링
  8. 아두이노 나노로 만든 스마트 모션 감지 물총
  9. PHP 기반 웹 인터페이스로 아두이노 우노 제어하기
  10. 컴팩트 아두이노 레이더 시스템: HC-SR04 초음파 센서 & 1.8인치 디스플레이