아두이노 우노 Q 솔레노이드 락

솔레노이드 락(전기 스트라이크 락이라고도 함)은 12V DC로 전원이 공급되며 릴레이를 통해 제어됩니다. 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 DC 전원 공급 장치에 연결
  • 음성(-) 검은 와이어: 12V DC 전원 공급 장치의 GND에 연결
솔레노이드 잠금장치 사용법 핀아웃

작동 원리

  • 솔레노이드 락이 전원을 받으면 → 잠금 혀가 나옴 → 문이 잠김
  • 솔레노이드 락이 전원이 없으면 → 잠금 혀가 들어감 → 문이 잠금 해제됨

※ 주의:

솔레노이드 락에는 12V DC가 필요하며 Arduino UNO Q 핀에 직접 연결되어서는 안 됩니다. 항상 릴레이를 중간에 사용하십시오. 릴레이는 MCU에 의해 제어되고 솔레노이드 락에 12V 공급을 전환합니다.

릴레이가 정규적으로 열려 있는 구성으로 배선되면:

  • 릴레이 열림 (핀 LOW) → 락에 전원 없음 → 문 잠금 해제됨
  • 릴레이 닫힘 (핀 HIGH) → 락에 전원 있음 → 문 잠김

unlock 상태 (HIGH) 및 lock 상태 (LOW)의 경우, 코드를 참조하세요. 매핑은 릴레이 모듈 유형(active-HIGH 또는 active-LOW)에 따라 다릅니다.

배선도

Arduino UNO Q 솔레노이드 잠금장치 연결 배선도

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

릴레이 모듈 IN 핀을 MCU 핀 D3에 연결합니다. 릴레이의 COM 및 NO 단자를 12V 전원과 솔레노이드 락 사이에 연결합니다. 릴레이의 VCC를 5V로, GNDGND로 연결합니다.

릴레이 핀 Arduino UNO Q MCU
GND GND
VCC 5V
IN D3

솔레노이드 락을 위한 프로그래밍 방법

  • 릴레이 핀을 출력으로 설정합니다:
pinMode(RELAY_PIN, OUTPUT);
  • 솔레노이드의 잠금을 해제하고 잠금:
digitalWrite(RELAY_PIN, HIGH); // unlock delay(5000); digitalWrite(RELAY_PIN, LOW); // lock

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-solenoid-lock */ // This code locks and unlocks the solenoid lock every 5 seconds. // The relay is connected to the solenoid lock which requires a 12V power supply. #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 Solenoid Lock ready"); } void loop() { Serial.println("Unlocking..."); digitalWrite(RELAY_PIN, HIGH); // unlock the door delay(5000); Serial.println("Locking..."); digitalWrite(RELAY_PIN, LOW); // lock the door delay(5000); }

빠른 단계

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

  • 연결: 배선도에 표시된 대로 솔레노이드 락, 릴레이 및 12V 전원 공급 장치를 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
  • 앱에 이름을 지정합니다(예: SolenoidLock)
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • 라이브러리 필수 아님 — 기본 제공 digitalWrite() 함수만 사용합니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 솔레노이드 락이 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 Solenoid Lock ready [2026-04-29 09:00:01] Unlocking... [2026-04-29 09:00:06] Locking... [2026-04-29 09:00:11] Unlocking... [2026-04-29 09:00:16] Locking...

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-solenoid-lock */ #include "Arduino_RouterBridge.h" #define RELAY_PIN 3 // The Arduino UNO Q MCU pin connected to the relay IN pin bool is_unlocked = false; String unlock(String arg) { digitalWrite(RELAY_PIN, HIGH); is_unlocked = true; Monitor.println("Solenoid lock: UNLOCKED"); return "unlocked"; } String lock(String arg) { digitalWrite(RELAY_PIN, LOW); is_unlocked = false; Monitor.println("Solenoid lock: LOCKED"); return "locked"; } String get_state(String arg) { return is_unlocked ? "unlocked" : "locked"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // start locked Bridge.provide_safe("unlock", unlock); Bridge.provide_safe("lock", lock); Bridge.provide("get_state", get_state); Monitor.println("Arduino UNO Q Solenoid Lock Bridge ready"); Monitor.println("Initial state: LOCKED"); } void loop() {}

