아두이노 - ULN2003 드라이버를 사용하여 28BYJ-48 스테퍼 모터 제어 | Arduino - Control 28BYJ-48 Stepper Motor using ULN2003 Driver

이 튜토리얼에서 우리는 다음을 배워볼 것입니다:

Arduino ULN2003 28BYJ-48 stepper motor

스테퍼 모터는 위치 제어에 적합한 모터입니다. 스테퍼 모터는 전체 회전을 동일한 "단계"로 나눕니다. 프린터, 3D 프린터, CNC 기계, 산업 자동화에 사용되는 많은 기기에서 사용됩니다.

스텝 모터에 대해 알아보는 저렴한 방법 중 하나는 28BYJ-48 스텝 모터를 사용하는 것입니다. 보통 ULN2003 기반 드라이버 보드와 함께 제공되어 사용하기 매우 쉽습니다.

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | 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×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

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

데이터 시트에 따르면 28BYJ-48 모터가 풀 스텝 모드에서 작동할 때, 각 스텝은 11.25°의 회전에 해당합니다. 이는 한 회전당 32 스텝이 있음을 의미합니다 (360°/11.25° = 32).

또한, 이 모터는 1/64 감속 기어 세트를 가지고 있습니다. 이는 실제로 32 x 64 = 2048 단계를 가진다는 것을 의미합니다. 각 단계는 360°/2048 = 0.1758°와 동일합니다.

결론: 모터가 2048 스텝(풀-스텝 모드에서)을 하면, 모터는 한 바퀴 회전합니다.

핀배열

28BYJ-48 스테퍼 모터에는 5개의 핀이 포함되어 있습니다. 이 핀들에 대한 자세한 내용을 알 필요는 없습니다. 단지 ULN2003 모터 드라이버의 커넥터에 연결하기만 하면 됩니다.

28BYJ-48 stepper motor

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

ULN2003은 스테퍼 모터용 가장 일반적인 모터 드라이버 모듈 중 하나입니다.

  • 이 모듈은 네 개의 제어 입력 라인(스텝 상태를 표시하기 위함)의 활동을 보여주는 네 개의 LED를 가지고 있습니다. 스텝 진행 시 환상적인 효과를 제공합니다.
  • 또한, 모듈에는 스텝 모터의 전원을 분리할 수 있는 ON/OFF 점퍼가 포함되어 있습니다.

ULN2003 핀배열

ULN2003 Stepper Motor Driver Pinout

ULN2003 모듈은 6개의 핀과 하나의 암 커넥터를 포함합니다:

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

※ NOTE THAT:

  • 외부 전원 공급 장치의 전압은 스테퍼 모터의 전압과 같아야 합니다. 예를 들어, 스테퍼 모터가 12V DC로 작동한다면, 12V 전원 공급 장치를 사용해야 합니다. 28BYJ-48 스테퍼 모터의 경우, 5V DC로 작동하므로 5V 전원 공급 장치를 사용할 것입니다.
  • 스테퍼 모터에 5V 전원 공급 장치가 필요하더라도 VDD 핀을 아두이노의 5V 핀에 연결하지 마십시오. 대신 외부 5V 전원 공급 장치에 연결하세요. 그 이유는 스테퍼 모터가 너무 많은 전력을 소모하기 때문입니다.

선연결

Arduino stepper motor ULN2003 driver Wiring Diagram

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

참고하십시오, 스테퍼 모터의 전선 색상에 대해 걱정할 필요가 없습니다. 우리는 단지 남성 커넥터(28BYJ-48 스테퍼 모터에 있는)를 여성 커넥터(ULN2003 드라이버에 있는)에 연결하기만 하면 됩니다.

스텝 모터 제어하기 위한 프로그래밍 방법

스테퍼 모터를 제어하는 방법은 세 가지가 있습니다:

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

간단한 어플리케이션의 경우, 풀스텝 방법을 사용할 수 있습니다. 세 가지 방법의 세부 사항은 이 튜토리얼의 마지막 부분에서 제시될 것입니다. 이러한 방법에 대한 프로그래밍은 복잡합니다. 다행히도, 우리를 위해 이미 많은 라이브러리가 있습니다. 우리는 단지 라이브러리를 사용하기만 하면 됩니다.

Arduino IDE는 내장된 스테퍼 라이브러리를 가지고 있습니다. 하지만, 다음의 이유로 이 라이브러리 사용을 권장하지 않습니다:

  • 라이브러리가 블로킹입니다. 이는 스테퍼 모터를 제어하는 동안 아두이노가 다른 작업을 수행하는 것을 차단한다는 의미입니다.
  • 충분한 기능이 없습니다.

