Skip to content

nCube:Thyme for Arduino Application : nCube Aqua (Korean)

IoTKETI edited this page Mar 16, 2018 · 5 revisions

nCube:Thyme for Arduino - Application : nCube-Aqua

개발환경 설정

IDE installation & nCube:Thyme for Arduino Libraries Download

Json & MQTT & Temperature & Adafruit_NeoPixel & OneWire Libraries for Arduino 다운로드

아래에 링크된 github 페이지를 통해서 ArduinoJson, PubSubClient, DallasTemperature, Adafruit_NeoPixel, OneWire 라이브러리를 다운로드 받는다.

다운로드 받은 라이브러리들을 아래의 그림과 같이 nCube:Thyme for Arduino 프로젝트의 라이브러리 폴더로 복사한다.

pubsubclient/src 디렉토리 아래의 PubSubClient.h 파일을 열고, MQTT_MAX_PACKET_SIZE 변수의 값을 400으로 바꾸어 준다.

하드웨어

재료 목록

  • Adafruit Feather M0 WiFi with uFL 1개
  • 2.4GH Mini Flexible WiFi Antenna with uFL Connector 1개
  • Fish feeder for Open Aquarium 1개
  • Adafruit NeoPixel Digital RGBW LED Strip 1개
  • Vertical Liquid Level Sensor 1개
  • Gravity: Analog pH Sensor / Meter Kit For Arduino 1개
  • DS18B20 - Water Temperature Sensor 1개
  • Adafruit Power Relay FeatherWing 1 개
  • Capacitor 1000uF, 6.3V 1개
  • 470Ω, 10kΩ 저항 각각 1개씩
  • Bread Board 1개
  • Jumper Cable M/M 한 세트
  • USB Type-A to Micro-B Cable 1개
  • 5V 2A USB Micro-B Power Adaptor 1개
  • 아크릴판(LED 부착용) 1개
  • 네오디움 자석(LED 부착용 아크릴판 고정용) 4개
  • Switch Box 12512575mm 1개
  • 케이블 그랜드 3개
  • 어항 여과기 1개

  • Cortex M0 processor
  • SPI, I2C, UART 통신 지원
  • 802.11bgn을 지원하는 Atmel WINC1500 WiFi chip

  • cooking hacks에서 제공하는 Open Aquarium에 패키징 되어있는 품목이다.
  • 전원으로 3.3V를 사용하며, 크기는 116.510.7cm 이다.
  • 배출되는 물고기 먹이의 양을 조절할 수 있다.

  • DFROBOT에서 제공하는 제품으로, ADC(Analog-Digital-Converter)가 내장된 보드가 포함되어있어 아두이노와 함께 사용하기에 편리하다.
  • 전원으로 5V를 사용하며, 전원이 인가되었을 때 LED가 점등된다.
  • 측정 가능한 PH값의 범위는 1~14 이다.

DS18B20 Temperature Sensor

  • 전원으로 3~5.5V를 사용하며, 온도 측정 부위는 물과 직접적으로 접촉해야 하기 때문에 방수기능이 포함되어있다.
  • -55~125℃의 환경에서 -10~85℃범위의 온도를 측정할 수 있다.

Vertical Liquid Level Sensor

  • cooking hacks에서 제공하는 Open Aquarium에 패키징 되어있는 품목이다.
  • 수위가 낮아지면 Data 선의 전위가 GND 선의 전위와 일치하게 된다.

Adafruit NeoPixel Digital RGBW LED Strip

  • Red, Green, Blue, White 4가지의 빛을 낼 수 있다.
  • 전원으로 5V를 사용하며, LED Strip의 길이에 따라 1m 일 때 2A가, 4m 일 때 4A가 공급되어야 한다.
  • 필요에 따라 잘라서 필요한 길이로 만들어 사용할 수 있다.

nCube-Aqua 응용 프로그램 개발

하드웨어 연결

아래의 그림과 같이 Adafruit Feather M0와 센서들을 연결한다.

Adafruit board 세부 연결 위치

nCube-Aqua를 이용한 수조 꾸미기

아래의 그림과 같이 외부 여과기를 설치한다.

아래의 그림과 같이 수조에 온도센서, pH센서, 수위센서, feeder와 LED를 설치하고,

Switch Box에 Adafruit Feather M0와 Bread Board를 넣어 정리한다.

Mobius와 연동하기

아래 그림은 모비우스와 아쿠아리움에 대한 전체 구조도이다.

nCuba-Aqua Arduino sketch

아래의 그림과 같이 lib/oneM2MClient/examples/nCube-Aquarium 디렉토리에 있는 nCube-Aqua.ino Arduino sketch 예제 코드를 src 디렉토리에 복사합니다.

