Dự án robot xe di động tự hành hai bánh, sử dụng kiến trúc điều khiển vi sai (Differential Drive) và được cấp nguồn kết hợp từ pin Li-Po có hỗ trợ sạc bằng năng lượng mặt trời. Chức năng chính của robot là tự động di chuyển và tránh chướng ngại vật bằng cách sử dụng cảm biến siêu âm.
Robot tự động di chuyển thẳng và đưa ra quyết định rẽ ngẫu nhiên (trái hoặc phải) khi phát hiện vật cản.
Sử dụng cảm biến siêu âm SRFO5/HC-SR04 để đo khoảng cách và thực hiện hành vi dừng, lùi, và rẽ khi khoảng cách nhỏ hơn ngưỡng an toàn (NGUONG_CAN).
Cung cấp năng lượng bằng pin Li-Po (2S) với khả năng sạc từ tấm pin mặt trời (cần bộ điều khiển sạc riêng biệt).
Sử dụng điều chế độ rộng xung (PWM) để kiểm soát tốc độ tiến, lùi, và tốc độ khi rẽ.
| Thành phần | Vai trò | Kết nối với Arduino |
|---|---|---|
| Vi điều khiển | Arduino Uno/Nano (hoặc tương đương) | - |
| Driver Động cơ | TB6612FNG (hoặc L298N) | STBY (D8), PWMA (D3), PWMB (D9), AIN/BIN (D4, D5, D6, D7) |
| Động cơ | 2 Động cơ DC (loại 7.4V) | Kết nối với Driver A & B |
| Cảm biến Khoảng cách | Cảm biến Siêu âm (SRFO5/HC-SR04) | TRIG (D10), ECHO (D11) |
| Nguồn cấp | Pin Li-Po 2S (7.4V danh định) | Nguồn cấp chính cho mạch và động cơ |
| Nạp Nguồn | Tấm pin mặt trời & Mạch sạc | Cung cấp nguồn sạc bổ sung |
| Arduino Uno/Nano | TB6612FNG |
|---|---|
| Digital Pin 3 | PWMA (Driver TB6612FNG) |
| Digital Pin 4 | AIN1 (Driver TB6612FNG) |
| Digital Pin 5 | AIN2 (Driver TB6612FNG) |
| Digital Pin 6 | BIN1 (Driver TB6612FNG) |
| Digital Pin 7 | BIN2 (Driver TB6612FNG) |
| Digital Pin 8 | STBY (Driver TB6612FNG) |
| Digital Pin 9 | PWMB (Driver TB6612FNG) |
| Digital Pin 10 | TRIG (Cảm biến siêu âm) |
| Digital Pin 11 | ECHO (Cảm biến siêu âm) |
| TB6612FNG | Động cơ |
|---|---|
| AO1, AO2 | Động cơ A (Bánh trái) |
| BO1, BO2 | Động cơ B (Bánh phải) |
| VCC, VM | Pin Li-Po 2S (7.4V) |
- Chức năng: Dừng cả hai động cơ
- Cách hoạt động: Đặt tín hiệu PWM = 0 cho cả hai động cơ
- Chức năng: Cả hai động cơ tiến với tốc độ
TOC_DO_CHAY - Cách hoạt động: Đặt chân điều hướng về trạng thái tiến, gửi PWM =
TOC_DO_CHAY
- Chức năng: Cả hai động cơ lùi với tốc độ
TOC_DO_LUI - Cách hoạt động: Đặt chân điều hướng về trạng thái lùi, gửi PWM =
TOC_DO_LUI
- Chức năng: Thực hiện quay tại chỗ bằng cách cho hai bánh quay ngược chiều nhau
- Cách hoạt động: Bao gồm độ trễ
delay(300)và lệnh dừng sau khi rẽ - Chi tiết:
reTrai(): Động cơ trái lùi, động cơ phải tiếnrePhai(): Động cơ trái tiến, động cơ phải lùi
File main.h chứa tất cả các hằng số định nghĩa cho chân I/O và các ngưỡng:
```cpp // Định nghĩa các chân điều khiển động cơ
- #define TOC_DO_CHAY 200
- #define TOC_DO_LUI 150
// Định nghĩa chân cảm biến #define NGUONG_CAN 20 // Khoảng cách an toàn (cm) ```
Luồng hoạt động của robot:
-
Đọc khoảng cách từ cảm biến siêu âm → Lưu vào biến
khoangCach -
Kiểm tra điều kiện: ``` if (khoangCach < NGUONG_CAN && khoangCach > 0) ```
-
Nếu có vật cản gần (< 20cm):
- Dừng lại → Chờ 500ms
- Lùi lại → Sử dụng
random(2)để chọn ngẫu nhiên:0→ GọireTrai()1→ GọirePhai()
-
Nếu an toàn (không có vật cản):
- Tiến thẳng → Gọi
tien()
- Tiến thẳng → Gọi
-
-
Thiết lập ngẫu nhiên: ```cpp randomSeed(analogRead(A0)) ``` Điều này đảm bảo robot có hành vi không lặp lại mỗi lần khởi động, sử dụng
setup()để cài đặt tính ngẫu nhiên từ nhiễu điện của chân analog A0.
- Nguồn điện: Pin Li-Po 2S (7.4V nominal, 8.4V full charge)
- Driver động cơ: TB6612FNG hỗ trợ tới 1.2A/channel
- Tốc độ PWM: 200 (tiến) / 150 (lùi) trên thang 0-255
- Khoảng cách cảnh báo: 20cm
- Thời gian phản ứng: 500ms (dừng) + thời gian rẽ
Dự án này được phát hành dưới giấy phép MIT. Bạn có thể tự do sử dụng, chỉnh sửa và phân phối.