아두이노 우노 Q 토양 습도 센서
토양 습도 센서는 토양 내 물의 양을 측정합니다 — 자동 식물 급수 시스템, 온실 모니터링, 농업 자동화에 유용합니다. 이 튜토리얼에서는 커패시티브 토양 습도 센서를 Arduino UNO Q에 연결하고, 습도 값을 읽으며, 습건 임계값을 캘리브레이션하고, Telegram을 통해 원격으로 토양을 모니터링하는 방법을 배웁니다.
※ 주의:
저항식 타입보다는 커패시티브 토양 습도 센서를 항상 사용하세요. 저항식 센서는 노출된 전극을 가지고 있어 전해질에 의해 빠르게 부식됩니다. 커패시티브 센서는 밀폐되어 있고 부식에 강하며, 훨씬 더 긴 수명을 제공합니다.

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | 용량성 토양 수분 센서 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
토양 습도 센서에 대해

토양 습도 센서에는 저항식과 커패시티브 두 가지 유형이 있습니다. 이 튜토리얼은 커패시티브 타입만 사용합니다:
- 저항식 센서: 노출된 전극 사이에 전류를 흐르게 함 → 시간이 지남에 따라 부식 발생
- 커패시티브 센서: 노출된 도체 없음 → 부식에 강하고 더 긴 수명

핀아웃
커패시티브 토양 습도 센서는 세 개의 핀이 있습니다:
- GND 핀: GND(0V)에 연결
- VCC 핀: 3.3V에 연결(Arduino UNO Q MCU는 3.3V에서 작동)
- AOUT 핀: 아날로그 출력 — 토양 습도에 비례하는 전압; 아날로그 입력 핀에 연결

작동 원리
AOUT 핀은 토양이 건조할 때 더 높은 전압을 출력하고 토양이 습할 때 더 낮은 전압을 출력합니다:
- 건조한 토양 → 높은 전압 → 높은 ADC 값(Arduino UNO Q에서 4095에 가까움)
- 습한 토양 → 낮은 전압 → 낮은 ADC 값(0에 가까움)
※ 주의:
Arduino UNO Q ADC 차이: STM32 MCU는 12비트 ADC(0–4095)를 사용합니다. 많은 다른 Arduino 보드의 10비트(0–1023)와 비교하면 다릅니다. 캘리브레이션 임계값은 더 높을 것입니다 — 일반적으로 센서에 따라 1500–3000 범위입니다.
배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
| 센서 핀 | Arduino UNO Q 핀 |
|---|---|
| GND | GND |
| VCC | 3.3V |
| AOUT | A0 |
※ 주의:
센서의 회로 기판(상단 부분)을 토양이나 물에 묻지 마세요 — 프로브(하단 부분)만 토양에 삽입하세요.
MCU 코드
Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU(실시간 하드웨어 제어 처리)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태로 남아 있습니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.
예제 1: 원본 습도 값 읽기
빠른 단계
- Arduino UNO Q를 처음 사용하시나요? 계속 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
- 센서 배선: GND를 GND에, VCC를 3.3V에, AOUT을 A0에 연결하세요.
- 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결하세요.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다리세요.
- 새 앱 만들기: Create New App 버튼을 클릭하세요.

- 앱에 이름을 지정하세요. 예: DIYables_SoilMoisture
- Create를 클릭하여 확인하세요.
- 새 앱 내에 생성된 폴더 및 파일 집합을 볼 수 있습니다.

- sketch/sketch.ino 파일을 찾으세요 — 여기가 MCU 스케치를 붙여넣을 곳입니다.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- 업로드: Arduino App Lab에서 실행 버튼을 클릭하여 STM32에 컴파일 및 업로드하세요.

