스마트 식물 갈증 알림기 – DIY 토양 수분 센서로 최적의 수분 관리
부품 및 소모품
| 부품 | 수량 |
| Microchip ATmega328 | 1 |
| 16 MHz 크리스탈 | 1 |
| 세라믹 디스크 커패시터 20pF | 2 |
| 리니어 레귤레이터 (7805) | 1 |
| LED (원하는 색상) | 2 |
| 저항 10kΩ | 1 |
| 저항 220Ω | 1 |
| 저항 470Ω | 1 |
| 슬라이드 스위치 | 1 |
| C&K PTS 645 시리즈 스위치 | 1 |
| 피에조 부저 | 1 |
| 9V 배터리 | 1 |
| 9V 배터리 클립 | 1 |
| SparkFun 토양 수분 센서 (스크류 터미널 포함) | 1 |
| Arduino UNO (프로토타입용) | 1 |
| 3D 프린팅 케이스 | 1 |
필요 도구
앱 및 온라인 서비스
- Patchr PCB 에디터
- Patchr PCB 제조 서비스 (프로모션 코드 "GoPatchr"로 첫 주문 15% 할인)
- Arduino IDE
- Onshape (추천 3D CAD 툴)
프로젝트 소개
시작 계기
고백하건대, 저는 끔찍한 식물 집사입니다. 물 주기를 깜빡하거나 너무 많이 줘서 매번 식물을 죽이곤 했죠. 식물이 주는 생기와 분위기를 사랑하지만, 번번이 실패하니 속상했습니다. 그래서 저 같은 '조용한 식물 킬러'들을 자랑스러운 '식물 가드너'로 바꿔줄 장치를 만들기로 했습니다.
목마른 식물 감지기(Thirsty Plant Detector)를 소개합니다. 이 장치는 식물이 목말라할 때 귀여운 귀뚜라미 소리로 알려줍니다.
이 프로젝트는 Explorer Uno를 핵심으로, 토양 수분 센서와 피에조 부저를 사용합니다. 부저의 피에조 소자는 소리 발생뿐 아니라 진동 감지(노크 감지 등)에도 쓸 수 있는 흥미로운 부품입니다. 토양 수분 센서는 두 프로브가 흙 속에서 가변 저항 역할을 하며, 수분량에 따라 0~1023 사이의 아날로그 값을 출력합니다. 물이 많을수록 전도성이 좋아져 저항값이 낮아집니다.
제작 과정을 담은 영상을 보거나 아래 단계별 가이드를 따라 직접 만들어보세요!
브레드보드로 회로 구성하기

먼저 브레드보드에 모든 부품을 연결해 소프트웨어를 테스트합니다. 아두이노 우노로 구동 확인 후 ATmega328을 PCB로 옮깁니다. 부품 연결 다이어그램을 참고하세요.

시판 수분 센서(SparkFun 제품 추천)를 쓰거나 직접 만들 수 있습니다. 직접 만들려면 금속 프로브 2개, 여분 와이어, 47kΩ 저항만 있으면 됩니다. 황동 취미용 봉을 프로브로 쓰면 좋습니다.
브레드보드 조립 완료 후 아래 코드를 업로드하세요:
GitHub 코드 링크
정상 작동하면 귀뚜라미 소리가 나고, 프로브 두 개를 서로 대면 소리가 멈춥니다.
PCB 설계하기

- Patchr에 로그인하세요. 계정이 없다면 생성하세요. 시작 가이드 영상(4분)을 참고하세요.
- 유용한 단축키:
- 상단 레이어: Command + 1
- 하단 레이어: Command + 2
- 부품 회전: Command + R
- 패드/부품 뷰 토글: Command + P
- 반대 레이어 라우팅 고스트 보기: Command + H
- Explorer Uno 템플릿을 선택해 아두이노 회로 설계 단계를 건너뜁니다. 프로젝트 이름을 정하고 설계 시작.
- 보드 외곽을 드래그해 수분 센서와 부저 공간을 확보하세요. 나중에 케이스에 맞춰 조정 가능.
- 저항 배치: 한쪽은 5V, 다른 쪽은 A0 핀에 연결. 5V 라인은 하단 레이어에 배선해 상단 GND 라인과 교차 방지. 수분 프로브용 스루홀 2개 추가 (하나는 저항과 연결, 다른 하나는 GND).

