ESP8266 스테퍼 모터 리미트 스위치

이 튜토리얼은 ESP8266을 사용하여 리미트 스위치와 L298N 드라이버를 통해 스테퍼 모터를 제어하는 방법을 안내합니다. 구체적으로 다룰 내용은 다음과 같습니다:

준비물

1×ESP8266 NodeMCU 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×리미트 스위치 Limit Switch (KW12-3) 쿠팡 | 아마존
1×리미트 스위치 Limit Switch (V-153-1C25) 아마존
1×리미트 스위치 Limit Switch (V-155-1C25) 아마존
1×리미트 스위치 Limit Switch (V-156-1C25) 쿠팡 | 아마존
1×Stepper Motor Nema 17 아마존
1×L298N 모터 드라이버 모듈 쿠팡 | 아마존
1×12V 전원 어댑터 아마존
1×DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP8266용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) ESP8266 Type-C용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

스테퍼 모터 및 리미트 스위치에 대하여

스테퍼 모터와 리미트 스위치(핀 배치, 작동 방식, 프로그래밍 등 포함)에 익숙하지 않으시다면, 다음 튜토리얼들이 더 많은 정보를 제공해 드릴 수 있습니다:

선연결

이 튜토리얼에서는 두 가지 상황에 대한 연결도를 제공합니다: 하나의 스테퍼 모터 + 하나의 리미트 스위치, 하나의 스테퍼 모터 + 두 개의 리미트 스위치.

ESP8266, 스테퍼 모터, 그리고 리미트 스위치 간의 배선도.

ESP8266 NodeMCU 스테퍼 모터 and limit switch 연결 배선도

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

ESP8266 핀배열ESP8266 전원을 켜는 방법에 대해 더 많이 보십시오.

ESP8266, 스테퍼 모터 그리고 두 개의 리미트 스위치 간의 배선도.

ESP8266 NodeMCU 스테퍼 모터 and two limit switches 연결 배선도

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

※ 주의:

스테퍼 모터의 종류에 따라 스테퍼 모터와 L298N 사이의 배선 연결이 달라질 수 있습니다. 따라서, 연결 방법을 이해하기 위해 이 ESP8266 - 스테퍼 모터 튜토리얼을 살펴보는 것이 중요합니다.

ESP8266 코드 - 리미트 스위치로 스테퍼 모터 멈추기

스테퍼 모터를 정지시키는 여러 가지 방법이 있습니다:

stepper.stop() 함수를 호출하십시오: 이는 순간적인 정지를 유발하지 않고 점진적인 정지를 유발할 것입니다.

stepper.run() 함수를 호출하지 않으십시오: 이는 스테퍼 모터의 즉각적인 정지를 초래할 것입니다.

아래 코드는 리미트 스위치가 작동될 때까지 스테퍼 모터가 계속 회전하게 하며, 리미트 스위치가 작동되면 즉시 정지하게 됩니다.

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-stepper-motor-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define MAX_POSITION 0x7FFFFFFF // 최대 위치 설정 가능(long 타입) ezButton limit_switch(D0); // ezButton 객체를 ESP8266 핀 D0에 연결하여 생성 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); bool is_stopped = false; void setup() { Serial.begin(9600); limit_switch.setDebounceTime(50); // 디바운스 시간을 50밀리초로 설정 stepper.setMaxSpeed(500.0); // 최대 속도 설정 stepper.setAcceleration(50.0); // 가속도 설정 stepper.setSpeed(100); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치 설정 stepper.moveTo(MAX_POSITION); } void loop() { limit_switch.loop(); // 첫 번째로 loop() 함수를 호출해야 함 if (limit_switch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); is_stopped = true; } if (is_stopped == false) { // 이 부분 없이는 최대 위치에 도달한 후 이동이 멈춤 if (stepper.distanceToGo() == 0) { // 모터가 최대 위치로 이동했다면 stepper.setCurrentPosition(0); // 위치를 0으로 재설정 stepper.moveTo(MAX_POSITION); // 모터를 다시 최대 위치로 이동 } stepper.run(); // loop() 함수에서 반드시 호출해야 함 } else { // stepper.run() 함수를 호출하지 않으면 모터가 즉시 정지 // 참고: stepper.stop()을 호출해도 모터가 즉시 정지하지 않음. Serial.println(F("The stepper motor is STOPPED")); } }

