아두이노 우노 Q DC 모터 실드

Motor Shield Rev3는 Arduino UNO Q 헤더에 직접 연결됩니다 — 클래식 Uno와 동일한 핀 레이아웃입니다. 이 가이드에서는 다음을 수행합니다:

Arduino UNO Q dc 모터 shield

필요한 하드웨어

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

Motor Shield Rev3 개요

Motor Shield Rev3의 핵심에는 L298P 이중 풀브릿지 드라이버가 있습니다. 이 칩은 두 개의 DC 모터를 독립적으로 제어할 수 있게 해줍니다 — 각각 자체 방향선, PWM 속도선, 제동선 및 전류 감지 아날로그 입력이 있습니다.

다음은 각 제어선이 하는 일입니다:

  • 방향 — 회전 방향을 설정하는 디지털 출력입니다. HIGH를 쓰면 한 방향으로 회전하고, LOW를 쓰면 다른 방향으로 회전합니다.
  • PWM — 듀티 사이클을 설정하는 아날로그(PWM) 출력입니다. 값의 범위는 0(정지)에서 255(최대 속도)까지입니다.
  • 제동 — 디지털 출력입니다. HIGH로 설정하면 모터 샤프트가 잠기고, LOW로 설정하면 모터가 자유롭게 회전합니다.
  • 전류 감지 — 모터가 소비하는 전류량을 보고하는 아날로그 입력입니다.

Arduino UNO Q가 클래식 Uno와 동일한 헤더 위치를 유지하기 때문에 모든 핀이 자동으로 정렬됩니다:

기능 Channel A Channel B
방향 D12 D13
PWM (속도) D3 D11
제동 D9 D8
전류 감지 A0 A1

모터 전원 공급

모터는 USB가 제공할 수 있는 것보다 더 많은 전류가 필요합니다. 6–12V 외부 전원을 실드의 전원 스크류 터미널에 연결하세요. Arduino UNO Q 자체는 USB에서 계속 작동합니다.

배선 다이어그램

Motor Shield Rev3을 Arduino UNO Q 헤더에 올려놓되, 모든 핀이 제대로 삽입되도록 하세요. DC 모터 리드를 Channel A 스크류 터미널에 연결하세요. 외부 전원 공급장치를 전원 스크류 터미널에 연결하세요.

Arduino UNO Q dc 모터 shield 배선 다이어그램

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

Channel A의 단일 모터

MCU 코드

Arduino UNO Q에는 두 개의 프로세서가 있습니다: STM32 MCU(실시간 하드웨어 제어 처리) 및 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍되고 — Linux 측은 유휴 상태로 유지됩니다. 나중 섹션에서는 두 프로세서가 함께 어떻게 작동하는지 보여줄 것입니다.

아래 코드는 모터 방향을 2초마다 전환하며, 사이에 제동을 적용합니다:

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); bool directionState = false; void setup() { motor.begin(); } void loop() { directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; motor.run(direction, 30); delay(2000); motor.brake(); delay(2000); }

빠른 단계

  • Arduino UNO Q를 처음 사용합니까? 계속하기 전에 아두이노 우노 Q 시작하기 자습서를 따라 개발 환경을 준비하세요.
  • 실드를 스택하세요: Motor Shield Rev3을 Arduino UNO Q 헤더에 단단히 누르세요.
  • 모터를 배선하세요: DC 모터를 Channel A 스크류 터미널에 연결하세요.
  • 전원을 연결하세요: 외부 전원 공급장치를 실드의 전원 터미널에 연결하세요.
  • 연결하세요: Arduino UNO Q를 USB-C 케이블로 컴퓨터에 연결하세요.
  • Arduino App Lab을 열어주세요: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다리세요.
  • 새 앱을 만드세요: Create New App 버튼을 클릭하세요.
