Giới thiệu dự án

Bối cảnh và tính cấp thiết

Trong bối cảnh tự động hóa và Internet of Things (IoT) phát triển mạnh mẽ, việc ứng dụng robot di động vào các môi trường đặc thù như bệnh viện, khu cách ly y tế, phòng khử khuẩn và môi trường độc hại trở thành nhu cầu cấp thiết. Theo các báo cáo công nghiệp về Robotics trong y tế, việc áp dụng các thiết bị giám sát và vận chuyển từ xa giúp giảm thiểu tới 60% nguy cơ phơi nhiễm chéo cho nhân viên y tế và tối ưu hóa quy trình theo dõi bệnh nhân nội trú.

Hầu hết các mẫu robot công nghiệp hiện nay có chi phí đầu tư rất lớn (từ hàng chục đến hàng trăm triệu đồng), cấu trúc phức tạp và đòi hỏi hạ tầng mạng chuyên dụng. Đồ án "Robot giám sát điều khiển bằng Wi-Fi ứng dụng ngành y tế" của sinh viên Huỳnh Phú Đông (Khoa Điện – Điện Tử – Viễn Thông, Trường Đại học Kỹ thuật – Công nghệ Cần Thơ) tập trung giải quyết bài toán chế tạo một mô hình robot di động chi phí thấp, linh hoạt, tích hợp camera giám sát thời gian thực và điều khiển không dây thông qua giao thức mạng Wi-Fi nội bộ.

[Người vận hành / Bác sĩ] 
       │ (Giao diện Web UI trên Smartphone/PC)
       ▼ [Giao thức WebSocket / HTTP qua Wi-Fi 2.4GHz]
[Module Vi Điều Khiển ESP32-CAM + OV2640] 
       │ 
       ├─► [Luồng Video Streaming VGA/JPEG] ──► [Truyền về Web UI]
       │
       └─► [Tín hiệu Logic GPIO & Xung PWM] ──► [Driver L298N Cầu H] ──► [4x Động cơ DC 3-6V]

Bài toán nghiên cứu (Problem Statement)

  • Hạn chế của phương thức điều khiển truyền thống: Các giải pháp sử dụng sóng RF tần số 433 MHz hoặc Bluetooth HC-05 thường bị giới hạn về băng thông (không thể truyền video trực tiếp) hoặc khoảng cách hoạt động ngắn (< 10 mét trong môi trường có vật cản).
  • Yêu cầu quan sát thực tế trong môi trường y tế: Việc giám sát buồng bệnh hoặc tiếp tế thuốc men đòi hỏi hình ảnh trực tiếp có độ trễ thấp để người vận hành xử lý tình huống va chạm kịp thời.
  • Rào cản về chi phí và tính phức tạp: Cần một hệ thống nhúng tinh gọn, không cần cài đặt phần mềm chuyên dụng (sử dụng trình duyệt web trực tiếp trên smartphone/máy tính), phần cứng dễ tìm và tiêu thụ điện năng thấp.

Mục tiêu của đồ án

  1. Thiết kế phần cứng: Tích hợp khối vi điều khiển trung tâm ESP32-CAM AI-Thinker với khối công suất Driver L298N để dẫn động hệ thống 4 động cơ DC giảm tốc (tỉ số truyền 1:48).
  2. Xây dựng hệ thống thu nhận và truyền phát hình ảnh: Cấu hình module camera OV2640 truyền luồng video định dạng JPEG qua giao thức HTTP/WebSocket với độ phân giải VGA ($640 \times 480$).
  3. Phát triển giao diện điều khiển (Web Interface): Thiết kế Web UI bằng HTML5, CSS và JavaScript lưu trữ trực tiếp trên bộ nhớ Flash (PROGMEM) của vi điều khiển, hỗ trợ tương tác cảm ứng trực quan (Tiến, Lùi, Trái, Phải, Dừng) và điều chỉnh tốc độ, độ sáng đèn LED qua thanh trượt PWM.
  4. Tối ưu hóa thời gian thực: Đạt khoảng cách kết nối ổn định trên 12 mét trong nhà, độ trễ tín hiệu điều khiển $< 150\text{ ms}$.

Phạm vi và giới hạn nghiên cứu

  • Phạm vi: Robot hoạt động trong phạm vi mạng cục bộ (Local Area Network - LAN) thông qua chế độ Access Point (AP) hoặc Station (STA) ở băng tần 2.4 GHz.
  • Giới hạn: Robot hoạt động tốt trên bề mặt phẳng trong nhà (indoor); luồng video phục vụ giám sát cơ bản, chưa tích hợp thuật toán xử lý ảnh nâng cao (như nhận diện khuôn mặt hay phát hiện vật cản bằng AI trực tiếp trên bo mạch) và chưa có cảm biến phản hồi vòng kín (Encoder).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Hiện nay, các mô hình robot giám sát di động cỡ nhỏ thường sử dụng ba hướng tiếp cận phần cứng chính:

Giải pháp Băng thông truyền dữ liệu Khả năng truyền Video Chi phí linh kiện Ưu điểm Nhược điểm
RF 433MHz / 2.4GHz NRF24L01 Thấp ($< 2\text{ Mbps}$) Không hỗ trợ Rất thấp ($< 200.000$ VNĐ) Tầm xa, tiết kiệm năng lượng Không thể giám sát hình ảnh
Bluetooth (HC-05/HC-06) Trung bình ($1-3\text{ Mbps}$) Không hỗ trợ Thấp ($< 300.000$ VNĐ) Kết nối trực tiếp điện thoại Khoảng cách ngắn, không có hình ảnh
Raspberry Pi 4 + Pi Cam Rất cao ($> 100\text{ Mbps}$) HD 1080p, FPS cao Rất cao ($> 2.500.000$ VNĐ) Xử lý AI mạnh mẽ, đa nhiệm Đắt đỏ, tiêu thụ dòng lớn ($> 2\text{A}$)
ESP32-CAM (Đề tài đề xuất) Cao (Chuẩn Wi-Fi $802.11\text{ b/g/n}$) Hỗ trợ VGA/SVGA 15-20 FPS Rất thấp ($\approx 400.000$ VNĐ) Tích hợp SoC + Cam, Web Server RAM giới hạn, cần quản lý nhiệt

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc có):
    • Khả năng kết nối Wi-Fi ổn định qua Web Server.
    • Điều khiển 2 kênh động cơ độc lập (tiến, lùi, quay trái, quay phải).
    • Truyền video thời gian thực từ cảm biến OV2640.
    • Nguồn cấp độc lập đảm bảo vi điều khiển không bị sụt áp khi khởi động động cơ.
  • Should-have (Nên có):
    • Điều chỉnh tốc độ động cơ linh hoạt bằng điều chế độ rộng xung (PWM 8-bit).
    • Điều chỉnh cường độ đèn LED Flash (GPIO 4) để quan sát ban đêm hoặc buồng tối.
  • Could-have (Có thể mở rộng):
    • Lưu trữ hình ảnh snapshot vào thẻ nhớ MicroSD.
    • Cơ cấu xoay camera Pan/Tilt bằng 2 động cơ Servo SG90.
  • Won't-have (Chưa thực hiện ở giai đoạn này):
    • Bản đồ hóa tự động SLAM bằng LiDAR.
    • Điều khiển bằng giọng nói đa ngữ qua Cloud AI.
       ┌───────────────────────────────────────────────────────────┐
       │                 KIẾN TRÚC PHẦN CỨNG TỔNG THỂ               │
       └───────────────────────────────────────────────────────────┘
                                     │
         ┌───────────────────────────┴───────────────────────────┐
         ▼                                                       ▼