대신, AccelStepper 라이브러리 사용을 추천합니다. 이 라이브러리는 다음을 지원합니다:

  • 가속
  • 감속.
  • 전단계 및 반단계 구동.
  • 독립적으로 동시에 구동되는 여러 개의 스테퍼 모터.
  • 단점: 마이크로 스텝 구동을 지원하지 않음

아두이노 코드

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // AccelStepper 라이브러리 포함 #include <AccelStepper.h> // 스텝 상수 정의 #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // 데이터시트에서 가져온 값임 // 정확한 스텝 시퀀스를 위해 IN1-IN3-IN2-IN4 순서대로 핀 입력 AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); 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()); }

사용 방법

  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
  • “AccelStepper”를 검색한 다음, Mike McCauley의 AccelStepper 라이브러리를 찾으세요.
  • AccelStepper 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino AccelStepper library
  • 위의 코드를 복사하여 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하기
  • 모터가 회전하는 것을 보세요. 다음과 같아야 합니다:
    • 시계 방향으로 한 바퀴 회전한 후,
    • 반시계 방향으로 두 바퀴 회전한 후,
    • 다시 시계 방향으로 두 바퀴 회전합니다.

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

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

    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

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

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

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

Arduino two stepper motor ULN2003 driver Wiring Diagram

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

28BYJ-48 스테퍼 모터 두 개를 위한 아두이노 코드

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // AccelStepper 라이브러리 포함 #include <AccelStepper.h> // 스텝 상수 정의 #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // 이 값은 데이터시트에서 옴 // 정확한 스텝 순서를 위해 IN1-IN3-IN2-IN4 순으로 핀 입력 AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); 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()); }

추가 지식

스테퍼 모터가 움직일 때 진동합니다.

스텝 모터가 움직이면서 진동해도 걱정하지 마십시오. 이것은 스텝 모터의 특성입니다. 마이크로 스텝 제어 방법을 사용하여 진동을 줄일 수 있습니다.

또한, 이러한 특성 때문에 제어를 적절히 하면, 스테퍼 모터가 마치 악기인 것처럼 음악 소리를 낼 수 있습니다. 여러분은 아두이노 프로젝트 허브에서 이 프로젝트를 볼 수 있습니다.

스테퍼 모터 제어 방법

  • 풀스텝: 이동 단위는 한 스텝으로, 스테퍼 모터의 데이터시트나 매뉴얼에 명시된 도(degree) 값과 동일합니다.
  • 하프스텝: 각 풀 스텝을 두 개의 더 작은 스텝으로 나눕니다. 이동 단위는 풀 스텝의 절반입니다. 이 방법은 모터가 두 배의 해상도로 움직일 수 있게 합니다.
  • 마이크로스텝: 각 풀 스텝을 많은 더 작은 스텝으로 나눕니다. 이동 단위는 풀 스텝의 일부입니다. 분수는 1/4, 1/8, 1/16, 1/32 또는 그 이상일 수 있습니다. 이 방법은 모터가 더 높은 해상도로 움직일 수 있게 합니다. 또한 모터가 낮은 속도에서 더 부드럽게 움직이게 합니다. 분모가 클수록 해상도가 높고 움직임이 부드러워집니다.

예를 들어, 모터의 데이터시트에 1.8도/스텝이라고 명시되어 있다면:

  • 정각 이동: 모터는 1.8도/스텝 <⇒ 회전당 200 스텝으로 이동할 수 있습니다.
  • 반각 이동: 모터는 0.9도/스텝 <⇒ 회전당 400 스텝으로 이동할 수 있습니다.
  • 미세 스텝: 모터는 0.45, 0.225, 1125, 0.05625도/스텝 <⇒ 회전당 800, 1600, 3200, 6400... 스텝으로 이동할 수 있습니다.

위의 코드는 전단계 제어 방법을 사용했습니다.

3. 공명 문제

이것은 고급 사용법입니다. 초보자는 이것에 주의를 기울일 필요가 없습니다. 이것은 스텝 속도가 모터의 자연 주파수와 같은 속도 범위에서 발생합니다. 모터가 내는 소음에 청각적인 변화가 있을 수 있으며, 진동이 증가할 수도 있습니다. 실제 응용 프로그램에서 개발자는 이 문제에 주의를 기울여야 합니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

댓글

WARNING

이 튜토리얼은 개발 중입니다.

※ 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!