아두이노 나노 ESP32 - 스테퍼 모터 | Arduino Nano ESP32 - Stepper Motor
이 튜토리얼에서는 Arduino Nano ESP32를 사용하여 스테퍼 모터를 제어하는 방법을 배우게 됩니다:
- L298N 드라이버를 사용하여 양극성 스테퍼 모터를 제어하는 방법
- 스테퍼 모터의 위치를 제어하는 방법
- 스테퍼 모터의 속도를 제어하는 방법
- 스테퍼 모터의 방향을 제어하는 방법
이 튜토리얼은 어떤 종류의 4선식 바이폴라 스테퍼 모터에도 적용될 수 있습니다. 이 튜토리얼에서는 예시로 NEMA 17 스테퍼 모터를 사용할 것입니다.
준비물
1 | × | Arduino Nano ESP32 | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | 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 | × | (Recommended) Screw Terminal Expansion Board for Arduino Nano | 쿠팡 | Amazon |
스테퍼 모터에 관하여
스테퍼 모터에는 두 가지 일반적인 유형이 있습니다:
- **양극성**: 이 모터들은 4개의 전선이 있습니다.
- **단극성**: 단극성 모터는 5개 또는 6개의 전선을 가질 수 있습니다. 6개 전선의 단극성 스테퍼 모터의 경우, 6개 중 4개의 전선을 사용하여 양극성 스테퍼 모터처럼 제어할 수 있습니다.
5-와이어 유니폴라 스테퍼 모터에 특별히 관심이 있다면, [Arduino Nano ESP32 - ULN2003 드라이버를 사용한 28BYJ-48 스테퍼 모터 제어]라는 제목의 튜토리얼을 참조하세요(BASE_URL/tutorials/arduino-nano-esp32/arduino-nano-esp32-28byj-48-stepper-motor-uln2003-driver).
그러나 이 튜토리얼은 양극성 스테퍼 모터에만 전적으로 전념합니다.
양극성 스테퍼 모터 핀배열
양극성 스테퍼 모터는 네 개의 핀을 가지고 있으며, 이 핀들은 제조사에 따라 다르게 명명될 수 있습니다. 아래에서는 몇 가지 일반적인 핀 이름이 있는 표를 찾을 수 있습니다:
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)° |
아두이노 나노 ESP32를 사용하여 스테퍼 모터를 제어하는 방법
아두이노 나노 ESP32는 스테퍼 모터를 제어하는 신호를 생성할 수 있지만, 이러한 신호는 스테퍼 모터가 요구하는 필요한 전압과 전류 수준에 미치지 못할 수 있습니다. 따라서 아두이노 나노 ESP32와 스테퍼 모터 사이의 격차를 메우기 위해 중간 하드웨어 드라이버가 필요합니다. 이 드라이버는 두 가지 주요 기능을 제공합니다:
- 제어 신호 증폭: ESP32에서 오는 제어 신호의 전류와 전압을 증폭시켜 스테퍼 모터의 요구 사항을 충족시킵니다.
- ESP32 보호: 동시에, 높은 전류와 전압 수준이 스테퍼 모터를 구동하는 데 사용되는 것으로부터 Arduino Nano ESP32를 보호하여 잠재적인 손상을 방지합니다.
여러 하드웨어 드라이버가 스테퍼 모터 제어에 사용될 수 있으며, 일반적으로 사용되는 옵션 중 하나는 L298N 드라이버입니다.
L298N 드라이버 정보
단일 L298N 드라이버를 사용하여 두 개의 DC 모터 또는 스테퍼 모터를 제어할 수 있습니다. 이 튜토리얼에서는 스테퍼 모터 제어 방법을 배웁니다.
L298N 드라이버 핀배열
L298N 드라이버는 11개의 핀과 3개의 점퍼를 가지고 있습니다.
- VCC 핀: 모터에 전력을 공급합니다. 5V에서 35V 사이일 수 있습니다.
- GND 핀: 공통 접지 핀으로, GND(0V)에 연결해야 합니다.
- 5V 핀: L298N 모듈에 전력을 공급합니다. Arduino Nano ESP32에서 5V로 공급될 수 있습니다.
- IN1, IN2, IN3, IN4 핀들: 스테퍼 모터를 제어하기 위한 제어 신호를 받기 위해 ESP32의 핀에 연결됩니다.
- OUT1, OUT2, OUT3, OUT4 핀들: 스테퍼 모터에 연결됩니다.
- ENA, ENB 점퍼들: 스테퍼 모터를 활성화하기 위해 사용됩니다. ENA 및 ENB 점퍼를 모두 제자리에 두어야 합니다.
- 5V-EN 점퍼: 5V-EN 점퍼를 제자리에 두면, L298N 모듈의 전력이 VCC에서 가져오며, 5V 핀에 아무것도 연결할 필요가 없습니다. 만약 5V-EN 점퍼를 제거한다면, 5V 핀을 통해 L298N 모듈에 전력을 공급해야 합니다.
위에서 설명한 바와 같이, L298N 드라이버에는 두 가지 입력 전력이 있습니다:
- 스테퍼 모터용(VCC 및 GND 핀): 5V에서 35V까지.
- L298N 모듈의 내부 작동용(5V 및 GND 핀): 5V에서 7V까지. 5V-EN 점퍼를 그대로 유지하면 이 핀을 다른 것에 연결할 필요가 없습니다.
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
※ NOTE THAT:
- 모터의 전원 공급이 12V 이하인 경우, L298N 모듈에 있는 세 개의 점퍼를 제자리에 두어 주세요.
- 스테퍼 모터의 핀 순서는 제조사에 따라 다를 수 있습니다. 아래 표를 확인하여 올바른 배선을 확인해 주세요.
아두이노 나노 ESP32와 L298N 드라이버 사이의 연결 테이블
Arduino Nano ESP32 pins | L298N pins |
---|---|
D5 | IN1 |
D4 | IN2 |
D3 | IN3 |
D2 | 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:
위의 스테퍼 모터와 L298N 드라이버 간의 연결 테이블에서, OUT1과 OUT2, OUT3과 OUT4를 서로 바꿀 수 있습니다. 따라서, 더 많은 연결 방법이 있습니다. 그러나, 바꾸게 되면 모터의 회전 방향이 바뀔 수 있습니다(시계 방향에서 반시계 방향으로, 그 반대의 경우도 마찬가지입니다).
L298N 드라이버를 사용하여 스테퍼 모터를 제어하는 방법
스텝 모터를 제어하는 것은 간단한 작업이 아니며, 특히 non-blocking 방식으로 제어하고 싶을 때는 더욱 그렇습니다. 다행히도 AccelStepper 라이브러리 덕분에 스텝 모터를 제어하는 것이 식은 죽 먹기가 됩니다.
Arduino IDE에는 또한 내장된 스텝 모터 라이브러리가 있습니다. 그러나, 다음의 이유로 이 라이브러리 사용을 권장하지 않습니다:
- 이 라이브러리는 blocking 기능을 제공합니다. 이는 스테퍼 모터를 제어하는 동안 Arduino Nano ESP32가 다른 작업을 수행하지 못하게 한다는 의미입니다.
- 충분한 기능이 없습니다.
대신 AccelStepper 라이브러리를 사용하는 것이 좋습니다. 이 라이브러리는 다음을 지원합니다:
- 가속
- 감속
- 전단계 및 반단계 구동
- 독립적으로 동시에 구동되는 여러 동시 스테퍼
- 단점: 마이크로 스텝 구동을 지원하지 않음
스테퍼 모터의 위치를 L298N 드라이버를 통해 제어하는 방법
우리는 다음을 사용하여 스테퍼 모터를 원하는 위치로 이동시킬 수 있습니다:
※ NOTE THAT:
stepper.moveTo() 함수는 논블로킹(non-blocking)입니다. 이 점은 라이브러리의 큰 장점입니다. 하지만, 이 함수를 사용할 때 주의해야 할 점이 있습니다:
- 가능한 한 자주 '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() 함수를 사용하여 언제든지 스테퍼 모터를 즉시 정지시킬 수 있습니다.
아두이노 나노 ESP32 코드 - 스테퍼 모터 코드
아래 코드는 다음과 같은 작업을 수행합니다:
- 시계 방향으로 모터를 한 바퀴 돌립니다
- 모터를 5초 동안 멈춥니다
- 반시계 방향으로 모터를 한 바퀴 되돌립니다
- 모터를 5초 동안 멈춥니다
- 그 과정을 반복합니다
사용 방법
Arduino Nano ESP32를 시작하려면 다음 단계를 따르세요:
- 아두이노 나노 ESP32에 익숙하지 않은 경우, 아두이노 나노 ESP32 환경 설정 방법에 대한 튜토리얼을 참고하세요.
- 제공된 다이어그램에 따라 구성 요소를 연결하세요.
- USB 케이블을 사용하여 아두이노 나노 ESP32 보드를 컴퓨터에 연결하세요.
- 컴퓨터에서 아두이노 IDE를 실행하세요.
- Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
- 아두이노 IDE의 왼쪽 탐색 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
- “AccelStepper”를 검색한 다음 Mike McCauley의 AccelStepper 라이브러리를 찾으세요.
- Install 버튼을 클릭하여 AccelStepper 라이브러리를 설치하세요.
- 위의 코드를 복사하고 아두이노 IDE로 열기
- 아두이노 나노 ESP32에 코드를 업로드하려면 아두이노 IDE에서 Upload 버튼을 클릭하세요.
- 다음을 볼 수 있습니다:
- 스테퍼 모터가 시계 방향으로 한 바퀴 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 스테퍼 모터가 반시계 방향으로 한 바퀴 다시 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 위의 과정이 반복적으로 실행됩니다.
- 시리얼 모니터에서 결과를 확인하세요
코드 설명
소스 코드의 주석 라인에서 라인별 설명을 읽으세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.