┌──────────────────┐                                   ┌──────────────────┐
│   KHỐI XỬ LÝ &   │                                   │  KHỐI CÔNG SUẤT  │
│   TRUYỀN THÔNG   │                                   │   & TRUYỀN ĐỘNG  │
├──────────────────┤                                   ├──────────────────┤
│ • ESP32-S SoC    │───(GPIO 12/13/14/15/2)───────────►│ • Driver L298N   │
│   (32-bit Dual)  │    Tín hiệu Logic & PWM ENA/ENB   │   (Dual Cầu H)   │
│ • Cam OV2640     │                                   │ • 4x Động cơ DC  │
│ • Đèn Flash LED  │                                   │   (Hộp số 1:48)  │
└──────────────────┘                                   └──────────────────┘
         ▲                                                       ▲
         │ 5V DC (Ổn áp riêng)                                   │ 7.4V - 8.4V DC
         └───────────────────────────┬───────────────────────────┘
                                     │
                          ┌─────────────────────┐
                          │   KHỐI NGUỒN CẤP    │
                          ├─────────────────────┤
                          │ • 2x Pin 18650 Li-ion│
                          │   (4200mAh / 3.7V)  │
                          │ • Module Buck/Reg   │
                          └─────────────────────┘

Thông số kỹ thuật của các linh kiện chính

  1. Module vi điều khiển ESP32-CAM AI-Thinker:
    • Vi xử lý: ESP32-S 32-bit công suất thấp, xung nhịp lên đến $160\text{ MHz}$, hiệu năng tính toán đạt $600\text{ DMIPS}$.
    • Bộ nhớ: $520\text{ KB SRAM}$ nội, mở rộng $4\text{ MB PSRAM}$ ngoài.
    • Cảm biến máy ảnh: OV2640 hỗ trợ độ phân giải tối đa UXGA ($1600 \times 1200$), hỗ trợ chuẩn nén JPEG.
    • Kết nối: Wi-Fi $802.11\text{ b/g/n}$, Bluetooth 4.2 BR/EDR & BLE.
  2. Module công suất Driver L298N:
    • IC chính: L298N tích hợp 2 mạch cầu H kép.
    • Điện áp điều khiển logic: $5\text{V}$, điện áp tải động cơ: $5\text{V} - 35\text{V}$.
    • Dòng tải cực đại: $2\text{A}$ mỗi cầu H; công suất tiêu tán: $20\text{W}$ (có gắn cánh tản nhiệt nhôm).
  3. Động cơ DC và khung gầm:
    • 4 động cơ DC giảm tốc 3-6V, tỉ số truyền 1:48, tốc độ $125 - 208\text{ vòng/phút}$, dòng tiêu thụ $110 - 140\text{ mA}$.
    • Khung gầm mica 2 tầng, bánh xe cao su dẫn hướng vi sai.
  4. Khối nguồn:
    • 2 cell pin sạc Li-ion 18650 (dung lượng danh định $4200\text{ mAh}$, điện áp $3.7\text{V} - 4.2\text{V}$).

Implementation và kết quả

Quy trình phát triển phần mềm và thuật toán

Hệ thống sử dụng thư viện ESPAsyncWebServer kết hợp giao thức WebSocket hai chiều nhằm tối ưu hóa độ trễ truyền dữ liệu điều khiển và truyền dữ liệu hình ảnh.

       ┌────────────────────────┐
       │   Trình duyệt Web      │
       │  (HTML5/JS Dashboard)  │
       └───────────┬────────────┘
                   │
    ┌──────────────┴──────────────┐
    │ ws://<IP>/CarInput          │ ws://<IP>/Camera
    ▼                             ▼
┌────────────────────────┐    ┌────────────────────────┐
│ WebSocket Dispatcher   │    │ WebSocket Camera Stream│
│ - Chuỗi "MoveCar,1"    │    │ - Gửi nhị phân (Blob)  │
│ - Chuỗi "Speed,180"    │    │   khung hình JPEG      │
│ - Chuỗi "Light,255"    │    │ - 15-20 FPS VGA        │
└───────────┬────────────┘    └────────────────────────┘
            │
            ▼
┌──────────────────────────────────────────────┐
│ Bộ điều khiển động cơ L298N & Bộ điều chế PWM│
│ - ENA/ENB (Tốc độ PWM: 1 kHz, 8-bit)        │
│ - IN1, IN2, IN3, IN4 (Chiều quay động cơ)    │
└──────────────────────────────────────────────┘

1. Cấu hình chân kết nối và giải thuật điều khiển động cơ

Hệ thống sử dụng mảng cấu trúc để quản lý chân GPIO điều khiển module L298N:

#include "esp_camera.h"
#include <iostream>
#include <sstream>

