아래 코드는 DC 모터가 무한히 회전하게 하고, 리미트 스위치가 닿으면 즉시 정지하게 합니다.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-dc-motor-limit-switch */#include <ezButton.h>#define PIN_ENA D5 // ESP8266 핀이 L298N의 EN1 핀에 연결됨#define PIN_IN1 D6 // ESP8266 핀이 L298N의 IN1 핀에 연결됨#define PIN_IN2 D7 // ESP8266 핀이 L298N의 IN2 핀에 연결됨ezButton limitSwitch(D1); // ESP8266 핀 D1을 위한 ezButton 객체 생성voidsetup() {Serial.begin(9600); limitSwitch.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정// 디지털 핀을 출력으로 초기화합니다.pinMode(PIN_ENA, OUTPUT);pinMode(PIN_IN1, OUTPUT);pinMode(PIN_IN2, OUTPUT);digitalWrite(PIN_ENA, HIGH); // 최대 속도digitalWrite(PIN_IN1, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어digitalWrite(PIN_IN2, LOW); // 모터 A가 시계 방향으로 회전하도록 제어}voidloop() { limitSwitch.loop(); // 반드시 먼저 loop() 함수를 호출해야 합니다.if (limitSwitch.isPressed()) {Serial.println(F("한계 스위치: 터치됨"));digitalWrite(PIN_IN1, LOW); // 모터 정지digitalWrite(PIN_IN2, LOW); // 모터 정지 }}
올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하세요.
USB 케이블을 통해 ESP8266을 PC에 연결하세요
Arduino IDE를 열고, 올바른 보드와 포트를 선택하세요
Arduino IDE 왼쪽 바의 Libraries 아이콘을 클릭하세요.
“ezButton”을 검색하고, ESP8266GetStarted.com에서 제공하는 버튼 라이브러리를 찾으세요.
EzButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
위의 코드를 복사하고 Arduino IDE로 열기
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP8266에 업로드하세요
연결이 올바르면 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다.
리미트 스위치를 눌러보세요
모터가 즉시 멈추는 것을 보게 될 것입니다
시리얼 모니터의 결과는 아래와 같습니다
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.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 DC motor is STOPPED
The DC motor is STOPPED
The DC motor is STOPPED
The DC motor is STOPPED
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
코드 설명
위의 아두이노 코드의 주석 라인에서 설명을 찾을 수 있습니다.
ESP8266 코드 - 리미트 스위치로 DC 모터의 방향 변경
아래 코드는 직류 모터가 무한히 회전하게 만들고, 리미트 스위치에 닿으면 그 방향을 바꾸게 합니다.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-dc-motor-limit-switch */#include <ezButton.h>#define DIRECTION_CCW -1#define DIRECTION_CW 1#define PIN_ENA D5 // ESP8266 핀이 L298N의 EN1 핀에 연결됨#define PIN_IN1 D6 // ESP8266 핀이 L298N의 IN1 핀에 연결됨#define PIN_IN2 D7 // ESP8266 핀이 L298N의 IN2 핀에 연결됨ezButton limitSwitch(D1); // ESP8266 핀 D1용 ezButton 객체 생성intdirection = DIRECTION_CW;voidsetup() {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가 시계 방향으로 회전하도록 제어}voidloop() { 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가 반시계 방향으로 회전하도록 제어 } }}
사용 방법
위의 코드를 복사하고 Arduino IDE로 열기
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP8266에 업로드합니다.
배선이 올바르면 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다.
리미트 스위치를 터치하세요.
DC 모터의 방향이 반시계 방향으로 변경되는 것을 볼 수 있습니다.
다시 리미트 스위치를 터치하세요.
DC 모터의 방향이 시계 방향으로 변경되는 것을 볼 수 있습니다.
시리얼 모니터의 결과는 아래와 같습니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.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 코드 - 리미트 스위치 두 개로 DC 모터의 방향 변경
아래 코드는 DC 모터가 무한히 회전하게 하고, 두 개의 리미트 스위치 중 하나가 닿을 때 방향을 변경합니다.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-dc-motor-limit-switch */#include <ezButton.h>#define DIRECTION_CCW -1#define DIRECTION_CW 1#define PIN_ENA D5 // ESP8266의 EN1 핀 L298N에 연결된 핀#define PIN_IN1 D6 // ESP8266의 IN1 핀 L298N에 연결된 핀#define PIN_IN2 D7 // ESP8266의 IN2 핀 L298N에 연결된 핀ezButton limitSwitch_1(D1); // ESP8266 핀 D1에 대한 ezButton 객체 생성ezButton limitSwitch_2(D2); // ESP8266 핀 D2에 대한 ezButton 객체 생성intdirection = DIRECTION_CW;int prev_direction = DIRECTION_CW;voidsetup() {Serial.begin(9600); limitSwitch_1.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정 limitSwitch_2.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정// 디지털 핀을 출력으로 초기화.pinMode(PIN_ENA, OUTPUT);pinMode(PIN_IN1, OUTPUT);pinMode(PIN_IN2, OUTPUT);digitalWrite(PIN_ENA, HIGH); // 최대 속도digitalWrite(PIN_IN1, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어digitalWrite(PIN_IN2, LOW); // 모터 A가 시계 방향으로 회전하도록 제어}voidloop() { limitSwitch_1.loop(); // 먼저 loop() 함수를 호출해야 함 limitSwitch_2.loop(); // 먼저 loop() 함수를 호출해야 함if (limitSwitch_1.isPressed()) {direction *= -1; // 방향 변경Serial.println(F("The limit switch 1: TOUCHED")); }if (limitSwitch_2.isPressed()) {direction *= -1; // 방향 변경Serial.println(F("The limit switch 2: TOUCHED")); }if (prev_direction != direction) {Serial.print(F("The direction -> "));if (direction == DIRECTION_CW) {Serial.println(F("CLOCKWISE"));digitalWrite(PIN_IN1, HIGH); // 모터 A가 시계 방향으로 회전하도록 제어digitalWrite(PIN_IN2, LOW); // 모터 A가 시계 방향으로 회전하도록 제어 } else {Serial.println(F("ANTI-CLOCKWISE"));digitalWrite(PIN_IN1, LOW); // 모터 A가 반시계 방향으로 회전하도록 제어digitalWrite(PIN_IN2, HIGH); // 모터 A가 반시계 방향으로 회전하도록 제어 } prev_direction = direction; }}
사용 방법
아두이노 IDE에서 Upload 버튼을 클릭하여 ESP8266에 코드를 업로드하십시오.
배선이 올바르면 모터가 시계 방향으로 회전하는 것을 볼 수 있습니다.
리미트 스위치 1을 터치하십시오.
DC 모터의 방향이 반시계 방향으로 변경된 것을 볼 수 있습니다.
리미트 스위치 2를 터치하십시오.
DC 모터의 방향이 시계 방향으로 변경된 것을 볼 수 있습니다.
시리얼 모니터의 결과는 아래와 같습니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.