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:
- ✅ ESP32-CAM gửi lệnh giả lập (code trên)
- ✅ ESP32 điều khiển motor
- ➜ Thay phần giả lập bằng face detection
- ➜ 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.