struct MOTOR_PINS {
  int pinEn;
  int pinIN1;
  int pinIN2;
};

// Định nghĩa cấu hình chân điều khiển Driver L298N
std::vector<MOTOR_PINS> motorPins = {
  {12, 13, 15}, // RIGHT_MOTOR (EnA, IN1, IN2)
  {12, 14, 2},  // LEFT_MOTOR  (EnB, IN3, IN4)
};

#define LIGHT_PIN 4
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define STOP 0

#define RIGHT_MOTOR 0
#define LEFT_MOTOR  1
#define FORWARD     1
#define BACKWARD   -1

// Hàm thực thi đảo chiều logic cho từng động cơ
void rotateMotor(int motorNumber, int motorDirection) {
  if (motorDirection == FORWARD) {
    digitalWrite(motorPins[motorNumber].pinIN1, HIGH);
    digitalWrite(motorPins[motorNumber].pinIN2, LOW);
  } else if (motorDirection == BACKWARD) {
    digitalWrite(motorPins[motorNumber].pinIN1, LOW);
    digitalWrite(motorPins[motorNumber].pinIN2, HIGH);
  } else {
    digitalWrite(motorPins[motorNumber].pinIN1, LOW);
    digitalWrite(motorPins[motorNumber].pinIN2, LOW);
  }
}

// Giải thuật chuyển động vi sai 4 hướng
void moveCar(int inputValue) {
  switch(inputValue) {
    case UP:
      rotateMotor(RIGHT_MOTOR, FORWARD);
      rotateMotor(LEFT_MOTOR, FORWARD);
      break;
    case DOWN:
      rotateMotor(RIGHT_MOTOR, BACKWARD);
      rotateMotor(LEFT_MOTOR, BACKWARD);
      break;
    case LEFT:
      rotateMotor(RIGHT_MOTOR, FORWARD);
      rotateMotor(LEFT_MOTOR, BACKWARD);
      break;
    case RIGHT:
      rotateMotor(RIGHT_MOTOR, BACKWARD);
      rotateMotor(LEFT_MOTOR, FORWARD);
      break;
    case STOP:
    default:
      rotateMotor(RIGHT_MOTOR, STOP);
      rotateMotor(LEFT_MOTOR, STOP);
      break;
  }
}

2. Xử lý sự kiện WebSocket bất đồng bộ và điều chế xung PWM

Để xử lý lệnh điều khiển và điều chỉnh tốc độ mà không gây nghẽn luồng truyền dữ liệu hình ảnh, hệ thống áp dụng phương pháp ngắt sự kiện:

const int PWMFreq = 1000;         // Tần số PWM 1 KHz
const int PWMResolution = 8;      // Độ phân giải 8-bit (0 - 255)
const int PWMSpeedChannel = 2;    // Kênh PWM điều khiển tốc độ
const int PWMLightChannel = 3;    // Kênh PWM điều khiển đèn LED Flash

void onCarInputWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, 
                              AwsEventType type, void *arg, uint8_t *data, size_t len) {
  switch (type) {
    case WS_EVT_CONNECT:
      Serial.printf("Client #%u da ket noi thanh cong\n", client->id());
      break;
    case WS_EVT_DISCONNECT:
      Serial.printf("Client #%u ngat ket noi\n", client->id());
      moveCar(STOP);
      ledcWrite(PWMLightChannel, 0);
      break;
    case WS_EVT_DATA: {
      AwsFrameInfo *info = (AwsFrameInfo*)arg;
      if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) {
        std::string myData((char*)data, len);
        std::istringstream ss(myData);
        std::string key, value;
        std::getline(ss, key, ',');
        std::getline(ss, value, ',');
        
        int valueInt = atoi(value.c_str());
        if (key == "MoveCar") {
          moveCar(valueInt);
        } else if (key == "Speed") {
          ledcWrite(PWMSpeedChannel, valueInt); // Cập nhật chu kỳ nhiệm vụ xung PWM
        } else if (key == "Light") {
          ledcWrite(PWMLightChannel, valueInt); // Điều chỉnh độ sáng LED Flash
        }
      }
      break;
    }
    default:
      break;
  }
}