- 중간 저장 필수 (File + Save)!
- 부저 배치: GND와 디지털 핀 5에 연결.
- 브레드보드 회로와 연결이 일치하는지 확인 후 내보내기. Patchr 제조 서비스 이용 권장 (고품질 PCB 보장). 프로모션 코드 "GoPatchr"로 15% 할인. 완성된 거버 파일은 아래 첨부파일에서 다운로드 가능.
케이스 설계

PCB 제작되는 동안 케이스를 설계하세요. 우측 BRD 탭의 풋프린트 치수를 참고해 PCB가 들어갈 공간을 확보하세요. 제가 설계한 케이스는 여기나 Thingiverse에서 다운로드 가능. CAD 툴은 Onshape(고급)나 TinkerCAD(빠른 작업) 추천. 3D 프린터가 없다면 출력 대행 서비스 이용하거나 집안 재료로 케이스 제작도 가능.
조립!

PCB가 도착하면 가장 신나는 시간, 납땜 시작! 밥 피스가 말했듯 "내가 가장 좋아하는 프로그래밍 언어는 납땜이다." 인두 예열하고 좋아하는 음악 틀고 시작합시다.

Patchr 프로젝트 페이지와 회로도를 참고해 조립하세요. 저는 부저를 케이스 상단에 두고 싶어서 기판과 부저 사이에 와이어로 연결했습니다. 부저를 기판에 직접 달고 싶다면 설계 단계에서 공간을 확보하세요.
이제 여러분의 식물은 탈수된 케일 칩만 남지 않을 겁니다. 궁금한 점, 멋진 GIF, 아재 개그, 좋아하는 납땜 잼은 댓글로 남겨주세요!
빌드 영상 보기 | 식물 알람 해킹 공유

코드
Thirst Alert - 아두이노 코드
/*
* Patchr.io Thirst Alert Plant Alarm 용
* 튜토리얼: www.hackster.io/patchr
* PCB 설계: www.patchr.io
* 2019년 11월
*/
#include "Volume.h" /* Connor Nishijima 개발 (2016) */
int sensorPin = A0; // 수분 센서 핀
int sensorValue;
int limit = 300; // 임계값 (조정 필요)
Volume vol;
void setup() {
Serial.begin(9600);
vol.begin();
vol.setMasterVolume(1.00); // 0.00~1.00 사이로 볼륨 조절
vol.delay(500);
}
void loop() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
if (sensorValue > limit) {
Serial.println("*cricket*");
// 센서 값이 300 초과 시 1~30초 랜덤 간격으로 귀뚜라미 소리 재생
chirp();
vol.delay(random(1000, 30000));
} else {
vol.noTone();
}
}
void chirp() {
int freq = random(3700, 4000);
float volume = random(10, 101) / 100.00;
int chirpType = 1;
if (chirpType == 1) {
Serial.println("2");
int chirpCount = random(1, 3);
chirp(chirpCount, freq, volume);
}
}
void chirp(byte times, int freq, float volume) {
float fadeOut = 1.00;
while (times > 0) {
float mv = 0;
while (mv < 1.00) {
int v = 0;
while (v < 255) { vol.tone(freq, v * volume * mv * fadeOut); v += 4; }
v = 255;
while (v > 0) { vol.tone(freq, v * volume * mv * fadeOut); v -= 4; }
vol.delay(20); mv += 0.2;
}
mv = 1.00;
while (mv > 0.00) {
int v = 0;
while (v < 255) { vol.tone(freq, v * volume * mv * fadeOut); v += 4; }
v = 255;
while (v > 0) { vol.tone(freq, v * volume * mv * fadeOut); v -= 4; }
vol.delay(20); mv -= 0.2;
}
vol.noTone(); fadeOut -= 0.75; times--;
}
}
커스텀 파트 및 인클로저
회로도
