아두이노 우노 Q 전자기 잠금 장치

전자기 잠금 장치(maglock)는 전자석을 사용하여 문을 닫은 상태로 유지합니다. 전원이 공급되면 강력한 자기력을 생성하여 문을 잠금 상태로 유지합니다. Arduino UNO Q와 릴레이를 사용하면 프로그래밍 방식으로 문을 잠그거나 해제할 수 있습니다. Bridge와 Telegram을 추가하면 어디서나 완전한 원격 제어가 가능합니다.

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

Arduino UNO Q 전자기 잠금 장치

필요한 하드웨어

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

전자기 잠금 장치 정보

핀아웃

전자기 잠금 장치는 두 부분으로 구성됩니다:

  • 전자석 — 두 개의 터미널이 있으며 릴레이를 통해 12V 전원에 연결됩니다
  • 아머추어 플레이트 — 문에 부착됩니다. 배선이 필요하지 않습니다
전자기 잠금 장치 핀아웃

전자석을 문틀에 설치(고정 부분)하고 아머추어 플레이트를 문에 설치(움직이는 부분)합니다. 문이 닫혀 있을 때 두 부분이 서로 같은 높이에 닿아야 합니다.

작동 원리

  • 전자석이 전원을 받으면 → 자기장이 생성됨 → 아머추어 플레이트가 끌려옴 → 문이 잠금
  • 전자석이 전원을 받지 않으면 → 자기장 없음 → 아머추어 플레이트가 해제됨 → 문이 해제

※ 주의:

전자기 잠금 장치는 12V DC가 필요하므로 Arduino UNO Q 핀에 직접 연결하면 안 됩니다. 항상 릴레이를 인터페이스로 사용하세요. MCU는 릴레이를 제어하고 릴레이는 12V 전원을 전자기 잠금 장치로 전환합니다.

릴레이가 상시 개방 구성으로 배선된 경우:

  • 릴레이 개방(핀 LOW) → 전자석에 전원 없음 → 문 해제
  • 릴레이 폐쇄(핀 HIGH) → 전자석에 전원 공급 → 문 잠금

이것은 솔레노이드 잠금 장치와는 반대입니다: 에너지 공급 = 잠김.

배선도

Arduino UNO Q 전자기 잠금 장치 배선도

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

릴레이 모듈 IN 핀을 MCU 핀 D3에 연결합니다. 릴레이의 COM 및 NO 터미널을 12V 전원과 전자석 사이에 연결합니다. 릴레이의 VCC를 5V에, GNDGND에 연결합니다.

Relay Pin Arduino UNO Q MCU
GND GND
VCC 5V
IN D3

전자기 잠금 장치를 위한 프로그래밍 방법

  • 릴레이 핀을 출력으로 설정합니다:
pinMode(RELAY_PIN, OUTPUT);
  • 전자기 잠금 장치를 잠그고 해제합니다:
digitalWrite(RELAY_PIN, HIGH); // lock (electromagnet ON) delay(5000); digitalWrite(RELAY_PIN, LOW); // unlock (electromagnet OFF) delay(5000);

Arduino UNO Q 코드

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

  • STM32 MCU는 전자석으로의 전원을 전환하는 릴레이를 제어합니다. 모든 타이밍 및 상태 로직이 MCU에서 실행됩니다
  • Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python, 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다. Linux 측은 유휴 상태로 유지됩니다. 이후 섹션에서는 두 프로세서가 Bridge를 통해 어떻게 함께 작동하는지 보여줍니다.

이 코드는 전자기 잠금 장치를 5초 동안 잠그고 해제합니다. 이를 계속 반복합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-electromagnetic-lock */ // This code locks and unlocks the electromagnetic lock every 5 seconds. // The relay is connected to the electromagnetic lock which requires a 12V power supply. // HIGH = electromagnet ON = door LOCKED // LOW = electromagnet OFF = door UNLOCKED #define RELAY_PIN 3 // The Arduino UNO Q MCU pin connected to the relay IN pin void setup() { Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); Serial.println("Arduino UNO Q Electromagnetic Lock ready"); } void loop() { Serial.println("Locking..."); digitalWrite(RELAY_PIN, HIGH); // lock the door (electromagnet ON) delay(5000); Serial.println("Unlocking..."); digitalWrite(RELAY_PIN, LOW); // unlock the door (electromagnet OFF) delay(5000); }