3. Cấu hình phần cứng Camera OV2640 trên vi điều khiển ESP32

Cấu hình giao tiếp DMA và bộ đệm khung hình thông qua thư viện esp_camera:

void setupCamera() {
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer   = LEDC_TIMER_0;
  config.pin_d0       = 5;   // Y2_GPIO_NUM
  config.pin_d1       = 18;  // Y3_GPIO_NUM
  config.pin_d2       = 19;  // Y4_GPIO_NUM
  config.pin_d3       = 21;  // Y5_GPIO_NUM
  config.pin_d4       = 36;  // Y6_GPIO_NUM
  config.pin_d5       = 39;  // Y7_GPIO_NUM
  config.pin_d6       = 34;  // Y8_GPIO_NUM
  config.pin_d7       = 35;  // Y9_GPIO_NUM
  config.pin_xclk     = 0;   // XCLK_GPIO_NUM
  config.pin_pclk     = 22;  // PCLK_GPIO_NUM
  config.pin_vsync    = 25;  // VSYNC_GPIO_NUM
  config.pin_href     = 23;  // HREF_GPIO_NUM
  config.pin_sscb_sda = 26;  // SIOD_GPIO_NUM
  config.pin_sscb_scl = 27;  // SIOC_GPIO_NUM
  config.pin_pwdn     = 32;  // PWDN_GPIO_NUM
  config.pin_reset    = -1;  // RESET_GPIO_NUM
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.frame_size   = FRAMESIZE_VGA; // 640x480
  config.jpeg_quality = 10;            // Thang đo chất lượng nén (0-63, số càng nhỏ chất lượng càng cao)
  config.fb_count     = 1;

  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Khoi tao Camera that bai, ma loi: 0x%x", err);
    return;
  }
}

Kết quả thử nghiệm và đánh giá thực nghiệm

Thử nghiệm được tiến hành qua nhiều phiên làm việc liên tục (mỗi phiên từ 10 đến 15 phút) tại môi trường trong nhà trường và phòng thí nghiệm viễn thông:

Kịch bản kiểm thử Thông số đo lường Kết quả đạt được Đánh giá
Cự ly điều khiển không vật cản Bán kính nhận sóng Wi-Fi $12 - 15\text{ mét}$ Hoạt động chính xác, không rớt gói
Cự ly điều khiển có vật cản (tường 10cm) Bán kính nhận sóng Wi-Fi $8 - 10\text{ mét}$ Hình ảnh có trễ nhẹ ($\approx 250\text{ms}$)
Độ phân giải luồng Video Frame rate tại độ phân giải VGA $15 - 18\text{ FPS}$ Đủ mượt mà để điều hướng vật cản
Độ trễ truyền lệnh (Latency) Thời gian đáp ứng từ Web UI đến motor $\approx 85\text{ ms}$ Phản hồi tức thì, dừng xe an toàn
Thời lượng vận hành liên tục 2 cell pin 18650 ($4200\text{ mAh}$) $\approx 3.5\text{ giờ}$ Đạt yêu cầu ca trực giám sát y tế

Đổi mới và đóng góp kỹ thuật

  1. Ứng dụng giao thức WebSocket thay thế HTTP Polling truyền thống: Giảm thiểu đáng kể overhead tiêu đề gói tin HTTP, hạ độ trễ từ $> 400\text{ ms}$ xuống $< 90\text{ ms}$, giúp robot phản ứng tức thì khi người điều khiển buông tay khỏi nút bấm (ontouchend).
  2. Kiến trúc nhúng tất cả trong một (All-in-One SoC): Tận dụng tối đa bộ vi xử lý lõi kép của ESP32 để đồng thời gánh 3 tác vụ: lấy dữ liệu từ cảm biến hình ảnh OV2640, duy trì Web Server phục vụ giao diện người dùng, và băm xung PWM điều khiển động cơ.
  3. Hiệu quả kinh tế và khả năng tiếp cận: Tiết kiệm hơn 80% chi phí phần cứng so với các hệ thống telepresence sử dụng máy tính nhúng Single Board Computer (như Raspberry Pi hoặc Jetson Nano), mở ra cơ hội triển khai diện rộng tại các cơ sở y tế tuyến cơ sở.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng trong ngành Y tế

  • Giám sát bệnh nhân cách ly: Robot mang theo khay thuốc hoặc đồ dùng thiết yếu đi vào khu vực cách ly lây nhiễm cao, cho phép bác sĩ từ phòng điều hành quan sát biểu hiện của bệnh nhân qua màn hình máy tính hoặc điện thoại mà không cần tiếp xúc trực tiếp.
  • Tuần tra ban đêm tại hành lang bệnh viện: Nhờ đèn LED Flash công suất cao tích hợp sẵn trên GPIO 4, robot có thể tuần tra các khu vực thiếu sáng, gửi tín hiệu hình ảnh trực tiếp về bàn trực của điều dưỡng.
