아두이노 나노 ESP32 - 28BYJ-48 스테퍼 모터 ULN2003 드라이버 | Arduino Nano ESP32 - 28BYJ-48 Stepper Motor ULN2003 Driver

이 튜토리얼에서는 다음 주제를 다룰 것입니다:

Arduino Nano ESP32 ULN2003 28BYJ-48 stepper motor

스테퍼 모터는 완전한 회전을 이산적인 "단계"로 나눔으로써 정밀한 위치 제어에서 뛰어납니다. 이 모터들은 프린터, 3D 프린터, CNC 기계 및 산업 자동화 시스템을 포함한 다양한 장치에 응용됩니다.

스테퍼 모터에 대한 통찰을 얻기 위한 저렴한 방법은 28BYJ-48 스테퍼 모터로 실험하는 것입니다. 일반적으로 이 모터들은 ULN2003 기반의 드라이버 보드와 함께 제공되어 사용을 크게 단순화합니다.

준비물

1×Arduino Nano ESP32 Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×28BYJ-48 stepper motor + ULN2003 Driver Module Amazon
1×5V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Adapter for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

28BYJ-48 스테퍼 모터에 관하여

데이터 시트에 따르면, 28BYJ-48 모터는 전체 스텝 모드로 작동할 때 11.25도 증분으로 이동하여, 완전한 회전당 32단계를 가집니다(계산된 바에 따르면: 360°/11.25° = 32).

또한, 이 모터는 1/64 감속 기어 세트를 통합하여 스텝 수를 32 x 64로 실질적으로 증가시켜, 한 회전당 2048 스텝을 결과로 합니다. 이 2048 스텝 각각은 360°/2048에 해당하는 회전을 나타내며, 이는 대략적으로 스텝 당 0.1758도입니다.

결론: 모터가 전체 스텝 모드에서 2048 스텝을 할 경우, 모터는 한 바퀴 회전합니다.

핀배열

28BYJ-48 스테퍼 모터에는 5개의 핀이 포함되어 있습니다. 이 핀들에 대한 세부 사항을 신경 쓸 필요가 없습니다. 우리가 해야 할 일은 그것을 ULN2003 모터 드라이버의 커넥터에 연결하는 것뿐입니다.

28BYJ-48 stepper motor

ULN2003 스테퍼 모터 드라이버 모듈에 관하여

ULN2003은 스테퍼 모터용으로 널리 사용되는 모터 드라이버 모듈로서 두드러집니다. 이 모듈의 주요 기능은 다음과 같습니다:

모터의 현재 스테핑 상태를 효과적으로 반영하는 네 개의 제어 입력 라인의 활동을 나타내기 위해 밝혀지는 4개의 LED. 이러한 LED는 실용적인 목적을 제공할 뿐만 아니라 스테핑 과정에 시각적 요소도 추가합니다.

모듈에는 ON/OFF 점퍼가 통합되어 있어 연결된 스테퍼 모터의 전력을 분리할 수 있게 합니다. 이 기능은 모터의 전원 공급을 효율적으로 관리할 수 있는 편리한 수단을 제공합니다.

ULN2003 핀배열

ULN2003 Stepper Motor Driver Pinout

ULN2003 모듈에는 6개의 핀과 하나의 암 커넥터가 포함되어 있습니다:

  • IN1 핀: 모터를 구동하는데 사용됩니다. Arduino Nano ESP32의 출력 핀에 연결하세요.
  • IN2 핀: 모터를 구동하는데 사용됩니다. Arduino Nano ESP32의 출력 핀에 연결하세요.
  • IN3 핀: 모터를 구동하는데 사용됩니다. Arduino Nano ESP32의 출력 핀에 연결하세요.
  • IN4 핀: 모터를 구동하는데 사용됩니다. Arduino Nano ESP32의 출력 핀에 연결하세요.
  • GND 핀: 공통 접지 핀입니다. Arduino Nano ESP32의 두 GND와 외부 전원 공급장치에 모두 연결해야 합니다.
  • VDD 핀: 모터에 전원을 공급합니다. 외부 전원 공급장치에 연결하세요.
  • 모터 커넥터: 모터가 연결되는 곳입니다.

