아두이노 우노 Q 모션 센서
이 튜토리얼은 Arduino UNO Q와 함께 HC-SR501 PIR 모션 센서를 사용하여 인간의 움직임을 감지하는 방법을 보여줍니다. 다음을 배우게 됩니다:
- HC-SR501 모션 센서의 작동 원리
- 모션 센서를 Arduino UNO Q에 연결하는 방법
- MCU를 프로그래밍하여 움직임 시작 및 중지 이벤트를 감지하는 방법
- Bridge를 사용하여 Linux에서 Monitor를 통해 움직임 이벤트를 보고하는 방법
- Telegram을 통해 원격으로 움직임 알림을 받는 방법

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | HC-SR501 모션 센서 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
HC-SR501 모션 센서 정보

HC-SR501 PIR 센서는 인간이나 동물의 움직임을 감지합니다. 조명 자동화, 문 제어, 에스컬레이터 및 침입 감지에 일반적으로 사용됩니다.
핀아웃
HC-SR501은 세 개의 핀을 가지고 있습니다:
- GND 핀: GND (0V)에 연결합니다.
- VCC 핀: VCC (5V)에 연결합니다.
- OUTPUT 핀: 움직임이 없을 때는 LOW, 움직임이 감지되면 HIGH를 보냅니다. MCU 디지털 입력 핀에 연결합니다.

센서에는 감도 및 시간 지연을 조정하기 위한 한 개의 점퍼와 두 개의 포텐셔미터가 있습니다. 기본 설정으로 시작하세요 — 자세한 내용은 고급 사용법 섹션을 참조하세요.
작동 원리
HC-SR501은 적외선 복사의 변화를 감지하여 움직임을 감지합니다. 감지를 트리거하려면 대상이 다음을 충족해야 합니다:
- 움직이고 있어야 함
- 적외선 에너지를 방출해야 함 (인간과 동물은 자연적으로 이를 수행함)
OUTPUT 핀 동작:
- 움직임 없음: OUTPUT은 LOW입니다.
- 움직임 감지됨: OUTPUT이 LOW에서 HIGH로 변경됩니다.
- 움직임 중지됨: OUTPUT이 HIGH에서 LOW로 변경됩니다.
초기 센서 설정
| 시간 지연 조정기 | 나사를 완전히 반시계 방향으로 돌립니다 (최소 지연). |
| 감지 범위 조정기 | 나사를 완전히 시계 방향으로 돌립니다 (최대 범위). |
| 반복 트리거 선택기 | 점퍼를 반복 가능한 트리거 모드에 놓습니다. |