사용 방법

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

  • ESP8266을 처음 사용하는 경우 ESP8266 - 소프트웨어 설치 튜토리얼을 확인하세요.
  • 다이어그램에 표시된 대로 구성 요소를 연결하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하세요.
  • ESP8266과 PC에 USB 케이블을 연결하세요.
  • Arduino IDE를 열고, 적절한 보드와 포트를 선택하세요.
  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
  • “ezButton”을 검색한 다음, ArduinoGetStarted.com에서 제공하는 버튼 라이브러리를 찾으세요.
  • EzButton 라이브러리를 설치하려면 Install 버튼을 누르세요.
ESP8266 NodeMCU 버튼 라이브러리
  • "AccelStepper"를 검색하고 Mike McCauley가 만든 AccelStepper 라이브러리를 찾으세요.
  • AccelStepper 라이브러리를 추가하려면 Install 버튼을 누르세요.
ESP8266 NodeMCU accelstepper 라이브러리
  • 코드를 복사한 다음 Arduino IDE로 열어주세요.
  • Upload 버튼을 클릭하여 코드를 ESP8266으로 전송하세요.
  • 배선이 올바르게 되어 있다면, 모터가 시계 방향으로 회전할 것입니다.
  • 리미트 스위치를 누르면 모터가 바로 멈출 것입니다.
  • 시리얼 모니터에 나타나는 결과는 이렇게 보일 것입니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch: TOUCHED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED The stepper motor is STOPPED
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

코드 설명

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

ESP8266 코드 - 리미트 스위치로 스테퍼 모터의 방향 변경

아래의 코드는 스테퍼 모터가 지속적으로 회전하게 하며, 리밋 스위치가 접촉되면 그 방향을 반대로 바꾸게 됩니다.

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-stepper-motor-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define MAX_POSITION 0x7FFFFFFF // 최대 위치 설정 가능(long 타입) ezButton limit_switch(D0); // ESP8266 핀 D0에 연결된 ezButton 객체 생성 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); int direction = DIRECTION_CW; long target_pos = 0; void setup() { Serial.begin(9600); limit_switch.setDebounceTime(50); // debounce 시간을 50밀리초로 설정 stepper.setMaxSpeed(500.0); // 최대 속도 설정 stepper.setAcceleration(50.0); // 가속 설정 stepper.setSpeed(100); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치 설정 target_pos = direction * MAX_POSITION; stepper.moveTo(target_pos); } void loop() { limit_switch.loop(); // 반드시 loop() 함수를 먼저 호출해야 함 if (limit_switch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); direction *= -1; // 방향 변경 Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) Serial.println(F("시계 방향")); else Serial.println(F("반시계 방향")); target_pos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // 위치 설정 stepper.moveTo(target_pos); } // 이 부분이 없으면 최대 위치에 도달한 후 움직임이 멈춤 if (stepper.distanceToGo() == 0) { // 모터가 최대 위치로 이동했을 경우 stepper.setCurrentPosition(0); // 위치를 0으로 리셋 stepper.moveTo(target_pos); // 모터를 다시 최대 위치로 이동 } stepper.run(); // loop() 함수에서 반드시 호출해야 함 }

사용 방법

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

  • ESP8266을 처음 사용하는 경우, ESP8266 - 소프트웨어 설치 튜토리얼을 확인하세요.
  • 다이어그램에 표시된 대로 구성 요소들을 연결하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하세요.
  • 코드를 복사하고 Arduino IDE로 열어보세요.
  • Upload 버튼을 클릭하여 코드를 ESP8266으로 전송하세요.
  • 연결이 올바르면 모터가 시계 방향으로 회전할 것입니다.
  • 리미트 스위치를 누르면 스테퍼 모터의 회전 방향이 반시계 방향으로 바뀝니다.
  • 리미트 스위치를 다시 누르면 스테퍼 모터가 다시 시계 방향으로 회전합니다.
  • 시리얼 모니터에는 이와 같은 출력이 나타납니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch: TOUCHED The direction -> CLOCKWISE
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