Python 코드 (Bridge)

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

빠른 단계

  • 연결: 배선도에 표시된 대로 솔레노이드 락, 릴레이 및 12V 전원 공급 장치를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 대기합니다.
  • 새 앱 만들기: Create New App을 클릭하고, 이름을 SolenoidLockBridge로 지정한 후 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
  • 잠금 주기를 관찰합니다: 잠금 해제 → 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 Solenoid Lock Bridge ready [2026-04-29 09:00:01] Initial state: LOCKED [2026-04-29 09:00:02] Solenoid lock: UNLOCKED [2026-04-29 09:00:07] Solenoid lock: LOCKED
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Lock state: locked [2026-04-29 09:00:02] Unlocking... [2026-04-29 09:00:07] Locking... [2026-04-29 09:00:08] Lock state: locked

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-solenoid-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 Solenoid Lock Bot\n" "/unlock - Unlock the solenoid lock\n" "/lock - Lock the solenoid lock\n" "/state - Read current lock state") elif text == "/unlock": result = Bridge.call("unlock") send_message(chat_id, f"🔓 Lock state: {result}") elif text == "/lock": result = Bridge.call("lock") 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에서 /unlock을 전송하여 락을 열고 /lock을 전송하여 다시 닫습니다.

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: /unlock [2026-04-29 09:10:12] Received: /state [2026-04-29 09:10:20] Received: /lock
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: locked
10:16 AM
/unlock
10:17 AM ✓✓
🔓 Lock state: unlocked
10:18 AM
/state
10:19 AM ✓✓
Lock state: unlocked
10:20 AM
/lock
10:21 AM ✓✓
🔒 Lock state: locked
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을 사용하여 현관문이나 사무실 잠금을 원격으로 제어합니다. /unlock으로 누군가를 들여보내고 /lock으로 다시 보안합니다. 모든 이벤트가 타임스탬프와 함께 기록됩니다.
  • 시간 기반 자동 잠금: MPU (Linux Python)를 프로그래밍하여 매일 오후 10시에 자동으로 잠금하고 오전 7시에 잠금 해제합니다. Linux 측의 시스템 시계를 사용하여 Bridge 명령을 트리거합니다.
  • 키패드 액세스 시스템: 솔레노이드 락과 MCU의 4x4 키패드를 결합합니다. 올바른 PIN이 입력되면 잠금 해제하고, 잘못된 PIN이 연속으로 3회 시도되면 Telegram 경고를 전송합니다.
  • 액세스 로그 시스템: Linux에 있는 CSV 파일에 모든 잠금 및 잠금 해제 이벤트를 기록합니다. 타임스탬프, 명령 소스(Telegram 또는 자동), 일일 보고서가 포함되어 Telegram으로 전송됩니다.
  • 게스트 액세스 관리자: Telegram을 통한 시간 제한 잠금 해제를 만듭니다. /unlock_5min은 락을 잠금 해제하고 5분 후에 자동으로 재잠금하며 타이머가 만료되면 Telegram 확인 메시지를 전송합니다.

자신을 도전해보세요

Arduino UNO Q의 솔레노이드 락으로 더 나아갈 준비가 되었나요? 이 도전을 시도해보세요:

  • 쉬움: Telegram /unlock_10s 명령을 추가합니다. 이 명령은 Python 측에서 time.sleep(10)을 사용하고 Bridge.call("lock")을 호출하기 전에 정확히 10초 동안 락을 잠금 해제합니다.
  • 중간: Telegram /schedule 명령을 구현합니다. 이 명령은 시간 인수(예: /schedule 23:00)를 구문 분석하고 MPU의 Linux 시스템 시계를 사용하여 자동으로 그 시간에 도어를 잠금합니다.
  • 고급: 다중 사용자 액세스 시스템을 구축합니다. 권한이 있는 Telegram 사용자 ID 목록을 Python 파일에 저장합니다. 이 사용자들만 /unlock 명령을 전송할 수 있으며, 모든 권한이 없는 시도는 관리자의 채팅 ID로 Telegram 경고를 트리거합니다.