※ NOTE THAT:

스테퍼 모터를 구동할 때는 다음 지침을 따라야 합니다:

  • 외부 전원 공급 장치의 전압이 스테퍼 모터의 전압 요구 사항과 일치하는지 확인합니다. 예를 들어, 스테퍼 모터가 12V DC로 작동하는 경우, 12V 전원 공급 장치를 사용하는 것이 중요합니다. 5V DC로 작동하는 28BYJ-48 스테퍼 모터의 경우, 5V 전원 공급 장치를 사용하는 것이 필수적입니다.
  • 스테퍼 모터가 5V 전원 공급 장치에서 작동하도록 설계되었다고 하더라도, Arduino Nano ESP32의 5V 핀에 VDD 핀을 직접 연결해서는 안 됩니다. 대신, VDD 핀을 외부 5V 전원 소스에 연결하세요. 이러한 예방 조치는 스테퍼 모터가 상당한 양의 전력을 소모할 수 있으며, 이것이 ESP32의 전원 공급 장치의 능력을 초과하여 문제나 손상을 일으킬 수 있기 때문에 필수적입니다.

선연결

Arduino Nano ESP32 stepper motor ULN2003 driver Wiring Diagram

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

주의해야 할 점은, 스테퍼 모터의 전선 색깔을 신경 쓸 필요가 없습니다. 우리가 해야 할 것은 단지 남성 커넥터(28BYJ-48 스테퍼 모터에 있는)를 여성 커넥터(ULN2003 드라이버 위에 있는)에 연결하는 것뿐입니다.

스텝 모터 제어 프로그램 방법

스테퍼 모터를 제어하는 데에는 세 가지 주요 방법이 있습니다:

  • Full-Step: 풀-스텝
  • Half-Step: 하프-스텝
  • Micro-Step: 마이크로-스텝

기본 애플리케이션의 경우, 전체 단계 방법이 종종 충분합니다. 그러나 이 세 가지 방법에 대한 자세한 설명은 이 튜토리얼의 마지막 부분에서 제공될 것입니다. 이러한 방법들의 프로그래밍은 복잡할 수 있다는 점에 유의하는 것이 중요합니다. 좋은 소식은 이러한 복잡성을 대신 처리해주는 많은 라이브러리들이 있다는 것입니다. 우리가 해야 할 일은 적절한 라이브러리를 사용하여, 우리 프로젝트에서 스테퍼 모터의 제어를 단순화하는 것입니다.

Arduino IDE는 내장된 스텝 모터 라이브러리를 포함하고 있지만, 다음과 같은 이유로 사용하지 않는 것이 좋습니다:

차단하는 성격: 이 라이브러리는 차단 방식으로 실행되어, 스테퍼 모터를 제어하는 동안 ESP32의 리소스를 독점하므로 다른 작업을 수행할 수 없습니다.

제한된 기능성: 내장된 스테퍼 라이브러리는 프로젝트에 필요한 모든 기능과 특징을 제공하지 않을 수 있습니다.

대신, AccelStepper 라이브러리를 사용하는 것을 추천합니다. 이 라이브러리는 다음과 같은 여러 가지 장점을 제공합니다:

  • 가속 및 감속: 이는 부드러운 가속과 감속을 지원하여 보다 정밀한 제어를 가능하게 합니다.
  • 풀스텝 및 하프스텝 구동: 스테퍼 모터에 대해 풀스텝과 하프스텝 구동 모드 중에서 선택할 수 있습니다.
  • 여러 대의 스테퍼 동시 제어: AccelStepper는 동시에 여러 대의 스테퍼를 제어할 수 있게 해주며, 각 스테퍼는 독립적으로 동시에 움직입니다.

그러나 도서관에는 한 가지 단점이 있다는 점을 지적하는 것이 중요합니다: 마이크로 스텝 구동을 지원하지 않습니다.

