아두이노 우노 Q 모션 센서로 LED 제어하기

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

Arduino UNO Q 모션 센서 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×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

모션 센서와 LED에 대하여

다음 튜토리얼에서 모션 센서와 LED에 대해 배워봅시다:

배선 다이어그램

Arduino UNO Q 모션 센서 LED 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

MCU 코드

Arduino UNO Q에는 두 개의 프로세서가 있습니다: STM32 MCU(실시간 하드웨어 제어 담당)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍되고 Linux 측은 유휴 상태로 유지됩니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-motion-sensor-led */ #define MOTION_SENSOR_PIN 7 // The Arduino UNO Q pin connected to the OUTPUT pin of the motion sensor #define LED_PIN 3 // The Arduino UNO Q pin connected to the LED int motion_state = LOW; int motion_state_prev = LOW; void setup() { pinMode(MOTION_SENSOR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { motion_state_prev = motion_state; motion_state = digitalRead(MOTION_SENSOR_PIN); if (motion_state_prev == LOW && motion_state == HIGH) { // Motion detected digitalWrite(LED_PIN, HIGH); // turn LED on } else if (motion_state_prev == HIGH && motion_state == LOW) { // Motion stopped digitalWrite(LED_PIN, LOW); // turn LED off } }

빠른 단계

  • 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 버튼을 클릭하세요.
create new app in 아두이노 app lab on Arduino UNO Q
  • App에 이름을 지정하세요. 예: DIYables_MotionLED
  • Create를 클릭하여 확인하세요.
  • 새 App 내에 생성된 폴더와 파일 세트를 볼 수 있습니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • sketch/sketch.ino 파일을 찾으세요. 여기에 MCU 스케치를 붙여넣을 것입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 스케치 파일에 붙여넣으세요. 다른 파일은 기본값으로 유지하세요.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • 업로드: Arduino App Lab에서 실행 버튼을 클릭하여 STM32에 컴파일하고 업로드하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q
    • 테스트: 센서 앞을 걸어보세요. 모션이 감지되면 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를 제어합니다:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-motion-sensor-led */ #include "Arduino_RouterBridge.h" #define MOTION_SENSOR_PIN 7 #define LED_PIN 3 int motion_state = LOW; int motion_state_prev = LOW; void check_motion() { motion_state_prev = motion_state; motion_state = digitalRead(MOTION_SENSOR_PIN); if (motion_state_prev == LOW && motion_state == HIGH) { digitalWrite(LED_PIN, HIGH); Monitor.println("Motion detected! LED ON"); } else if (motion_state_prev == HIGH && motion_state == LOW) { digitalWrite(LED_PIN, LOW); Monitor.println("Motion stopped! LED OFF"); } else { Monitor.println(motion_state == HIGH ? "Motion: ACTIVE | LED: ON" : "Motion: none | LED: OFF"); } } void setup() { Bridge.begin(); Monitor.begin(); pinMode(MOTION_SENSOR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); Bridge.provide_safe("check_motion", check_motion); Monitor.println("Motion Sensor LED Bridge ready"); } void loop() {}

    Python 스크립트(Arduino App Lab) — 0.5초마다 모션 상태 폴링:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-motion-sensor-led */ from arduino.app_utils import * import time def loop(): Bridge.call("check_motion") time.sleep(0.5) App.run(user_loop=loop)
    • 참고: 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 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Motion Sensor LED Bridge ready Motion detected! LED ON Motion stopped! LED OFF Motion detected! LED ON Motion stopped! LED OFF

    Telegram 통합

    Telegram을 통해 모션 감지 LED를 원격으로 제어하고 모니터링하세요.

    아직 Telegram 봇이 없다면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참조하여 봇 토큰을 얻으세요.

    MCU 스케치: 이전 Bridge 섹션의 같은 MCU 스케치를 유지하세요 — 변경이 필요 없습니다. STM32에서 이미 업로드되고 실행 중인지 확인한 후 계속하세요.

    Python 스크립트(Arduino App Lab) — 모션 감지 LED용 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-motion-sensor-led */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/status": status = Bridge.call("check_motion") send_message(chat_id, status if status else "No motion state change since last check.") else: send_message(chat_id, "Commands:\n/status — check motion state and update LED") time.sleep(0.5) App.run(user_loop=loop)
    • 참고: 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 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /status [2026-04-29 12:00:01] Motion: none | LED: OFF [2026-04-29 12:01:30] Telegram: /status [2026-04-29 12:01:30] Motion detected! LED ON
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /status
    10:15 AM ✓✓
    Motion: none | LED: OFF
    10:16 AM
    /status
    10:17 AM ✓✓
    Motion detected! LED ON
    10:18 AM

    OpenClaw 통합

    이 튜토리얼을 OpenClaw에 맞게 조정할 수 있습니다. 아두이노 우노 Q - OpenClaw 튜토리얼의 지시를 참조하세요.

    응용/프로젝트 아이디어

    • 자동 실내 조명: 누군가 들어오면 실내 조명을 켜고 나가면 끕니다.
    • 계단 조명: 누군가 접근하면 계단을 밝힙니다.
    • 야간 모드 조명: LDR과 결합하여 어두울 때만 그리고 모션이 감지될 때만 LED를 활성화합니다.
    • 보안 표시기: 야간에 모션이 감지되면 LED를 빠르게 깜빡입니다.

    직접 도전해보세요

    • 쉬움: 모션이 진행 중인 동안 깜빡이는 두 번째 LED를 추가하세요.
    • 중간: 모션이 멈춘 후 10초 동안 LED를 켜두고 나서 끕니다.
    • 고급: 모션이 감지될 때마다 Telegram 알림을 자동으로 보내세요 (/status 필요 없음).