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

Arduino Uno R4는 Minima와 WiFi 두 가지로 제공되며, 더 높은 처리 성능, 추가 메모리, 14비트 ADC를 갖추면서도 기존 Uno 헤더 레이아웃을 유지합니다. 즉, Motor Shield Rev3를 추가 배선 없이 Uno R4에 바로 장착할 수 있습니다.

이 가이드에서 다룰 내용:

아두이노 우노 R4 dc 모터 실드

필요한 하드웨어

1×Arduino UNO R4 WiFi or Arduino UNO R4 Minima
1×(또는) DIYables STEM V4 IoT, Compatible with Arduino Uno R4 WiFi 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×Motor Shield for Arduino 쿠팡 | 아마존
1×DC Motor (e.g, 5V) 아마존
1×Power source (e.g., 5V power Adapter) 아마존
1×DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino UNO R4 아마존
1×(추천) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Arduino Uno R4 WiFi Compatible Boards

Motor Shield Rev3 개요

Motor Shield Rev3의 핵심에는 L298P 듀얼 풀브리지 드라이버가 있습니다. 이 칩은 두 개의 DC 모터를 독립적으로 제어할 수 있으며, 각각 방향 라인, PWM 속도 라인, 브레이크 라인, 전류 감지 아날로그 입력을 갖추고 있습니다.

각 제어 라인의 역할:

  • 방향(Direction) - 회전 방향을 설정하는 디지털 출력입니다. HIGH를 쓰면 한 방향으로 회전하고, LOW를 쓰면 반대 방향으로 회전합니다.
  • PWM - 작동 듀티를 설정하는 아날로그(PWM) 출력입니다. 값은 0(정지)에서 255(최대 속도)까지입니다.
  • 브레이크(Brake) - 디지털 출력입니다. HIGH로 설정하면 모터 축이 잠기고, LOW로 설정하면 모터가 자유롭게 회전합니다.
  • 전류 감지(Current Sensing) - 모터가 얼마나 많은 전류를 소비하는지 보고하는 아날로그 입력입니다.

Uno R4는 기존 Uno R3와 동일한 헤더 위치를 공유하므로 모든 핀이 자동으로 정렬됩니다:

기능 채널 A 채널 B
방향(Direction) D12 D13
PWM(속도) D3 D11
브레이크(Brake) D9 D8
전류 감지(Current Sensing) A0 A1

모터 전원 공급

모터에는 USB가 제공할 수 있는 것보다 더 많은 전류가 필요합니다. 실드의 전원 스크루 터미널에 6-12V 외부 전원(예: 18650 리튬 셀 2개를 직렬 연결)을 연결하세요. Arduino 자체는 계속 USB에서 전원을 공급받을 수 있습니다.

배선도

Motor Shield Rev3를 Uno R4 헤더에 올려서 모든 핀이 제대로 연결되도록 합니다.

DC 모터 선을 채널 A 스크루 터미널에 연결하세요 - 채널 레이블은 보드에 인쇄되어 있습니다.

외부 배터리 팩을 전원 스크루 터미널에 연결하세요.

아두이노 우노 R4 dc 모터 실드 배선도

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

Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.

라이브러리 설치 방법

  1. USB Type-C 케이블을 사용하여 Arduino Uno R4를 컴퓨터에 연결합니다.
  2. Arduino IDE에서 올바른 보드(Arduino Uno R4 Minima 또는 WiFi)와 시리얼 포트가 선택되었는지 확인합니다.
  3. 왼쪽 사이드바에서 Libraries 아이콘을 클릭합니다.
  4. 검색 상자에 "DIYables_DC_Motor"를 입력하고 DIYables에서 게시한 라이브러리를 찾습니다.
  5. Install을 눌러 IDE에 라이브러리를 추가합니다.
아두이노 dc 모터 shield 라이브러리

추가 종속성은 필요하지 않습니다 - 라이브러리는 완전히 자체 포함되어 있습니다.

최소 스케치 구조

모든 모터 제어 스케치는 다음 기본 구조를 공유합니다:

#include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { motor.begin(); } void loop() { motor.run(MOTOR_FORWARD, 100); delay(2000); motor.brake(); delay(1000); }

motor.begin()은 방향, PWM, 브레이크 핀을 구성합니다. motor.run()을 호출하면 방향이 설정되고 브레이크가 해제되며 요청한 속도가 적용됩니다. motor.brake()는 브레이크를 작동시키고 PWM을 0으로 줄입니다.

채널 A의 단일 모터

채널 A의 모터를 구동하여 2초마다 전진과 후진을 전환하며 사이에 완전히 멈춥니다.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelA Example * * This example demonstrates how to control a DC motor connected to * Channel A of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel A"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

