ESP8266 - 스테퍼 모터 | ESP8266 - Stepper Motor

이 튜토리얼은 ESP8266을 사용하여 L298N 드라이버를 이용해 스테퍼 모터를 제어하는 방법을 안내합니다. 자세히 보면, 우리는 다음을 학습할 것입니다:

이 튜토리얼은 네 개의 전선이 있는 모든 종류의 바이폴라 스테퍼 모터에 적용됩니다. 예시로 NEMA 17 스테퍼 모터를 사용할 것입니다.

ESP8266 NodeMCU Stepper motor L298N Driver

다른 유형의 스테퍼 모터를 제어하고 싶다면, 이 ESP8266 - 28BYJ-48 스테퍼 모터 튜토리얼을 확인해 보세요.

준비물

1×ESP8266 NodeMCU Amazon
1×Micro USB Cable Amazon
1×Stepper Motor Nema 17 Amazon
1×L298N Motor Driver Module 쿠팡 | Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 5V Power Adapter for ESP8266 Amazon
1×(Optional) Screw Terminal Expansion Board for ESP8266 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

스테퍼 모터에 관하여

스테퍼 모터에는 두 가지 일반적인 유형이 있습니다:

  • **양극성**: 이 모터는 4개의 전선이 있습니다.
  • **단극성**: 이 모터는 5개 또는 6개의 전선이 있습니다.

6선식 유니폴라 스테퍼 모터의 경우, 6개의 전선 중 4개를 사용하고 이를 바이폴라 스테퍼 모터처럼 제어할 수 있습니다.

5선식 유니폴라 스테퍼 모터의 경우, ESP8266 - ULN2003 드라이버를 이용해 28BYJ-48 스테퍼 모터 제어하기를 참조하세요.

이 튜토리얼의 강조점은 오직 바이폴라 스테퍼 모터에만 있습니다.

양극성 스테퍼 모터 핀배열

양극성 스테퍼 모터의 핀 배치는 4개의 핀을 가지고 있습니다. 다양한 제조사들은 모터의 핀에 대해 각기 다른 이름을 사용합니다. 다음 표는 보다 일반적으로 사용되는 핀명을 몇 가지 제공합니다:

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Bipolar Stepper Motor pinout

핀의 순서, 전선의 표시, 그리고 전선의 색상은 제조업체마다 다를 수 있습니다. 전선 색상과 핀 이름 사이의 상관관계를 이해하기 위해서는 데이터시트나 매뉴얼을 읽어야 합니다. 위의 이미지에는 전선 표시와 전선 색상이 서로 다른 두 개의 독특한 모터의 세부 사항도 나와 있습니다.

회전 당 단계

모터의 사양은 DEG_PER_STEP을 나타냅니다. 컨트롤 유형에 따라, 아래 표를 사용하여 STEP_PER_REVOLUTION을 결정할 수 있습니다:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

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

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

ESP8266을 사용한 스테퍼 모터 제어 방법

ESP8266은 스테퍼 모터를 작동시키는 신호를 생성할 수 있습니다. 그러나 ESP8266에서 나오는 신호는 스테퍼 모터가 필요로 하는 필요한 전압 및/또는 전류가 부족합니다. 따라서, ESP8266과 스테퍼 모터 사이에는 하드웨어 드라이버가 필요합니다. 이 드라이버는 두 가지 기능을 가지고 있습니다:

  • ESP8266에서 제어 신호(전류 및 전압)를 증가시킵니다.
  • 스테퍼 모터에 전력을 공급하는 데 사용되는 고전류 및 고전압으로부터 ESP8266을 보호합니다.

스테퍼 모터를 관리하기 위해 사용할 수 있는 다양한 종류의 하드웨어 드라이버가 있습니다. 스테퍼 모터를 제어하기 위해 가장 일반적으로 사용되는 하드웨어 드라이버 중 하나는 L298N 드라이버입니다.

L298N 드라이버에 대하여

L298N 드라이버는 두 개의 DC 모터 또는 스테퍼 모터를 제어하는 데 사용될 수 있습니다. 이 튜토리얼은 스테퍼 모터를 제어하는 방법을 가르쳐 줍니다.

L298N 드라이버 핀배열

L298N Driver pinout