아두이노 app lab에서 Arduino UNO Q에서 새 앱 만들기
  • 앱에 이름을 지정하세요(예: DIYables_DCMotorShield).
  • Create를 클릭하여 확인하세요.
  • 새 앱 내에서 생성된 폴더 및 파일 세트를 볼 수 있습니다.
아두이노 app lab 앱 폴더 및 파일 Arduino UNO Q
  • sketch/sketch.ino 파일을 찾으세요 — 이곳이 MCU 스케치를 붙여넣을 위치입니다.
  • 스케치를 붙여넣으세요: 위의 MCU 코드를 복사하여 스케치 파일에 붙여넣으세요. 다른 파일은 기본값으로 유지하세요.
    • 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 DIYables_DC_Motor created by DIYables.io 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
    DIYables_DC_Motor DIYables.io

    Easy-to-use library for controlling DC motors via the Arduino Motor Shield Rev3 (L298P). Supports both Channel A and Channel B with direction control, PWM speed, brake, and current sensing. Custom pin assignments also supported.

    1.0.0
    Install
    More Info
    • 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 버튼을 클릭하여 STM32로 컴파일 및 업로드하세요.
    아두이노 app lab의 run 버튼 클릭 Arduino UNO Q
    • 관찰하세요: 모터는 2초마다 앞뒤로 전환되고, 각 방향 변경 사이에 2초 동안 제동합니다.

    메서드 빠른 참조

    메서드 수행 작업 사용법
    run(dir, speed) 지정된 방향으로 지정된 속도로 모터를 회전합니다 motor.run(MOTOR_FORWARD, 100)
    setSpeed(speed) 방향이나 제동을 건드리지 않고 속도를 변경합니다 motor.setSpeed(200)
    setDirection(dir) 속도나 제동을 건드리지 않고 방향을 변경합니다 motor.setDirection(MOTOR_BACKWARD)
    brake() 제동을 인터락하고 속도를 0으로 떨어뜨립니다 motor.brake()
    release() 제동을 해제합니다 motor.release()
    readCurrent() 전류 감지 핀에서 원시 ADC를 반환합니다 motor.readCurrent()

    Channel B의 단일 모터

    Channel A와 동일한 동작이지만 Channel B에서 — 채널 상수만 바꾸면 됩니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_B); bool directionState = false; void setup() { motor.begin(); } void loop() { directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; motor.run(direction, 30); delay(2000); motor.brake(); delay(2000); }

    빠른 단계

    • 모터를 Channel B 스크류 터미널에 배선하세요.
    • Channel A 섹션과 동일한 빠른 단계를 따르세요(앱 만들기, 스케치 붙여넣기, 라이브러리 설치, 업로드).
    • 모터는 동일한 방식으로 방향을 전환하고 제동합니다 — 기본 핀만 다릅니다.

    두 개의 모터 — 두 채널 모두

    두 모터를 독립적으로 구동합니다: 둘 다 앞으로, 둘 다 뒤로, 반대 방향.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motorA(MOTOR_CH_A); DIYables_DC_Motor motorB(MOTOR_CH_B); void setup() { motorA.begin(); motorB.begin(); } void loop() { // Both motors forward motorA.run(MOTOR_FORWARD, 100); motorB.run(MOTOR_FORWARD, 100); delay(2000); // Brake both motorA.brake(); motorB.brake(); delay(1000); // Both motors backward motorA.run(MOTOR_BACKWARD, 100); motorB.run(MOTOR_BACKWARD, 100); delay(2000); // Brake both motorA.brake(); motorB.brake(); delay(1000); // Opposite directions motorA.run(MOTOR_FORWARD, 100); motorB.run(MOTOR_BACKWARD, 100); delay(2000); // Brake both motorA.brake(); motorB.brake(); delay(1000); }

    빠른 단계

    • 한 모터를 Channel A 스크류 터미널에, 다른 모터를 Channel B 스크류 터미널에 연결하세요.
    • Channel A 섹션과 동일한 빠른 단계를 따르세요(앱 만들기, 스케치 붙여넣기, 라이브러리 설치, 업로드).
    • 스케치는 둘 다 앞으로, 둘 다 뒤로, 반대 방향 패턴을 순환합니다.

    Linux + MCU Bridge 프로그래밍

    Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다: MPU(Qualcomm, Debian Linux 실행) 및 MCU(STM32, Arduino 스케치로 Zephyr OS 실행). 이들은 RPC via Arduino_RouterBridge 라이브러리를 사용하여 통신합니다 — 절대 원시 직렬 포트를 통하지 않습니다.

    • Motor Shield는 MCU(STM32)에 연결됩니다 — 방향, PWM 및 제동 핀이 모두 Arduino UNO Q 헤더에 있으며 STM32에서 구동됩니다.
    • MPU는 모터 실드를 직접 제어할 수 없습니다Bridge.call()을 통해 MCU의 함수를 호출하여 앞뒤로 회전하거나 제동해야 합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하기 때문에 Telegram 명령을 수신하고 모터를 원격으로 제어할 수 있습니다.
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe() 함수를 호출합니다(MCU motor.run()motor.brake()가 하드웨어 API를 사용하기 때문).
    • ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino Router에서 사용됩니다 — 절대 직접 열지 마세요.

    간단히 말해서: MPU는 명령을 보냅니다 → MCU는 Motor Shield를 구동합니다 → Motor Shield는 DC 모터를 제어합니다.

    MCU 스케치 — Bridge 및 Monitor 출력을 사용한 Motor Shield 제어:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ #include "Arduino_RouterBridge.h" #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void motor_forward() { motor.run(MOTOR_FORWARD, 200); Monitor.println("Motor: Forward"); } void motor_backward() { motor.run(MOTOR_BACKWARD, 200); Monitor.println("Motor: Backward"); } void motor_brake() { motor.brake(); Monitor.println("Motor: Brake"); } void setup() { Bridge.begin(); Monitor.begin(); motor.begin(); motor.brake(); Bridge.provide_safe("forward", motor_forward); Bridge.provide_safe("backward", motor_backward); Bridge.provide_safe("brake", motor_brake); Monitor.println("DC Motor Shield Bridge ready"); } void loop() {}

    Python 스크립트(Arduino App Lab) — Linux에서 모터 제어:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ from arduino.app_utils import * import time def loop(): print("Motor spinning forward") Bridge.call("forward") time.sleep(3) print("Motor braking") Bridge.call("brake") time.sleep(1) print("Motor spinning backward") Bridge.call("backward") time.sleep(3) print("Motor braking") Bridge.call("brake") time.sleep(1) App.run(user_loop=loop)
    • 참고: MCU 스케치에서 Bridge.begin()이 호출되고 Linux 측에서 Python 스크립트를 실행하기 전에 스케치가 업로드되어 있는지 확인하세요.
    • ⚠️ 경고: 코드에서 /dev/ttyHS1(Linux)을 직접 열거나 Serial1(MCU)을 사용하지 마세요 — 이들은 Arduino Router에서 예약되어 있으며 이들에 접근하면 Bridge가 손상됩니다.

    빠른 단계

    • MCU 스케치를 업로드하세요: Arduino App Lab을 열고 새 앱을 만들고 Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고 DIYables_DC_MotorArduino_RouterBridge 라이브러리를 모두 설치한 다음 Run을 클릭하세요.
    • Python 스크립트를 추가하세요: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣으세요.
    • 앱을 실행하세요: Run을 클릭하세요 — Python은 모터를 앞으로, 제동, 뒤로, 제동 자동으로 순환합니다.
    • 콘솔을 확인하세요: Console 탭 → MCU 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
    DC Motor Shield Bridge ready Motor: Forward Motor: Brake Motor: Backward Motor: Brake

    Telegram 통합

    Telegram을 통해 어디서나 DC 모터를 원격으로 제어하세요.

    아직 Telegram 봇이 없다면, 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참조하여 봇 토큰을 얻으세요.

    MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지하세요 — 변경할 필요가 없습니다. STM32에서 이미 업로드되고 실행 중인지 확인하세요.

    Python 스크립트(Arduino App Lab) — 모터 실드 제어용 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dc-motor-shield */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/forward": Bridge.call("forward") send_message(chat_id, "Motor spinning forward.") elif text == "/backward": Bridge.call("backward") send_message(chat_id, "Motor spinning backward.") elif text == "/brake": Bridge.call("brake") send_message(chat_id, "Motor braking.") else: send_message(chat_id, "Commands:\n/forward — spin motor forward\n/backward — spin motor backward\n/brake — brake motor") time.sleep(1) App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /forward를 보내 모터를 앞으로 회전시키세요.
    • /backward를 보내 모터를 뒤로 회전시키세요.
    • /brake를 보내 모터를 제동하세요.

    빠른 단계

    • MCU 스케치를 업로드하세요: 이전 섹션의 Bridge MCU 스케치를 사용하세요(아직 완료되지 않았으면 먼저 업로드하세요).
    • Telegram 스크립트를 붙여넣으세요: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 복사하세요.
    • 토큰을 설정하세요: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
    • 앱을 실행하세요: Run을 클릭하세요 — 봇은 Telegram 메시지를 수신 대기하기 시작합니다.
    • 테스트하세요: /forward를 보내세요 — 모터가 회전합니다. /brake를 보내세요 — 하드 정지됩니다. /backward를 보내세요 — 역방향입니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /forward [2026-04-29 12:00:01] Motor spinning forward. [2026-04-29 12:02:10] Telegram: /backward [2026-04-29 12:02:10] Motor spinning backward. [2026-04-29 12:04:05] Telegram: /brake [2026-04-29 12:04:05] Motor braking.
    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
    /forward
    10:15 AM ✓✓
    Motor spinning forward.
    10:16 AM
    /backward
    10:17 AM ✓✓
    Motor spinning backward.
    10:18 AM
    /brake
    10:19 AM ✓✓
    Motor braking.
    10:20 AM

    OpenClaw 통합

    아두이노 우노 Q - OpenClaw 자습서의 지시를 참조하여 이 자습서에 OpenClaw를 적용할 수 있습니다.

    응용프로그램/프로젝트 아이디어

    • 원격 로봇 드라이브: Channel A 및 Channel B를 함께 사용하여 Telegram을 통해 제어되는 이중 모터 차동 구동 로봇을 구축합니다.
    • 자동 컨베이어: MPU의 Linux cron을 사용하여 일정에 따라 Channel A 모터를 앞으로 또는 뒤로 구동합니다.
    • 동력식 카메라 슬라이더: 정확한 PWM 속도 제어를 사용하여 카메라를 트랙을 따라 부드럽게 이동시킵니다.
    • 이중축 회전대: Telegram 명령을 통해 팬 및 틸트 모션을 위해 두 모터를 동시에 제어합니다.
    • 스마트 팬 컨트롤러: Telegram에서 원격으로 팬 속도를 조정하세요 — 느림, 중간 또는 전속 설정.

    도전 과제

    • 쉬움: 현재 모터 상태(앞으로, 뒤로 또는 제동)를 보고하는 /status Telegram 명령을 추가합니다.
    • 중간: PWM 속도를 회전하기 전에 설정하는 /speed <0-255> Telegram 명령을 추가합니다.
    • 고급: /a forward, /b backward, /a brake 같은 명령을 사용하여 Telegram에서 Channel A 및 Channel B를 독립적으로 제어합니다.

    Arduino UNO Q DC Motor Shield - 전체 데모

    아래는 DC Motor Shield의 모든 예제를 시연하는 단계별 비디오 자습서입니다: