Series
Lập Trình & Điều Khiển Động Cơ với ESP32
  1. Series: Lập trình & Điều khiển Động Cơ từ Cơ Bản tới Nâng Cao
  2. 1Lập trình & Điều khiển Động Cơ – Bài 1: Giới thiệu về Động cơ và Nguyên lý Hoạt động
  3. 2Lập trình & Điều khiển Động Cơ – Bài 2: Điều khiển tốc độ Động cơ DC bằng PWM
  4. 3Lập trình & Điều khiển Động Cơ – Bài 3: Đảo chiều quay của động cơ DC bằng mạch cầu H (L298N)
  5. 4Lập trình & Điều khiển Động Cơ – Bài 4: Viết hàm điều khiển chuyển động cho xe robot
  6. 5Lập trình & Điều khiển Động Cơ – Bài 5: Cảm biến vật cản cho xe robot (Tự dừng khi gặp chướng ngại vật)
  7. 6Lập trình & Điều khiển Động Cơ – Bài 6: Xe tránh vật cản tự động bằng cảm biến siêu âm HC-SR04
  8. 7Lập trình & Điều khiển Động Cơ – Bài 7: Điều khiển xe robot bằng điện thoại qua WiFi (Web Remote)
  9. 8Lập trình & Điều khiển Động Cơ – Bài 8: Điều khiển xe robot bằng Bluetooth từ điện thoại (ESP32 + App Android)
  10. 9Lập trình & Điều khiển Động Cơ – Bài 9: Lập trình xe robot dò line (chạy theo vạch đen)
  11. 10Lập trình & Điều khiển Động Cơ – Bài 10: Xe robot tránh vật cản kết hợp dò line (robot tự hành thông minh)
  12. 11Lập trình & Điều khiển Động Cơ – Bài 11: Điều khiển Servo bằng ESP32 (Cơ bản và Ứng dụng trong robot)
  13. 12Lập trình & Điều khiển Động Cơ – Bài 12: Kết hợp Servo và Cảm biến siêu âm HC-SR04 – Quay theo vật cản (Radar mini)
  14. 13Lập trình & Điều khiển Động Cơ – Bài 13: Servo Tracking, tạo hệ thống đầu quay cảm biến tự động theo vật cản
  15. 14Lập trình & Điều khiển Động Cơ – Bài 14: Lăp ráp đầu cảm biến quay theo vật cản lên xe robot (Xe radar thông minh)
  16. 15Lập trình & Điều khiển Động Cơ – Bài 15: Tích hợp còi cảnh báo và đèn LED vào xe robot (Báo hiệu trạng thái thông minh)
  17. 16Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot
  18. 17Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 1): Hiểu nguyên lý
  19. 18Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 2): Thiết kế phần cứng
  20. 19Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 3): Lập trình cơ bản
  21. 20Lập trình & Điều khiển Động Cơ – Nâng cao -Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 4): Tối ưu điều khiển
  22. 21Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 5): Báo hiệu thông minh
  23. 22Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 6): Truyền dữ liệu 2 chiều
  24. 23Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 7): Kiểm thử & demo thực tế
Kiến thức

Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 5): Báo hiệu thông minh

Th11 2025
Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 5): Báo hiệu thông minh

(Từ khóa học: Lập trình & Điều khiển Động Cơ từ Cơ Bản tới Nâng Cao)


Mục tiêu bài học

Trong phần này, chúng ta sẽ nâng cấp hệ thống điều khiển robot từ xa bằng tính năng báo hiệu thông minh.

Hệ thống sẽ sử dụng đèn LED và còi buzzer để thông báo trạng thái hoạt động, cảnh báo mất tín hiệu, chế độ điều khiển, và phản hồi lệnh.

Sau bài này, robot của bạn sẽ không chỉ di chuyển mà còn “biết nói chuyện” với người điều khiển thông qua ánh sáng và âm thanh — giúp việc vận hành trực quan, sinh động và thân thiện hơn.

1. Vai trò của hệ thống báo hiệu

Loại tín hiệuThiết bịMục đích
Âm thanh (Buzzer)Buzzer 5V hoặc Active buzzerBáo khi robot khởi động, mất kết nối hoặc lỗi
Ánh sáng (LED)LED RGB hoặc LED đơnThể hiện trạng thái kết nối, hướng di chuyển hoặc chế độ điều khiển
Màn hình (tuỳ chọn)OLED 0.96”Hiển thị mode, tốc độ, mức pin (nâng cao)

? Mục tiêu là giúp người điều khiển nhận biết trạng thái robot mà không cần nhìn trực tiếp vào serial monitor.

2. Cấu trúc hệ thống báo hiệu

Phân bổ chức năng:

Tín hiệuMạch tay cầm (TX – ESP32-C3)Xe robot (RX – ESP32 DevKit)
LED1Báo chế độ Kid / SportBáo trạng thái kết nối
BuzzerPhát âm báo khi đổi modeBáo mất kết nối hoặc lỗi
LED2(Tuỳ chọn) báo khi gửi lệnhBáo hướng di chuyển

3. Kết nối phần cứng

Tay cầm điều khiển (ESP32-C3)

