Kiến trúc Sense Think Act
Bài 3 trong khóa Robot Thế hệ 5 — Robot AI đa giác quan và bộ não thông minh

G5 02 - Kiến trúc Sense Think Act
Linh kiện cần chuẩn bị
- 1 ESP32-S3 DevKit.
- 1 robot base 2WD đã kiểm tra motor trái/phải.
- 1 driver TB6612FNG.
- 1 cảm biến khoảng cách HC-SR04.
- 1 LED trạng thái nối GPIO2.
- 1 buzzer active 3.3V nối GPIO15.
- Pin motor, công tắc nguồn, dây jumper, GND chung.
- Điện trở chia áp cho ECHO nếu HC-SR04 xuất tín hiệu 5V.
- Máy tính cài Arduino IDE, cáp USB data, Serial Monitor 115200 baud.
- Vật cản mềm để test khoảng cách.
Code bài này dùng ESP32-S3, TB6612FNG, HC-SR04, LED và buzzer. Chưa dùng camera, microphone hoặc AI computer.
Bài này giúp bạn làm được gì?
Sense-Think-Act là vòng lặp cốt lõi của robot tự chủ:
Sense: đọc dữ liệu thật từ cảm biến.Think: chọn hành động dựa trên dữ liệu.Act: chạy motor hoặc dừng robot.Review: dừng giữa các bước và ghi log kết quả.
Kết quả cuối bài:
- Robot đọc khoảng cách bằng HC-SR04.
- Nếu phía trước trống, robot tiến một nhịp ngắn.
- Nếu vật cản gần hơn 24 cm, robot quay tránh.
- Nếu cảm biến lỗi, robot giữ yên.
- Serial Monitor có log
STA,SENSE,STA,THINK,STA,ACT,STA,REVIEW.
Sơ đồ khối
HC-SR04 -> Sense -> distanceCm
distanceCm -> Think -> MOVE_FORWARD / TURN_AWAY / HOLD_SENSOR_ERROR
action -> Act -> TB6612FNG -> motor
result -> Review -> dừng giữa các nhịp và ghi log
Robot AI không cần phức tạp ngay từ đầu. Điều quan trọng là mọi quyết định đều có dữ liệu và lý do.
Pin map
| Chức năng | ESP32-S3 | Thiết bị | Ghi chú |
|---|---|---|---|
| LED trạng thái | GPIO2 | LED | Sáng khi robot đang act |
| Buzzer | GPIO15 | Buzzer active | Dự phòng cảnh báo |
| HC-SR04 TRIG | GPIO5 | HC-SR04 | Output |
| HC-SR04 ECHO | GPIO18 | HC-SR04 | Chia áp nếu ECHO là 5V |
| TB6612 STBY | GPIO33 | Driver motor | HIGH để bật driver |
| Motor trái PWM/IN1/IN2 | GPIO25/GPIO26/GPIO27 | TB6612 A | Kiểm chiều quay |
| Motor phải PWM/IN1/IN2 | GPIO14/GPIO12/GPIO13 | TB6612 B | GND chung |
Code mẫu hoàn chỉnh
Mở sketch:
code/g5-02-kien-truc-sense-think-act/g5-02-kien-truc-sense-think-act.ino
Ba hàm chính:
void sense() {
distanceCm = readDistanceCm();
}
void think() {
if (distanceCm > 0 && distanceCm <= STOP_CM) planAction = "TURN_AWAY";
else if (distanceCm < 0) planAction = "HOLD_SENSOR_ERROR";
else planAction = "MOVE_FORWARD";
}
void act() {
if (planAction == "MOVE_FORWARD") drive(105, 105);
else if (planAction == "TURN_AWAY") drive(90, -90);
else drive(0, 0);
}
Bạn có thể đọc code như một câu: "Nếu cảm biến nói vật cản gần, robot nghĩ nên quay tránh, rồi motor thực hiện quay".
Thực hành từng bước
Bước 1: Kê robot và upload code
Đặt robot lên giá kê, bật USB, chưa bật nguồn motor. Upload code và xem log:
G5-02 ready: Sense-Think-Act with real distance sensor
STA,SENSE,distanceCm=56.2
STA,THINK,action=MOVE_FORWARD,reason=distance_gate
STA,ACT,action=MOVE_FORWARD
STA,REVIEW,action=MOVE_FORWARD,result=stop_between_steps
Nếu khoảng cách hợp lý, bật nguồn motor và đặt robot xuống sân trống.
Bước 2: Test đường trống
Không đặt vật cản trước robot. Robot phải tiến từng nhịp ngắn rồi dừng giữa các nhịp. Dừng giữa các nhịp giúp bạn quan sát an toàn.
Ghi vào bảng:
| Lần | distanceCm | action | Robot làm gì? |
|---|---|---|---|
| 1 | |||
| 2 |
Bước 3: Test vật cản gần
Đưa vật mềm cách robot 15-20 cm. Log đúng:
STA,SENSE,distanceCm=18.4
STA,THINK,action=TURN_AWAY,reason=distance_gate
STA,ACT,action=TURN_AWAY
Robot quay tránh thay vì lao về phía vật cản.
Bước 4: Test lỗi cảm biến
Rút dây ECHO hoặc che cảm biến quá xa để tạo timeout. Log đúng:
STA,SENSE,distanceCm=-1.0
STA,THINK,action=HOLD_SENSOR_ERROR,reason=distance_gate
STA,ACT,action=HOLD_SENSOR_ERROR
Khi dữ liệu không đáng tin, robot giữ yên. Đây là quyết định AI an toàn.
Bảng kiểm thử robot thật
| Test | Điều kiện | Log cần có | Kết quả |
|---|---|---|---|
| 1 | Đường trống > 40 cm | MOVE_FORWARD | |
| 2 | Vật cản 15-20 cm | TURN_AWAY | |
| 3 | ECHO lỗi/timeout | HOLD_SENSOR_ERROR | |
| 4 | Robot đặt trên sân | Dừng giữa các nhịp | |
| 5 | Tắt nguồn motor | Log vẫn chạy, motor không quay |
Giải thích code theo khối
readDistanceCm()đo khoảng cách thật.sense()chỉ đọc dữ liệu, không quyết định.think()chỉ chọnplanAction, không điều khiển motor.act()là nơi duy nhất chạy motor.review()dừng robot giữa các bước để giảm rủi ro.
Tách như vậy giúp code dễ debug. Nếu robot chọn sai hành động, bạn xem log SENSE và THINK; nếu chọn đúng nhưng motor sai, bạn xem phần ACT và dây motor.
Lỗi thường gặp và cách sửa
| Lỗi | Nguyên nhân hay gặp | Cách sửa |
|---|---|---|
Robot luôn HOLD_SENSOR_ERROR | HC-SR04 sai dây hoặc echo quá áp | Kiểm TRIG/ECHO, dùng chia áp |
| Robot quay khi đường trống | Cảm biến nhìn xuống sàn hoặc bị dây che | Căn lại cảm biến |
| Robot tiến quá mạnh | Tốc độ 105 vẫn cao với robot nhẹ | Giảm speed xuống 80-90 |
| Robot không quay | Thiếu nguồn motor hoặc GND chung | Kiểm VM, GND, STBY |
Checklist debug nhanh
STA,SENSEin khoảng cách thay đổi khi đưa vật lại gần.STA,THINKđổi action theo khoảng cách.- Motor chỉ chạy trong bước
ACT. - Robot dừng giữa các nhịp.
- Lỗi cảm biến làm robot giữ yên.
Thử thách nhỏ
Tạo hai ngưỡng:
| Ngưỡng | Ý nghĩa |
|---|---|
| 18 cm | Robot chấp nhận đi gần hơn |
| 30 cm | Robot giữ khoảng cách an toàn hơn |
Chạy cùng một sân thử và ghi action thay đổi như thế nào.
Checklist hoàn thành
- Robot chạy được vòng Sense-Think-Act thật.
- Có bảng test ít nhất 5 tình huống.
- Có log giải thích vì sao robot tiến, quay hoặc giữ yên.
- Học viên chỉ ra được lỗi thuộc Sense, Think hay Act.
- Sẵn sàng sang G5 03 để thiết kế dữ liệu trạng thái rõ ràng hơn.
Bài tiếp theo
G5 03 sẽ gom dữ liệu cảm biến, nút, pin và mode thành một cấu trúc trạng thái. Đây là bước quan trọng để robot AI có "bộ nhớ ngắn" rõ ràng thay vì nhiều biến rời rạc khó kiểm soát.
Điều hướng bài học
Bài tiếp theo: G5 03 - Thiết kế dữ liệu trạng thái robot
Bài trước: G5 01 - Robot AI Agent là gì