┌──────────────────────────────┐
│  BƯỚC 1: CẤP NGUỒN HỆ THỐNG  │
│  Bật công tắc nguồn 7.4V DC  │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│ BƯỚC 2: KẾT NỐI MẠNG WI-FI   │
│ Smartphone kết nối SSID:     │
│ "MyWiFiCar" (Pass: 12345678) │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│ BƯỚC 3: TRUY CẬP ĐIỀU KHIỂN  │
│ Mở trình duyệt Web nhập IP:  │
│ http://192.168.4.1           │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│ BƯỚC 4: VẬN HÀNH GIÁM SÁT    │
│ Xem luồng Video trực tiếp &  │
│ Chạm các nút mũi tên để lái  │
└──────────────────────────────┘

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Phạm vi truyền sóng: Do sử dụng ăng-ten PCB tích hợp sẵn trên module ESP32-CAM, phạm vi kết nối bị suy giảm đáng kể khi đi qua nhiều lớp tường bê tông dày (tối đa $12\text{ m}$).
  • Hệ thống truyền động hở (Open-loop control): Chưa trang bị đĩa quang Encoder đo tốc độ bánh xe, dẫn đến trường hợp hai bên động cơ có thể chạy không hoàn toàn đều nhau do sai số cơ khí.
  • Tỏa nhiệt vi xử lý: Khi truyền video liên tục ở độ phân giải cao, chip ESP32 và cảm biến OV2640 sinh nhiệt nhanh, có thể gây giảm khung hình nếu không có tản nhiệt bổ sung.

Hướng phát triển đề xuất

  1. Nâng cấp phần cứng: Lắp đặt đầu nối IPEX để sử dụng ăng-ten ngoài độ lợi cao ($3\text{dBi} - 5\text{dBi}$), tăng phạm vi điều khiển lên $> 30\text{ mét}$; bổ sung cánh tản nhiệt nhôm cho chip ESP32.
  2. Tích hợp cảm biến môi trường y tế: Gắn thêm cảm biến nhiệt độ - độ ẩm (DHT22 hoặc BME280), cảm biến nồng độ khí độc (MQ-135) để đo chất lượng không khí buồng bệnh và hiển thị trực tiếp lên Web Dashboard.
  3. Mở rộng cơ chế điều khiển: Chuyển đổi mô hình kết nối từ mạng nội bộ (Local AP) sang giao thức MQTT qua Internet (kết hợp nền tảng đám mây hoặc ngrok/Blynk), cho phép bác sĩ điều khiển robot từ bất kỳ đâu có mạng 4G/5G.

Đối tượng hưởng lợi

  • Sinh viên ngành Điện tử - Viễn thông / Tự động hóa: Tài liệu tham khảo toàn diện về cách kết hợp lập trình vi điều khiển ESP32, xử lý tín hiệu hình ảnh camera, giao tiếp mạng WebSocket và thiết kế mạch công suất.
  • Kỹ sư phát triển hệ thống IoT: Mẫu kiến trúc tinh gọn (Clean Architecture) cho các ứng dụng giám sát nhúng không cần máy chủ trung gian cồng kềnh.
  • Cơ sở y tế & Doanh nghiệp: Phương án kỹ thuật khả thi để sản xuất thử nghiệm các dòng xe vận chuyển/giám sát nội bộ với chi phí siêu rẻ.

