아두이노 우노 Q 물 센서
물 센서는 물 누수, 강우량 및 탱크 오버플로우를 감지할 수 있습니다. Arduino UNO Q에서 센서의 아날로그 신호는 12비트 MCU ADC(0-4095 범위)로 읽힙니다. Bridge와 Telegram을 사용하면 물이 감지되는 즉시 휴대폰에서 즉시 알림을 받습니다.
이 튜토리얼에서 배우게 될 내용:
- 물 센서가 무엇이고 어떻게 작동하는지
- 물 센서를 Arduino UNO Q MCU에 배선하는 방법
- 12비트 ADC로 아날로그 센서 값을 읽는 방법
- Bridge를 사용하여 센서 판독값과 물 감지 이벤트를 Linux 측(Python)에 노출하는 방법
- Arduino UNO Q에서 물이 감지되면 Telegram 알림을 받는 방법
- Arduino UNO Q에서 OpenClaw를 물 센서와 함께 사용하는 방법

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | Water level sensor | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
물 센서에 대해
핀 배치
물 센서에는 세 개의 핀이 있습니다:
- S (Signal): 아날로그 출력 — MCU의 아날로그 입력 핀에 연결합니다.
- + (VCC): 전원 공급 — 3.3V 또는 5V에 연결합니다. 이 튜토리얼에서는 전원 제어를 위해 디지털 핀에 연결됩니다.
- - (GND): 그라운드

※ 주의:
VCC를 항상 켜져 있는 5V 대신 디지털 출력 핀에 연결하는 것이 좋습니다. 습한 환경에서 구리 패드의 부식을 줄이기 위해 읽을 때만 센서에 전원을 공급하세요.
작동 원리
센서에는 10개의 구리 트레이스가 있습니다 - 교대로 전원과 신호 선입니다. 건조할 때는 분리되어 있습니다. 물에 잠그면 물이 간격을 연결하고 저항을 변경합니다.
- 물이 더 많음 → 저항이 낮음 → 출력 전압이 높음 → ADC 판독값이 높음
- 물이 적음 → 저항이 높음 → 출력 전압이 낮음 → ADC 판독값이 낮음
Arduino UNO Q MCU는 3.3V 기준의 12비트 ADC를 사용하므로 판독값은 0에서 4095 범위입니다 (일반 Arduino Uno의 0-1023이 아님). 임계값을 특정 센서 및 물 유형에 맞게 조정하세요.
※ 주의:
노출된 구리 트레이스만 물에 닿아야 합니다. 전체 센서 보드 또는 구성 요소를 완전히 물에 잠그지 마세요. 센서 패드가 액체를 향하도록 설치하세요.
배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
| Water Sensor Pin | Arduino UNO Q MCU |
|---|---|
| * (GND) | GND |
| + (VCC) | D5 (controlled power) |
| S (Signal) | A0 |
물 센서를 위한 프로그래밍 방법
- 핀 설정:
- 센서 값 읽기:
- 물 감지:
Arduino UNO Q 코드
Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:
- STM32 MCU는 12비트 ADC를 통해 매초 물 센서를 읽고 결과를 출력합니다.
- Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다.
- 이 섹션에서는 MCU만 프로그래밍됩니다 - Linux 측은 유휴 상태로 유지됩니다. 나중 섹션에서는 Bridge를 통해 두 프로세서가 함께 작동하는 방법을 보여줍니다.
※ 주의:
Arduino UNO Q MCU는 3.3V 기준의 12비트 ADC(0-4095)를 사용합니다. 이는 5V 기준의 10비트 ADC(0-1023)를 사용하는 일반 Arduino Uno와 다릅니다. 보정할 때 THRESHOLD 값을 적절히 조정하세요.
빠른 단계
처음 Arduino UNO Q를 사용하시나요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.
- 연결: 배선도에 표시된 대로 물 센서를 Arduino UNO Q MCU에 배선합니다.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q가 감지될 때까지 기다립니다.
- 새 App 만들기: Create New App 버튼을 클릭합니다.

- App에 이름을 지정합니다(예: WaterSensor).
- Create를 클릭하여 확인합니다.

- 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
- 라이브러리 필요 없음 - 내장 analogRead() 및 digitalWrite() 함수만 사용합니다.
- 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.