실행 방법

  • 실드를 Uno R4에 올리고 모터를 채널 A에 연결합니다.
  • 배터리 팩을 전원 터미널에 연결합니다.
  • USB Type-C 케이블을 연결합니다.
  • Arduino IDE에 코드를 붙여 넣고 올바른 보드와 포트를 선택한 후 Upload를 누릅니다.
  • 방향 변화를 따라가려면 시리얼 모니터를 엽니다.

모터는 속도 30으로 전진과 후진을 번갈아 가며, 각 방향 변경 사이에 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()

채널 B의 단일 모터

동일한 동작이지만 채널 B에서 동작합니다 - 채널 상수만 교체하면 됩니다.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelB Example * * This example demonstrates how to control a DC motor connected to * Channel B of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_B); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel B"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

실행 방법

  • 모터를 채널 B 스크루 터미널에 연결합니다.
  • 스케치를 업로드하고 시리얼 모니터를 엽니다.

모든 것이 동일하게 작동하며, 기저 핀만 다릅니다.

두 모터 - 양쪽 채널

두 모터를 독립적으로 구동합니다: 같은 방향, 반대 방향, 동기화된 제동.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-dc-motor-shield */ /* * DIYables_DC_Motor - BothChannels Example * * This example demonstrates how to control two DC motors simultaneously, * one on Channel A and one on Channel B of the Arduino Motor Shield Rev3. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motorA(MOTOR_CH_A); DIYables_DC_Motor motorB(MOTOR_CH_B); void setup() { Serial.begin(9600); motorA.begin(); motorB.begin(); Serial.println("Motor Shield - Both Channels"); } void loop() { // Both motors forward motorA.run(MOTOR_FORWARD, 100); motorB.run(MOTOR_FORWARD, 100); Serial.println("Both FORWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Both motors backward motorA.run(MOTOR_BACKWARD, 100); motorB.run(MOTOR_BACKWARD, 100); Serial.println("Both BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Motors in opposite directions motorA.run(MOTOR_FORWARD, 150); motorB.run(MOTOR_BACKWARD, 150); Serial.println("A FORWARD, B BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); }

실행 방법

  • 채널 A에 모터 하나, 채널 B에 또 다른 모터를 연결합니다.
  • 업로드하고 시리얼 모니터를 엽니다.

스케치는 세 가지 패턴을 순환합니다: 둘 다 전진, 둘 다 후진, 모터가 반대 방향으로 회전.

모터 전류 읽기

모터의 전류 소비를 실시간으로 모니터링합니다.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-dc-motor-shield */ /* * DIYables_DC_Motor - CurrentSensing Example * * This example demonstrates how to read the current drawn by a DC motor * connected to Channel A of the Arduino Motor Shield Rev3. * * The Motor Shield Rev3 provides current sensing via analog pins: * Channel A: A0 * Channel B: A1 * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Current Sensing"); } void loop() { // Run motor forward motor.run(MOTOR_FORWARD, 100); // Read and print current sensing value int current = motor.readCurrent(); Serial.print("Current sensing (raw ADC): "); Serial.println(current); delay(500); }

실행 방법

  • 채널 A에 모터를 연결합니다.
  • 스케치를 업로드하고 시리얼 모니터를 엽니다.
  • 원시 ADC 값이 500ms마다 갱신됩니다.

전류 감지에 대하여

아날로그 핀 A0와 A1은 각각 채널 A와 채널 B의 모터 전류에 비례하는 전압을 전달합니다. readCurrent()는 원시 ADC 값을 반환하며, Uno R4에서는 Renesas RA4M1 ADC 덕분에 14비트 값(0-16383)입니다. 실드의 문서화된 감도 계수를 사용하여 밀리암페어로 변환하세요.

사용자 정의 핀 할당

기본 핀 매핑을 재정의해야 하는 경우 - 예를 들어 서드파티 모터 드라이버 보드를 사용할 때 - 생성자에 핀을 직접 전달하세요.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-dc-motor-shield */ /* * DIYables_DC_Motor - CustomPins Example * * This example demonstrates how to create a motor object with * custom pin assignments instead of using the predefined channels. * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> // Custom pin assignment: direction=12, pwm=3, brake=9, currentSensing=A0 DIYables_DC_Motor motor(12, 3, 9, A0); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Custom Pins"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

실행 방법

  • 생성자의 핀 번호를 하드웨어에 맞게 업데이트합니다.
  • 업로드하고 모터 동작을 확인합니다.

문제 해결

  • 모터가 가만히 있음 - 모터 선이 스크루 터미널에 단단히 고정되어 있는지, 채널이 코드(MOTOR_CH_A vs. MOTOR_CH_B)와 일치하는지 확인하세요.
  • 토크 없음 - 속도 값을 높이세요. 매우 낮은 PWM 값은 모터의 관성을 극복하지 못할 수 있습니다.
  • 외부 전원 불량 - 배터리를 충전하거나 교체하세요. 전원 터미널의 극성이 올바른지 확인하세요.