아두이노 나노 ESP32 코드

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-28byj-48-stepper-motor-uln2003-driver */ // AccelStepper 라이브러리를 포함합니다 #include <AccelStepper.h> #define STEP_PER_REVOLUTION 2048 // 이 값은 데이터시트에서 가져왔습니다 // 아두이노 나노 ESP32 핀이 IN1-IN3-IN2-IN4 순으로 입력되어 있어야 올바른 스텝 순서로 작동합니다 AccelStepper stepper(AccelStepper::FULL4WIRE, D11, D9, D10, D8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // 최대 속도 설정 stepper.setAcceleration(50.0); // 가속도 설정 stepper.setSpeed(200); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치 설정 stepper.moveTo(STEP_PER_REVOLUTION); // 목표 위치 설정: 64 스텝 <=> 한 바퀴 } void loop() { // 모터가 목표 위치에 도달하면 방향 변경 if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // loop() 함수 안에서 반드시 호출되어야 합니다 Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

사용 방법

  • 아두이노 나노 ESP32에 익숙하지 않다면, 아두이노 나노 ESP32를 아두이노 IDE에서 설정하는 방법에 대한 튜토리얼을 참조하세요.
  • 제공된 다이어그램에 따라 구성요소를 연결하세요.
  • USB 케이블을 사용하여 아두이노 나노 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 아두이노 IDE를 실행하세요.
  • Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
  • 아두이노 IDE의 왼쪽 네비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
  • “AccelStepper”를 검색한 다음, Mike McCauley가 제작한 AccelStepper 라이브러리를 찾으세요.
  • Install 버튼을 클릭하여 AccelStepper 라이브러리를 설치하세요.
Arduino Nano ESP32 AccelStepper library
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino Nano ESP32에 코드를 업로드하기 위해 Arduino IDE에서 Upload 버튼 클릭
  • 모터가 회전하는 것을 확인하세요. 다음과 같아야 합니다:
    • 시계 방향으로 한 바퀴 회전한 다음,
    • 반시계 방향으로 두 바퀴 회전한 다음,
    • 시계 방향으로 두 바퀴 회전합니다.

    그 과정은 무한히 반복됩니다.

    시리얼 모니터에서 결과를 확인하세요.

여러 개의 28BYJ-48 스테퍼 모터 제어하는 방법

동시에 두 개의 스테퍼 모터를 독립적으로 제어하는 방법을 배워봅시다.

두 개의 28BYJ-48 스테퍼 모터를 위한 배선도

Arduino Nano ESP32 two stepper motor ULN2003 driver Wiring Diagram

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

아두이노 나노 ESP32 코드: 두 개의 28BYJ-48 스테퍼 모터용

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-28byj-48-stepper-motor-uln2003-driver */ // AccelStepper 라이브러리 포함 #include <AccelStepper.h> // step 상수 정의 #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // 이 값은 데이터시트에서 가져옴 // 아두이노 나노 ESP32 핀을 IN1-IN3-IN2-IN4 순으로 입력하여 올바른 스텝 시퀀스 실행 AccelStepper stepper_1(FULLSTEP, D11, D9, D10, D8); AccelStepper stepper_2(FULLSTEP, D7, D5, D6, D4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // 최대 속도 설정 stepper_1.setAcceleration(50.0); // 가속도 설정 stepper_1.setSpeed(200); // 초기 속도 설정 stepper_1.setCurrentPosition(0); // 위치 설정 stepper_1.moveTo(STEP_PER_REVOLUTION); // 목표 위치 설정: 64 스텝 <=> 한 바퀴 stepper_2.setMaxSpeed(1000.0); // 최대 속도 설정 stepper_2.setAcceleration(50.0); // 가속도 설정 stepper_2.setSpeed(200); // 초기 속도 설정 stepper_2.setCurrentPosition(0); // 위치 설정 stepper_2.moveTo(STEP_PER_REVOLUTION); // 목표 위치 설정: 64 스텝 <=> 한 바퀴 } void loop() { // 모터가 목표 위치에 도달하면 방향 변경 if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // loop() 함수 안에서 반드시 호출해야 함 stepper_2.run(); // loop() 함수 안에서 반드시 호출해야 함 Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!