아두이노 UNO로 만드는 신뢰성 높은 DIY 식물 수분 센서
부품 및 소모품
| 아두이노 UNO 또는 동등 보드 | 1개 |
| 220Ω 저항 (LED용) | 3개 |
| 10kΩ 저항 (갈-검-주황) | 1개 |
| RGB LED (공통 애노드) 또는 서로 다른 색상 LED 3개 | 1개 |
| 긴 점퍼 케이블 | 2개 |
| 점퍼 케이블 | 6개 |
| 브레드보드 | 1개 |
| 볼트 (아무 크기나) | 2개 |
| 너트 (볼트와 같은 직경) | 2개 |
앱 및 온라인 서비스
프로젝트 소개
DIY 식물 수분 센서
내 웹사이트에서 이 프로젝트를 확인하세요!
이 프로젝트는 식물 주변 흙의 유전 상수(전기를 전달하는 흙의 능력)를 측정하여 수분 함량을 계산하고, 물이 필요하면 빨간 LED로, 너무 많으면 파란 LED로, 적당하면 초록 LED로 알려줍니다.
이 프로젝트를 만들려면 다음이 필요합니다:
- 아두이노 UNO 또는 동등 보드 (x1)
- 220Ω 저항 (LED용) (x3)
- 10kΩ 저항 (x1) - 갈색 검정 주황
- RGB LED (x1) 또는 서로 다른 색상 LED 3개
- 긴 점퍼 케이블 (x2)
- 점퍼 케이블 (x6)
- 브레드보드 (x1)
- 볼트 (x2)
- 너트 (위 볼트와 같은 직경) (x2)
1단계: 센서 프로브 만들기


이 단계를 두 번 반복하세요 (프로브당 한 번씩):
- 너트를 볼트 주위로 조이기 시작
- 긴 점퍼 케이블 끝을 너트와 볼트 머리 사이에 끼우기
- 점퍼 케이블이 빠지지 않을 때까지 너트를 계속 조이기
2단계: 회로 구성



회로도나 브레드보드 이미지 중 편한 것을 따라 구성하세요. "out"으로 표시된 와이어가 방금 만든 두 프로브입니다.
3단계: 코드 업로드
이 코드를 아두이노 IDE에 복사하여 붙여넣으세요:
int moistPin = 0;
int moistVal = 0;
int tooDry = 150; // 식물의 낮은 임계값 설정
int tooWet = 400; // 식물의 높은 임계값 설정
void setup() {
Serial.begin(9600);
}
void loop() {
moistVal = analogRead(moistPin);
Serial.println(moistVal);
int percent = 2.718282 * 2.718282 * (.008985 * moistVal + 0.207762); // 프로브 간격 1-1.5인치 기준 백분율 계산
Serial.print(percent);
Serial.println("% Moisture ");
if (moistVal <= tooDry) {
digitalWrite(4, HIGH); // 빨간 LED
digitalWrite(3, LOW);
digitalWrite(2, LOW);
} else if (moistVal >= tooWet) {
digitalWrite(4, LOW);
digitalWrite(3, HIGH); // 파란 LED
digitalWrite(2, LOW);
} else {
digitalWrite(4, LOW);
digitalWrite(3, LOW);
digitalWrite(2, HIGH); // 초록 LED
}
delay(250);
}
4단계: 센서 프로브 설치

- 만든 프로브를 모니터링하려는 식물 근처 흙에 약 1~1.5인치 간격으로 꽂으세요.
- 식물에 적당량의 물을 주고 시리얼 모니터를 여세요.
- 적당량의 물을 주었다면 25~30% 정도의 읽기값이 나와야 합니다.
- 아니라면 프로브 위치를 옮겨 맞춰보세요(또는 물을 너무 많이 주었을 수 있습니다).
추가 참고사항:
실외에서 사용할 경우 회로를 타퍼웨어 등 방수 용기에 넣어 외부 환경으로부터 보호하세요. 센서 와이어가 나올 구멍을 뚫고 배터리 박스를 추가해 전원을 공급하세요. 제 경우는 실내용이라 용기 없이도 괜찮습니다.
코드
코드 스니펫 #1
int moistPin = 0;
int moistVal = 0;
int tooDry = 150; //set low parameter for plant
int tooWet = 400; //set high parameter for plant
void setup() {
Serial.begin(9600);
}
void loop() {
moistVal = analogRead(moistPin);
Serial.println(moistVal);
int percent = 2.718282 * 2.718282 * (.008985 * moistVal + 0.207762); //calculate percent for probes about 1 - 1.5 inches apart
Serial.print(percent);
Serial.println("% Moisture ");
if (moistVal <= tooDry) {
digitalWrite(4, HIGH); //Red LED
digitalWrite(3, LOW);
digitalWrite(2, LOW);
} else if (moistVal >= tooWet) {
digitalWrite(4, LOW);
digitalWrite(3, HIGH); //Blue LED
digitalWrite(2, LOW);
} else {
digitalWrite(4, LOW);
digitalWrite(3, LOW);
digitalWrite(2, HIGH); //Green LED
}
delay(250);
}
회로도

