아두이노 우노 Q 레인 센서
레인 센서는 비나 눈을 감지하고 강우 강도를 측정할 수 있습니다. 디지털 출력(비/비 없음)과 아날로그 출력(강도 수준)을 모두 제공합니다. Arduino UNO Q에서 MCU의 12비트 ADC는 더 높은 해상도의 강도 읽기를 제공합니다. Bridge와 Telegram을 사용하면 휴대폰에서 즉시 비 알림을 받을 수 있습니다.
이 튜토리얼에서는 다음을 배우게 됩니다:
- 레인 센서가 무엇이고 어떻게 작동하는지
- Arduino UNO Q MCU에 레인 센서를 배선하는 방법
- 디지털(DO)과 아날로그(AO) 출력을 모두 읽는 방법
- Bridge를 사용하여 Linux 쪽(Python)에 빗 상태와 이벤트를 노출하는 방법
- Arduino UNO Q에서 비가 감지될 때 Telegram 알림을 받는 방법
- Arduino UNO Q에서 레인 센서와 함께 OpenClaw를 사용하는 방법

필요한 하드웨어
| 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 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
레인 센서 소개
레인 센서는 두 부분으로 구성됩니다: 감지 패드와 전자 모듈.

감지 패드: 옥외에 배치됩니다(지붕이나 창틀에). 교대로 배치된 전원 및 센서 구리선이 있으며, 비가 내릴 때 물이 이 선들을 연결합니다.
전자 모듈: 패드 신호를 읽을 수 있는 출력으로 변환합니다:
- VCC 핀: 3.3V ~ 5V 전원
- GND 핀: 접지
- DO 핀: 디지털 출력 — HIGH = 비 없음, LOW = 비 감지됨. 감도는 기판 상의 포텐셔미터로 설정합니다.
- AO 핀: 아날로그 출력 — 값이 낮음 = 비가 더 많음, 값이 높음 = 비가 덜함. 포텐셔미터는 AO에 영향을 주지 않습니다.
또한 두 개의 LED가 있습니다:
- PWR-LED: 전원 표시기
- DO-LED: 비가 감지될 때(DO 핀 LOW) 켜집니다
작동 방식
- DO 핀: 포텐셔미터가 임계값을 설정합니다. 비가 임계값을 초과하면 DO는 LOW가 됩니다. 감도를 설정하려면 포텐셔미터를 조정하세요.
- AO 핀: 패드의 물의 양에 비례하는 아날로그 전압을 계속 출력합니다. Arduino UNO Q에서 MCU는 이를 12비트 값(0–4095)으로 읽습니다 — 더 낮은 값은 더 많은 비를 의미합니다.
※ 주의:
VCC를 디지털 출력 핀에 연결하세요(항상 켜져 있는 5V가 아님). 읽기 중에만 센서에 전원을 공급하세요. 이것은 전화학적 부식을 줄이고 센서 수명을 연장합니다.
배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
| Rain Sensor Pin | Arduino UNO Q MCU |
|---|---|
| GND | GND |
| VCC | D3 (controlled power) |
| DO | D4 |
| AO | A0 |
레인 센서 프로그래밍 방법
- 핀 설정:
- 센서에 전원 공급, 두 출력 읽기, 그 다음 전원 차단:
- 디지털 출력에서 비 확인:
Arduino UNO Q 코드
Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:
- STM32 MCU는 매초 레인 센서의 DO(디지털) 및 AO(아날로그) 출력을 모두 읽습니다
- Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다
- 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 쪽은 유휴 상태로 유지됩니다. 이후 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방식을 보여줍니다.
※ 주의:
Arduino UNO Q MCU는 12비트 ADC(0–4095)를 사용합니다. AO 강도 값은 이 범위에 있을 것입니다 — 감지 임계값을 적절히 조정하세요.
빠른 단계
Arduino UNO Q를 처음 사용하나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.
- 연결: 배선도에 표시된 대로 레인 센서를 Arduino UNO Q MCU에 배선하세요.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q가 감지될 때까지 기다리세요.
- 새 앱 만들기: Create New App 버튼을 클릭하세요.

