아두이노 우노 Q 도어 센서

도어 센서는 리드 스위치와 자석을 사용하여 도어나 창이 열려 있는지 닫혀 있는지를 감지합니다. Arduino UNO Q에서 MCU는 리드 스위치 상태를 읽고, Linux 측에서 도어가 열리거나 닫힐 때 즉시 Telegram 알림을 보낼 수 있습니다.

이 튜토리얼에서 배우는 내용:

Arduino UNO Q 도어 센서

필수 하드웨어

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

도어 센서에 대하여

핀 배열

도어 센서는 두 부분으로 구성됩니다:

  • 리드 스위치 — 두 개의 금속 커넥터(극성 없음)
  • 자석 — 움직이는 부분(도어 또는 창)에 부착됨
도어 센서 사용법 핀아웃

리드 스위치의 두 핀은 서로 교환 가능합니다 — 관찰할 극성이 없습니다.

작동 원리

자석은 도어나 창(움직이는 부분)에 고정되고, 리드 스위치는 도어 프레임(고정된 부분)에 고정됩니다.

  • 도어가 닫혀 있을 때, 자석이 리드 스위치 근처에 있습니다 — 회로가 닫힙니다
  • 도어가 열려 있을 때, 자석이 멀어집니다 — 회로가 열립니다
도어 센서 how it works

※ 주의:

리드 스위치는 HIGH 또는 LOW를 직접 출력하지 않습니다. 리드 스위치의 한 핀을 GND에 연결하고 다른 핀을 INPUT_PULLUP으로 구성된 Arduino UNO Q 입력 핀에 연결합니다. 이는 부유 값을 방지합니다:

  • 도어 닫힘(자석 근처) → 핀이 LOW를 읽음
  • 도어 열림(자석 멀음) → 핀이 HIGH를 읽음

배선 다이어그램

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

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

Door Sensor Pin Arduino UNO Q MCU
Pin 1 GND
Pin 2 D9 (with INPUT_PULLUP)

도어 센서용 프로그래밍 방법

  • Arduino UNO Q MCU 핀을 디지털 입력으로 설정하고 풀-업 저항을 사용합니다:
pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP);
  • 도어 상태 읽기:
int door_state = digitalRead(DOOR_SENSOR_PIN);
  • 확인 및 응답:
if (door_state == HIGH) Serial.println("The door is open"); else Serial.println("The door is closed");

Arduino UNO Q 코드

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

  • STM32 MCU — 디지털 핀을 통해 리드 스위치를 읽습니다 — 모든 센싱은 MCU에서 실행됩니다
  • Qualcomm MPU — Debian Linux를 실행하고 Wi-Fi, Python, 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍합니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서 두 프로세서가 Bridge를 통해 어떻게 함께 작동하는지 보여줍니다.

MCU는 500ms마다 도어 센서를 읽고 상태를 Serial Monitor에 인쇄합니다.

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

빠른 단계

Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따릅니다.

  • 설치: 자석을 도어에 고정하고 리드 스위치를 도어 프레임에 고정합니다. 도어가 닫혀 있을 때 가깝도록 장착합니다.
  • 연결: 배선 다이어그램과 같이 도어 센서를 Arduino UNO Q MCU에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다(예: DoorSensor).
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • 라이브러리 필요 없음 — 도어 센서는 내장된 digitalRead() 함수만 사용합니다.
  • 업로드: Arduino App Lab의 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 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 ready [2026-04-29 09:00:02] The door is closed [2026-04-29 09:00:02] The door is closed [2026-04-29 09:00:03] The door is open [2026-04-29 09:00:03] The door is open [2026-04-29 09:00:04] The door is closed

Bridge: Linux + MCU

이 섹션에서는 Linux 측이 Bridge를 통해 도어 이벤트를 감지할 수 있도록 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다:

  • 도어 센서는 MCU 디지털 핀에 연결됩니다 — MCU는 loop()에서 상태 변화를 모니터링하고 도어가 열리거나 닫힐 때 이벤트 플래그를 설정합니다
  • MPU는 디지털 핀을 직접 읽을 수 없습니다 — Bridge 함수를 호출하여 현재 상태를 쿼리하거나 도어 이벤트를 소비합니다
  • MPU에는 Wi-Fi가 있습니다 — 전체 Debian Linux를 실행하므로 도어 이벤트에 반응하고 즉시 Telegram 알림을 보낼 수 있습니다
  • Arduino_RouterBridge — 두 프로세서 간 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1(Linux)과 Serial1(MCU)은 라우터에서 예약됨 — 사용자 코드에서 절대 열지 않습니다