- 센서 패드를 물 한잔에 천천히 낮추고 Serial Monitor에서 ADC 값이 증가하는 것을 관찰합니다.
보정
업로드 후 센서 값을 관찰하세요:
- 완전히 건조: 값 ≈ 0
- 부분적으로 물에 잠김: 값 ≈ 300-1000
- 대부분 물에 잠김: 값 ≈ 1500-3000
THRESHOLD를 건조 노이즈 수준 위로 설정하세요 (예: 500). 이렇게 하면 물의 존재를 안정적으로 감지할 수 있습니다.
App Lab 콘솔 출력
Bridge: Linux + MCU
이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 측이 Bridge를 통해 센서 값을 읽고 물 감지 이벤트를 수신할 수 있도록 합니다:
- 물 센서는 MCU에 연결됩니다 - MCU는 매초 ADC를 읽고 값을 캐시합니다.
- MPU는 ADC를 직접 읽을 수 없습니다 - Bridge 함수를 호출하여 센서 값, 상태 또는 이벤트를 가져옵니다.
- MPU는 Wi-Fi를 가지고 있습니다 - 전체 Debian Linux를 실행하므로 물이 처음 감지될 때 Telegram 알림을 보낼 수 있습니다.
- Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 가능하게 합니다.
- ⚠️ /dev/ttyHS1 (Linux)과 Serial1 (MCU)은 라우터에서 예약됨 - 사용자 코드에서 절대 열지 마세요.
요약: MCU가 매초 ADC를 읽음 → 상태 변화를 감지 → 이벤트 플래그를 설정 → MPU가 폴링하고 Telegram 알림을 보냅니다.
MCU 코드 (Bridge)
Python 코드 (Bridge)
빠른 단계
- 연결: 배선도에 표시된 대로 물 센서를 Arduino UNO Q에 배선합니다.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
- 새 App 만들기: Create New App을 클릭하고, WaterSensorBridge라고 이름을 지정한 후 Create를 클릭합니다.
- MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
- Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 App의 Python 파일에 붙여넣습니다.
- 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에서 Run 버튼을 클릭합니다.

- 센서 패드를 물에 담그고 두 콘솔에서 상태 변화를 관찰합니다.
App Lab 콘솔 출력
Telegram
Arduino UNO Q의 센서가 물을 감지했을 때 즉시 Telegram 알림을 받습니다.
MCU 스케치: 이전 Bridge 섹션에서와 동일한 MCU 스케치를 유지합니다.
Python 코드 (Telegram)
빠른 단계
- YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 받은 실제 봇 토큰으로 바꿉니다.
- YOUR_CHAT_ID를 Telegram 채팅 ID로 바꿉니다.
- 이 Python 코드를 App의 Python 파일에 붙여넣습니다 (동일한 MCU 스케치 유지).
- Run 버튼을 클릭합니다. 센서를 물에 담그면 - Telegram 알림을 즉시 받습니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw
You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial
프로젝트 아이디어
물 센서와 Arduino UNO Q로 많은 유용한 프로젝트를 만들 수 있습니다:
- 누수 경보 시스템: 싱크대, 세탁기 또는 온수기 아래에 물 센서를 배치합니다 - 누수가 감지되면 즉시 Telegram 알림을 받으며, 심각도 평가를 위해 원시 ADC 값이 포함됩니다.
- 빗 게이지: 개방형 대피소 아래의 야외에 센서를 장착합니다. 강우량 시작을 감지합니다 - Python이 타임스탬프와 함께 빗 이벤트를 파일에 기록하고 일일 강우량 요약을 Telegram으로 보냅니다.
- 수족관 오버플로우 방지: 탱크 가장자리에 센서를 배치합니다 - 수위가 센서에 닿으면 MPU가 Telegram으로 알려주고 선택적으로 Bridge를 통해 릴레이를 트리거하여 수펌프를 끕니다.
- 식물 급수 모니터: 물 센서로 토양 수분을 확인합니다 - 건조함이 감지되면(낮은 ADC 판독값) Telegram 알림을 보내 식물에 물을 줄 시간을 알립니다.
- 지하실 홍수 모니터: 지하실 전체 바닥 수준에 여러 센서를 설치합니다 - 각 센서는 별도의 아날로그 핀에 연결되고 Python은 어느 영역이 침수되었는지 Telegram을 통해 보고합니다.
스스로 도전해보세요
Arduino UNO Q의 물 센서로 더 나아가고 싶으신가요? 이러한 도전 과제를 시도해보세요:
- 쉬움: Python에 수위 범주를 추가합니다: int(value) < 200 → "dry", < 800 → "damp", < 2000 → "wet", 그 외 "flooded" - 모든 Telegram 상태 답변과 함께 범주를 보냅니다.
- 중간: 쿨다운 타이머를 구현합니다: 물 감지 이벤트가 Telegram 알림을 트리거한 후 동일한 이벤트에 대해 다른 알림을 보내기 전에 60초를 기다립니다 - 지속적인 누수 중 스팸을 방지합니다.
- 고급: Linux의 CSV 파일에 10초마다 타임스탐프와 함께 모든 센서 판독값을 기록하고, 지난 시간의 요약을 보내는 /report Telegram 명령을 구현합니다: 최소값, 최대값, 물 감지 이벤트 수 및 물 접촉 시간.