아두이노 우노 Q 모션 센서 및 LED 스트립을 사용한 자동 조명 제어

이 가이드에서는 HC-SR501 모션 센서와 12V LED 스트립을 사용하여 Arduino UNO Q로 자동 조명 제어 시스템을 구축하는 방법을 배웁니다. 모션이 감지되면 LED 스트립이 켜지고 모션이 멈추면 꺼집니다. 다음에 이상적입니다:

Arduino UNO Q 자동 조명 제어 모션 센서 LED 스트립

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×HC-SR501 모션 센서 쿠팡 | 아마존
1×릴레이 아마존
1×12V LED 스트립 아마존
1×12V 전원 어댑터 아마존
1×DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

LED 스트립 및 모션 센서에 대해

다음 튜토리얼에서 LED 스트립 및 모션 센서에 대해 알아보세요:

초기 센서 설정

시간 지연 조정기나사를 완전히 반시계방향으로 회전 (최소 지연).
감지 범위 조정기나사를 완전히 시계방향으로 회전 (최대 범위).
반복 트리거 선택기반복 가능한 트리거 모드에 점퍼를 배치합니다.
아두이노 모션 센서 초기 설정

배선 다이어그램

Arduino UNO Q 모션 센서 LED 스트립 배선 다이어그램

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

릴레이는 12V 전원 공급 장치와 LED 스트립 사이의 스위치 역할을 합니다. Arduino UNO Q MCU는 릴레이의 IN 핀을 제어합니다.

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-automated-light-control-with-motion-sensor-and-led-strip */ #define MOTION_SENSOR_PIN 7 // The Arduino UNO Q pin connected to the OUTPUT pin of the motion sensor #define RELAY_PIN 9 // The Arduino UNO Q pin connected to the IN pin of the relay (controls LED strip) int motion_state = LOW; int prev_motion_state = LOW; void setup() { pinMode(MOTION_SENSOR_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // LED strip off initially } void loop() { prev_motion_state = motion_state; motion_state = digitalRead(MOTION_SENSOR_PIN); if (prev_motion_state == LOW && motion_state == HIGH) { // Motion detected — turn LED strip on digitalWrite(RELAY_PIN, HIGH); } else if (prev_motion_state == HIGH && motion_state == LOW) { // Motion stopped — turn LED strip off digitalWrite(RELAY_PIN, LOW); } }

빠른 단계

  • Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
  • 구성 요소 배선: 센서 OUTPUT → 핀 7, 릴레이 IN → 핀 9를 연결합니다. LED 스트립을 릴레이를 통해 12V 전원 공급 장치에 연결합니다.
  • 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: 새 앱 만들기 버튼을 클릭합니다.
아두이노 app lab에서 새 앱 만들기 Arduino UNO Q
  • 앱에 이름을 지정합니다. 예: DIYables_AutoLight
  • 만들기를 클릭하여 확인합니다.
  • 새 앱 내에 폴더 및 파일 세트가 생성됩니다.