TasAquarium.h 라이브러리를 추가시키고, Aqua 객체를 생성합니다.
AE-ID는 SAqua5로 AE-NAME은 aqua5로 합니다. (사용자별로 변경 가능)

sensing_interval값을 통해 센서들의 데이터 업로드 주기를 설정합니다.
예를들어, temp는 60초로 설정되어있는 것을 확인할 수 있습니다.

각 센서 데이터를 저장할 Container가 5개 필요하므로 buildResource() 함수의 코드를 아래와 같이 바꿔줍니다.
Container의 이름은 각 센서명(temp, ph, waterlevel, feeder, led)으로 수정합니다.

feeder, led 제어 데이터를 noti 하여줄 sub를 각각 생성합니다.
Subscription 리소스를 생성하는 부분에서 to값의 하위 리소스를 가리키는 값을 feeder는 nCube.resource[5].rn,
led는 nCube.resource[6].rn 로 수정합니다.

noti_callback() 함수 내의 if조건문 내에서 앞서 수정한 리소스 구조에 맞춰
nCube.resource[8]과 nCube.resource[9]로 수정합니다.
control_flag를 통해 feeder와 led를 제어할 수 있습니다.

setup() 함수 내에서 LED, Temp, WaterLevel, Feeder값을 초기화 해주는 함수를 호출합니다.

loop() 함수 내에서 Aqua.loop() 함수를 호출합니다.
Aqua.loop() 함수는 계속해서 Feeder 상태(on/off)를 체크하는 함수입니다.

temp가 create_cin 일 경우 Temperature 값을 읽어와 con 변수에 넣고 출력합니다.

ph가 create_cin 일 경우 PHSensor 값을 읽어와 con 변수에 넣고 출력합니다.

waterlevel가 create_cin 일 경우 WaterLevel 값을 읽어온 뒤
levelstatus가 HIGH(1)일 경우 Full, LOW(0)일 경우 Empty를 출력합니다.

loop() 함수 내에 control_flag 조건문에 따라 Mobius로부터 받은 noti값에 따라 feeder와 led가 동작되도록 합니다.
if(control_flag == 2)경우 feeder를 제어하며, noti_con이 1일 경우 feedFish(1)가 동작됩니다.
if(control_flag == 3)경우 led를 제어하며, noti_con이 1일 경우 showLED()가 동작되고,
1이외에 값이라면 stopLED()가 되어 LED가 꺼지게 됩니다.

nCube-Aqua Arduino sketch 업로드 & 실행


USB 케이블을 사용하여 Adafruit Feather M0 보드와 PC를 연결한다.


nCube-Aqua.ino Arduino sketch 예제 코드를 컴파일 및 업로드 하기위해 PlatformIO 툴바에서 Upload 버튼을 클릭한다.


nCube-Aqua 응용 프로그램의 실행 여부를 확인하기 위해 시리얼 모니터를 사용한다.
PlatformIO 툴바에서 시리얼 모니터 버튼을 클릭한다.


노트북 또는 스마트폰의 WiFi를 이용하여 시리얼 모니터에 표시된 'wifi101-XXXX' (different name for each Adafruit Feather M0 board)에 연결한다.


그리고 웹 브라우저를 열어, URL 주소창에 'http://wifi101.local'를 입력한다.
Network Name 아래에는 연결할 AP의 SSID를 입력하고, Pass phrase 아래에는 AP의 패스워드를 입력한 후 connect 버튼을 클릭한다.


WiFi를 연결하면 nCube-Aqua가 리소스를 생성하고 센서의 센싱 값을 업로드한다. 결과는 시리얼 모니터로 확인할 수 있다.

nCube-Aqua 센서 데이터 조회

센서의 데이터를 조회하기 위해, Mobius Resource Monitor를 연다.


위 그림과 같이 Resource Path에 변수 AE_NAME의 값을 입력하고 Start 버튼을 클릭한다.


위 그림은 조회된 nCube-Aqua 응용 프로그램의 리소스 구조이다.


Container(cnt)에 nCube-Aqua가 어항의 센서를 통해 측정한 값이 업로드된다.

nCube-Aqua Feeder & LED Control

Feeder와 LED를 제어하기 위해 각각 feeder, led cnt에 Content-Instance(cin)을 생성합니다.


먼저 feeder cnt 위에 마우스를 올려두고 오른쪽 버튼을 클릭하여 Create를 클릭한다.


Content(con)에 숫자 1을 입력하고 Create 버튼을 클릭한다.


어항에 장착된 Feeder의 먹이통이 1회 회전하며 먹이를 배출한다.


LED를 켜기 위해 led cnt 위에 마우스를 올려두고 오른쪽 버튼을 클릭하여 Create를 클릭한다.


Content(con)에 숫자 1을 입력하고 Create 버튼을 클릭하면 LED가 켜지는 것을 확인할 수 있다.

Clone this wiki locally