A service that measures temperature and humidity in the air and informs beginners of the appropriate environment for growing plants.

components
Hardware Components
DM456
X 1
Soil Sensor
NPM-4
X 1
Water Pump
Software Apps and online services
Arduino IDE
IDE
Ubidots
Cloud
Project Description
딱딱한 분위기의 사무실에 식물을 키우면 분위기가 더 좋아질 거라 생각했다
(출처 - 부엉이 곳간)

집에 부모님이 키우는 식물들만 좀 봤었고 내가 직접 키워본 적이 없어서 손이 덜 가고 키우기 비교적 수월하다는 선인장을 들여놨다
(출처 - 오늘의 집)

그런데...월 1~2회 정도만 급수해야하는 걸 모르고 주 1~2회를 줬더니 얼마 못가서 뿌리가 썩었다. ㅠ.ㅠ

그 후 다시 식물 키우기에 도전하고자 미세먼지 제거에 탁월하고 키우기 쉽다는 수염 틸란드시아를 데리고 왔다
(출처 - 옥션)

습한 환경만 조성되면 무럭무럭 자란다는 얘기만 듣고 무작정 욕실에 걸어뒀다. 매일 샤워를 하면서 물을 머금을 것이고 집안 어디보다 습한 환경일 테니 잘 자랄 것이라고 기대했다

하지만 틸란드시아도 죽어버렸다. 이유는 햇빛을 너무 못봐서였다 ㅠ_ㅠ
아직도 식물을 키울 생각이 있으나 식물 생장에 최적화된 환경을 어떠헥 조성해줘야 할지, 물은 언제 줬고 언제 줘야 하는지 등을 하나하나 메모하기엔 내 성격에 맞지 않아서 이를 알려주는 시스템이 있으면 어떨까? 라는 생각에 직접 개발해봤다

이 포스팅에서는

1. 개발환경을 어떻게 세팅했는지

2. 대기 중 온습도와 조도 측정 방법

3. 식물들에게 중요한 토양 습도 측정 방법

4. 직접 물을 공급해주는 워터펌프 동작법

5. 식물이 잘 자라고 있는지 데이터를 쌓아줄 클라우드 연결

로 이루어져 있다

가성비를 고려하여, 유선 인터넷(Ethernet)과 컨트롤을 동시에 지원하는 W5100S-EVB-PICO 로 만들려고 한다

 
STEP 1 개발환경 세팅
아두이노를 선택한 이유는 보편적이어서 관련 정보를 찾기도 쉽고 또한 피코 보드가 아두이노와 파이썬, 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) 에서도 확인하실 수 있습니다

documents
Code
Hyunmo
Code

1
COMMENTS

Please Login to comment
1 Comment authors
ronpang Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
ronpang
Member

Hi yhm8029,
I’m Ron from WIZnet HK. Could I post your article to our WIZnet HK instagram account?

BTW, do you have a instagram account that I could tag you?

Best Regards,
Ron

POSTED BY
Arduino Ethernet Library