아두이노 우노 Q 물/액체 소렌노이드 밸브

물/액체 소렌노이드 밸브는 물, 기름 또는 기타 액체의 흐름을 제어합니다. 12V가 인가되면 열리고 전원이 제거되면 닫힙니다. Arduino UNO Q는 릴레이를 통해 이를 제어합니다. Bridge와 Telegram을 사용하면 어디서나 원격으로 밸브를 열고 닫을 수 있습니다.

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

Arduino UNO Q 물/액체 valve

필요한 하드웨어

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

물/액체 밸브에 대해

핀 배치

소렌노이드 밸브에는 두 개의 와이어 연결이 있습니다:

  • Positive (+) 빨간색 와이어: 릴레이를 통해 12V DC에 연결
  • Negative (-) 검은색 와이어: 12V DC 전원 공급장치의 GND에 연결
water valve 사용법 핀아웃

작동 원리

  • 12V가 인가되면 → 소렌노이드가 열림 → 액체가 흐를 수 있음
  • 전원이 제거되면 → 소렌노이드가 닫힘 → 액체 흐름이 멈춤

※ 주의:

일부 밸브는 12V를 인가한 후 완전히 열리기 위해 최소한의 유체 압력이 필요합니다. 또한 일부 밸브는 방향성이 있으므로 본체의 흐름 화살표를 확인하세요. 밸브를 Arduino UNO Q 핀에 직접 연결해서는 절대 안 됩니다. 항상 릴레이를 사용하여 12V 공급을 전환하세요.

밸브 제어 방법

Arduino UNO Q MCU는 12V 공급을 소렌노이드 밸브에 전환하는 릴레이를 제어합니다:

  • 릴레이 핀 HIGH → 릴레이가 닫힘 → 밸브에 12V → 밸브 OPEN
  • 릴레이 핀 LOW → 릴레이가 열림 → 밸브에 전원 없음 → 밸브 CLOSED

배선도

Arduino UNO Q water valve 연결 배선도

이 이미지는 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); // open valve delay(5000); digitalWrite(RELAY_PIN, LOW); // close valve delay(5000);

Arduino UNO Q 코드

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

  • STM32 MCU는 12V 전력을 소렌노이드 밸브로 전환하는 릴레이를 제어합니다.
  • 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-water-liquid-valve */ // This code opens and closes the water/liquid valve every 5 seconds. // The valve requires a 12V power supply and is controlled through a relay. // HIGH = valve OPEN, LOW = valve CLOSED #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 Water/Liquid Valve ready"); } void loop() { Serial.println("Valve: OPEN"); digitalWrite(RELAY_PIN, HIGH); // open valve delay(5000); Serial.println("Valve: CLOSED"); digitalWrite(RELAY_PIN, LOW); // close valve delay(5000); }

빠른 단계

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

  • 연결: 배선도에 표시된 대로 소렌노이드 밸브, 릴레이 및 12V 전원 공급을 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에 이름을 지정합니다(예: WaterValve).
  • 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 Water/Liquid Valve ready [2026-04-29 09:00:01] Valve: OPEN [2026-04-29 09:00:06] Valve: CLOSED [2026-04-29 09:00:11] Valve: OPEN [2026-04-29 09:00:16] Valve: CLOSED

Bridge: Linux + MCU

이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 측이 Bridge를 통해 밸브를 열고 닫을 수 있도록 합니다:

  • 소렌노이드 밸브는 릴레이를 통해 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-water-liquid-valve */ #include "Arduino_RouterBridge.h" #define RELAY_PIN 3 // The Arduino UNO Q MCU pin connected to the relay IN pin // HIGH = valve OPEN, LOW = valve CLOSED bool is_open = false; String open_valve(String arg) { digitalWrite(RELAY_PIN, HIGH); is_open = true; Monitor.println("Valve: OPEN"); return "open"; } String close_valve(String arg) { digitalWrite(RELAY_PIN, LOW); is_open = false; Monitor.println("Valve: CLOSED"); return "closed"; } String get_state(String arg) { return is_open ? "open" : "closed"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // start closed is_open = false; Bridge.provide_safe("open_valve", open_valve); Bridge.provide_safe("close_valve", close_valve); Bridge.provide("get_state", get_state); Monitor.println("Arduino UNO Q Water/Liquid Valve Bridge ready"); Monitor.println("Initial state: CLOSED"); } void loop() {}

