페이지

2026년 1월 2일 금요일

3.4.3. 토양 수분 상태 알리미 만들기

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 토양 수분 센서를 연결해서 흙의 축축한 정도를 숫자로 확인하는 법을 배웠어요. 시리얼 모니터에 뜨는 숫자를 보며 '아, 지금 흙이 이렇구나!' 하고 알 수 있었죠. 하지만 식물 상태를 보려고 매번 컴퓨터를 켜고 시리얼 모니터를 열어보는 건 조금 번거로울 수 있어요.

그래서 오늘은 한 단계 더 나아가, 이 정보를 훨씬 직관적으로 알 수 있는 '토양 수분 상태 알리미'를 만들어 볼 거예요! 마치 식물을 위한 신호등처럼, LED 색깔만 보고도 물이 필요한지, 적당한지, 아니면 너무 많은지 바로 알 수 있게 말이죠. 정말 멋지지 않나요? 그럼 지금 바로 시작해 봐요!

Slide 1: 프로젝트 소개 - 토양 수분 상태 알리미 만들기

이번 시간에 우리가 만들 프로젝트의 이름은 바로 '토양 수분 상태 알리미' 입니다. 이름 그대로 흙의 수분 상태를 우리에게 알려주는 장치예요.

이전처럼 숫자로 알려주는 대신, 3색 LED를 이용해서 빨간색(위험!), 초록색(안전!), 파란색(충분!) 불빛으로 식물의 상태를 알려주도록 만들 거예요. 이제 숫자를 해석할 필요 없이 색깔만 보고도 식물의 기분을 바로 알아챌 수 있게 되는 거죠!

Slide 2: 회로 구성하기

가장 먼저 하드웨어를 준비하고 연결해야겠죠? 바로 회로 구성 단계입니다.

✅ 준비물

  • 아두이노 UNO
  • 토양 습도 센서
  • 3색 LED
  • 저항 (220옴 정도면 충분해요)
  • 브레드보드와 점퍼선

기존에 만들었던 토양 수분 센서 회로는 그대로 유지해주세요. 우리는 여기에 3색 LED만 추가로 연결하면 된답니다.

✅ LED 추가 연결 방법

3색 LED는 다리가 4개 달린 독특한 친구예요. 가장 긴 다리가 기준이 되는 GND(-) 역할을 하고, 나머지 3개 다리가 각각 빨강(R), 초록(G), 파랑(B) 빛을 담당해요.

회로도를 보면서 차근차근 연결해 볼까요?

  1. 브레드보드의 빈 공간에 3색 LED를 꽂아주세요.
  2. 가장 긴 다리를 아두이노의 GND 핀에 연결해주세요.
  3. 빨간색(R) 다리는 저항을 하나 거쳐서 아두이노 디지털 11번 핀에 연결해요.
  4. 초록색(G) 다리도 저항을 거쳐 디지털 9번 핀에 연결하고요.
  5. 마지막으로 파란색(B) 다리 역시 저항을 거쳐 디지털 10번 핀에 연결해주세요.

잠깐! 저항은 왜 연결하나요?
저항은 LED에 너무 강한 전류가 흘러서 타버리는 것을 막아주는 보호 장치 역할을 해요. LED를 연결할 땐 꼭 저항을 함께 연결하는 습관을 들이는 게 좋아요!

Slide 3: 코드 작성 (1) - 기본 설정 및 센서 값 읽기

이제 아두이노에게 우리가 연결한 회로를 어떻게 동작시킬지 알려줄 차례예요. 코드를 통해 '상황별 행동 요령'을 알려주는 거죠.

