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

이 튜토리얼은 Arduino Nano를 사용하여 ULN2003 드라이버를 사용하여 28BYJ-48 스테퍼 모터를 제어하는 방법을 지시합니다. 구체적으로, 우리는 다음을 배울 것입니다:

Arduino Nano ULN2003 28BYJ-48 stepper motor

준비물

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

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

스테퍼 모터는 위치 제어에 탁월합니다. 전체 회전을 동일한 "스텝"으로 나눕니다. 이 모터들은 프린터, 3D 프린터, CNC 기계, 산업 자동화 등 많은 장치에서 사용됩니다.

스테퍼 모터에 대한 지식을 얻는 예산 친화적인 방법 중 하나는 28BYJ-48 스테퍼 모터를 활용하는 것입니다. 이 모터들은 일반적으로 ULN2003 기반 드라이버 보드와 함께 제공되며, 이로 인해 사용하기가 매우 쉽습니다.

데이터 시트에 명시된 바와 같이, 28BYJ-48 모터는 각 단계가 11.25° 회전에 해당하는 전단계 모드에서 작동합니다. 따라서 한 회전당 32단계가 있습니다 (360°/11.25° = 32).

게다가 이 모터는 1/64 감속 기어 세트를 가지고 있습니다. 이것은 32 x 64 = 2048 스텝에 해당합니다. 각 스텝은 360°/2048 = 0.1758°와 동등합니다.

결론: 모터가 풀 스텝 모드로 설정되어 있다면, 모터가 한 번의 회전을 완료하기 위해 2048 스텝이 필요할 것입니다.

28BYJ-48 스테퍼 모터와 ULN2003 드라이버 핀배열

28BYJ-48 스테퍼 모터는 5개의 핀을 가지고 있습니다. 이 핀들의 세부 사항에 대해 걱정할 필요는 없습니다. 그저 ULN2003 모터 드라이버 커넥터에 연결하기만 하면 됩니다.

28BYJ-48 stepper motor

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

ULN2003은 스텝 모터용으로 널리 사용되는 모터 드라이버 모듈입니다.

  • 이것은 모터가 스텝을 밟을 때 멋진 시각적 효과를 제공하는 네 개의 제어 입력 라인의 활동을 나타내는 네 개의 LED를 가지고 있습니다.
  • 또한, 스텝 모터로부터 전력을 분리하는 ON/OFF 점퍼를 포함하고 있습니다.

ULN2003 핀배열

ULN2003 Stepper Motor Driver pinout

ULN2003 모듈에는 6개의 핀과 하나의 여성 커넥터가 있습니다.

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

※ NOTE THAT:

외부 전원 공급 장치의 전압은 스테퍼 모터의 전압과 동일해야 합니다. 예를 들어, 스테퍼 모터가 12V DC로 동작하는 경우, 우리는 12V 전원 공급 장치를 사용해야 합니다. 28BYJ-48 스테퍼 모터의 경우, 5V DC로 작동하므로 우리는 5V 전원 공급 장치를 사용할 것입니다.

그러나, 스테퍼 모터가 5V 전원 공급을 요구하더라도, VDD 핀을 아두이노 나노의 5V 핀에 연결하지 마십시오. 대신, 스테퍼 모터가 너무 많은 전력을 소모하기 때문에 외부 5V 전원 공급 장치에 연결하세요.

선연결

Arduino Nano stepper motor ULN2003 driver wiring diagram

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

스테퍼 모터의 전선 색깔에 주의를 기울일 필요는 없습니다. 28BYJ-48 스테퍼 모터의 남성 커넥터를 ULN2003 드라이버의 여성 커넥터에 연결하기만 하면 됩니다.

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

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

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

기본 애플리케이션의 경우 전체 단계 방법을 사용할 수 있습니다. 세 가지 방법의 세부 사항은 이 튜토리얼의 마지막 섹션에서 설명될 것입니다. 이 기술들을 프로그래밍하는 것은 복잡할 수 있습니다. 다행히도, 우리를 위해 작업을 해준 많은 라이브러리들이 있으므로, 우리는 그것들을 활용하기만 하면 됩니다.

아두이노 IDE는 내장된 스텝 모터 라이브러리를 제공합니다. 그러나, 다음과 같은 이유로 이 라이브러리 사용을 권장하지 않습니다:

  • 이것은 차단 라이브러리로, 스테퍼 모터를 제어하는 동안 아두이노 난노가 다른 작업을 수행하는 것을 방지합니다.
  • 충분한 기능을 제공하지 않습니다.

대신 AccelStepper 라이브러리를 사용하시길 권장합니다. 이 라이브러리는 다음과 같은 기능을 제공합니다:

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

아두이노 나노 코드

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-28byj-48-stepper-motor-uln2003-driver */ // AccelStepper 라이브러리 포함 #include <AccelStepper.h> // step 상수 정의 #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 Nano AccelStepper library
  • 위의 코드를 복사하고 Arduino IDE로 열어 주세요.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Nano에 업로드하세요.
  • 그러면 모터가 회전하는 것을 볼 수 있습니다. 시계 방향으로 한 바퀴 회전한 후, 반시계 방향으로 두 바퀴 회전하고, 다시 시계 방향으로 두 바퀴 회전해야 합니다.

이 절차는 지속적으로 수행됩니다.

시리얼 모니터에서 출력을 확인하세요.

COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

여러 대의 28BYJ-48 스텝 모터 제어 방법

두 개의 스테퍼 모터를 각각 독립적으로 그리고 동시에 어떻게 관리하는지 알아봅시다.

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

Arduino Nano two stepper motor ULN2003 driver wiring diagram

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

두 개의 28BYJ-48 스텝 모터를 위한 아두이노 나노 코드

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-28byj-48-stepper-motor-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()); }

부가 지식

스테퍼 모터가 움직이는 동안 진동합니다.

스텝 모터가 움직이는 동안 흔들린다고 해서 걱정하지 마세요. 이것은 스텝 모터의 특성입니다. 마이크로 스텝 제어 기술을 사용하면 진동을 줄일 수 있습니다.

또한, 이 기능 때문에, 제대로 관리된다면, 스테퍼 모터는 마치 음악 악기처럼 음악을 만들 수 있습니다. 이에 대한 예는 여기 Hackster.io에서 찾을 수 있습니다.

스텝 모터 제어 방법

  • 풀스텝: 움직임의 단위는 한 스텝으로, 스테퍼 모터의 데이터시트 또는 매뉴얼에 명시된 도(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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

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