Python 코드 (Bridge)

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

빠른 단계

  • 연결: 배선도에 표시된 대로 소렌노이드 밸브, 릴레이 및 12V 전원 공급을 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
  • 새 App 만들기: Create New App를 클릭하고, WaterValveBridge라고 이름을 지정한 후 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
  • 밸브 사이클을 관찰합니다: 열기 → 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 Water/Liquid Valve Bridge ready [2026-04-29 09:00:01] Initial state: CLOSED [2026-04-29 09:00:02] Valve: OPEN [2026-04-29 09:00:07] Valve: CLOSED
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Valve state: closed [2026-04-29 09:00:02] Opening valve... [2026-04-29 09:00:07] Closing valve... [2026-04-29 09:00:08] Valve 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-water-liquid-valve */ 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 Water/Liquid Valve Bot\n" "/open - Open the valve\n" "/close - Close the valve\n" "/state - Read current valve state") elif text == "/open": result = Bridge.call("open_valve") send_message(chat_id, f"💧 Valve state: {result}") elif text == "/close": result = Bridge.call("close_valve") send_message(chat_id, f"🚫 Valve state: {result}") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Valve 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 코드를 App의 Python 파일에 붙여넣습니다 (동일한 MCU 스케치 유지).
  • Run 버튼을 클릭합니다. Telegram에서 /open을 전송하여 흐름을 시작하고, /close를 전송하여 중지합니다.

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: /open [2026-04-29 09:10:12] Received: /state [2026-04-29 09:10:20] Received: /close
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 ✓✓
Valve state: closed
10:16 AM
/open
10:17 AM ✓✓
💧 Valve state: open
10:18 AM
/state
10:19 AM ✓✓
Valve state: open
10:20 AM
/close
10:21 AM ✓✓
🚫 Valve state: closed
10:22 AM

OpenClaw

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

프로젝트 아이디어

소렌노이드 밸브와 Arduino UNO Q로 많은 유용한 프로젝트를 만들 수 있습니다:

  • 원격 관개 시스템: Telegram을 통해 어디서나 정원 급수를 제어합니다 - /open을 전송하여 관개를 시작하고 /close를 전송하여 중지하며, Linux 측이 각 세션의 기간을 파일에 기록합니다.
  • 시간 기반 관수: MPU를 프로그래밍하여 Linux 시스템 클록을 사용하여 매일 오전 6시에 자동으로 밸브를 10분 동안 열도록 합니다 - 수동 개입이 필요 없습니다.
  • 물 누수 대응: 물 센서와 밸브를 결합합니다 - 센서가 누수를 감지하면 Python이 즉시 Bridge.call("close_valve")를 호출하여 물 공급을 중지하고 Telegram 알림을 보냅니다.
  • 수족관 자동 채우기: 수족관의 수위 센서를 사용합니다 - 수위가 임계값 아래로 떨어지면 Python이 30초 동안 밸브를 열어 물을 추가한 후 닫고 Telegram 확인을 보냅니다.
  • 맥주/주스 디스펜서: 액체 저장소에 연결된 식품 안전 소렌노이드 밸브를 제어합니다 - /open은 액체를 분배하고 /close는 중지하며, 과다 부음을 방지하기 위한 타이머가 있습니다.

스스로 도전해보세요

Arduino UNO Q의 물 밸브로 더 나아가고 싶으신가요? 이러한 도전 과제를 시도해보세요:

  • 쉬움: /open_10s Telegram 명령을 추가하여 Python 측에서 time.sleep(10)을 사용하기 전에 Bridge.call("close_valve")를 호출하여 정확히 10초 동안 밸브를 엽니다.
  • 중간: 일일 관개 일정을 구현합니다: Python은 일정 파일(예: 열기/닫기 시간이 있는 schedule.json)을 읽고 Linux 시스템 클록을 기반으로 밸브를 자동으로 제어합니다 - 각 세션이 시작하고 끝날 때 Telegram 알림을 보냅니다.
  • 고급: 흐름 시간 로거를 구축합니다: 밸브가 Telegram을 통해 또는 자동으로 열릴 때마다 Python은 시작 시간, 닫기 시간 및 기간을 CSV 파일에 기록합니다 - 마지막 5개의 관개 세션을 반환하는 /log Telegram 명령을 구현합니다.