Công nghệ

Tôi muốn làm xe follow me theo cách sử dụng esp32 cam thì có được không?

null
Written by lbtmicr06

Có, làm xe Follow Me bằng ESP32-CAM hoàn toàn được, và thậm chí đây là hướng hay hơn BLE RSSI nếu bạn muốn xe thật sự “nhìn thấy người” và bám theo người. ESP32-CAM có camera OV2640, có thể dùng cho các bài toán như stream hình ảnh, nhận diện khuôn mặt và phát hiện khuôn mặt ở mức cơ bản. (espblockly.com)

Nhưng cách làm sẽ khác hoàn toàn với bản BLE bạn đang làm.

Hiện tại bạn đang dùng:

Điện thoại
     |
   BLE RSSI
     |
   ESP32
     |
  L298N
     |
  Motor

Nó chỉ biết:

“Điện thoại gần hay xa”

Nó không biết người ở đâu.


Còn dùng ESP32-CAM sẽ thành:

       Người
         |
         |
     Camera
        ↓
   ESP32-CAM
        ↓
 Phân tích hình ảnh
        ↓
 Điều khiển motor
        ↓
      Xe chạy

Xe sẽ nhìn camera:

  • thấy người ở giữa → chạy thẳng
  • người lệch trái → quay trái
  • người lệch phải → quay phải
  • người quá xa → tăng tốc
  • người quá gần → giảm tốc/dừng

Tuy nhiên có 3 mức độ làm


Cách 1: ESP32-CAM nhận diện khuôn mặt (dễ nhất)

Ví dụ:

Camera thấy:

+------------+
|            |
|    🙂      |
|            |
+------------+

ESP32 tính:

mặt nằm giữa ảnh
→ chạy thẳng

Mặt lệch:

+------------+
| 🙂         |
|            |
+------------+

→ quay trái

ESP32-CAM có thư viện và ví dụ CameraWebServer hỗ trợ face detection. (techtutorialsx)

Nhược điểm:

  • không phân biệt được đúng người hay người khác
  • xử lý khá nặng
  • tốc độ không quá cao

Cách 2: ESP32-CAM + điện thoại (tôi khuyên)

Phân chia:

ESP32-CAM:

Camera
↓
gửi ảnh

Điện thoại:

AI nhận diện người
↓
gửi lệnh

Ví dụ:

Điện thoại chạy app:

Camera thấy bạn

gửi:

LEFT
RIGHT
FORWARD
STOP

ESP32 chỉ điều khiển motor.

Ưu điểm:

  • mạnh hơn
  • nhận diện tốt hơn
  • dễ nâng cấp

Cách 3: ESP32-CAM tự xử lý AI

Sơ đồ:

ESP32-CAM

camera
 |
AI model
 |
motor

Có thể làm nhưng khó hơn.

ESP32-CAM bị giới hạn:

  • RAM ít
  • CPU hạn chế
  • xử lý ảnh chậm

Nếu làm robot nghiêm túc thường dùng ESP32-S3 có camera hoặc máy tính nhỏ hơn.


Với phần cứng xe bạn đang có

Bạn đã có:

  • ESP32
  • L298N
  • motor

Nếu đổi sang ESP32-CAM:

Cần thêm:

ESP32-CAM AI Thinker
+
FTDI USB-TTL để nạp code
+
nguồn 5V ổn định

ESP32-CAM thường không có USB tích hợp nên khi nạp firmware cần bộ chuyển USB-TTL hoặc mạch hỗ trợ. (Zbotic)


Tôi đề xuất kiến trúc tốt nhất cho bạn

Vì bạn đang làm từ BLE và đã có xe chạy:

Nâng cấp theo từng bước:

Giai đoạn 1:

Giữ ESP32 hiện tại:

BLE Follow
+
L298N

cho xe chạy ổn.


Giai đoạn 2:

Thêm ESP32-CAM:

ESP32-CAM
       |
     UART
       |
ESP32 điều khiển motor
       |
    L298N

ESP32-CAM chỉ lo “nhìn”.

ESP32 thường lo motor.

Đây là kiến trúc robot thực tế hơn.


Nếu làm theo hướng này, bước tiếp theo tôi có thể viết cho bạn sơ đồ nối ESP32-CAM + ESP32 + L298N và firmware chia 2 mạch để biến xe BLE hiện tại thành xe Follow Me bằng camera.

 

Show me the schematic and firmware for ESP32-CAM + ESP32 + L298N to make a Follow Me car

Được. Tôi sẽ hướng dẫn theo kiến trúc 2 ESP32 (đây là cách hợp lý hơn cho xe Follow Me):

  • ESP32-CAM: chỉ làm nhiệm vụ “mắt” → camera phát hiện người → gửi lệnh
  • ESP32 Dev Module (bo bạn đang dùng): điều khiển L298N + motor

ESP32-CAM AI Thinker có camera OV2640 và chân GPIO hạn chế vì nhiều chân dùng cho camera, nên tách nhiệm vụ như vậy sẽ dễ làm hơn. (ESPBoards)