L298N 드라이버에는 11개의 핀과 3개의 점퍼가 있습니다.

  • VCC 핀: 모터에 전력을 공급하며 5V에서 35V 사이 어디든 될 수 있습니다.
  • GND 핀: 공통 접지 핀이며 GND(0V)에 연결되어야 합니다.
  • 5V 핀: L298N 모듈에 전력을 공급하며, ESP8266에서 5V를 통해 공급될 수 있습니다.
  • IN1, IN2, IN3, IN4 핀: 스테퍼 모터를 제어하기 위해 제어 신호를 받기 위해 ESP8266의 핀에 연결됩니다.
  • OUT1, OUT2, OUT3, OUT4 핀: 이들은 스테퍼 모터에 연결됩니다.
  • ENA, ENB 점퍼: 스테퍼 모터를 활성화하기 위해 사용되며, ENA 및 ENB 점퍼 모두 제자리에 있어야 합니다.
  • 5V-EN 점퍼: 이것이 제자리에 있으면, L298N 모듈의 전력은 VCC에서 얻어지며 5V 핀에 아무것도 연결할 필요가 없습니다. 제거되면, L298N 모듈에 전력을 5V 핀을 통해 공급해야 합니다.

L298N 드라이버는 두 가지 입력 전력이 있습니다:

  • 스테퍼 모터용(VCCGND 핀): 5V에서 35V까지.
  • L298N 모듈의 내부 작동용(5V 및 GND 핀): 5V에서 7V까지. 5V-EN 점퍼를 그대로 두면 이 전원이 필요 없습니다.

선연결

ESP8266 NodeMCU Stepper Motor L298N Driver wiring diagram

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

ESP8266의 핀 배치ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.

※ NOTE THAT:

  • 모터의 전원 공급이 12V 이하인 경우 L298N 모듈에 연결된 세 개의 점퍼를 그대로 두십시오.
  • 스테퍼 모터의 핀 배열은 제조업체마다 다를 수 있습니다. 아래 표를 참고하여 올바른 배선을 확인하십시오.

ESP8266과 L298N 드라이버 간 연결 표

ESP8266 pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

L298N 드라이버와 스테퍼 모터 간의 배선 표

중요!: 스테퍼 모터의 배선도 이미지에서 전선의 순서에 신경 쓰지 마십시오. 그것은 단지 일러스트레이션입니다. 스테퍼 모터의 핀 배열은 제조업체에 따라 다를 수 있습니다. 아래 표에 따라 배선이 이루어지는지 확인하십시오.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

스테퍼 모터를 구매하기 전에 스테퍼 모터의 데이터시트, 사양 또는 사용자 매뉴얼을 검토하시기 바랍니다. 핀의 색깔과 이름 간의 상관관계가 포함되어 있는지 확인하세요. 예를 들어, 이 스테퍼 모터는 다음 이미지에서 볼 수 있는 것처럼 매핑을 제공합니다:

Stepper Motor coil color mapping

매핑을 사용하여, 배선 표는 다음과 같습니다:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ NOTE THAT:

위에서 제시된 배선 표에서는 OUT1과 OUT2, 그리고 OUT3과 OUT4를 서로 바꿀 수 있습니다. 이는 가능한 배선 구성의 수를 늘립니다. 그러나, 이는 모터의 회전 방향이 변경되게 할 수도 있습니다(시계 방향에서 반시계 방향으로, 또는 그 반대로).

L298N 드라이버를 사용하여 스테퍼 모터를 제어하는 방법

스테퍼 모터를 제어하는 것은 중단 없이 그렇게 해야 할 필요가 있을 때 특히 도전적인 일이 될 수 있습니다. 다행히도, AccelStepper 라이브러리 덕분에 이 작업이 아주 수월해집니다.

아두이노 IDE에는 기본적으로 포함된 스테퍼 라이브러리가 있습니다. 그러나, 이 라이브러리를 사용하는 것은 권장하지 않습니다:

  • 스테퍼 모터를 제어하는 동안 ESP8266이 다른 작업을 수행하는 것을 방지하는 차단 기능이 포함되어 있습니다.
  • 충분한 기능이 없습니다.

대신, AccelStepper 라이브러리를 사용할 것을 권장합니다. 이 라이브러리는 다음을 제공합니다:

  • 가속
  • 감속
  • 전단계 및 반단계 구동
  • 여러 스테퍼 모터를 동시에 제어할 수 있는 능력으로, 각 스테퍼 모터가 독립적으로 움직일 수 있음
  • 단점: 마이크로 스텝 구동을 지원하지 않음

스테퍼 모터의 위치를 L298N 드라이버로 제어하는 방법

스텝 모터의 원하는 위치를 다음을 통해 달성할 수 있습니다:

  1. 현재 위치를 기준점으로 설정
  2. 기준점을 현재 위치로 설정
stepper.moveTo(desiredPosition); // 모터를 한 바퀴 돌립니다