- 앱에 이름을 지정하세요. 예를 들어: RainSensor
- Create를 클릭하여 확인하세요.

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

- 감지 패드에 몇 방울의 물을 놓고 Serial Monitor에서 출력을 관찰하세요.
- DO LED가 올바르게 응답하지 않으면 모듈의 포텐셔미터를 조정하세요.
App Lab 콘솔 출력
Bridge: Linux + MCU
이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 쪽이 Bridge를 통해 빗 상태를 읽고 비 시작 이벤트를 수신할 수 있도록 하는 방법을 보여줍니다:
- 레인 센서는 MCU에 연결됩니다 — MCU는 매초 DO와 AO를 읽고 값을 캐시합니다
- MPU는 센서 핀을 직접 읽을 수 없습니다 — 상태, 아날로그 값 또는 이벤트를 얻기 위해 Bridge 함수를 호출합니다
- MPU에는 Wi-Fi가 있습니다 — 전체 Debian Linux를 실행하여 비가 감지되는 순간 Telegram 알림을 보낼 수 있습니다
- Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 활성화합니다
- ⚠️ /dev/ttyHS1(Linux)과 Serial1(MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 절대 열지 마세요
요약하면: MCU가 DO 핀을 통해 비를 감지 → 이벤트 플래그 설정 → MPU가 Bridge 폴링 → MPU가 Telegram 알림 전송.
MCU 코드 (Bridge)
Python 코드 (Bridge)
빠른 단계
- 연결: 배선도에 표시된 대로 레인 센서를 Arduino UNO Q에 배선하세요.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다리세요.
- 새 앱 만들기: Create New App을 클릭하고, RainSensorBridge라는 이름을 입력한 다음 Create를 클릭하세요.
- MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
- Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 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 코드를 앱의 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로 많은 유용한 프로젝트를 구축할 수 있습니다:
- 비 경고 시스템: 감지 패드를 지붕에 설치하세요 — 비가 시작되면 MPU가 AO 강도 값과 함께 Telegram 알림을 보내므로 어디에서나 조치를 취할 수 있습니다(창을 닫고, 세탁물을 안으로 가져오세요)
- 자동 차양 컨트롤러: 레인 센서를 모터/릴레이와 함께 사용하세요 — 비가 감지되면 MCU는 Bridge를 통해 자동으로 차양 또는 블라인드를 닫고 Telegram 알림을 보냅니다
- 강우 로거: 매 비 감지 이벤트를 타임스탬프와 AO 강도와 함께 Linux의 CSV 파일에 기록하세요 — 일일 강우량 요약을 생성하고 자정에 Telegram으로 보내세요
- 스마트 관개 억제 장치: 펌프 튜토리얼과 결합하세요 — 비가 감지되면 Python은 예정된 관개 사이클을 건너뛰어 물을 절약하고 이유를 설명하는 Telegram 메시지를 보냅니다
- 옥상 정원 모니터: AO 값을 사용하여 시간에 따른 비 강도를 추적하세요 — Python은 매 15분마다 평균 강우량을 계산하고 정기적인 Telegram 요약을 보냅니다
당신의 실력을 시험해보세요
Arduino UNO Q의 레인 센서로 더 나아갈 준비가 되었나요? 이 과제들을 시도해보세요:
- 쉬움: Python에서 AO 강도를 분류하세요: int(value) > 3000 → "dry", > 1500 → "light rain", > 500 → "moderate rain", 그 외 "heavy rain" — 모든 Telegram 알림에 이 라벨을 포함하세요.
- 중간: 비 지속 시간 추적기 구현: 비가 감지될 때 시작 시간을 기록하고 비가 멈췌을 때 종료 시간을 기록하세요 — 비가 멈춘 경우 지속된 시간을 보고하는 Telegram 메시지를 보내세요.
- 고급: 24시간 강우 차트 구축: 매분 Python의 목록에 AO 값을 기록하세요 — 지난 24시간 동안 시간당 강우 강도의 텍스트 기반 막대 차트를 보내는 /chart Telegram 명령을 구현하세요.