간단히 말해서: MCU가 loop()에서 도어 열림/닫힘 이벤트를 감지 → MPU가 Bridge를 통해 폴링 → MPU가 Wi-Fi를 통해 Telegram 알림을 트리거합니다.

MCU 코드(Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-door-sensor */ #include "Arduino_RouterBridge.h" #define DOOR_SENSOR_PIN 9 int last_state = LOW; bool door_opened_event = false; bool door_closed_event = false; String get_state(String arg) { int state = digitalRead(DOOR_SENSOR_PIN); return (state == HIGH) ? "open" : "closed"; } 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); last_state = digitalRead(DOOR_SENSOR_PIN); Bridge.provide("get_state", get_state); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Door Sensor 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; Monitor.println("Door opened!"); } else { door_closed_event = true; Monitor.println("Door closed."); } } }

Python 코드(Bridge)

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

빠른 단계

  • 연결: 배선 다이어그램과 같이 도어 센서를 Arduino UNO Q에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 만들기: Create New App을 클릭하고, 이름을 DoorSensorBridge로 지정한 후 Create를 클릭합니다.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 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
  • 도어를 열고 닫습니다. 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 Bridge ready [2026-04-29 09:00:01] Door is closed [2026-04-29 09:00:05] Door opened! [2026-04-29 09:00:08] Door closed.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Door state: closed [2026-04-29 09:00:05] Door state: open [2026-04-29 09:00:08] Door state: closed

Telegram

도어가 열리거나 닫힐 때 즉시 Telegram 알림을 받습니다.

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 */ 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!" print(msg) send_message(CHAT_ID, msg) elif event == "closed": msg = "🔒 Door closed." 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 Bot\n" "/state - Read current door state\n" "/event - Check for a door event") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Door state: {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 코드를 앱의 Python 파일에 붙여넣습니다(같은 MCU 스케치 유지).
  • Run 버튼을 클릭합니다. 도어를 열고 닫으면 Telegram에서 즉시 알림을 확인할 수 있습니다.

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:08] 🚪 Door opened! [2026-04-29 09:10:12] 🔒 Door closed. [2026-04-29 09:10:25] Received: /state
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
/state
10:15 AM ✓✓
Door state: closed
10:16 AM
/event
10:17 AM ✓✓
Door event: none
10:18 AM
🚪 Door opened!
10:19 AM
🔒 Door closed.
10:20 AM

OpenClaw

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

프로젝트 아이디어

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

  • 홈 보안 알림: 현관문에 도어 센서를 부착합니다 — MPU가 도어가 열릴 때마다 즉시 Telegram 알림을 보내고, 감사용으로 타임스탬프를 Linux 파일에 기록합니다
  • 배송 알림: 센서를 소포 드롭 박스에 고정합니다 — 뚜껑이 열리면 배송 도착 알림 Telegram 메시지를 받습니다
  • 아동 안전 모니터: 센서를 캐비닛, 게이트 또는 제한된 영역에 부착합니다 — 도어가 열릴 때마다 Telegram 알림을 받고, 선택적으로 Bridge를 통해 제어되는 릴레이를 통해 자동 잠금합니다
  • 에너지 절약: 창이 열리는 것을 감지하고 Bridge를 통해 제어되는 릴레이를 통해 HVAC 시스템을 자동으로 끕니다 — 에너지를 절약하고 원치 않는 온도 손실을 방지합니다
  • 스마트 접근 로그: Python을 사용하여 Linux 측에서 타임스탬프와 함께 모든 도어 열고 닫기 이벤트를 기록합니다 — 일일 또는 주간 접근 보고서를 생성하여 Telegram으로 보냅니다

도전해보세요

Arduino UNO Q의 도어 센서로 더 나아가기 위해 준비되셨나요? 이 도전을 시도해 보세요:

  • 쉬움: 도어 열림 타이머 추가: Python 측이 도어가 열리는 시간을 기록하고 도어가 30초 이상 열린 상태로 유지되면 Telegram 알림을 보냅니다.
  • 중간: 일일 진입 횟수 구현: Python 측이 매일 도어 열기 이벤트 수를 세고 자정에 총 수를 포함한 Telegram 요약을 보냅니다.
  • 고급: 다중 구역 보안 시스템 구축: 세 개의 도어 센서를 세 개의 다른 디지털 핀에 연결하고, 각각을 고유한 Bridge 함수로 노출하고, Python 측이 세 개를 모두 동시에 모니터링합니다 — 어느 구역이 트리거되었는지 식별하는 Telegram 알림을 보냅니다.