[아두이노] 일회용 컵을 재활용한 스마트 화분
- Link
- http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=project_hardcopy&wr_id=220&page=241
카페에서 음료를 주문하면 받게되는 투명한 플라스틱 컵을 이용해서 스마트 화분을 만들었습니다.
스마트 화분이라고해서 거창한건 아니고.. 화분의 흙이 마르면 자동으로 물을 주도록 기능을 더한 DIY 장치입니다. 집에 식물을 들이기만 하면 말라죽는 경험을 반복하시고 있다면 이런 화분 하나쯤 만들어 보는 것도 나쁘지 않겠네요. DIY 과정도 그리 어렵지 않습니다.
그리고 조금 더 욕심을 낸다면 얼마전 공개한 홈 오토메이션 솔루션인 홈파이(HomePy)와도 연동되도록 할 수 있습니다. 홈파이와 스마트 화분이 연동되면 스마트 화분은 주기적으로 흙의 습도 상태값을 전송해줍니다. 홈파이에서는 이 값을 저장하고 사용자가 요청하면 그래프로 보여줍니다. 그리고 텔레그램 메신저를 통해 화분에 물을 주도록 명령을 내릴 수도 있습니다.
이 매뉴얼에서는 2가지 버전의 소스코드를 모두 제공하므로 어떤 형태로든 만들어 보실 수 있습니다.
1. 준비물
요즘 카페가 좀 많습니까? 아마 투명한 플라스틱 1회용 컵은 종종 사용하실테니 2개를 버리지말고 씼어서 보관해둡니다. 그리고 카페에 얘기하면 두터운 종이로 만든 캐리어도 그냥 주실겁니다. 플라스틱 컵 2개, 캐리어 4구가 하나(혹은 2구짜리 2개) 필요합니다. 컵 2개는 화분용 및 물탱크용으로 사용하고, 캐리어는 화분을 담을 프레임으로 씁니다.
전자적인 장치를 만들기 위한 준비물들이 필요합니다. 제어를 위해 아두이노 보드는 필수. 아두이노 우노, 나노 보드를 주로 쓰시겠지만, 다른 보드를 준비해서 사용하셔도 됩니다.
흙의 습도를 체크하기 위한 Soil Moisture Sensor 가 기본으로 필요하겠죠. 아래 이미지처럼 생겼습니다. 사용법도 쉬워서 아래 이미지처럼 연결해주고 아두이노에 3개의 선만 연결해주면 됩니다.
흙의 습도를 측정하고 일정 기준 아래로 내려가면 자동으로 물을 줘야겠죠. 물을 공급할 물 펌프(Water pump) 가 필요합니다. 종류가 다양하게 있는데... 제가 가진건 12V 전원을 사용합니다. 욕조에서 가지고 놀만한 물 분수 만드는데 쓰는거라 컵 화분 사이즈 물 공급용으로 쓰기엔 오버스펙입니다. 가급적 5V 전원으로도 구동되는 작은 사이즈 펌프를 사용하세요.
위 이미지에서 아래쪽 주둥이가 물을 빨아들이는 입구. 윗쪽 흰 호스가 연결된 곳이 물을 내보내는 출구입니다. 펌프에는 2가닥의 전원선이 있으며, 당연히 방수가 되는 모터입니다.
모터를 돌릴려면 전원이 필요하겠죠. 모터의 동작 전압에 맞는 어댑터를 하나 구하시면 되겠습니다. 전 12V 어댑터가 하나 남는게 있어서 이걸 사용했습니다.
이제 흙의 습도를 체크할 수 있고 모터를 돌릴 수도 있습니다. 제대로 동작하려면 흙의 습도에 따라 모터를 on/off 시켜줄, 전자적으로 제어할 수 있는 스위치가 필요합니다. 이럴땐 TIP120 트랜지스터를 사용하면 됩니다. 그런데 TIP120 트랜지스터를 구해서 쓰면 다이오드, 저항 등도 필요해서 귀찮으니까... 전 [링크]에 있는 MOSFET 모듈을 사서 사용했습니다.
4개의 소켓에 물 펌프의 (+), (-) 라인과 어댑터의 (+), (-) 라인을 연결해주면 됩니다. 그리고 아두이노에서 SIG 핀으로 신호를 주면 물 펌프 전원이 on/off 제어됩니다.
이정도만 준비하면 화분이 말랐을 때 알아서 물을 주는 스마트 화분을 만들 수 있습니다. 하지만 앞서 얘기한 것 처럼, 홈파이 서버와 연동하고 싶다면 여기에 HC-11 433 RF 통신 모듈이 추가로 필요합니다. 물론 홈파이가 설치되어 돌아가는 라즈베리 파이도 있어야겠죠.
2. 아두이노 연결 방법
아두이노에 센서와 각종 모듈들을 연결해줍니다.
먼저 12V 어댑터, MOSFET, 물 펌프를 연결해줍니다. MOSFET 모듈을 보면 (V+), (V-) 소켓이 있습니다. 여기에 모터의 (+), (-) 라인을 연결해주면 됩니다. 그리고 MOSFET 모듈의 (VIN), (GND) 소켓에는 12V 어댑터의 (+), (-) 라인을 연결해주면 됩니다.
이제 아두이노와 MOSFET 모듈을 연결합니다.
- MOSFET 모듈 ==> 아두이노
- SIG ==> D5 핀
- VCC ==> 5V
- GND ==> GND
이렇게 연결하고 아두이노에서 D5 핀에 5V 전류를 흘리면 물 펌프에 전원이 공급되어 펌프가 물을 쏴줍니다. 반대로 아두이노에서 D5 핀의 5V 전류를 차단하면 물 펌프가 작동을 멈춥니다.
Soil moisture 센서는 아래와 같이 연결합니다. 3개의 핀만 연결해주면 됩니다.
- Soil moisture 센서 ==> 아두이노
- AO(Analog Out) ==> A0 핀
- VCC ==> 5V
- GND ==> GND
Soil moisture 센서는 흙의 습도를 0~5V 사이의 전압의 변화로 알려줍니다. 따라서 AO(Analog Out) 핀을 아두이노의 아날로그 핀에 연결하고 analogRead() 함수로 읽으면 현재 습도값을 알 수 있습니다. 습도값은 아래 표와 같은 의미로 해석할 수 있습니다.
Analog value | Meaning |
0~300 | Dry soil (건조한 상태) |
300~700 | Humid soil (습도가 높음) |
700~950 | In water (물에 잠김) |
홈파이와 연동하고 싶은 경우 HC-11 통신 모듈도 연결해줘야 합니다.
- VCC --> 아두이노 3.3V 또는 5V
- GND --> GND
- RXD --> D3
- TXD --> D2
3. 소스코드 업로드
실제 화분에 테스트하기 전에 전자 파트만 연결해서 테스트 해보는 것이 좋습니다. 아래 링크에서 소스코드를 받으세요.
- 자동 관리 (통신 모듈 사용 안함) : https://github.com/godstale/HomePy/tree/master/example/Arduino/flowerpot
- 홈파이 연동 (통신 모듈 사용) : https://github.com/godstale/HomePy/tree/master/example/Arduino/flowerpot_hc11
업로드 하기 전에 자신의 환경에 맞게 수정을 좀 해줘야 합니다.
자동 관리 (통신 모듈 사용 안함) 의 경우에는 소스에서 아래 부분을 주의하세요.
// Humidity check #define CHECK_INTERVAL 300000 unsigned long prevReadTime = 0; // Water pump control #define AUTO_STOP_INTERVAL 1500 #define HUMIDITY_THRESHOLD 250 int isValveOn = 0; unsigned long prevValveTime = 0;
CHECK_INTERVAL 은 흙의 습도를 측정하는 간격입니다. 5분으로 되어 있는데 적절히 조절하세요. 이 간격을 짧게두면 테스트 할 때는 편한데... 모터가 너무 자주 돌아가는 문제가 발생할 수 있습니다. 왜냐면 물을 공급하더라도 흙 습도 센서가 바로 측정하지 못하는 경우가 많거든요. 충분히 간격을 주세요.
AUTO_STOP_INTERVAL 은 물 펌프가 동작하는 시간을 결정합니다. 전 12V 힘 좋은 모터를 써서 굉장히 짧게 시간을 설정해 뒀습니다. 큰 화분을 사용하거나 모터 힘이 약한 경우 이 값을 늘려야 할 수도 있습니다.
HUMIDITY_THRESHOLD 는 흙 습도 센서값이 얼마 이하일 때 펌프를 동작시킬 것인지 결정합니다. 300 이하면 흙이 마른 상태라고 하는데 센서에 따라, 화분 상황이나 기타 조건에 따라 이 값이 나오는 범위가 다 다릅니다. 실제 화분에 센서를 꽂고 값을 조절하는 것이 좋습니다.
홈파이 연동을 위해 HC-11 모듈을 사용하는 경우는 소스코드를 거의 그대로 사용하셔도 됩니다. 어차피 물 펌프는 원격으로 사용자에 의해 제어되므로 손 볼게 별로 없습니다. 아래 펌프 동작 시간만 설정해주면 됩니다.
// Water pump control #define AUTO_STOP_INTERVAL 1500
4. 화분 제작
제어를 위한 파트 제작이 끝났으니 이제 실제 화분을 만들어야죠.
물 탱크로 사용할 컵 하나를 고른 뒤 아래쪽에 물 펌프 입구와 연결될 수 있도록 구멍을 내줍니다.
구멍만 내두고 둘을 접합하진 마세요. 아래처럼 종이 프레임이 모터와 물탱크를 위한 공간을 마련해 주는 것이 먼저입니다.
이제 아래처럼 물 펌프와 물 탱크의 위치를 잡고 글루건으로 주변을 밀봉해줍니다. 물을 부어서 물 펌프 입구 근처가 새는지 잘 확인합니다.
아두이노 전원선과 어댑터 전원선이 빠져나갈 자리를 마련하고 나머지 부품들을 빈 공간에 몰아 넣습니다. 물 펌프 오동작하거나 화분에서 물이 넘치더라도 전자 파트가 영향받지 않도록 적절히 처리를 해주세요.
관리할 식물을 빈 플라스틱 컵에 옮기고 남는 공간에 컵을 위치시킵니다. 컵에 흙 습도 센서를 꽂고, 물 펌프 호스를 적절히 물을 줄 수 있는 곳에 위치시킵니다.
이제 완성입니다!!
실제 화분을 가지고 동작을 실험하기 전에 빈 컵을 두고 동작 실험을 해두는 것이 더 좋습니다. 자칫 잘못하다간 펌프 오동작으로 방이 물바다가 될지도....
HC-11 통신 모듈을 사용하지 않는 경우 그냥 놔두면 알아서 동작합니다. 앞서 설명한 파라미터만 바꿔서 물 공급량을 조절하세요.
HC-11 통신 모듈을 사용해서 홈파이와 연동하는 경우는 아래와 같이 사용하면 됩니다.
- 먼저 홈파이 서버에 스마트 화분이 인식되는지를 봐야합니다. 텔레그램에서 봇에게 "장치" 명령을 내리면 현재 장치 리스트를 보여줍니다. 이때 [토양습도센서] 장치가 보여야 합니다. 보이지 않는다면 스마트 화분 등록 과정에 문제가 있습니다. 통신 모듈을 확인하세요. (아두이노에 충분한 전원이 공급되어야 합니다. 노트북 전원 노노~)
- 장치가 보이면 장치의 고유 넘버를 기억해 두세요.
- 스마트 화분이 보내준 흙 습도 값의 변화를 보실 수 있습니다. "그래프 (장치넘버) 30" 명령을 내리면 최근 30개의 데이터를 그래프로 그려줍니다.
- 화분에 물을 주려면 봇에게 다음 명령을 내리세요. "제어 (장치넘버) 1"
- 스마트 화분은 물 펌프 on/off 명령을 받을 수 있습니다. 위 제어 명령에서 1이 의미하는 것이 물 펌프를 켜는 동작입니다. 0을 사용하면 동작중인 펌프가 꺼지겠죠. 물 펌프는 일단 켜지면 소스코드에 정해진 시간동안만 동작합니다.
주의!!!
- 물 펌프로 물을 주더라도 흙 습도 센서가 바로 감지하지 못합니다. 시간이 꽤 걸린다는 점을 주의하세요.
- 흙 습도 센서는 여러 조건에 의해 값이 변합니다. 제가 테스트한 환경과 다르게 값이 나올 수 있으므로 충분히 자체 테스트를 해서 사용하세요.
- 실제 화분으로 테스트 하기 전에 빈 컵으로 충분히 테스트 하세요.
- 화분이 물을 담을 적당한 여유 공간이 있어야 합니다. 흙을 너무 꽉 채우지 마세요. 흙을 다지지 마세요. 물이 스며들지 못해 넘칠 수 있습니다.
5. 마치며...
식물을 키우는데 그닥 재주가 없다면, 누군가에게 선물 받은 화분이 있지만 딱히 관리가 안된다면... 스마트 화분으로 만들어 관리해 보시길 추천합니다. 큰 돈 들어가지도 않고, 만들면서 DIY의 재미를 충분히 느끼실 수도 있을겁니다.
IoT, 사물인터넷이 이런거랑 별다를게 있습니까? ㅎㅎ
참고자료 :
출처 : HARD COPY WORLD (http://www.hardcopyworld.com)