아두이노 우노 Q 도어 센서 LED

Arduino UNO Q에서 도어 센서와 LED를 조합하여 도어가 열리면 자동으로 LED가 켜지고 도어가 닫히면 LED가 꺼지도록 하세요. Bridge와 Telegram을 추가하여 LED를 원격으로 제어하고 도어 알림을 즉시 받을 수 있습니다.

이 튜토리얼에서 배울 내용:

Arduino UNO Q 도어 센서 LED

필요한 하드웨어

1×Arduino UNO Q 아마존
1×Arduino Uno Q용 USB 케이블 아마존
1×도어 센서 쿠팡 | 아마존
1×LED 쿠팡 | 아마존
1×LED Module 아마존
1×220 ohm 저항 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼 와이어 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

LED 및 도어 센서에 대하여

LED나 도어 센서에 익숙하지 않다면 먼저 다음 튜토리얼을 참고하세요:

배선 다이어그램

Arduino UNO Q 도어 센서 LED 연결 배선도

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

도어 센서:

도어 센서 핀 Arduino UNO Q MCU
Pin 1 GND
Pin 2 D9 (with INPUT_PULLUP)

LED:

LED 핀 Arduino UNO Q MCU
Anode (+) D3 (via 220Ω 저항)
Cathode (-) GND

도어 센서 + LED 프로그래밍 방법

  • 핀 설정:
pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT);
  • LED 상태를 도어 센서와 동기화:
int door_state = digitalRead(DOOR_SENSOR_PIN); if (door_state == HIGH) digitalWrite(LED_PIN, HIGH); // door open → LED ON else digitalWrite(LED_PIN, LOW); // door closed → LED OFF

Arduino UNO Q 코드

Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다:

  • STM32 MCU는 도어 센서를 읽고 LED를 직접 제어합니다 — 지연이 필요하지 않으며, 모든 로직이 MCU에서 실행됩니다
  • Qualcomm MPU는 Debian Linux를 실행하며 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 이후 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.

도어가 열리면 LED가 켜지고 닫히면 꺼집니다. 상태는 500ms마다 Serial Monitor에 출력됩니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-door-sensor-led */ #define DOOR_SENSOR_PIN 9 #define LED_PIN 3 int door_state; void setup() { Serial.begin(9600); pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino UNO Q Door Sensor + LED ready"); } void loop() { door_state = digitalRead(DOOR_SENSOR_PIN); if (door_state == HIGH) { Serial.println("The door is open → LED ON"); digitalWrite(LED_PIN, HIGH); } else { Serial.println("The door is closed → LED OFF"); digitalWrite(LED_PIN, LOW); } delay(500); }

빠른 단계

Arduino UNO Q를 처음 사용하시나요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.

  • 설치: 자석을 도어에, reed switch를 도어 프레임에 고정하세요.
  • 연결: 배선 다이어그램에 표시된 대로 도어 센서와 LED를 Arduino UNO Q MCU에 연결하세요.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q가 감지될 때까지 기다리세요.
  • 새 App 만들기: Create New App 버튼을 클릭하세요.
create new app in 아두이노 app lab on Arduino UNO Q
  • App에 이름을 지정합니다. 예: DoorSensorLed
  • Create을 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요. 다른 파일은 기본값으로 유지하세요.
  • 라이브러리 필요 없음 — 내장 digitalRead()digitalWrite()만 사용합니다.
  • 업로드: Arduino App Lab의 Run 버튼을 클릭하세요.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 도어를 열고 닫고 LED와 Serial 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
[2026-04-29 09:00:01] Arduino UNO Q Door Sensor + LED ready [2026-04-29 09:00:02] The door is closed → LED OFF [2026-04-29 09:00:05] The door is open → LED ON [2026-04-29 09:00:08] The door is closed → LED OFF

Bridge: Linux + MCU

