ESP8266 - 스테퍼 모터 | ESP8266 - Stepper Motor
이 튜토리얼은 ESP8266을 사용하여 L298N 드라이버를 이용해 스테퍼 모터를 제어하는 방법을 안내합니다. 자세히 보면, 우리는 다음을 학습할 것입니다:
- ESP8266과 L298N 드라이버를 사용하여 양극성 스테퍼 모터를 제어하는 방법
- 스테퍼 모터의 위치를 제어하기 위해 ESP8266을 프로그래밍하는 방법
- 스테퍼 모터의 속도를 제어하기 위해 ESP8266을 프로그래밍하는 방법
- 스테퍼 모터의 방향을 제어하기 위해 ESP8266을 프로그래밍하는 방법
이 튜토리얼은 네 개의 전선이 있는 모든 종류의 바이폴라 스테퍼 모터에 적용됩니다. 예시로 NEMA 17 스테퍼 모터를 사용할 것입니다.
다른 유형의 스테퍼 모터를 제어하고 싶다면, 이 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 |
핀의 순서, 전선의 표시, 그리고 전선의 색상은 제조업체마다 다를 수 있습니다. 전선 색상과 핀 이름 사이의 상관관계를 이해하기 위해서는 데이터시트나 매뉴얼을 읽어야 합니다. 위의 이미지에는 전선 표시와 전선 색상이 서로 다른 두 개의 독특한 모터의 세부 사항도 나와 있습니다.
회전 당 단계
모터의 사양은 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 드라이버에는 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 드라이버는 두 가지 입력 전력이 있습니다:
- 스테퍼 모터용(VCC 및 GND 핀): 5V에서 35V까지.
- L298N 모듈의 내부 작동용(5V 및 GND 핀): 5V에서 7V까지. 5V-EN 점퍼를 그대로 두면 이 전원이 필요 없습니다.
선연결
이 이미지는 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 |
스테퍼 모터를 구매하기 전에 스테퍼 모터의 데이터시트, 사양 또는 사용자 매뉴얼을 검토하시기 바랍니다. 핀의 색깔과 이름 간의 상관관계가 포함되어 있는지 확인하세요. 예를 들어, 이 스테퍼 모터는 다음 이미지에서 볼 수 있는 것처럼 매핑을 제공합니다:
매핑을 사용하여, 배선 표는 다음과 같습니다:
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 드라이버로 제어하는 방법
스텝 모터의 원하는 위치를 다음을 통해 달성할 수 있습니다:
- 현재 위치를 기준점으로 설정
- 기준점을 현재 위치로 설정
※ NOTE THAT:
stepper.moveTo() 함수는 논블로킹이며, 이는 라이브러리의 큰 장점입니다. 그러나 사용할 때 우리는 주의해야 합니다:
- 'stepper.run()'이 가능한 한 자주 호출되도록 합니다. 가급적이면 void loop() 함수 내에서 이루어지는 것이 좋습니다.
- 모터가 움직이는 동안에는 delay() 함수를 사용하지 마십시오.
- 모터가 작동 중일 때 Serial.print() 또는 Serial.println() 함수를 사용하지 마십시오. 이는 모터의 움직임을 늦출 수 있습니다.
스테퍼 모터의 속도를 L298N 드라이버를 통해 제어하는 방법
우리는 몇 가지 간단한 기능을 활용하여 속도와 가속/감속을 모두 조절할 수 있습니다.
스텝 모터의 방향을 L298N 드라이버로 제어하는 방법
모터를 지시된 대로 연결하면 다음 방향으로 회전할 것입니다:
- 시계 방향: 모터가 낮은 위치에서 높은 위치로 이동할 때 (위치 증가)
- 반시계 방향: 모터가 높은 위치에서 낮은 위치로 이동할 때 (위치 감소)
- 현재 위치가 100이고, 모터를 200으로 명령하면 시계 방향으로 회전할 것입니다.
- 현재 위치가 -200이고, 모터를 -100으로 지시하면 시계 방향으로 회전할 것입니다.
- 현재 위치가 200이고, 모터를 100으로 명령하면 반시계 방향으로 회전할 것입니다.
- 현재 위치가 -100이고, 모터를 -200으로 지시하면 반시계 방향으로 회전할 것입니다.
※ NOTE THAT:
앞서 언급했듯이, OUT1을 OUT2와 교환하거나 OUT3을 OUT4와 교환할 경우, 위치의 증가는 반시계 방향일 수 있고 위치의 감소는 시계 방향일 수 있습니다.
스테퍼 모터를 멈추는 방법
- 스테퍼 모터는 원하는 위치에 도달하면 정지할 것입니다.
- 즉각적인 정지가 원할 경우, stepper.stop() 함수를 사용할 수 있습니다.
ESP8266 코드 - 스테퍼 모터 코드
아래 코드:
- 모터를 시계 방향으로 한 바퀴 회전시킵니다.
- 모터를 5초 동안 정지시킵니다.
- 모터를 반시계 방향으로 한 바퀴 회전시킵니다.
- 모터를 5초 동안 멈춥니다.
- 이 과정을 계속 반복합니다.
사용 방법
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 버튼을 클릭하세요.
아두이노 IDE로 코드를 복사하고 열어보세요.
아두이노 IDE에서 코드를 ESP8266으로 업로드하려면 Upload 버튼을 클릭하십시오.
스테퍼 모터가 시계 방향으로 한 바퀴 회전한 다음 5초 동안 멈추고, 다시 반시계 방향으로 한 바퀴 회전한 뒤 다시 5초 동안 멈추는 것을 관찰할 수 있습니다. 이 과정은 계속 반복됩니다.
시리얼 모니터에서 결과를 확인하세요.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.