※ NOTE THAT:

stepper.moveTo() 함수는 논블로킹이며, 이는 라이브러리의 큰 장점입니다. 그러나 사용할 때 우리는 주의해야 합니다:

  • 'stepper.run()'이 가능한 한 자주 호출되도록 합니다. 가급적이면 void loop() 함수 내에서 이루어지는 것이 좋습니다.
  • 모터가 움직이는 동안에는 delay() 함수를 사용하지 마십시오.
  • 모터가 작동 중일 때 Serial.print() 또는 Serial.println() 함수를 사용하지 마십시오. 이는 모터의 움직임을 늦출 수 있습니다.

스테퍼 모터의 속도를 L298N 드라이버를 통해 제어하는 방법

우리는 몇 가지 간단한 기능을 활용하여 속도와 가속/감속을 모두 조절할 수 있습니다.

stepper.setAcceleration(50.0); // 가속도/감속 설정 stepper.setSpeed(200); // 원하는 속도 설정

스텝 모터의 방향을 L298N 드라이버로 제어하는 방법

모터를 지시된 대로 연결하면 다음 방향으로 회전할 것입니다:

  • 시계 방향: 모터가 낮은 위치에서 높은 위치로 이동할 때 (위치 증가)
  • 반시계 방향: 모터가 높은 위치에서 낮은 위치로 이동할 때 (위치 감소)
  • 현재 위치가 100이고, 모터를 200으로 명령하면 시계 방향으로 회전할 것입니다.
  • 현재 위치가 -200이고, 모터를 -100으로 지시하면 시계 방향으로 회전할 것입니다.
  • 현재 위치가 200이고, 모터를 100으로 명령하면 반시계 방향으로 회전할 것입니다.
  • 현재 위치가 -100이고, 모터를 -200으로 지시하면 반시계 방향으로 회전할 것입니다.

※ NOTE THAT:

앞서 언급했듯이, OUT1을 OUT2와 교환하거나 OUT3을 OUT4와 교환할 경우, 위치의 증가는 반시계 방향일 수 있고 위치의 감소는 시계 방향일 수 있습니다.

스테퍼 모터를 멈추는 방법

  • 스테퍼 모터는 원하는 위치에 도달하면 정지할 것입니다.
  • 즉각적인 정지가 원할 경우, stepper.stop() 함수를 사용할 수 있습니다.

ESP8266 코드 - 스테퍼 모터 코드

아래 코드:

  • 모터를 시계 방향으로 한 바퀴 회전시킵니다.
  • 모터를 5초 동안 정지시킵니다.
  • 모터를 반시계 방향으로 한 바퀴 회전시킵니다.
  • 모터를 5초 동안 멈춥니다.
  • 이 과정을 계속 반복합니다.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // 가속도 설정 stepper.setSpeed(200); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치를 0으로 설정 stepper.moveTo(STEP_PER_REVOLUTION); // 모터를 시계 방향으로 한 바퀴 돌림 Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // 5초 동안 정지 stepper.setCurrentPosition(0); // 위치를 0으로 재설정 moveToPosition = -1 * moveToPosition; // 방향 반전 stepper.moveTo(moveToPosition); // 모터를 한 바퀴 돌림 if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // 가능한 한 자주 호출되어야 함 }

사용 방법

ESP8266을 Arduino IDE에서 시작하려면 다음 단계를 따르세요:

  • ESP8266을 처음 사용하는 경우 Arduino IDE에서 ESP8266 환경 설정하는 방법 튜토리얼을 확인하세요.
  • 다이어그램에 표시된 대로 구성요소를 연결하세요.
  • USB 케이블을 사용하여 컴퓨터에 ESP8266 보드를 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드를 선택하세요, 예를 들어 (NodeMCU 1.0 (ESP-12E Module)) 및 해당 COM 포트.
  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
  • “AccelStepper”를 검색한 후 Mike McCauley가 만든 AccelStepper 라이브러리를 찾습니다.
  • AccelStepper 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
ESP8266 NodeMCU AccelStepper library

아두이노 IDE로 코드를 복사하고 열어보세요.

아두이노 IDE에서 코드를 ESP8266으로 업로드하려면 Upload 버튼을 클릭하십시오.

스테퍼 모터가 시계 방향으로 한 바퀴 회전한 다음 5초 동안 멈추고, 다시 반시계 방향으로 한 바퀴 회전한 뒤 다시 5초 동안 멈추는 것을 관찰할 수 있습니다. 이 과정은 계속 반복됩니다.

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

COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, 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!