- 센서 프로브를 토양에 삽입하고 천천히 물을 추가하세요. Bridge Monitor에서 ADC 값이 감소하는 것을 관찰하세요(다음 섹션에서 사용 가능).
- Pro Tip: 완전히 적신 경우에도 읽기는 0에 도달하지 않을 것입니다. 테스트 중 최소값(습함)과 최대값(건조함)을 기록하세요 — 이들이 캘리브레이션 범위가 됩니다.
캘리브레이션
습도 값은 절대값이 아닙니다 — 특정 센서, 토양 구성, 물의 종류에 따라 다릅니다. 습건 토양을 정확하게 감지하려면 임계값을 캘리브레이션해야 합니다:
- 코드를 업로드하고 센서를 건조한 토양에 삽입하세요 → ADC 읽기를 기록하세요(예: 2800 → DRY_VALUE)
- 토양에 철저히 물을 주고 몇 분 기다리세요 → ADC 읽기를 기록하세요(예: 1200 → WET_VALUE)
- THRESHOLD를 중간점으로 설정하세요: (DRY_VALUE + WET_VALUE) / 2 ≈ 2000
- 아래의 예제 2에서 THRESHOLD를 업데이트하세요
※ 주의:
- 순수 증류수로 테스트하는 것을 피하세요 — 전도도가 매우 낮아 읽기를 크게 변경하지 못할 수 있습니다.
- 회로 기판 부분을 물이나 토양에 담그지 마세요.
예제 2: 습한 또는 건조한 토양 감지
캘리브레이션 후 THRESHOLD를 업데이트하고 다음 코드를 사용하여 토양을 WET 또는 DRY로 분류하세요:
빠른 단계
- 동일한 앱을 사용하여 스케치를 위의 코드로 바꾸세요.
- 캘리브레이션한 값으로 THRESHOLD를 업데이트하세요.
- 업로드하고 센서를 토양에 삽입하세요 — 천천히 물을 추가하고 상태 변화를 관찰하세요.
- Pro Tip: 경계 근처에서 빠른 전환을 피하기 위해 히스테리시스를 몇 점 추가하세요(예: WET 및 DRY용 두 개의 별도 임계값).
Linux + MCU Bridge 프로그래밍
Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU(Qualcomm, Debian Linux 실행)와 MCU(STM32, Zephyr OS 실행 및 Arduino 스케치). 그들은 Arduino_RouterBridge 라이브러리를 사용하여 RPC를 통해 통신합니다 — 절대 원본 직렬 포트로 통신하지 않습니다.
- 센서는 MCU(STM32)에 연결됩니다 — 아날로그 핀 A0에 배선됩니다. MCU는 ADC 값을 읽고 토양 습도를 분류합니다.
- MPU는 센서를 직접 읽을 수 없습니다 — Bridge.call()을 통해 MCU에 읽기를 요청해야 합니다. MCU는 현재 습도 값 및 상태로 응답합니다.
- MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하기 때문에 Telegram을 통해 토양 습도 상태를 요청에 따라 보낼 수 있습니다.
- 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide() 함수를 호출합니다
- ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)는 Arduino Router에서 사용하고 있습니다 — 절대 직접 열지 마세요
간단히 말해서: MPU가 습도 읽기를 요청 → MCU가 ADC를 읽고 WET/DRY를 분류 → MCU가 결과를 보고 → MPU가 기록하거나 전달합니다.
MCU 스케치 — Bridge 및 Monitor 출력을 사용한 토양 습도:
Python 스크립트(Arduino App Lab) — Linux에서 습도 폴링:
- 참고: 파이썬 스크립트를 Linux 측에서 실행하기 전에 MCU 스케치에서 Bridge.begin()이 호출되고 스케치가 업로드되었는지 확인하세요.
- ⚠️ 경고: /dev/ttyHS1(Linux에서) 또는 Serial1(MCU에서)을 코드에서 직접 열지 마세요 — 이들은 Arduino Router에서 예약되어 있으며 액세스하면 Bridge가 끊어집니다.
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, 위의 Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치하고, 실행을 클릭하세요.
- Python 스크립트 추가: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣으세요.
- 앱 실행: 실행을 클릭하세요 — Python 측은 2초마다 습도를 읽습니다.
- 토양에 물을 추가하고 콘솔에서 DRY와 WET 사이의 상태 전환을 관찰하세요.
- 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭.
App Lab 콘솔 출력
Telegram 통합
Telegram을 통해 어디서나 토양 습도를 원격으로 모니터링하세요.
아직 Telegram 봇이 없다면, 아두이노 우노 Q - 텔레그램 봇를 참조하여 계속하기 전에 봇 토큰을 가져오세요.
MCU 스케치: 이전의 Bridge 섹션에서 동일한 MCU 스케치를 유지하세요 — 변경 사항이 없습니다. 계속하기 전에 STM32에서 이미 업로드되고 실행 중인지 확인하세요.
Python 스크립트(Arduino App Lab) — 토양 습도 모니터링용 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
- /read를 전송하여 현재 습도 ADC 값과 습건 상태를 가져오세요.
빠른 단계
- MCU 스케치 업로드: 이전 섹션에서 Bridge MCU 스케치를 사용하세요(아직 업로드하지 않았으면 먼저 업로드하세요).
- Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱의 Python 탭에 복사하세요.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
- 앱 실행: 실행을 클릭하세요 — 봇은 Telegram 메시지 수신을 시작합니다.
- 테스트: 센서를 먼저 건조한 토양에, 그 다음 습한 토양에 삽입하고, 매번 /read를 전송하세요 — 봇은 습도 값과 상태로 응답합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하여 OpenClaw를 이 튜토리얼에 맞게 조정할 수 있습니다.
응용 프로그램/프로젝트 아이디어
- 자동 식물 급수: /read가 DRY를 반환할 때 펌프 릴레이 작동 — 릴레이 튜토리얼과 결합
- 온실 모니터: 크론 작업을 통해 Linux 측에서 매시간 Telegram /read 알림 예약
- 스마트 관개 시스템: 여러 토양 습도 센서를 자동 관개 시스템 튜토리얼과 결합
- 토양 건강 추적기: Linux MPU에 토양 습도 읽기를 타임스탐프와 함께 파일에 기록하고 시간 경과에 따른 추세 시각화
- 날씨 인식 급수: 토양 습도 데이터와 MPU의 온라인 날씨 API를 결합하여 비가 예상될 때 급수 건너뛰기
도전하기
- 쉬움: /status Telegram 명령을 추가하여 "토양이 DRY입니다 — 급수를 고려하세요!" 또는 "토양이 WET입니다 — 급수가 필요 없습니다."로 응답하는 명령 추가
- 중간: 습도 읽기를 10분마다 타임스탐프와 함께 MPU의 Linux 파일 시스템의 CSV 파일에 기록
- 고급: 토양 습도를 30분마다 읽고 토양이 건조해지면 Telegram 알림을 전송하는 자동 관개 시스템 구축
함수 참조
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, 위의 Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치하고, 실행을 클릭하세요.
- Python 스크립트 추가: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣으세요.
- 앱 실행: 실행을 클릭하세요 — Python 측은 2초마다 습도를 읽습니다.
- 토양에 물을 추가하고 콘솔에서 DRY와 WET 사이의 상태 전환을 관찰하세요.
- 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭.
App Lab 콘솔 출력
Telegram 통합
Telegram을 통해 어디서나 토양 습도를 원격으로 모니터링하세요.
아직 Telegram 봇이 없다면, 아두이노 우노 Q - 텔레그램 봇를 참조하여 계속하기 전에 봇 토큰을 가져오세요.
MCU 스케치: 이전의 Bridge 섹션에서 동일한 MCU 스케치를 유지하세요 — 변경 사항이 없습니다. 계속하기 전에 STM32에서 이미 업로드되고 실행 중인지 확인하세요.
Python 스크립트(Arduino App Lab) — 토양 습도 모니터링용 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
- /read를 전송하여 현재 습도 ADC 값과 습건 상태를 가져오세요.
빠른 단계
- MCU 스케치 업로드: 이전 섹션에서 Bridge MCU 스케치를 사용하세요(아직 업로드하지 않았으면 먼저 업로드하세요).
- Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱의 Python 탭에 복사하세요.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
- 앱 실행: 실행을 클릭하세요 — 봇은 Telegram 메시지 수신을 시작합니다.
- 테스트: 센서를 먼저 건조한 토양에, 그 다음 습한 토양에 삽입하고, 매번 /read를 전송하세요 — 봇은 습도 값과 상태로 응답합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하여 OpenClaw를 이 튜토리얼에 맞게 조정할 수 있습니다.
응용 프로그램/프로젝트 아이디어
- 자동 식물 급수: /read가 DRY를 반환할 때 펌프 릴레이 작동 — 릴레이 튜토리얼과 결합
- 온실 모니터: 크론 작업을 통해 Linux 측에서 매시간 Telegram /read 알림 예약
- 스마트 관개 시스템: 여러 토양 습도 센서를 자동 관개 시스템 튜토리얼과 결합
- 토양 건강 추적기: Linux MPU에 토양 습도 읽기를 타임스탬프와 함께 파일에 기록하고 시간 경과에 따른 추세 시각화
- 날씨 인식 급수: 토양 습도 데이터와 MPU의 온라인 날씨 API를 결합하여 비가 예상될 때 급수 건너뛰기
도전하기
- 쉬움: /status Telegram 명령을 추가하여 "토양이 DRY입니다 — 급수를 고려하세요!" 또는 "토양이 WET입니다 — 급수가 필요 없습니다."로 응답하는 명령 추가
- 중간: 습도 읽기를 10분마다 타임스탬프와 함께 MPU의 Linux 파일 시스템의 CSV 파일에 기록
- 고급: 토양 습도를 30분마다 읽고 토양이 건조해지면 Telegram 알림을 전송하는 자동 관개 시스템 구축