배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
MCU 코드
Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU (실시간 하드웨어 제어 처리) 및 Qualcomm MPU (Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다 — Linux 쪽은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줄 것입니다.
빠른 단계
- Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
- 구성 요소 배선: VCC → 5V, GND → GND, OUTPUT → 핀 2에 연결합니다.
- 연결: USB-C 케이블을 사용하여 Arduino UNO Q를 컴퓨터에 연결합니다.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
- 새 앱 만들기: 새 앱 만들기 버튼을 클릭합니다.

- 앱에 이름을 지정합니다 (예: DIYables_MotionSensor).
- 만들기를 클릭하여 확인합니다.
- 새 앱 내부에 생성된 일련의 폴더와 파일이 표시됩니다.

- 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의 Run 버튼을 클릭하여 STM32에 컴파일하고 업로드합니다.

- 테스트: 센서 앞에서 걸어봅니다. 아래 Bridge 섹션을 사용하여 Monitor에서 움직임 이벤트를 확인합니다.
Linux + MCU Bridge 프로그래밍
Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU (Qualcomm, Debian Linux 실행) 및 MCU (STM32, Zephyr OS 실행). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다 — 절대 raw 시리얼 포트를 통해서가 아닙니다.
- 모션 센서는 MCU (STM32)에 연결됩니다 — OUTPUT 핀이 핀 2에 있습니다.
- MPU는 센서를 직접 읽을 수 없습니다 — MCU에서 Bridge.call("check_motion")을 호출하고, MCU는 센서를 읽고 모든 움직임 전환을 Monitor에 보고합니다.
- MPU에는 Wi-Fi가 있습니다 — MPU는 Wi-Fi를 갖춘 전체 Debian Linux를 실행하므로 움직임 알림을 Telegram으로 전달할 수 있습니다.
- 통신: Linux 쪽의 Bridge.call()이 MCU 쪽의 Bridge.provide()를 호출합니다 (digitalRead()만 사용되므로 — 하드웨어 출력 쓰기 없음).
- ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)은 Arduino Router에서 사용됩니다 — 절대로 직접 열지 마세요.
요약하면: MPU는 센서를 폴링합니다 → MCU는 핀을 읽고 전환을 보고합니다 → Monitor는 움직임 이벤트를 표시합니다.
MCU 스케치 — Bridge를 사용한 모션 센서 감지:
Python 스크립트 (Arduino App Lab) — 0.5초마다 움직임 이벤트 폴링:
- 참고: MCU 스케치에서 Bridge.begin()이 호출되었는지 확인하고 Linux 쪽에서 Python 스크립트를 실행하기 전에 스케치가 업로드되었는지 확인하세요.
- ⚠️ 경고: /dev/ttyHS1 (Linux에서) 또는 Serial1 (MCU에서)을 코드에서 직접 열지 마세요 — 이들은 Arduino Router에서 예약되어 있으며 접근하면 Bridge가 손상됩니다.
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치하고, Run을 클릭합니다.
- Python 스크립트 추가: 위의 Python 코드를 같은 앱의 Python 탭에 붙여넣습니다.
- 앱 실행: Run을 클릭합니다 — Python은 0.5초마다 모션 센서를 폴링합니다.
- 콘솔 확인: Console 탭을 열고 → MCU Monitor 하위 탭으로 이동하여 센서 앞에서 걸어봅니다.
App Lab 콘솔 출력
Telegram 통합
Telegram을 통해 움직임 알림을 받습니다.
아직 Telegram 봇이 없다면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 보고 봇 토큰을 얻으세요.
MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다 — 변경할 필요가 없습니다. STM32에서 이미 업로드되어 실행 중인지 확인하세요.
Python 스크립트 (Arduino App Lab) — 움직임 감지를 위한 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
- /status를 전송하여 모션 센서 상태의 수동 확인을 트리거합니다.
빠른 단계
- MCU 스케치 업로드: 이전 섹션에서 Bridge MCU 스케치를 사용합니다 (아직 수행하지 않았다면 먼저 업로드하세요).
- Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱의 Python 탭에 복사합니다.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
- 앱 실행: Run을 클릭합니다 — 봇이 Telegram 메시지를 수신 대기하기 시작합니다.
- 테스트: /status를 전송합니다 — 봇이 현재 움직임 상태로 회신합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참고하여 OpenClaw를 이 튜토리얼에 맞춰 조정할 수 있습니다.
고급 사용법
감지 범위 조정기
감지 거리를 조정합니다 (약 3–7미터):
- 완전히 시계 방향으로 — ~3미터.
- 완전히 반시계 방향으로 — ~7미터.

시간 지연 조정기
움직임 중지 후 보유 시간을 조정합니다:
- 완전히 시계 방향으로 — ~5분.
- 완전히 반시계 방향으로 — ~3초.

반복 트리거 선택기

- 단일 트리거 모드: OUTPUT이 time_delay 동안 HIGH가 되었다가 3초 동안 LOW로 가서, 움직임이 계속되는 동안 반복됩니다.
- 반복 가능한 트리거 모드: OUTPUT이 움직임의 전체 기간과 time_delay 동안 HIGH로 유지됩니다. 대부분의 응용 프로그램에 권장됩니다.
※ 주의:
대부분의 응용 프로그램에서 반복 가능한 트리거 모드를 사용하세요. 실제 사용에서:
- 사람이 감지되면 장치가 켜집니다.
- 사람이 떠난 후 지연 시간이 지나면 장치가 꺼집니다.
응용 프로그램/프로젝트 아이디어
- 스마트 조명: 누군가가 방에 들어올 때 조명을 켜고, 떠날 때 끕니다.
- 보안 알림: 움직임이 감지될 때마다 Telegram 메시지를 보냅니다.
- 점유 카운터: 시간당 움직임이 시작되는 횟수를 세십시오.
- 에너지 절약기: 움직임이 감지되지 않은 지 몇 분이 지난 후 기기를 종료합니다.
도전 과제
- 쉬움: 움직임이 감지될 때마다 LED가 3번 깜박이도록 만듭니다.
- 중간: 움직임 이벤트를 타임스탬프와 함께 MPU의 파일에 기록합니다.
- (고급: /status를 필요로 하지 않고) 움직임이 감지될 때마다 자동으로 Telegram 알림을 보냅니다.