아두이노 우노 Q 모션 센서로 LED 제어하기
이 가이드에서는 Arduino UNO Q를 사용하여 HC-SR501 모션 센서로 모션이 감지되면 LED를 자동으로 켜고, 모션이 멈추면 LED를 끄는 방법을 배웁니다.

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

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
MCU 코드
Arduino UNO Q에는 두 개의 프로세서가 있습니다: STM32 MCU(실시간 하드웨어 제어 담당)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍되고 Linux 측은 유휴 상태로 유지됩니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.
빠른 단계
- Arduino UNO Q를 처음 사용하나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
- 부품 배선: 센서 OUTPUT → 핀 7, LED (220Ω 저항 사용) → 핀 3으로 연결하세요.
- 연결: Arduino UNO Q를 USB-C 케이블로 컴퓨터에 연결하세요.
- Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다리세요.
- 새 App 만들기: Create New App 버튼을 클릭하세요.

- App에 이름을 지정하세요. 예: DIYables_MotionLED
- Create를 클릭하여 확인하세요.
- 새 App 내에 생성된 폴더와 파일 세트를 볼 수 있습니다.

- 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에 컴파일하고 업로드하세요.

- 테스트: 센서 앞을 걸어보세요. 모션이 감지되면 LED가 켜지고 모션이 멈추면 꺼져야 합니다.
Linux + MCU Bridge 프로그래밍
Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다: MPU(Qualcomm, Debian Linux 실행)와 MCU(STM32, Arduino 스케치를 실행하는 Zephyr OS). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신하며, 원시 직렬 포트를 통해 통신하지 않습니다.
- 모션 센서와 LED는 모두 MCU(STM32)에 연결됩니다 — 센서는 핀 7, LED는 핀 3입니다.
- MPU는 직접 제어할 수 없습니다 — MCU에서 Bridge.call("check_motion")을 호출하면 MCU가 센서를 읽고 LED를 업데이트합니다.
- MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi를 갖춘 전체 Debian Linux를 실행하므로 모션 이벤트를 Telegram으로 전달할 수 있습니다.
- 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe()를 호출합니다 (digitalWrite()를 사용하여 LED를 제어하므로).
- ⚠️ 예약됨: /dev/ttyHS1(Linux)와 Serial1(MCU)은 Arduino Router에서 사용하며, 직접 열지 않아야 합니다.
간단히 말해: MPU가 센서를 폴링 → MCU가 핀을 읽고 LED를 업데이트하고 Monitor에 보고합니다.
MCU 스케치 — 모션 센서가 Bridge로 LED를 제어합니다:
Python 스크립트(Arduino App Lab) — 0.5초마다 모션 상태 폴링:
- 참고: MCU 스케치에서 Bridge.begin()이 호출되고 Linux 측에서 Python 스크립트를 실행하기 전에 스케치가 업로드되어야 합니다.
- ⚠️ 경고: 코드에서 /dev/ttyHS1(Linux)을 직접 열거나 Serial1(MCU)을 사용하지 마세요. 이것들은 Arduino Router에 의해 예약되어 있으며 접근하면 Bridge가 중단됩니다.
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 App을 만들고, Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치한 후 실행을 클릭하세요.
- Python 스크립트 추가: 위의 Python 코드를 같은 App의 Python 탭에 붙여넣으세요.
- App 실행: 실행을 클릭하세요. Python이 0.5초마다 모션을 폴링하고 MCU가 LED를 업데이트하고 Monitor에 표시합니다.
- 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭으로 이동하여 센서 앞을 걸어보세요.
App Lab 콘솔 출력
Telegram 통합
Telegram을 통해 모션 감지 LED를 원격으로 제어하고 모니터링하세요.
아직 Telegram 봇이 없다면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참조하여 봇 토큰을 얻으세요.
MCU 스케치: 이전 Bridge 섹션의 같은 MCU 스케치를 유지하세요 — 변경이 필요 없습니다. STM32에서 이미 업로드되고 실행 중인지 확인한 후 계속하세요.
Python 스크립트(Arduino App Lab) — 모션 감지 LED용 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram에서 @BotFather로부터 얻은 토큰으로 바꾸세요.
- /status를 보내 모션 센서를 수동으로 확인하고 LED를 업데이트하세요.
빠른 단계
- MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용하세요 (아직 업로드하지 않았다면 먼저 업로드하세요).
- Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 App의 Python 탭에 복사하세요.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
- App 실행: 실행을 클릭하세요. 봇이 Telegram 메시지를 수신 대기하기 시작합니다.
- 테스트: /status를 보내세요. 봇이 모션 상태와 LED 상태로 응답합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
이 튜토리얼을 OpenClaw에 맞게 조정할 수 있습니다. 아두이노 우노 Q - OpenClaw 튜토리얼의 지시를 참조하세요.
응용/프로젝트 아이디어
- 자동 실내 조명: 누군가 들어오면 실내 조명을 켜고 나가면 끕니다.
- 계단 조명: 누군가 접근하면 계단을 밝힙니다.
- 야간 모드 조명: LDR과 결합하여 어두울 때만 그리고 모션이 감지될 때만 LED를 활성화합니다.
- 보안 표시기: 야간에 모션이 감지되면 LED를 빠르게 깜빡입니다.
직접 도전해보세요
- 쉬움: 모션이 진행 중인 동안 깜빡이는 두 번째 LED를 추가하세요.
- 중간: 모션이 멈춘 후 10초 동안 LED를 켜두고 나서 끕니다.
- 고급: 모션이 감지될 때마다 Telegram 알림을 자동으로 보내세요 (/status 필요 없음).