ESP8266 코드 - 두 개의 리미트 스위치로 스텝 모터의 방향 변경

아래 코드는 스테퍼 모터가 계속 회전하게 하며, 두 개의 리미트 스위치 중 하나가 만져지면 그 방향을 반대로 전환합니다.

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-stepper-motor-limit-switch */ #include <ezButton.h> #include <AccelStepper.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define STATE_CHANGE_DIR 1 #define STATE_MOVE 2 #define STATE_MOVING 3 #define MAX_POSITION 0x7FFFFFFF // 최대로 설정할 수 있는 위치 (long 타입) ezButton limit_switch_1(D0); // ESP8266 핀 D0에 연결되는 ezButton 객체를 생성합니다 ezButton limit_switch_2(D8); // ESP8266 핀 D8에 연결되는 ezButton 객체를 생성합니다 AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); int stepper_state = STATE_MOVE; int direction = DIRECTION_CW; long target_pos = 0; void setup() { Serial.begin(9600); limit_switch_1.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 limit_switch_2.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 stepper.setMaxSpeed(500.0); // 최대 속도 설정 stepper.setAcceleration(50.0); // 가속도 설정 stepper.setSpeed(100); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치 설정 } void loop() { limit_switch_1.loop(); // 먼저 loop() 함수를 호출해야 합니다 limit_switch_2.loop(); // 먼저 loop() 함수를 호출해야 합니다 if (limit_switch_1.isPressed()) { stepper_state = STATE_CHANGE_DIR; Serial.println(F("The limit switch 1: TOUCHED")); } if (limit_switch_2.isPressed()) { stepper_state = STATE_CHANGE_DIR; Serial.println(F("The limit switch 2: TOUCHED")); } switch (stepper_state) { case STATE_CHANGE_DIR: direction *= -1; // 방향 변경 Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) Serial.println(F("CLOCKWISE")); else Serial.println(F("ANTI-CLOCKWISE")); stepper_state = STATE_MOVE; // 방향 변경 후 다음 상태로 이동하여 모터를 움직입니다 break; case STATE_MOVE: target_pos = direction * MAX_POSITION; stepper.setCurrentPosition(0); // 위치 설정 stepper.moveTo(target_pos); stepper_state = STATE_MOVING; // 이동 후에 모터가 계속해서 무한히 움직이도록 다음 상태로 이동 break; case STATE_MOVING: // 이 상태가 없으면 최대 위치에 도달한 후 이동이 멈출 것입니다 if (stepper.distanceToGo() == 0) { // 모터가 최대 위치로 이동했다면 stepper.setCurrentPosition(0); // 위치를 0으로 재설정 stepper.moveTo(target_pos); // 모터를 다시 최대 위치로 이동 } break; } stepper.run(); // loop() 함수에서 반드시 호출되어야 합니다 }

사용 방법

  • 다이어그램에 표시된 대로 구성 요소를 배선하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 열세요.
  • 올바른 ESP8266 보드를 선택하세요. 예를 들어, NodeMCU 1.0 (ESP-12E 모듈)과 그에 해당하는 COM 포트를 선택하세요.
  • 코드를 복사하고 Arduino IDE로 열세요.
  • IDE에서 업로드 버튼을 클릭하여 코드를 ESP8266에 업로드하세요.
  • 배선이 올바르면 모터가 시계 방향으로 회전해야 합니다.
  • 리미트 스위치 1을 만지면 스테퍼 모터의 방향이 시계 반대 방향으로 전환되어야 합니다.
  • 리미트 스위치 2를 만지면 모터의 방향이 다시 반대로, 이번에는 시계 방향으로 전환되어야 합니다.
  • 시리얼 모니터에 표시된 결과는 다음과 같아야 합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The limit switch 1: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch 2: TOUCHED The direction -> CLOCKWISE
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

동영상

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