빠른 단계

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

  • 설치: 전자석을 문틀에 부착하고 아머추어 플레이트를 문에 부착합니다.
  • 연결: 배선도에 표시된 대로 전자기 잠금 장치, 릴레이, 12V 전원 공급 장치를 Arduino UNO Q MCU에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab에서 새 앱 만들기
  • 앱에 이름을 지정합니다. 예를 들어: ElectromagneticLock
  • Create 를 클릭하여 확인합니다.
Arduino UNO Q에서 아두이노 app lab 앱 폴더 및 파일
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino 에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • 라이브러리 필요 없음 — 내장 digitalWrite() 함수만 사용합니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭
  • 아머추어 플레이트를 전자석에 가깝게 가져가 5초마다 잡혔다가 해제되는 것을 관찰합니다.

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 Electromagnetic Lock ready [2026-04-29 09:00:01] Locking... [2026-04-29 09:00:06] Unlocking... [2026-04-29 09:00:11] Locking... [2026-04-29 09:00:16] Unlocking...

Bridge: Linux + MCU

이 섹션에서는 Linux 측이 Bridge를 통해 전자기 잠금 장치를 잠그고 해제할 수 있도록 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다:

  • 전자기 잠금 장치는 릴레이를 통해 MCU에 연결됩니다. MCU는 릴레이 출력 핀을 제어합니다
  • MPU는 릴레이를 직접 제어할 수 없습니다. 이는 Bridge 함수를 호출하여 잠그거나 해제합니다
  • MPU는 Wi-Fi를 가집니다. 완전한 Debian Linux를 실행하여 Telegram 또는 모든 웹 서비스의 명령을 받아들이고 잠금/해제 작업으로 변환할 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1(Linux) 및 Serial1(MCU)은 라우터에서 예약됨 - 사용자 코드에서 열지 마십시오

간단히 말해서: MPU가 잠금/해제 명령을 수신 → Bridge 호출 → MCU가 릴레이 제어 → 전자기 잠금 장치 활성화.

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-electromagnetic-lock */ #include "Arduino_RouterBridge.h" #define RELAY_PIN 3 // The Arduino UNO Q MCU pin connected to the relay IN pin // HIGH = electromagnet ON = LOCKED // LOW = electromagnet OFF = UNLOCKED bool is_locked = false; String lock_door(String arg) { digitalWrite(RELAY_PIN, HIGH); is_locked = true; Monitor.println("Electromagnetic lock: LOCKED"); return "locked"; } String unlock_door(String arg) { digitalWrite(RELAY_PIN, LOW); is_locked = false; Monitor.println("Electromagnetic lock: UNLOCKED"); return "unlocked"; } String get_state(String arg) { return is_locked ? "locked" : "unlocked"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // start unlocked is_locked = false; Bridge.provide_safe("lock", lock_door); Bridge.provide_safe("unlock", unlock_door); Bridge.provide("get_state", get_state); Monitor.println("Arduino UNO Q Electromagnetic Lock Bridge ready"); Monitor.println("Initial state: UNLOCKED"); } void loop() {}