CODE 3.8 | 스마트 화분 알리미 코드 (일부)
01#define greenPin 9
02#define bluePin 10
03#define redPin 11
04
05void setup() {
06 Serial.begin(9600); // 컴퓨터와 통신 시작
07}
08
09void loop() {
10 int sensorValue = analogRead(A0); // 토양 수분 값 읽기
11 Serial.println(sensorValue); // 값 확인용 출력
12 delay(1000); // 1초마다 측정
13 ...

✅ 핀 정의 및 설정

  • #define: 9, 10, 11 같은 핀 번호는 나중에 코드가 길어지면 헷갈리기 쉬워요. 그래서 greenPin, bluePin, redPin 처럼 알아보기 쉬운 별명을 붙여주는 거예요. 이제 우리는 숫자 대신 이 이름을 사용할 수 있어요.
  • Serial.begin(9600): 이전과 마찬가지로, 센서 값이 잘 들어오는지 컴퓨터 화면(시리얼 모니터)으로 확인하기 위해 통신을 시작하는 코드예요.

✅ 센서 값 읽기

  • loop() 함수 안의 코드는 계속 반복해서 실행되는 부분이죠.
  • analogRead(A0): A0 핀에 연결된 토양 수분 센서로부터 값을 읽어와요.
  • int sensorValue = ...: 읽어온 값을 sensorValue라는 이름의 상자(변수)에 저장합니다.
  • Serial.println(sensorValue): 우리가 눈으로 확인할 수 있도록 sensorValue 값을 시리얼 모니터에 출력해줘요.
  • delay(1000): 1000밀리초, 즉 1초에 한 번씩만 측정하도록 잠시 쉬어가는 시간이에요. 너무 자주 측정하면 값이 정신없이 바뀌니까요.

Slide 4: 코드 작성 (2) - 조건문으로 상태 표현하기 (건조 & 적당)

이제 이 프로젝트의 핵심! 센서 값에 따라 LED 색깔을 다르게 켜는 부분을 코딩해 볼게요. 바로 if 조건문을 사용하는 거죠. "만약 ~하다면, ~를 실행해라!" 라고 아두이노에게 명령하는 거예요.

CODE 3.8 | 스마트 화분 알리미 코드 (일부)
...// ... loop() 함수 내부 ...
14 // 1. 흙이 아주 건조할 때 (위험!)
15 if (sensorValue <= 100) {
16 analogWrite(redPin, 255); // 빨강 켜기
17 analogWrite(greenPin, 0); // 초록 끄기
18 analogWrite(bluePin, 0); // 파랑 끄기
19 }
20 // 2. 흙이 적당히 촉촉할 때 (좋음)
21 else if (sensorValue <= 700) {
22 analogWrite(redPin, 0); // 빨강 끄기
23 analogWrite(greenPin, 255); // 초록 켜기
24 analogWrite(bluePin, 0); // 파랑 끄기
25 }
... ...

✅ 1. 건조 상태 (위험)

  • if (sensorValue <= 100): "만약 센서 값이 100 이하라면" 이라는 뜻이에요. 토양 수분 센서는 건조할수록 낮은 값이 나오므로, 100 이하는 물이 아주 부족한 '위험' 상태로 정한 거죠.
  • analogWrite(redPin, 255): 이 조건이 맞다면, redPin(11번 핀)에 연결된 빨간색 LED를 최대 밝기(255)로 켜라는 명령이에요.
  • 나머지 초록, 파란 LED는 밝기를 0으로 해서 꺼줍니다. 위험 신호는 빨간색 하나면 충분하니까요!

✅ 2. 적당한 상태 (좋음)

  • else if (sensorValue <= 700): "위의 조건(100 이하)은 아니지만, 만약 센서 값이 700 이하라면" 이라는 뜻이에요. 즉, 100보다는 크고 700보다는 작거나 같은 값의 범위(101~700)를 의미하죠. 이 구간은 흙이 적당히 촉촉한 '좋음' 상태예요.
  • analogWrite(greenPin, 255): 이 조건에서는 초록색 LED를 최대 밝기로 켜서 '안전'하다는 신호를 보내요.
  • 마찬가지로 빨간색과 파란색 LED는 꺼줍니다.

Slide 5: 코드 작성 (3) - 조건문으로 상태 표현하기 (과습) & 동작 원리

마지막 남은 상태는 무엇일까요? 바로 물이 너무 많은 상태입니다.

CODE 3.8 | 스마트 화분 알리미 코드 (일부)
...// ... loop() 함수 내부 ...
26 // 3. 물이 아주 많을 때 (충분)
27 else {
28 analogWrite(redPin, 0); // 빨강 끄기
29 analogWrite(greenPin, 0); // 초록 끄기
30 analogWrite(bluePin, 255); // 파랑 켜기
31 }
32} // loop() 함수의 끝

✅ 3. 물이 많은 상태 (충분)

  • else: "위의 두 조건(100 이하, 700 이하)에 모두 해당하지 않는다면" 이라는 뜻이에요. 즉, 센서 값이 700을 초과하는 모든 경우를 말하죠. 이 경우는 물이 아주 많은 상태로, 파란색 불을 켜서 알려주기로 했어요.
  • analogWrite(bluePin, 255): 파란색 LED를 켜고, 나머지 빨간색과 초록색은 꺼줍니다.

✅ 전체 동작 원리 정리

  • if - else if - else 구조: 이렇게 세 가지 조건을 차례대로 물어보면서, 현재 상황이 어디에 해당하는지 정확히 한 가지만 짚어낼 수 있어요.
  • analogWrite() 함수: 특정 핀의 전압을 0~255 사이의 값으로 조절해서 LED의 밝기를 제어하는 역할을 해요. 우리는 0(꺼짐)과 255(최대 밝기)만 사용해서 특정 색깔을 켜고 껐어요.
  • 신호등처럼 상태 표현: 결국 이 코드는 센서 값을 읽고, if문으로 상태를 판단한 뒤, analogWrite로 LED 색을 바꿔주는, 식물을 위한 작은 신호등 시스템인 셈이에요!

자, 이렇게 해서 '토양 수분 상태 알리미' 만들기가 모두 끝났습니다! 코드를 아두이노에 업로드하고 직접 테스트해보세요. 센서를 공기 중에 두면 빨간 불이, 물컵에 살짝 담그면 초록 불이, 푹 담그면 파란 불이 켜지는 걸 볼 수 있을 거예요.

오늘 우리는 센서로 입력받은 값을 단순히 숫자로 보는 것을 넘어, 조건문을 통해 상황을 판단하고 그에 맞는 행동(LED 켜기)을 하도록 만드는 중요한 개념을 배웠어요. 이런 원리는 스마트팜, 자동화 시스템 등 훨씬 더 복잡하고 멋진 프로젝트의 기본이 된답니다.

이제 여러분의 화분 옆에 이 알리미를 두고, 식물과 더 스마트하게 소통해보는 건 어떨까요? 다음 시간에도 더 재미있는 프로젝트로 만나요! 수고하셨습니다! 👋

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] - 페이지에 수록된 내용입니다.

댓글 없음:

댓글 쓰기