아두이노 app lab 앱 폴더 및 파일 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에 컴파일 및 업로드합니다.
    아두이노 app lab에서 실행 버튼 클릭 Arduino UNO Q
    • 테스트: 센서 앞에서 움직이세요(모션이 감지되면 LED 스트립이 켜지고 모션이 멈추면 꺼집니다).

    Linux + MCU 브릿지 프로그래밍

    Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다: MPU(Qualcomm, Debian Linux 실행) 및 MCU(STM32, Arduino 스케치를 실행하는 Zephyr OS). 이들은 Arduino_RouterBridge 라이브러리를 통한 RPC를 사용하여 통신합니다(원시 직렬 포트를 통해서는 안 됨).

    • 모션 센서 및 릴레이는 모두 MCU(STM32)에 연결됩니다(센서는 핀 7, 릴레이는 핀 9).
    • MPU는 이들을 직접 제어할 수 없습니다(MCU에서 Bridge.call("check_motion")을 호출하고, 이는 센서를 읽고 릴레이(및 LED 스트립)를 전환합니다).
    • MPU에는 Wi-Fi가 있습니다(MPU는 Wi-Fi를 갖춘 전체 Debian Linux를 실행하므로 텔레그램에 조명 상태를 보고할 수 있습니다).
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe()를 호출합니다(digitalWrite()이 릴레이를 제어하는 데 사용되므로).
    • ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino 라우터에서 사용됩니다(이를 직접 열지 마세요).

    간단히 말해서: MPU는 센서를 폴링합니다 → MCU는 핀을 읽고 릴레이(LED 스트립)를 전환하고 모니터에 보고합니다.

    MCU 스케치 — 브릿지를 사용한 자동 조명:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-automated-light-control-with-motion-sensor-and-led-strip */ #include "Arduino_RouterBridge.h" #define MOTION_SENSOR_PIN 7 #define RELAY_PIN 9 int motion_state = LOW; int prev_motion_state = LOW; void check_motion() { prev_motion_state = motion_state; motion_state = digitalRead(MOTION_SENSOR_PIN); if (prev_motion_state == LOW && motion_state == HIGH) { digitalWrite(RELAY_PIN, HIGH); Monitor.println("Motion detected! LED strip ON"); } else if (prev_motion_state == HIGH && motion_state == LOW) { digitalWrite(RELAY_PIN, LOW); Monitor.println("Motion stopped! LED strip OFF"); } else { Monitor.println(motion_state == HIGH ? "Motion: ACTIVE | LED strip: ON" : "Motion: none | LED strip: OFF"); } } void setup() { Bridge.begin(); Monitor.begin(); pinMode(MOTION_SENSOR_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); Bridge.provide_safe("check_motion", check_motion); Monitor.println("Automated Lighting 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-automated-light-control-with-motion-sensor-and-led-strip */ from arduino.app_utils import * import time def loop(): Bridge.call("check_motion") time.sleep(0.5) App.run(user_loop=loop)
    • 참고: Bridge.begin()이 MCU 스케치에서 호출되고 스케치가 업로드되었는지 확인한 후 Linux 측에서 Python 스크립트를 실행하세요.
    • ⚠️ 경고: /dev/ttyHS1(Linux) 또는 Serial1(MCU)을 코드에서 직접 열지 마세요(이는 Arduino 라우터에 의해 예약되며 이를 액세스하면 브릿지가 중단됩니다).

    빠른 단계

    • MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, 브릿지 MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치하고, 실행을 클릭합니다.
    • Python 스크립트 추가: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣습니다.
    • 앱 실행: 실행을 클릭합니다(Python은 0.5초마다 모션을 폴링합니다; MCU는 LED 스트립을 전환합니다).
    • 콘솔 확인: 콘솔 탭을 열고 → MCU 모니터 서브탭을 열고 센서 앞에서 움직이세요.

    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
    Automated Lighting Bridge ready Motion detected! LED strip ON Motion stopped! LED strip OFF Motion detected! LED strip ON Motion stopped! LED strip OFF

    텔레그램 통합

    텔레그램을 통해 자동 조명 상태를 원격으로 모니터링하세요.

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

    MCU 스케치: 이전 브릿지 섹션의 동일한 MCU 스케치를 유지하세요(변경 없음). STM32에서 이미 업로드되고 실행 중인지 확인하세요.

    Python 스크립트(Arduino App Lab) — 자동 조명용 텔레그램 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-automated-light-control-with-motion-sensor-and-led-strip */ 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 strip") time.sleep(0.5) App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 텔레그램의 @BotFather에서 획득한 토큰으로 바꾸세요.
    • /status를 전송하여 모션 센서를 수동으로 확인하고 LED 스트립을 업데이트합니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 브릿지 MCU 스케치를 사용합니다(아직 업로드되지 않았으면 먼저 업로드).
    • 텔레그램 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 복사합니다.
    • 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
    • 앱 실행: 실행을 클릭합니다(봇이 텔레그램 메시지 수신 대기를 시작합니다).
    • 테스트: /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 strip: OFF [2026-04-29 12:01:30] Telegram: /status [2026-04-29 12:01:30] Motion detected! LED strip 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 strip: OFF
    10:16 AM
    /status
    10:17 AM ✓✓
    Motion detected! LED strip ON
    10:18 AM

    OpenClaw 통합

    이 튜토리얼에 OpenClaw를 적응시킬 수 있습니다. 아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하세요.

    애플리케이션/프로젝트 아이디어

    • 복도 야간 조명: 누군가 밤에 복도를 통과할 때 자동으로 복도를 밝히세요.
    • 계단 조명: 누군가 접근할 때 안전을 위해 계단을 밝히세요.
    • 침대 밑 조명: 침대에서 나올 때 켜지는 극적인 효과를 만드세요.
    • 캐비닛 조명: 캐비닛을 열고 근처에 있을 때 LED 스트립을 켜세요.
    • 정원 경로 조명: 밤에 모션이 감지될 때 정원 경로를 밝히세요.

    도전 과제

    • 쉬움: 릴레이의 시간 지연 포텐셔미터를 조정하여 모션이 멈춘 후 조명을 더 오래 켜진 상태로 유지하세요.
    • 중간: LDR과 함께 결합하세요(어두울 때 그리고 모션이 감지될 때만 LED 스트립을 활성화).
    • 고급: LED 스트립이 켜질 때 자동 텔레그램 알림을 보내세요.