nCube:Thyme for Arduino Application : nCube Aqua (Korean) - IoTKETI/nCube-Thyme-Arduino GitHub Wiki
-
nCube:Thyme for Arduino Development Environment Setup with Arduino IDE guide_EN
-
nCube:Thyme for Arduino Development Environment Setup with Arduino IDE guide_KR
-
nCube:Thyme for Arduino Development Environment Setup with PlatformIO IDE guide_EN
-
nCube:Thyme for Arduino Development Environment Setup with PlatformIO IDE guide_KR
์๋์ ๋งํฌ๋ github ํ์ด์ง๋ฅผ ํตํด์ ArduinoJson, PubSubClient, DallasTemperature, Adafruit_NeoPixel, OneWire ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.
- ArduinoJson github page
- PubSubClient github page
- DallasTemperature github page
- Adafruit_NeoPixel github page
- OneWire github page
๋ค์ด๋ก๋ ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 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 ์ด๋ค.
- ์ ์์ผ๋ก 3~5.5V๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์จ๋ ์ธก์ ๋ถ์๋ ๋ฌผ๊ณผ ์ง์ ์ ์ผ๋ก ์ ์ดํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฉ์๊ธฐ๋ฅ์ด ํฌํจ๋์ด์๋ค.
- -55~125โ์ ํ๊ฒฝ์์ -10~85โ๋ฒ์์ ์จ๋๋ฅผ ์ธก์ ํ ์ ์๋ค.
- cooking hacks์์ ์ ๊ณตํ๋ Open Aquarium์ ํจํค์ง ๋์ด์๋ ํ๋ชฉ์ด๋ค.
- ์์๊ฐ ๋ฎ์์ง๋ฉด Data ์ ์ ์ ์๊ฐ GND ์ ์ ์ ์์ ์ผ์นํ๊ฒ ๋๋ค.
- Red, Green, Blue, White 4๊ฐ์ง์ ๋น์ ๋ผ ์ ์๋ค.
- ์ ์์ผ๋ก 5V๋ฅผ ์ฌ์ฉํ๋ฉฐ, LED Strip์ ๊ธธ์ด์ ๋ฐ๋ผ 1m ์ผ ๋ 2A๊ฐ, 4m ์ผ ๋ 4A๊ฐ ๊ณต๊ธ๋์ด์ผ ํ๋ค.
- ํ์์ ๋ฐ๋ผ ์๋ผ์ ํ์ํ ๊ธธ์ด๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Adafruit Feather M0์ ์ผ์๋ค์ ์ฐ๊ฒฐํ๋ค.
์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ธ๋ถ ์ฌ๊ณผ๊ธฐ๋ฅผ ์ค์นํ๋ค.
์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์กฐ์ ์จ๋์ผ์, pH์ผ์, ์์์ผ์, feeder์ LED๋ฅผ ์ค์นํ๊ณ ,
Switch Box์ Adafruit Feather M0์ Bread Board๋ฅผ ๋ฃ์ด ์ ๋ฆฌํ๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ชจ๋น์ฐ์ค์ ์์ฟ ์๋ฆฌ์์ ๋ํ ์ ์ฒด ๊ตฌ์กฐ๋์ด๋ค.
์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 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๊ฐ ๊บผ์ง๊ฒ ๋ฉ๋๋ค.
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๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์ผ์์ ์ผ์ฑ ๊ฐ์ ์
๋ก๋ํ๋ค. ๊ฒฐ๊ณผ๋ ์๋ฆฌ์ผ ๋ชจ๋ํฐ๋ก ํ์ธํ ์ ์๋ค.
์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด, Mobius Resource Monitor๋ฅผ ์ฐ๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Resource Path์ ๋ณ์ AE_NAME์ ๊ฐ์ ์
๋ ฅํ๊ณ Start ๋ฒํผ์ ํด๋ฆญํ๋ค.
์ ๊ทธ๋ฆผ์ ์กฐํ๋ nCube-Aqua ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฆฌ์์ค ๊ตฌ์กฐ์ด๋ค.
Container(cnt)์ nCube-Aqua๊ฐ ์ดํญ์ ์ผ์๋ฅผ ํตํด ์ธก์ ํ ๊ฐ์ด ์
๋ก๋๋๋ค.
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๊ฐ ์ผ์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.