딱딱한 분위기의 사무실에 식물을 키우면 분위기가 더 좋아질 거라 생각했다
(출처 - 부엉이 곳간)
집에 부모님이 키우는 식물들만 좀 봤었고 내가 직접 키워본 적이 없어서 손이 덜 가고 키우기 비교적 수월하다는 선인장을 들여놨다
(출처 - 오늘의 집)
그런데...월 1~2회 정도만 급수해야하는 걸 모르고 주 1~2회를 줬더니 얼마 못가서 뿌리가 썩었다. ㅠ.ㅠ
그 후 다시 식물 키우기에 도전하고자 미세먼지 제거에 탁월하고 키우기 쉽다는 수염 틸란드시아를 데리고 왔다
(출처 - 옥션)
습한 환경만 조성되면 무럭무럭 자란다는 얘기만 듣고 무작정 욕실에 걸어뒀다. 매일 샤워를 하면서 물을 머금을 것이고 집안 어디보다 습한 환경일 테니 잘 자랄 것이라고 기대했다
하지만 틸란드시아도 죽어버렸다. 이유는 햇빛을 너무 못봐서였다 ㅠ_ㅠ
아직도 식물을 키울 생각이 있으나 식물 생장에 최적화된 환경을 어떠헥 조성해줘야 할지, 물은 언제 줬고 언제 줘야 하는지 등을 하나하나 메모하기엔 내 성격에 맞지 않아서 이를 알려주는 시스템이 있으면 어떨까? 라는 생각에 직접 개발해봤다
이 포스팅에서는
1. 개발환경을 어떻게 세팅했는지
2. 대기 중 온습도와 조도 측정 방법
3. 식물들에게 중요한 토양 습도 측정 방법
4. 직접 물을 공급해주는 워터펌프 동작법
5. 식물이 잘 자라고 있는지 데이터를 쌓아줄 클라우드 연결
로 이루어져 있다
가성비를 고려하여,?유선 인터넷(Ethernet)과 컨트롤을 동시에 지원하는 W5100S-EVB-PICO 로 만들려고 한다
STEP 1 개발환경 세팅
W5100S-EVB-PICO를?제어하기 위해서는 몇가지 선택지가 있다
아두이노를 선택한 이유는 보편적이어서 관련 정보를 찾기도 쉽고 또한 피코 보드가 아두이노와 파이썬, C언어 등의 개발환경을 제공한다고 한다. 이 중에서 아두이노가 나에게 좀 더 편하기 떄문에 아두이노를 선택했다.
이제부터 아두이노의 개발환경 세팅 방법을 알아보려 한다.
1. 아두이노 설치
Arduino 홈페이지 혹은 Microsoft Store에서 Arduino IDE를 다운로드 후 설치
-
Arduino 공식 홈페이지:?
https://www.arduino.cc/en/software
2. 보드 매니저 및 URL추가
Arduino IDE에서 추가적인 URL을 입력
추가적인 URL:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
환경설정 -> 추가적인 보드 매니저 URLs -> 추가적인 URL 입력
3. Raspberry Pi PICO 보드 추가
툴 -> 보드 -> 보드매니저 -> "Raspberry Pi Pico/RP2040" 설치
4.?Raspberry Pi Pico 선택
툴 -> 보드 "Raspberry Pi PICO" -> Raspberry Pi PR2040 Boards ->?Raspberry Pi PICO 선택
이렇게 설정하면 기본 설정은 끝이다
Step2 공기 중 온도, 습도, 조도 측정
W5100S-EVB-PICO를 이용하여 공기 중 온도, 습도, 조도 측정을 위해 아래 디바이스들을 사용하였다.
공기 중 온도, 습도
- DHT11 module
조도
- CDS module
개발환경
Arduino IDE
1. 공기 중 온도, 습도 측정하기
DHT11 module은 공기 중 온도, 습도를 측정할 수 있는 모듈이며, Adafruit에서 제공하는 DHT 라이브러리를 사용하면, 쉽게 온도, 습도를 측정할 수 있다
1-1. 회로구성
모듈의 DATA Pin, VCC Pin, GND Pin 은 아래와 같이 연결한다
DATA Pin : GPIO 2
VCC Pin : 3.3v
GND Pin : GND
1-2. 라이브러리 다운로드
툴 -> 라이브러리 관리 -> "dht11 검색" -> DHT sensor library 설치
1-3. 온도, 습도 측정 아두이노 코드
DHT에서 제공하는 예제를 이용하여 아래 코드를 완성하였다
예제코드에서도 볼 수 있지만, DHT11의 경우, 약 2초정도 지나야 정상적인 측정 데이터가 나오는 것을 확인할 수 있었다
2. 조도 측정하기
CDS module은 조도(빛의 세기)를 측정할 수 있는 아날로그 센서이며, 별도의 라이브러리 추가 없이 아두이노에서 제공하는 analogRead( ADC PIN ) 을 이용하여 조도 값을 쉽게 측정할 수 있다
2-1. 회로구성
모듈의 OUT Pin, VCC Pin, GND Pin 은 아래와 같이 연결한다
OUT Pin : GPIO 26 (ADC 0, A0)
VCC Pin : 3.3v
GND Pin: GND
2-2. 조도 측정 아두이노 코드
GPIO 26번과 analogRead( ADC PIN ) 함수를 이용하여 아래와 같이 간단하게 완성하였다.
3. 온도, 습도, 조도 측정 아두이노 코드
1번과 2번을 취합하여 아래 코드를 완성하였다
<온도 습도 조도 실행결과>
Step 3
Step2 토양 습도 측정
W5100S-EVB-PICO를 이용하여 토양 습도측정을 위해 아래 디바이스를 사용하였다
토양 습도
- 아두이노 토양습도 센서 DM456
개발환경
Arduino IDE
1. 토양습도 측정하기
아두이노 토양습도 센서 DM456은 센서 부분을 토양에 꽂아서 토양의 습도를 측정할 수 있는 모듈이며, 별도의 라이브러리 추가 없이 아두이노에서 제공하는 analogRead( ADC PIN ) 을 이용하여 조도 값을 쉽게 측정할 수 있다
1-1. 회로구성
모듈의 AO Pin, VCC Pin, GND Pin 은 아래와 같이 연결한다
AO Pin : GPIO 27 (ADC 1, A1)
VCC Pin : 3.3v
GND Pin : GND
1-2. 토양습도 측정 아두이노 코드
GPIO 27번과 analogRead( ADC PIN ) 함수를 이용하여 아래와 같이 간단하게 완성하였다
GPIO 27번 Pin은 "A1" 로도 선언 가능하다
1-3. 토양습도 측정 결과
아래 그림과 같이 토양습도 측정 결과를 얻을 수 있으며, 건조할 때에는 1000 이상의 값이 나타나며, 센서를 물에 담궜을 때에는 측정 값이 떨어지는 것을 볼 수 있다 (붉은색 부분)
Step 4
Step4 워터 펌프 작동
W5100S-EVB-PICO를 이용하여 화분에 물을 주기 위해 아래 디바이스를 사용하였다
워터 펌프
- npm-4 12v (12v 워터 펌프 모터)
전원 제어
- 3.3v Relay Module
전원
- 1.5v 전지 8 Socket
개발환경
Arduino IDE
1. 워터 펌프 제어하기
아두이노용 워터 펌프와 모터 제너레이터를 사용할 수도 있었으나, 화분이 크고, 고 출력이 필요하다 생각하여, 12v 워터 펌프를 사용하였다
12v 전원의 경우 W5100S-EVB-PICO 에서 지원하지 않으므로, 외부 전원을 사용하였으며, W5100S-EVB-PICO 에서 전원을 제어하는 방식으로 설계하였다 (Relay Module)
1-1. 회로구성
Relay Module과 외부 전원, 워터 펌프는 아래와 같이 연결하였다
12V(- 극) - COM (Relay Module) || NC (Relay Module) - 워터펌프(- 극)
12V(+ 극) - 워터펌프(+ 극)
W5100S-EVB-PICO와 Relay Module은 아래와 같이 연결하였다
VCC Pin : 3.3v
GND Pin: GND
IN Pin: GPIO 12
1-2. 워터 펌프 제어 아두이노 코드
GPIO 12번과 digitalWrite() 함수를 이용하여 아래와 같이 간단하게 완성하였다
Step 5
Step5 클라우드 연결(Ethernet)
W5100S-EVB-PICO를 이용하여 측정한 다양한 데이터를 원거리에서 볼 수 있기 위해 클라우드 서버와 연결하였다
다양한 IoT 클라우드 서버 중 Ubidots 라는 클라우드를 선택하였다
해당 클라우드의 경우 간편한 UI/UX를 제공하였으며, 30일간 무료로 사용 가능하였다
다만, 메뉴얼이 모두 영어였기 때문에 구글 번역기를 꽤 많이 사용했다.
개발환경
Arduino IDE
LAN Cable
유효한 MAC Address
1. Ubidots 연결하기
1-1. 계정 생성하기
ubidots.com 에 접속하여 "SIGN UP" 버튼을 눌러 계정을 생성한다
1-2. Device 생성하기
상단 메뉴 Devices - Devices - Add New Device(+) 를 누르고 Devices를 생성한다
생성시, "Blank Device" 로 생성
ps. 나중에 TEST 한 결과, W5100S-EVB-PICO에서 데이터 송신 시 자동으로 생성되므로, 1-2 번은 진행하지 않아도 된다
1-3. Token 확인 및 Ubidots 에 데이터 전송하기
Ubidots 사이트 내 프로필에서 내 Token을 확인 후 저장해야한다
"industrial.api.ubidots.com" 에 접속하거나 "169. 55. 61. 243" 에 접속 후 아래 포맷으로 데이터를 전송하면 된다
1-4. Ubidots 에 데이터 전송 코드
아두이노 Ethernet 예제 Web Client를 이용하여 Ubidots 서버에 접속 후 데이터 전송하는 함수를 만들었다
해당 코드는 DATA를 Device Label - Variable Label 에 전송 하는 함수이며, 이 함수를 이용하여 간단하게 데이터를 보낼 수 있다
Step 6
W5100S-EVB-PICO를 이용하여 먼 거리에서도 화분 상태를 확인하고, 자동으로 물을 줄 수 있는 간단한 스마트 화분을 완성하였다
완성한 스마트 화분은 특정 식물의 적정 온도 환경을 입력하여, LED로 현재 화분의 온도를 확인할 수 있으며(RED: BAD, GREEN: NOT BAD, BLUE: GOOD)
먼 거리에서도 스마트폰이나 PC에서 화분의 상태(온도, 습도, 조도, 토양 습도)를 확인할 수 있다
또한, 설정한 토양 습도에 따라 자동으로 물을 주기도 한다
작동 영상은 개인블로그를 참고 바란다
위 내용은 개인 블로그(wowgogogo.blogspot.com/2022/04) 에서도 확인하실 수 있습니다