이 섹션에서는 두 프로세서를 모두 프로그래밍하여 Linux 측이 도어 상태를 모니터링하고, LED를 제어하며, Bridge를 통해 도어 이벤트를 감지하는 방법을 보여줍니다:

  • 도어 센서 및 LED는 MCU에 연결됩니다 — MCU는 loop()에서 상태 변화를 모니터링하고 자동으로 이벤트 플래그를 설정합니다
  • MPU는 도어 센서를 직접 읽거나 LED를 직접 제어할 수 없습니다 — Bridge 함수를 호출하여 상태를 쿼리하거나 명령을 발행합니다
  • MPU는 Wi-Fi를 가지고 있습니다 — 완전한 Debian Linux를 실행하여 Telegram 알림을 보내고 원격 LED 제어 명령을 수락할 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1(Linux) 및 Serial1(MCU)은 라우터에 의해 예약되어 있습니다 — 사용자 코드에서 절대 열지 마세요

요약: MCU가 loop()에서 도어 이벤트를 모니터링하고 LED를 제어합니다 → MPU가 Bridge를 통해 상태를 읽고 명령을 보냅니다 → MPU가 Wi-Fi를 통해 알림 및 원격 제어를 수행합니다.

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-door-sensor-led */ #include "Arduino_RouterBridge.h" #define DOOR_SENSOR_PIN 9 #define LED_PIN 3 int last_state = LOW; bool door_opened_event = false; bool door_closed_event = false; String get_door_state(String arg) { int state = digitalRead(DOOR_SENSOR_PIN); return (state == HIGH) ? "open" : "closed"; } String get_led_state(String arg) { return (digitalRead(LED_PIN) == HIGH) ? "on" : "off"; } String set_led(String arg) { if (arg == "on") { digitalWrite(LED_PIN, HIGH); Monitor.println("LED turned ON via Bridge"); return "on"; } else { digitalWrite(LED_PIN, LOW); Monitor.println("LED turned OFF via Bridge"); return "off"; } } String get_event(String arg) { if (door_opened_event) { door_opened_event = false; return "opened"; } if (door_closed_event) { door_closed_event = false; return "closed"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); last_state = digitalRead(DOOR_SENSOR_PIN); digitalWrite(LED_PIN, (last_state == HIGH) ? HIGH : LOW); Bridge.provide("get_door_state", get_door_state); Bridge.provide("get_led_state", get_led_state); Bridge.provide_safe("set_led", set_led); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Door Sensor + LED Bridge ready"); Monitor.println(last_state == HIGH ? "Door is open" : "Door is closed"); } void loop() { int state = digitalRead(DOOR_SENSOR_PIN); if (state != last_state) { last_state = state; if (state == HIGH) { door_opened_event = true; digitalWrite(LED_PIN, HIGH); Monitor.println("Door opened! LED ON"); } else { door_closed_event = true; digitalWrite(LED_PIN, LOW); Monitor.println("Door closed. LED OFF"); } } }

Python 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-door-sensor-led */ from arduino.app_utils import * import time def loop(): door = Bridge.call("get_door_state") led = Bridge.call("get_led_state") print(f"Door: {door} LED: {led}") time.sleep(0.5) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 도어 센서와 LED를 Arduino UNO Q에 연결하세요.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다리세요.
  • 새 App 만들기: Create New App을 클릭하고 이름 DoorSensorLedBridge를 입력한 후 Create를 클릭하세요.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 App의 Python 파일에 붙여넣으세요.
  • 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의 Run 버튼을 클릭하세요.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 도어를 열고 닫으세요. LED, MCU 콘솔, Python 콘솔이 모두 반응하는 것을 확인하세요.

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
[2026-04-29 09:00:01] Arduino UNO Q Door Sensor + LED Bridge ready [2026-04-29 09:00:01] Door is closed [2026-04-29 09:00:05] Door opened! LED ON [2026-04-29 09:00:08] Door closed. LED OFF [2026-04-29 09:00:15] LED turned ON via Bridge
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Door: closed LED: off [2026-04-29 09:00:05] Door: open LED: on [2026-04-29 09:00:08] Door: closed LED: off

Telegram

도어가 열리거나 닫힐 때 즉시 Telegram 알림을 받고 LED를 원격으로 제어하세요.

MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지하세요.

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-door-sensor-led */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Auto-notify on door events event = Bridge.call("get_event") if event == "opened": msg = "🚪 Door opened! LED is ON." print(msg) send_message(CHAT_ID, msg) elif event == "closed": msg = "🔒 Door closed. LED is OFF." print(msg) send_message(CHAT_ID, msg) # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q Door Sensor + LED Bot\n" "/door - Read current door state\n" "/led - Read current LED state\n" "/ledon - Turn LED on\n" "/ledoff - Turn LED off\n" "/event - Check for a door event") elif text == "/door": result = Bridge.call("get_door_state") send_message(chat_id, f"Door state: {result}") elif text == "/led": result = Bridge.call("get_led_state") send_message(chat_id, f"LED state: {result}") elif text == "/ledon": result = Bridge.call("set_led", "on") send_message(chat_id, f"LED turned: {result}") elif text == "/ledoff": result = Bridge.call("set_led", "off") send_message(chat_id, f"LED turned: {result}") elif text == "/event": result = Bridge.call("get_event") send_message(chat_id, f"Door event: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.5) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 받은 실제 봇 토큰으로 교체하세요.
  • YOUR_CHAT_ID를 Telegram 채팅 ID로 교체하세요.
  • 이 Python 코드를 App의 Python 파일에 붙여넣으세요(동일한 MCU 스케치 유지).
  • Run 버튼을 클릭하세요. 도어를 열면 Telegram 알림을 받습니다. /ledon을 전송하여 LED를 원격으로 켜세요.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:05] 🚪 Door opened! LED is ON. [2026-04-29 09:10:08] 🔒 Door closed. LED is OFF. [2026-04-29 09:10:20] Received: /ledon
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
/door
10:15 AM ✓✓
Door state: closed
10:16 AM
/led
10:17 AM ✓✓
LED state: off
10:18 AM
/ledon
10:19 AM ✓✓
LED turned: on
10:20 AM
/ledoff
10:21 AM ✓✓
LED turned: off
10:22 AM
🚪 Door opened! LED is ON.
10:23 AM
🔒 Door closed. LED is OFF.
10:24 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

프로젝트 아이디어

Arduino UNO Q에서 도어 센서 및 LED로 많은 유용한 프로젝트를 만들 수 있습니다:

  • 입구 표시 조명: 밝은 LED를 입구 근처에 설치하세요 — 도어가 열릴 때마다 자동으로 켜져 방문객과 거주자에게 명확한 시각 신호를 제공합니다
  • 원격 도어 모니터링: Telegram을 사용하여 도어가 현재 열려 있는지 또는 닫혀 있는지 어디서나 확인하고 — 도어가 예기치 않게 열려 있으면 LED를 원격으로 켜서 억제력으로 사용할 수 있습니다
  • 나이트라이트 트리거: Bridge를 통해 도어가 일몰 후에 열릴 때 릴레이 제어 나이트라이트를 활성화하세요 — MPU가 set_led on 명령을 발행하기 전에 Linux에서 현재 시간을 확인합니다
  • 스마트 사서함: 사서함 뚜껑에 도어 센서를 설치하세요 — 우편이 배달될 때(뚜껑이 열릴 때) LED가 켜지고 Telegram 알림이 전송되어 우편을 수령할 때를 알 수 있습니다
  • 차고 도어 상태 패널: 차고 도어에 도어 센서를 사용하고 집 안의 상태 표시기로 LED를 사용하세요 — Python 측은 타임스탬프가 있는 모든 열림/닫힘 이벤트를 파일에 기록합니다

도전해 보세요

Arduino UNO Q에서 도어 센서 및 LED를 더 깊이 있게 사용할 준비가 되셨나요? 다음 도전을 시도해 보세요:

  • 초급: 다른 색깔의 LED(예: 녹색)를 2개 추가하세요. 도어가 닫혀 있을 때는 항상 켜져 있고 열려 있을 때는 꺼져 있어야 합니다 — Bridge 로직 없이 이중 색상 열림/닫힘 상태 표시기를 제공합니다.
  • 중급: Bridge를 통해 LED 상태를 전환하는 Telegram /toggle 명령을 구현하세요. 도어 상태와 관계없이 LED를 수동으로 제어할 수 있습니다 — 다음 도어 이벤트 시 자동 동기화를 계속합니다.
  • 고급: 애니메이션 도어 열림 경고를 구축하세요: 도어가 열릴 때 MCU의 PWM을 통해 LED가 2Hz로 깜박입니다 — 별도의 Bridge 함수 set_led_blink(String)을 구현하여 "on" 또는 "off"를 인수로 받습니다.