Lập trình Bluetooth cho robot
6 phút đọc25/04/2024Nguyễn Hoàng Anh

Kết nối và điều khiển robot qua Bluetooth với điện thoại Android. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
Lập trình Bluetooth cho robot
Module HC-05 — đặc điểm
- Bluetooth 2.0 Classic (không phải BLE)
- Giao tiếp UART (Serial)
- Điện áp: 3.3V logic, module có thể cấp 5V
- Tốc độ mặc định: 9600 baud
- Chế độ: AT Command (cấu hình) và Data (truyền dữ liệu)
Kết nối HC-05 với Arduino Uno
| HC-05 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| TX | Pin 10 (SoftwareSerial RX) |
| RX | Pin 11 (qua điện trở 1kΩ, SoftwareSerial TX) |
Lưu ý: HC-05 RX chịu 3.3V. Cần voltage divider hoặc điện trở 1kΩ để hạ 5V Arduino xuống.
Cấu hình HC-05 với AT Command
Cắm EN hoặc KEY pin lên 5V, bật nguồn → module vào AT mode (LED nhấp chậm).
code
AT → OK
AT+NAME=RobotCar → đổi tên
AT+PSWD=1234 → đổi password
AT+BAUD=4 → 9600 baud (4=9600, 6=38400, 8=115200)
AT+ROLE=0 → Slave mode (điện thoại master)
AT+RESET → reset, áp dụng thay đổiCode Arduino nhận lệnh Bluetooth
cpp
#include <SoftwareSerial.h>
SoftwareSerial bt(10, 11); // RX, TX
// Motor pins
const int IN1=5, IN2=6, IN3=7, IN4=8, ENA=9, ENB=3;
void motorSetup() {
for (int p : {IN1,IN2,IN3,IN4,ENA,ENB}) pinMode(p, OUTPUT);
analogWrite(ENA, 200); analogWrite(ENB, 200);
}
void forward() { digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
void backward() { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }
void left() { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
void right() { digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); }
void stop() { for(int p:{IN1,IN2,IN3,IN4}) digitalWrite(p,LOW); }
void setup() {
Serial.begin(9600);
bt.begin(9600);
motorSetup();
Serial.println("Robot Bluetooth sẵn sàng!");
}
void loop() {
if (bt.available()) {
char cmd = bt.read();
Serial.printf("Lệnh: %c\n", cmd);
switch (cmd) {
case 'F': forward(); break;
case 'B': backward(); break;
case 'L': left(); break;
case 'R': right(); break;
case 'S': stop(); break;
default: break;
}
bt.printf("OK:%c\n", cmd);
}
}App điều khiển trên Android
- Serial Bluetooth Terminal (miễn phí, Google Play)
- Gõ lệnh thủ công: F, B, L, R, S
- Tạo nút bấm với macro
- MIT App Inventor (lập trình kéo thả)
- Tạo app với 4 nút điều khiển + slider tốc độ
- Export APK cài trực tiếp
- Bluetooth RC Controller (app có sẵn)
- Giao diện joystick, không cần code app
Pair HC-05 với Android
- Settings → Bluetooth → Scan
- Chọn "HC-05" (hoặc tên bạn đã cài)
- Nhập mã PIN: 1234 (mặc định)
- Mở app, chọn HC-05 từ danh sách paired devices
Gợi ý dùng bài viết trong lớp học
Câu hỏi khởi động
- Linh kiện/kỹ thuật trong bài giải quyết vấn đề gì trong robot thật?
- Nếu nối sai nguồn hoặc đọc sai tín hiệu, robot sẽ biểu hiện như thế nào?
- Có cách nào đo hoặc quan sát hiện tượng thay vì đoán lỗi không?
Hoạt động thực hành nhanh
- Giáo viên cho học viên xem linh kiện hoặc sơ đồ liên quan đến chủ đề Lập trình Bluetooth cho robot.
- Học viên dự đoán chân nguồn, chân tín hiệu và dữ liệu đầu ra.
- Chạy code mẫu ở cấu hình an toàn, sau đó thay đổi một tham số.
- Mỗi nhóm ghi nhận lỗi gặp phải và cách kiểm tra theo thứ tự nguồn, GND, tín hiệu, code.
Checklist kỹ thuật
- Luôn kiểm tra điện áp hoạt động trước khi nối với board điều khiển.
- In dữ liệu ra Serial Monitor khi làm việc với cảm biến hoặc thuật toán.
- Với motor/servo, cấp nguồn tải riêng và nối chung GND với board.
- Ghi lại thông số đã calibration để lần sau không phải chỉnh lại từ đầu.
Câu hỏi ôn tập
- Thông số nào quan trọng nhất khi chọn linh kiện này cho robot?
- Lỗi nào dễ xảy ra nhất trong lớp học và cách phát hiện nhanh nhất là gì?
- Có thể mở rộng kiến thức này thành dự án robot nào?
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.
Chia sẻ bài viết