1. Sơ đồ tổng thể

              NGƯỜI
                |
                |
          ESP32-CAM
        (Camera + AI)
                |
             UART
          TX/RX 3.3V
                |
                |
        ESP32 DEV MODULE
          (Motor control)
                |
                |
             L298N
          +          +
       Motor trái  Motor phải

2. Đấu dây

ESP32 Dev Module → L298N

Giữ đúng mạch bạn đang dùng:

ESP32 L298N
GPIO27 IN1
GPIO26 IN2
GPIO14 IN3
GPIO12 IN4
GPIO33 ENA
GPIO32 ENB
GND GND

Nguồn:

Pin +
 |
 L298N +12V

Pin -
 |
 GND L298N

GND L298N nối GND ESP32

3. ESP32-CAM → ESP32

Dùng UART:

ESP32-CAM:

U0T (TX)  ---> GPIO16 ESP32
U0R (RX)  <--- GPIO17 ESP32
GND       ---> GND

4. Cách hoạt động

ESP32-CAM gửi:

PERSON_LEFT
PERSON_CENTER
PERSON_RIGHT
PERSON_FAR
PERSON_NEAR

ESP32 nhận và chạy motor:

Ví dụ:

PERSON_CENTER
        |
        |
     FORWARD


PERSON_LEFT

     TURN LEFT


PERSON_RIGHT

     TURN RIGHT

PHẦN 1

Firmware ESP32-CAM (camera gửi lệnh)

Đây là bản thử nghiệm trước:

  • chưa AI nặng
  • giả lập lệnh camera
  • dùng để kiểm tra UART trước

ESP32-CAM code:

#include <HardwareSerial.h>


HardwareSerial RobotSerial(1);



void setup()
{

Serial.begin(115200);


// UART1
// RX=3 TX=1

RobotSerial.begin(
9600,
SERIAL_8N1,
3,
1
);


Serial.println("ESP32 CAM READY");


}



void loop()
{


// test giả lập


RobotSerial.println("PERSON_CENTER");


delay(3000);



RobotSerial.println("PERSON_LEFT");


delay(3000);



RobotSerial.println("PERSON_RIGHT");


delay(3000);



RobotSerial.println("PERSON_NEAR");


delay(3000);



RobotSerial.println("PERSON_FAR");


delay(3000);


}

PHẦN 2

Firmware ESP32 điều khiển xe

Code này thay cho firmware BLE trước.

#include <HardwareSerial.h>


HardwareSerial CamSerial(1);


// =================
// MOTOR
// =================


#define IN1 27
#define IN2 26

#define IN3 14
#define IN4 12


#define ENA 33
#define ENB 32



#define PWM_FREQ 1000
#define PWM_RES 8




void stopMotor()
{


digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);


digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);


ledcWrite(ENA,0);
ledcWrite(ENB,0);


Serial.println("STOP");


}




void forward(int sp)
{


digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);


digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);



ledcWrite(ENA,sp);
ledcWrite(ENB,sp);



Serial.println("FORWARD");


}




void left()
{


digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);


digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);



ledcWrite(ENA,150);
ledcWrite(ENB,200);



Serial.println("LEFT");


}




void right()
{


digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);


digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);



ledcWrite(ENA,200);
ledcWrite(ENB,150);



Serial.println("RIGHT");


}





void setup()
{


Serial.begin(115200);


// UART nhận camera

CamSerial.begin(
9600,
SERIAL_8N1,
16,
17
);



// motor

pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);

pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);



ledcAttach(
ENA,
PWM_FREQ,
PWM_RES
);


ledcAttach(
ENB,
PWM_FREQ,
PWM_RES
);



stopMotor();


Serial.println("ROBOT READY");


}





void loop()
{


if(CamSerial.available())
{


String cmd =
CamSerial.readStringUntil('\n');


cmd.trim();



Serial.print("CAM:");

Serial.println(cmd);





if(cmd=="PERSON_CENTER")
{

forward(150);

}



else if(cmd=="PERSON_LEFT")
{

left();

}



else if(cmd=="PERSON_RIGHT")
{

right();

}



else if(cmd=="PERSON_NEAR")
{

stopMotor();

}



else if(cmd=="PERSON_FAR")
{

forward(230);

}



}



}

Nhưng lưu ý quan trọng

Bản trên là khung robot hoàn chỉnh, phần còn thiếu là:

AI nhận diện người trên ESP32-CAM

Có 2 hướng:

Hướng dễ:

ESP32-CAM chạy:

  • Face detection
  • nhận diện khuôn mặt

Hướng tốt hơn:

ESP32-CAM gửi ảnh qua WiFi:

  • điện thoại xử lý AI
  • gửi lệnh lại

Với phần cứng bạn đang có, tôi khuyên làm theo lộ trình:

  1. ✅ ESP32-CAM gửi lệnh giả lập (code trên)
  2. ✅ ESP32 điều khiển motor
  3. ➜ Thay phần giả lập bằng face detection
  4. ➜ Hoàn thiện Follow Me thật

Như vậy bạn sẽ không bị mắc lỗi cùng lúc ở camera + motor + AI.

About the author

lbtmicr06

Leave a Comment