ESP8266 Công tắc giới hạn động cơ DC

Trong hướng dẫn ESP8266 này, chúng ta sẽ học cách sử dụng ESP8266 để điều khiển động cơ DC bằng công tắc giới hạn và bộ điều khiển L298N. Cụ thể, chúng ta sẽ học:

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for 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 Motor
1×5V Power Adapter for 5V DC motor
1×DC Power Jack
1×L298N Motor Driver Module
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Động cơ DC và Công tắc Giới hạn

Nếu bạn không biết về động cơ DC và công tắc giới hạn (sơ đồ chân cắm, cách nó hoạt động, cách lập trình ...), hãy tìm hiểu về chúng trong các hướng dẫn sau đây:

Sơ đồ đấu dây

Hướng dẫn này cung cấp các mã ESP8266 cho hai trường hợp: một động cơ DC + một công tắc giới hạn, một động cơ DC + hai công tắc giới hạn.

  • Sơ đồ đấu dây giữa động cơ DC và công tắc giới hạn
sơ đồ đấu nối ESP8266 NodeMCU với động cơ dc và công tắc giới hạn

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

  • Sơ đồ đấu dây giữa động cơ DC và hai công tắc giới hạn
sơ đồ nối dây ESP8266 NodeMCU cho động cơ dc và hai công tắc giới hạn

This image is created using Fritzing. Click to enlarge image

Mã ESP8266 - Dừng động cơ DC bằng công tắc giới hạn

Đoạn mã dưới đây làm cho động cơ DC quay mãi mãi và dừng ngay khi công tắc giới hạn được chạm.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-dc-motor-limit-switch */ #include <ezButton.h> #define PIN_ENA D5 // The ESP8266 pin connected to the EN1 pin L298N #define PIN_IN1 D6 // The ESP8266 pin connected to the IN1 pin L298N #define PIN_IN2 D7 // The ESP8266 pin connected to the IN2 pin L298N ezButton limitSwitch(D1); // create ezButton object for pin ESP8266 pin D1 void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); digitalWrite(IN1_PIN, LOW); // stop motor digitalWrite(IN2_PIN, LOW); // stop motor } }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
  • Nối các thành phần như trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, ví dụ NodeMCU 1.0 (Mô-đun ESP-12E), và cổng COM tương ứng của nó.
  • Kết nối ESP8266 với PC qua cáp USB.
  • Mở Arduino IDE, chọn đúng bo mạch và cổng.
  • Nhấp vào biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “ezButton”, sau đó tìm thư viện nút nhấn từ ESP8266GetStarted.com.
  • Nhấp nút Cài đặt để cài đặt thư viện ezButton.
thư viện nút ESP8266 NodeMCU
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấn nút Upload trên Arduino IDE để tải mã lên ESP8266
  • Nếu các kết nối đúng, bạn sẽ thấy động cơ quay theo chiều kim đồng hồ.
  • Chạm vào công tắc giới hạn
  • Bạn sẽ thấy động cơ dừng ngay lập tức
  • Kết quả trên Serial Monitor trông như sau
COM6
Send
The limit switch: TOUCHED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Giải thích mã nguồn

Bạn có thể tìm giải thích trong dòng chú thích của mã Arduino ở phía trên.

Mã ESP8266 - Thay đổi hướng của động cơ DC bằng công tắc giới hạn

Mã dưới đây làm cho động cơ DC quay liên tục và đổi hướng khi công tắc giới hạn bị chạm.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define PIN_ENA D5 // The ESP8266 pin connected to the EN1 pin L298N #define PIN_IN1 D6 // The ESP8266 pin connected to the IN1 pin L298N #define PIN_IN2 D7 // The ESP8266 pin connected to the IN2 pin L298N ezButton limitSwitch(D1); // create ezButton object for pin ESP8266 pin D1 int direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); direction *= -1; // change direction Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } } }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp nút Tải lên trên Arduino IDE để tải mã lên ESP8266
  • Nếu kết nối đúng, bạn sẽ thấy động cơ quay theo chiều kim đồng hồ.
  • Chạm công tắc giới hạn
  • Bạn sẽ thấy hướng quay của động cơ DC được đổi sang ngược chiều kim đồng hồ.
  • Chạm lại công tắc giới hạn
  • Bạn sẽ thấy hướng quay của động cơ DC được đổi sang chiều kim đồng hồ.
  • Kết quả trên Serial Monitor trông như dưới đây
COM6
Send
The limit switch: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mã ESP8266 - Thay đổi hướng của động cơ DC bằng hai công tắc giới hạn

Đoạn mã dưới đây làm cho động cơ DC quay liên tục và đổi hướng khi một trong hai công tắc giới hạn được chạm.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define PIN_ENA D5 // The ESP8266 pin connected to the EN1 pin L298N #define PIN_IN1 D6 // The ESP8266 pin connected to the IN1 pin L298N #define PIN_IN2 D7 // The ESP8266 pin connected to the IN2 pin L298N ezButton limitSwitch_1(D1); // create ezButton object for pin ESP8266 pin D1 ezButton limitSwitch_2(D2); // create ezButton object for pin ESP8266 pin D2 int direction = DIRECTION_CW; int prev_direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch_1.setDebounceTime(50); // set debounce time to 50 milliseconds limitSwitch_2.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch_1.loop(); // MUST call the loop() function first limitSwitch_2.loop(); // MUST call the loop() function first if (limitSwitch_1.isPressed()) { direction *= -1; // change direction Serial.println(F("The limit switch 1: TOUCHED")); } if (limitSwitch_2.isPressed()) { direction *= -1; // change direction 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(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } prev_direction = direction; } }

Hướng dẫn từng bước

  • Nhấp nút Upload trên Arduino IDE để tải mã lên ESP8266
  • Nếu kết nối đúng, bạn sẽ thấy động cơ quay theo chiều kim đồng hồ.
  • Chạm vào công tắc giới hạn 1
  • Bạn sẽ thấy hướng quay của động cơ DC được đổi sang ngược chiều kim đồng hồ
  • Chạm vào công tắc giới hạn 2
  • Bạn sẽ thấy hướng quay của động cơ DC được đổi sang chiều kim đồng hồ
  • Kết quả trên Serial Monitor hiển thị như sau
COM6
Send
The limit switch 1: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch 2: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.