Python 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-electromagnetic-lock */ from arduino.app_utils import * import time def loop(): state = Bridge.call("get_state") print(f"Electromagnetic lock state: {state}") # Example: lock for 5 seconds, then unlock if state == "unlocked": print("Locking...") Bridge.call("lock") time.sleep(5) print("Unlocking...") Bridge.call("unlock") time.sleep(1) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선도에 표시된 대로 전자기 잠금 장치, 릴레이, 12V 전원 공급 장치를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 만들기: Create New App 을 클릭하고 이름을 ElectromagneticLockBridge 로 지정한 후 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 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭
  • 잠금 사이클을 지켜봅니다: 잠금 → 5초 대기 → 해제 → 1초 대기 → 반복.

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 Electromagnetic Lock Bridge ready [2026-04-29 09:00:01] Initial state: UNLOCKED [2026-04-29 09:00:02] Electromagnetic lock: LOCKED [2026-04-29 09:00:07] Electromagnetic lock: UNLOCKED
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Electromagnetic lock state: unlocked [2026-04-29 09:00:02] Locking... [2026-04-29 09:00:07] Unlocking... [2026-04-29 09:00:08] Electromagnetic lock state: unlocked

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-electromagnetic-lock */ 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(): 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 Electromagnetic Lock Bot\n" "/lock - Lock the electromagnetic lock\n" "/unlock - Unlock the electromagnetic lock\n" "/state - Read current lock state") elif text == "/lock": result = Bridge.call("lock") send_message(chat_id, f"🔒 Lock state: {result}") elif text == "/unlock": result = Bridge.call("unlock") send_message(chat_id, f"🔓 Lock state: {result}") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Lock state: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(1) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN 을 BotFather에서 받은 실제 봇 토큰으로 바꿉니다.
  • YOUR_CHAT_ID 를 실제 Telegram 채팅 ID로 바꿉니다.
  • 이 Python 코드를 앱의 Python 파일에 붙여넣습니다(MCU 스케치는 동일하게 유지).
  • Run 버튼을 클릭합니다. Telegram에서 /lock 을 전송하여 문을 잠그고 /unlock 을 전송하여 해제합니다.

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] Received: /lock [2026-04-29 09:10:12] Received: /state [2026-04-29 09:10:20] Received: /unlock
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 ✓✓
Lock state: unlocked
10:16 AM
/lock
10:17 AM ✓✓
🔒 Lock state: locked
10:18 AM
/state
10:19 AM ✓✓
Lock state: locked
10:20 AM
/unlock
10:21 AM ✓✓
🔓 Lock state: unlocked
10:22 AM

OpenClaw

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

프로젝트 아이디어

Arduino UNO Q와 전자기 잠금 장치로 많은 유용한 프로젝트를 만들 수 있습니다:

  • Telegram 제어 도어락: Telegram을 통해 원격으로 사무실 문이나 보관실을 잠그고 해제합니다. /lock 으로 보안을 설정하고 /unlock 으로 누군가를 들여보냅니다. Linux 측에서 모든 내용을 타임스탬프와 함께 기록합니다
  • 시간 기반 자동 잠금: MPU를 프로그래밍하여 밤에 자동으로 잠금(예: 오후 10시)하고 아침에 해제(오전 7시)하도록 Linux 시스템 시계를 사용합니다. 수동 개입이 필요하지 않습니다
  • 키패드 보안 시스템: MCU의 4x4 키패드와 전자기 잠금 장치를 결합합니다. 올바른 PIN 입력 시 해제하고 3번 연속 실패한 시도 시 Telegram 알림을 전송합니다
  • RFID 접근 제어: MCU의 RFID 리더와 결합합니다. 등록된 태그를 스캔하여 해제하고 모든 접근 이벤트를 태그 ID 및 타임스탬프와 함께 Linux 파일에 기록합니다
  • 원격 접근 로그 대시보드: 모든 잠금/해제 이벤트는 Linux의 CSV 파일에 타임스탬프 및 소스(Telegram, 자동 또는 키패드)와 함께 기록됩니다. Python은 일일 요약 보고서를 Telegram으로 전송합니다

스스로 도전해보세요

Arduino UNO Q의 전자기 잠금 장치를 더 나아가 사용할 준비가 되셨나요? 다음 챌린지들을 시도해보세요:

  • 쉬움: /unlock_10s Telegram 명령을 추가하여 정확히 10초 동안 문을 해제합니다. Python 측에서 time.sleep(10) 을 사용한 후 Bridge.call("lock") 을 호출하여 전자석을 다시 작동시킵니다.
  • 중간: 자동 잠금 타이머를 구현합니다: /unlock 을 Telegram을 통해 호출하면 Python 타이머를 시작합니다. 60초 이내에 문이 수동으로 다시 잠기지 않으면 시스템이 자동으로 Bridge.call("lock") 을 호출하고 Telegram 확인을 전송합니다.
  • 고급: 다중 사용자 접근 시스템을 구축합니다. 관리자 파일에 승인된 Telegram 사용자 ID를 나열합니다. 해당 사용자만 /unlock 을 전송할 수 있고, 승인되지 않은 시도는 관리자에게 Telegram 알림을 트리거하며 모든 접근 시도는 사용자 ID 및 타임스탬프와 함께 기록됩니다.