Câu hỏi thường gặp (FAQ)

1. Cần chuẩn bị những công cụ gì để nạp code cho ESP32-CAM?

Do ESP32-CAM không tích hợp sẵn chip chuyển đổi USB-to-UART (như CP2102 hay CH340), bạn cần sử dụng một mạch nạp rời như Module FTDI Basic 3.3V/5V hoặc tận dụng chính bo mạch Arduino Uno (nối chân Reset xuống GND để dùng làm mạch chuyển đổi tín hiệu). Trong quá trình nạp code, phải nối chân GPIO 0 xuống GND, sau khi nạp xong ngắt kết nối GPIO 0 và nhấn nút Reset trên ESP32 để chạy chương trình.

2. Làm thế nào để khắc phục hiện tượng ESP32-CAM bị khởi động lại (Brownout Reset) khi chạy động cơ?

Hiện tượng này xảy ra do động cơ DC khi khởi động tiêu thụ dòng đột biến lớn làm sụt áp nguồn cấp cho ESP32. Giải pháp là:

  • Sử dụng hai nhánh nguồn riêng hoặc tách nguồn logic ($5\text{V}$) qua IC ổn áp LM7805/AMS1117 độc lập với nguồn cấp cho L298N.
  • Đấu song song các tụ điện hóa ($1000\mu\text{F}$) và tụ gốm ($100\text{nF}$) tại chân nguồn vào của ESP32-CAM để lọc nhiễu và bù áp kịp thời.

3. Có thể điều khiển robot từ mạng ngoài Internet được không?

Hoàn toàn được. Bạn có thể cấu hình tính năng Port Forwarding (NAT) trên Router Wi-Fi để đưa cổng 80 của ESP32 ra IP tĩnh công cộng (Public IP), hoặc sử dụng các giải pháp mạng riêng ảo (VPN), giao thức MQTT thông qua Broker đám mây (như HiveMQ, AWS IoT Core) để điều khiển xuyên Internet mà không phụ thuộc vào hạ tầng mạng LAN.

4. Đèn flash (GPIO 4) có bị xung đột khi sử dụng thẻ nhớ MicroSD không?

Có. Chân GPIO 4 trên ESP32-CAM vừa được sử dụng cho đường dữ liệu Data1 của khe thẻ nhớ MicroSD (chế độ 4-bit bus), vừa điều khiển bóng LED Flash siêu sáng. Nếu muốn ghi dữ liệu hình ảnh vào thẻ nhớ mà không làm nhấp nháy đèn Flash, cần khởi tạo thẻ nhớ ở chế độ 1-bit thông qua lệnh SD_MMC.begin("/sdcard", true).

5. Chi phí ước tính để hoàn thiện một mô hình robot này là bao nhiêu?

Tổng chi phí phần cứng ước tính khoảng $350.000 - 450.000$ VNĐ, bao gồm: Module ESP32-CAM + Cam OV2640 ($\approx 120.000$ VNĐ), Driver L298N ($\approx 45.000$ VNĐ), Khung xe 4 bánh + Động cơ ($\approx 110.000$ VNĐ), 2 Cell pin 18650 kèm đế pin ($\approx 80.000$ VNĐ), và các phụ kiện dây cắm, ốc vít.


Kết luận

Đồ án "Robot giám sát điều khiển bằng Wi-Fi ứng dụng ngành y tế" đã nghiên cứu, thiết kế và chế tạo thành công một hệ thống robot di động hoàn chỉnh có khả năng giám sát hình ảnh thời gian thực. Bằng việc làm chủ công nghệ vi điều khiển ESP32-CAM kết hợp với giao thức truyền thông hiện đại WebSocket, đề tài đã chứng minh tính khả thi của giải pháp tự động hóa chi phí thấp phục vụ công tác hỗ trợ y tế và giám sát an ninh. Hệ thống hoạt động tin cậy, giao diện trực quan, dễ sử dụng trên mọi thiết bị di động, đồng thời đặt nền móng vững chắc cho các nghiên cứu phát triển tiếp theo hướng tới robot dịch vụ thông minh tích hợp trí tuệ nhân tạo (Edge AI).