ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스마트팜, 센서 그리고 LTE CATM1 모뎀
    HTTP 통신 2022. 5. 3. 21:21

    최근에 토양의 온도, VWC(Volumetirc Water Content:체적 수분함량), EC(전기전도도)를 모두 측정할 수 있는
    토양 센서와 최신 기술이 적용된 이산화탄소 센서 샘플을 전달받아서 라이브러리 구현 및 응용 가능한 애플리케이션을 제작하게 되었습니다.

    murata 토양센서 전면
    murata 토양센서 후면

     

    murata CO2 측정센서

    해당 작업을 진행하면서 해당 센서에 LTE CATM1 모뎀을 연결해서 심플한 스마트팜용 애플리케이션을 제작하게 되었습니다.

    이유는 간단하게라도 스마트팜을 만들어보려고 할 때 먼저 맞닥뜨리는 문제 중 하나는 통신이기 때문입니다.
    비닐하우스나 온실은 일반적으로 주거지에서 떨어져 있어서 전용선을 끌어오거나 WIFI통신을 하기가 쉽지 않아 내부에서 다양한 센서들로 수집한 정보들을 외부로 전달할 수 없는 경우가 많은데 이와 같은 문제를 LTE망을 사용하는 CATM1 모뎀을 사용하면 현장에서 해당 정보를 원할 때 즉시 서버 또는 클라우드로 데이터 전송이 가능하기 때문에 언제든지 웹 또는 앱으로 모니터링하고 해당 정보를 근거로 조치할 수 있습니다.

    사용한 토양 센서는 UART(Serial, 9600bps)통신 방식을 사용하는 제품입니다. 현재 LTE CATM1 내장형 모뎀이 UART(Serial1, 115200bps)포트를 하나 사용하고 있어서 또 다른 UART를 써야 합니다. 애플리케이션에 사용한 Arduino NANO 33 BLE Sense 제품에는 더 이상 사용할 수 있는 UART 포트가 없어서 아래와 같은 방식으로 Software Serial을
    사용했습니다.

    #include "Arduino.h"
    #include "wiring_private.h"
    #include "HardwareSerial.h"
    #include <Serial.h>

    UART soilSensor(digitalPinToPinName(4), digitalPinToPinName(3), NC, NC);

    soilSensor.begin(9600);

    Software Serial의 경우 115200bps를 커버하기에는 무리가 있지만, 9600bps의 경우 인터럽트 처리방식으로 충분히 커버가 가능하기 때문에 저속에서도 동작 가능한 토양 센서를 연결했습니다.

    이산화탄소 센서의 경우 0~3000 ppm의 값을 0~5V로 표현하기 때문에 3.3V ADC Reference를 가지고 있는 BLE Sense 보드의 경우 표현 범위가 넘어가기 때문에 아래와 같이 분배 저항 작업을 해서 전압을 1/2 값을 출력하도록 설정하였습니다.

    분배저항을 이용해서 0~5V전압을 0~2.5V로 출력하도록 작업

    좀 더 높은 ADC Resolution을 위해서 12비트로 아래와 같이 설정했습니다.
    analogReadResolution(12);

    최종적으로 아래와 같은 수식을 이용해서 CO2값을 변환했습니다.
    #define VLEVEL 0.6103515 //(3.3V를 4096(2^12)으로 분해했을 때 단위)
    sensorValue = analogRead(sensorPin);
    CO2 = ((sensorValue+1)*VLEVEL*2/1000)*600;

    설치화면 (케이스 우측면에 전압분배 회로)

    간단한 스마트팜 애플리케이션에서는 매시간마다 토양 센서와 CO2센서를 통해 환경을 측정해서 ThingSpeak.com 클라우드 서버로 데이터를 전송합니다.

    데이터 전송 시 우선 LTE CATM1 모뎀을 통해 클라우드 서버와 TCP Socket 연결을 하고 아래와 같은 순서로
    데이터를 전송하게 됩니다. 3번 항목이 HTTP형식으로 텍스트를 서버로 전달하는 부분입니다.

    /* 1 :TCP Socket Create ( 0:UDP, 1:TCP ) */
    if (TYPE1SC.socketCreate(1, IPAddr, _PORT) == 0)
    DebugSerial.println("TCP Socket Create!!!");

    INFO:

    /* 2 :TCP Socket Activation */
    if (TYPE1SC.socketActivate() == 0)
    DebugSerial.println("TCP Socket Activation!!!");

    if (TYPE1SC.socketInfo(sckInfo, sizeof(sckInfo)) == 0) {
    DebugSerial.print("Socket Info : ");
    DebugSerial.println(sckInfo);

    if (strcmp(sckInfo, "ACTIVATED")) {
    delay(3000);
    goto INFO;
    }
    }

    /* 3 :TCP Socket Send Data */
    String data = "GET /update";
    data += "?api_key=" + WApiKey + "&field1=" + String(TEMP,2) + "&field2=" + String(EC_BULK,2) + "&field3=" + String(VWC,2) + "&field4=" + String(EC_PORE,2) + "&field5=" + String(CO2,2);
    data += " HTTP/1.1\r\n";
    data += "Host: api.thingspeak.com\r\n";
    data += "Connection: close\r\n\r\n";

    if (TYPE1SC.socketSend(data.c_str()) == 0) {
    DebugSerial.print("[HTTP Send] >> ");
    DebugSerial.println(data);
    } else
    DebugSerial.println("Send Fail!!!");

    /* 4 :TCP Socket Recv Data */
    if (TYPE1SC.socketRecv(recvBuffer, sizeof(recvBuffer), &recvSize) == 0) {
    DebugSerial.print("[Recv] >> ");
    DebugSerial.println(recvBuffer);
    DebugSerial.print("[RecvSize] >> ");
    DebugSerial.println(recvSize);
    } else {
    DebugSerial.println("Recv Fail!!!");

    /* 5 :TCP Socket DeActivation */
    if (TYPE1SC.socketDeActivate() == 0)
    DebugSerial.println("TCP Socket DeActivation!!!");

    if (TYPE1SC.socketInfo(sckInfo, sizeof(sckInfo)) == 0) {
    DebugSerial.print("Socket Info : ");
    DebugSerial.println(sckInfo);
    }

    /* 6 :TCP Socket DeActivation */
    if (TYPE1SC.socketClose() == 0)
    DebugSerial.println("TCP Socket Close!!!");

    테스트 환경은 아래와 같습니다.
    좌측이 CO2 센서입니다.

    토양 센서는 IP68 수준의 방수처리가 되어 있고 토양뿐 아니라 물 환경도 측정 가능하기 때문에 임의로 물컵에 넣어 둔 상태입니다.

    테스트 장비 동작 영상


    전체 시스템 셋업 후 어제부터 사무실에서 1시간 단위로 센서 측정 후 CATM1 모뎀을 통해 클라우드로 데이터
    업로드하며 테스트를 진행하고 있습니다.

    ThingSpeak.com Dash Board (by CodeZoo LTE CATM1 모뎀)

    Murata Sensor, Murata Type1SC 모듈 구매, 자료 관련 문의
    (주)아성코리아
    전지만 이사 010-5418-8812 mlcc@asung.com
    박상인 차장 010-6556-5405 sipark@asung.com

    LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의
    (주)코드주
    장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr

     

    https://www.devicemart.co.kr/goods/view?no=14077527 

     

    LTE-CatM1 내장형 모뎀 / 사물인터넷 통신모듈

    사물인터넷 개발을 위한 LTE 모듈입니다. / CodeZoo / 사물인터넷 통신모듈 / 유심은 상품상세의 링크에서 별도 구매가 필요합니다.

    www.devicemart.co.kr

    https://smartstore.naver.com/codezoo/products/7153689192

     

    Vodafone Global IoT SIM Card : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

Designed by Tistory.