Thiết bịChân ESP32-C3Chức năng
LED ModeGPIO20Báo chế độ Kid/Sport
BuzzerGPIO21Kêu beep khi đổi mode

Xe robot (ESP32 DevKit)

Thiết bịChân ESP32Chức năng
LED StatusGPIO2Báo tín hiệu nhận được
LED DirGPIO4Báo hướng di chuyển
BuzzerGPIO13Báo mất tín hiệu / khởi động

4. Lập trình tay cầm (TX) – Báo hiệu chế độ

Tay cầm sẽ bật LED khác nhau cho từng modephát âm thanh mỗi khi chuyển đổi.

? Code mở rộng cho TX:

#define LED_MODE 20
#define BUZZER   21

void setup() {
  pinMode(LED_MODE, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  digitalWrite(LED_MODE, LOW);
  digitalWrite(BUZZER, LOW);
  ...
}

void loop() {
  // Khi nhấn nút MODE
  if (pressed(BTN_MODE) && (millis() - lastModeToggle > 300)) {
    sportMode = !sportMode;
    lastModeToggle = millis();

    // LED và Buzzer báo hiệu
    digitalWrite(LED_MODE, sportMode);
    tone(BUZZER, sportMode ? 2000 : 1000, 150);

    Serial.printf("Mode switched to: %s\n", sportMode ? "SPORT" : "KID");
  }

  ...
}

Giải thích

  • Khi bật “Sport Mode”, LED sáng, buzzer kêu “beep cao” (2000Hz).
  • Khi bật “Kid Mode”, LED tắt và buzzer phát “beep thấp” (1000Hz).

5. Lập trình robot (RX) – Báo hiệu trạng thái

Robot sẽ có 3 loại phản hồi chính:

Sự kiệnLEDBuzzerMô tả
Khởi độngNhấp nháy nhanh 3 lầnBeep 1 lầnXác nhận robot sẵn sàng
Nhận lệnh điều khiểnLED sáng tương ứng hướngHiển thị hướng xe
Mất kết nối > 300msLED tắtCòi kêu cảnh báoThông báo mất liên lạc

Code mở rộng cho RX:

#define LED_STATUS 2
#define LED_DIR    4
#define BUZZER     13

void signalStartup() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(LED_STATUS, HIGH);
    tone(BUZZER, 1500, 100);
    delay(150);
    digitalWrite(LED_STATUS, LOW);
    delay(150);
  }
}

void signalLostConnection() {
  tone(BUZZER, 1000, 300);
  digitalWrite(LED_STATUS, LOW);
}

void signalDirection(char action) {
  switch (action) {
    case 'F': digitalWrite(LED_DIR, HIGH); break;
    case 'B': digitalWrite(LED_DIR, LOW);  break;
    default: break;
  }
}

void setup() {
  pinMode(LED_STATUS, OUTPUT);
  pinMode(LED_DIR, OUTPUT);
  pinMode(BUZZER, OUTPUT);

  signalStartup();
  ...
}

void loop() {
  if (radio.available()) {
    radio.read(&cmd, sizeof(cmd));
    lastPacketMs = millis();

    digitalWrite(LED_STATUS, HIGH);
    signalDirection(cmd.action);
    handleCommand(cmd);
  } else if (millis() - lastPacketMs > 300) {
    signalLostConnection();
    stopNow();
  }

  smoothDriveStep();
  delay(10);
}

6. Tích hợp hiển thị OLED (nâng cao – tùy chọn)

Nếu bạn muốn hiển thị trực quan hơn, có thể thêm màn hình OLED 0.96” (I2C).

OLED sẽ hiển thị:

  • Chế độ điều khiển (Kid / Sport)
  • Tốc độ PWM hiện tại
  • Trạng thái kết nối (“Connected / Lost”)

Thư viện gợi ý: Adafruit_SSD1306.h hoặc U8g2lib.h.

7. Kiểm thử và quan sát

  1. Khi bật robot → đèn chớp, còi beep → hệ thống sẵn sàng.
  2. Khi điều khiển → LED hướng hiển thị theo lệnh (F/B/L/R).
  3. Khi mất sóng → robot dừng, còi kêu cảnh báo.
  4. Khi đổi chế độ tay cầm → LED mode đổi trạng thái, còi báo khác âm.

? Với hệ thống báo hiệu này, bạn có thể điều khiển robot mà không cần nhìn màn hình, chỉ cần nghe và quan sát đèn.


8. Lợi ích của hệ thống báo hiệu thông minh

Lợi íchMô tả
Trực quanNhận biết ngay trạng thái mà không cần cắm USB
Thân thiệnPhản hồi bằng âm thanh và ánh sáng giúp dễ thao tác
An toànTự động cảnh báo khi mất tín hiệu hoặc nguồn yếu
Chuyên nghiệpGiúp bộ điều khiển giống tay cầm thật sự

9. Bước tiếp theo

Trong (phần 6): Truyền dữ liệu 2 chiều,

chúng ta sẽ mở rộng hệ thống để robot gửi ngược dữ liệu cảm biến, tốc độ, và trạng thái pin về tay cầm, biến nó thành một hệ thống điều khiển thông minh hai chiều.