ESP32 DC 모터 리미트 스위치

이 ESP32 자습서에서, 우리는 한계 스위치와 L298N 드라이버를 사용하여 DC 모터를 제어하는 방법을 배우게 됩니다. 자세히 말하자면, 우리는 다음을 배우게 됩니다:

이 ESP32 튜토리얼에서는 제한 스위치와 L298N 드라이버를 사용하여 DC 모터를 관리하기 위해 ESP32를 활용하는 과정을 탐구할 것입니다. 구체적으로, 다음과 같은 측면을 다룰 것입니다:

준비물

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
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×5V DC 모터 아마존
1×5V DC 모터용 전원 어댑터 아마존
1×DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×L298N 모터 드라이버 모듈 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

DC 모터 및 리미트 스위치에 관하여

DC 모터와 리미트 스위치(핀아웃, 작동 방식, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 이들에 대해 배우세요:

선연결

이 튜토리얼은 두 가지 경우에 대한 ESP32 코드를 제공합니다: 하나의 직류 모터 + 한 개의 리미트 스위치, 하나의 직류 모터 + 두 개의 리미트 스위치.

DC 모터와 리미트 스위치 간의 배선도

ESP32 dc 모터 and limit switch 연결 배선도

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

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

DC 모터와 두 개의 리미트 스위치 간의 배선도

ESP32 dc 모터 and two limit switches 연결 배선도

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

ESP32 코드 - 리미트 스위치로 DC 모터 정지

아래 코드는 DC 모터를 무한히 회전시키고, 리미트 스위치에 닿는 즉시 즉각적으로 멈추게 합니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-dc-motor-limit-switch */ #include <ezButton.h> #define ENA_PIN 19 // ESP32의 GPIO19 핀이 L298N의 IN1 핀에 연결됨 #define IN1_PIN 18 // ESP32의 GPIO18 핀이 L298N의 IN2 핀에 연결됨 #define IN2_PIN 17 // ESP32의 GPIO17 핀이 L298N의 EN1 핀에 연결됨 ezButton limitSwitch(25); // GPIO25 핀에 연결된 ezButton 객체 생성 void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // 디바운스 시간을 50밀리초로 설정 // 디지털 핀을 출력으로 초기화. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // 최대 속도 digitalWrite(IN1_PIN, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } void loop() { limitSwitch.loop(); // 먼저 loop() 함수를 호출해야 함 if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); digitalWrite(IN1_PIN, LOW); // 모터 정지 digitalWrite(IN2_PIN, LOW); // 모터 정지 } }

사용 방법

  • ESP32를 처음 사용한다면, ESP32 - 소프트웨어 설치을 참조하세요.
  • 위 이미지와 같이 배선하세요.
  • 마이크로 USB 케이블을 사용하여 ESP32 보드를 PC에 연결하세요.
  • PC에서 Arduino IDE를 엽니다.
  • 적절한 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
  • ESP32를 USB 케이블을 통해 PC에 연결하세요.
  • Arduino IDE를 열고, 올바른 보드와 포트를 선택하세요.
  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
  • “ezButton”을 검색한 다음, ArduinoGetStarted.com의 버튼 라이브러리를 찾으세요.
  • EzButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
ESP32 버튼 라이브러리
  • 위의 코드를 복사하여 아두이노 IDE로 엽니다
  • 아두이노 IDE에서 Upload 버튼을 클릭해 ESP32에 코드를 업로드합니다
  • 배선이 올바르다면 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다
  • 리밋 스위치를 누릅니다
  • 모터가 즉시 멈추는 것을 볼 수 있습니다
  • 시리얼 모니터의 결과는 아래와 같습니다
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
The limit switch: TOUCHED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED
Ln 11, Col 1
ESP32 Dev Module on COM15
2

코드 설명

위의 아두이노 코드의 주석 줄에서 설명을 찾을 수 있습니다.

ESP32 코드 - 리미트 스위치로 직류 모터의 방향 변경

아래 코드는 DC 모터가 무한히 회전하게 하고, 리미트 스위치에 닿았을 때 방향을 변경하게 합니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define ENA_PIN 19 // ESP32 핀 GPIO19가 L298N의 IN1 핀에 연결됨 #define IN1_PIN 18 // ESP32 핀 GPIO18이 L298N의 IN2 핀에 연결됨 #define IN2_PIN 17 // ESP32 핀 GPIO17이 L298N의 EN1 핀에 연결됨 ezButton limitSwitch(25); // GPIO25 핀에 연결된 ezButton 객체 생성 int direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // 디바운스 시간을 50밀리초로 설정 // 디지털 핀을 출력으로 초기화함. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // 최대 속도 digitalWrite(IN1_PIN, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } void loop() { limitSwitch.loop(); // loop() 함수를 먼저 호출해야 함 if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); direction *= -1; // 방향 변경 Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // 모터 A가 반시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, HIGH); // 모터 A가 반시계 방향으로 회전하도록 제어 } } }

사용 방법

  • ESP32를 처음 사용하는 경우, ESP32 - 소프트웨어 설치을 참조하세요.
  • 위 이미지와 같이 배선하세요.
  • ESP32 보드를 마이크로 USB 케이블을 통해 PC에 연결하세요.
  • PC에서 Arduino IDE를 엽니다.
  • 올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
  • 위의 코드를 복사하고 Arduino IDE에서 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭해 ESP32에 코드를 업로드하세요.
  • 배선이 올바르면 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다.
  • 리미트 스위치를 누르세요.
  • DC 모터의 방향이 반시계 방향으로 바뀌는 것을 볼 수 있습니다.
  • 다시 리미트 스위치를 누르세요.
  • DC 모터의 방향이 시계 방향으로 바뀌는 것을 볼 수 있습니다.
  • 시리얼 모니터의 결과는 아래와 같습니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev 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
ESP32 Dev Module on COM15
2

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

아래 코드는 DC 모터를 무한히 회전시키고, 두 개의 리밋 스위치 중 하나가 닿으면 그 방향을 바꿉니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define ENA_PIN 19 // ESP32 핀 GPIO19가 L298N의 IN1 핀에 연결됨 #define IN1_PIN 18 // ESP32 핀 GPIO18이 L298N의 IN2 핀에 연결됨 #define IN2_PIN 17 // ESP32 핀 GPIO17이 L298N의 EN1 핀에 연결됨 ezButton limitSwitch_1(25); // pin GPIO25에 연결된 ezButton 객체 생성 ezButton limitSwitch_2(26); // pin GPIO26에 연결된 ezButton 객체 생성 int direction = DIRECTION_CW; int prev_direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch_1.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 limitSwitch_2.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 // 디지털 핀을 출력으로 초기화. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // 최대 속도 digitalWrite(IN1_PIN, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } void loop() { limitSwitch_1.loop(); // 반드시 loop() 함수를 먼저 호출해야 함 limitSwitch_2.loop(); // 반드시 loop() 함수를 먼저 호출해야 함 if (limitSwitch_1.isPressed()) { direction *= -1; // 방향 변경 Serial.println(F("리미트 스위치 1: 눌림")); } if (limitSwitch_2.isPressed()) { direction *= -1; // 방향 변경 Serial.println(F("리미트 스위치 2: 눌림")); } if (prev_direction != direction) { Serial.print(F("방향 -> ")); if (direction == DIRECTION_CW) { Serial.println(F("시계 방향")); digitalWrite(IN1_PIN, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } else { Serial.println(F("반시계 방향")); digitalWrite(IN1_PIN, LOW); // 모터 A가 반시계 방향으로 회전하도록 제어 digitalWrite(IN2_PIN, HIGH); // 모터 A가 반시계 방향으로 회전하도록 제어 } prev_direction = direction; } }

사용 방법

  • ESP32를 처음 사용하는 경우, ESP32 - 소프트웨어 설치을 참고하세요.
  • 위 이미지와 같이 배선을 하세요.
  • ESP32 보드를 마이크로 USB 케이블로 PC에 연결하세요.
  • PC에서 Arduino IDE를 엽니다.
  • 올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
  • 위 코드를 복사하여 Arduino IDE로 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭해 ESP32로 코드를 업로드하세요.
  • 배선이 올바르다면, 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다.
  • 리미트 스위치 1을 누르세요.
  • DC 모터의 방향이 반시계 방향으로 바뀌는 것을 볼 수 있습니다.
  • 리미트 스위치 2를 누르세요.
  • DC 모터의 방향이 시계 방향으로 바뀌는 것을 볼 수 있습니다.
  • 시리얼 모니터의 결과는 아래와 같습니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev 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
ESP32 Dev Module on COM15
2

동영상

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