아두이노 우노 Q 펌프 제어

12V 펌프는 물, 기름 또는 기타 액체를 이동할 수 있으며 관개 시스템, 수족관 및 정수 충전소에서 일반적으로 사용됩니다. Arduino UNO Q는 릴레이를 통해 펌프를 제어합니다. Bridge와 Telegram을 사용하면 어디서나 원격으로 펌프를 켜거나 끌 수 있습니다.

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

Arduino UNO Q pump

필요한 하드웨어

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

12V 펌프에 대해

핀아웃

12V 펌프는 일반적으로 2개의 와이어 연결이 있습니다:

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

펌프를 제어하는 방법

12V 펌프는 12V 전원 공급이 필요하므로 Arduino UNO Q 핀에 직접 연결되면 안 됩니다. 릴레이가 인터페이스로 사용됩니다. MCU가 릴레이를 제어하고 릴레이가 12V를 펌프에 전환합니다:

  • 릴레이 핀 HIGH → 릴레이 닫힘 → 펌프로 12V → 펌프 ON
  • 릴레이 핀 LOW → 릴레이 열림 → 펌프로 전원 없음 → 펌프 OFF

배선 다이어그램

Arduino UNO Q pump 연결 배선도

이 이미지는 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); // pump ON delay(5000); digitalWrite(RELAY_PIN, LOW); // pump OFF delay(5000);

Arduino UNO Q 코드

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

  • STM32 MCU는 펌프에 12V 전원을 전환하는 릴레이를 제어합니다
  • Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍되고 Linux 측은 유휴 상태로 유지됩니다. 나중 섹션에서 Bridge를 통해 두 프로세서가 함께 작동하는 방법을 보여줍니다.

이 코드는 펌프를 5초 동안 켜고 5초 동안 끄며 계속 반복합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-controls-pump */ // This code turns the pump ON for 5 seconds and OFF for 5 seconds repeatedly. // The pump requires a 12V power supply and is controlled through a relay. #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 Pump ready"); } void loop() { Serial.println("Pump: ON"); digitalWrite(RELAY_PIN, HIGH); // turn pump ON delay(5000); Serial.println("Pump: OFF"); digitalWrite(RELAY_PIN, LOW); // turn pump OFF delay(5000); }

빠른 단계

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

  • 연결: 배선 다이어그램에 표시된 대로 펌프, 릴레이 및 12V 전원 공급장치를 Arduino UNO Q MCU에 연결합니다. 펌프 입구/출구에 비닐 튜브를 부착합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 App 만들기: Create New App 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab의 새 app 만들기
  • App에 이름을 지정합니다. 예: Pump
  • Create를 클릭하여 확인합니다.
Arduino UNO Q의 아두이노 app lab app 폴더 및 파일
  • 스케치 붙여넣기: 위의 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 Pump ready [2026-04-29 09:00:01] Pump: ON [2026-04-29 09:00:06] Pump: OFF [2026-04-29 09:00:11] Pump: ON [2026-04-29 09:00:16] Pump: OFF

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-controls-pump */ #include "Arduino_RouterBridge.h" #define RELAY_PIN 3 // The Arduino UNO Q MCU pin connected to the relay IN pin bool is_on = false; String pump_on(String arg) { digitalWrite(RELAY_PIN, HIGH); is_on = true; Monitor.println("Pump: ON"); return "on"; } String pump_off(String arg) { digitalWrite(RELAY_PIN, LOW); is_on = false; Monitor.println("Pump: OFF"); return "off"; } String get_state(String arg) { return is_on ? "on" : "off"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // start with pump off is_on = false; Bridge.provide_safe("pump_on", pump_on); Bridge.provide_safe("pump_off", pump_off); Bridge.provide("get_state", get_state); Monitor.println("Arduino UNO Q Pump Bridge ready"); Monitor.println("Initial state: OFF"); } void loop() {}

Python 코드 (Bridge)

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

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 펌프, 릴레이 및 12V 전원 공급장치를 Arduino UNO Q에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
  • 새 App 만들기: Create New App을 클릭하고 이름을 PumpBridge로 지정한 후 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 버튼을 클릭합니다.
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 Pump Bridge ready [2026-04-29 09:00:01] Initial state: OFF [2026-04-29 09:00:02] Pump: ON [2026-04-29 09:00:07] Pump: OFF
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Pump state: off [2026-04-29 09:00:02] Starting pump... [2026-04-29 09:00:07] Stopping pump... [2026-04-29 09:00:08] Pump state: off

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-controls-pump */ 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 Pump Bot\n" "/on - Turn the pump ON\n" "/off - Turn the pump OFF\n" "/state - Read current pump state") elif text == "/on": result = Bridge.call("pump_on") send_message(chat_id, f"💧 Pump state: {result}") elif text == "/off": result = Bridge.call("pump_off") send_message(chat_id, f"🔴 Pump state: {result}") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Pump 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에서 /on을 전송하여 펌프를 시작하고 /off를 전송하여 중지합니다.

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: /on [2026-04-29 09:10:12] Received: /state [2026-04-29 09:10:20] Received: /off
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 ✓✓
Pump state: off
10:16 AM
/on
10:17 AM ✓✓
💧 Pump state: on
10:18 AM
/state
10:19 AM ✓✓
Pump state: on
10:20 AM
/off
10:21 AM ✓✓
🔴 Pump state: off
10:22 AM

OpenClaw

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

프로젝트 아이디어

펌프와 Arduino UNO Q로 많은 유용한 프로젝트를 구축할 수 있습니다:

  • 원격 관개 시스템: Telegram을 통해 어디서나 정원 물주기를 시작하고 중지합니다. Linux 측이 각 펌핑 세션을 시작 시간 및 기간과 함께 CSV 파일에 기록합니다.
  • 자동 식물 물주기: MPU를 프로그래밍하여 Linux 시스템 시계를 사용하여 매일 아침 5분 동안 펌프를 실행합니다. 수동 개입이 필요하지 않습니다.
  • 홍수 대응: 수위 센서와 결합합니다. 센서가 수위 상승을 감지하면 펌프가 자동으로 Bridge를 통해 켜져 물을 배출하고 Telegram 알림을 보냅니다.
  • 수족관 자동 보충: 수위 센서로 수위를 모니터링합니다. 수위가 최소값 아래로 떨어지면 Python이 펌프를 30초 동안 활성화하여 다시 채우고 Telegram 알림을 보냅니다.
  • 정수 충전소: 동전 작동식 또는 타이머 제어식 정수 분배기를 구축합니다. /on이 펌프를 시작하고 30초 Python 타이머가 자동으로 중지하여 오버플로우를 방지합니다.

도전해 보기

Arduino UNO Q의 펌프로 더 나아갈 준비가 되셨나요? 이 도전들을 시도해 보세요:

  • 쉬움: /on_10s Telegram 명령을 추가합니다. 이 명령은 펌프를 정확히 10초 동안 켜집니다. Python 측에서 time.sleep(10)을 사용한 후 Bridge.call("pump_off")를 호출합니다.
  • 중간: 일일 물주기 일정을 구현합니다: Python이 ON/OFF 시간을 포함하는 JSON 파일을 읽고 펌프를 자동으로 제어합니다. 각 펌핑 세션이 시작되고 끝날 때 Telegram 알림을 보냅니다.
  • 고급: 유량 로거를 구축합니다: 모든 펌프 ON 세션을 시작 타임스탬프, 중지 타임스탬프 및 기간과 함께 CSV 파일에 기록합니다. /log Telegram 명령을 구현하여 마지막 5개 세션의 요약을 반환합니다.