蓝牙遥控避障机器人:打造智能远程操控小车
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano R3 | 1 | 主控板 |
| L298N 双 H 桥电机驱动板 | 1 | 驱动两路直流电机 |
| HC-SR04 超声波测距模块 | 1 | 前向避障检测 |
| HC-05 蓝牙模块 | 1 | 手机遥控通信 |
| RGB 共阳 LED | 1 | 状态指示 |
| 双向逻辑电平转换模块 | 1 | HC-05 3.3V 与 Nano 5V 兼容 |
| 330Ω 电阻 | 1 | LED 限流 |
| 面包板 | 1 | 原型搭建 |
| 面包板电源模块 5V/3.3V | 1 | 为模块供电 |
| 12V 直流减速电机 | 2 | 左右驱动轮 |
| 公母杜邦线 | 若干 | 连接各模块 |
软件与在线服务
- Arduino IDE
- Arduino BlueControl(Android 应用,Play Store 可下载)
项目简介
作者在新冠封控期间重拾电子制作爱好,历经 12 年间歇后完成首个 Arduino 项目:一款通过手机蓝牙遥控、具备超声波避障功能的双轮差速驱动小车。项目展示了从电路搭建、代码编写到实测调试的完整过程。
系统架构
- 手机端:Arduino BlueControl App 发送控制指令(前进/后退/左转/右转/停止)
- 蓝牙通信:HC-05 模块通过串口接收指令,经电平转换模块接入 Arduino Nano 软串口(D12/D13)
- 主控逻辑:Nano 解析指令,通过 L298N 控制两路电机 PWM 调速
- 避障逻辑:前进模式下,HC-SR04 持续测距,检测到 <20cm 障碍物自动停车并报警
- 状态指示:RGB LED 显示运行状态(绿=前进、红=停止/避障、蓝=后退等)
关键电路细节
- HC-05 电平转换:模块工作电压 3.3V,Nano 为 5V 逻辑,必须使用双向电平转换模块连接 TX/RX,否则易损坏 HC-05
- 电机驱动:L298N 的 ENA/ENB 引脚接 Nano PWM 引脚(D9/D10)实现调速,IN1-IN4 控制正反转
- 供电:面包板电源模块提供 5V/3.3V 双路输出,分别给 Nano/模块与 HC-05 供电;电机由外接 12V 电池通过 L298N 驱动
完整代码
/* 蓝牙遥控避障机器人
* 作者: Alok Talukdar
* 日期: 2020.05.09
*/
#include <SoftwareSerial.h>
// L298N 引脚定义
#define IN1 5 // 右电机方向
#define IN2 4
#define IN3 3 // 左电机方向
#define IN4 2
#define ENA 9 // 右电机 PWM
#define ENB 10 // 左电机 PWM
// RGB LED(共阳,低电平点亮)
#define RED_LED 8
#define GREEN_LED A0
#define BLUE_LED 11
// HC-SR04
const int TRIG_PIN = 6;
const int ECHO_PIN = 7;
// HC-05 蓝牙(软串口)
SoftwareSerial btSerial(12, 13); // RX, TX
String btData;
int btCmd = 0;
float duration, distance;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
btSerial.begin(9600);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
// 共阳 LED 全灭(高电平)
analogWrite(RED_LED, 255);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BLUE_LED, HIGH);
// 电机初始停止
stopRobot();
}
void loop() {
// 读取蓝牙指令
while (btSerial.available()) {
btData = btSerial.readStringUntil('\n');
}
btCmd = btData.toInt();
switch (btCmd) {
case 1: forward(); setColor(0, 255, 0); checkDistance(); break; // 前进-绿
case 2: reverse(); setColor(255, 0, 0); break; // 后退-红
case 3: left(); break; // 左转
case 4: right(); break; // 右转
case 5: stopRobot(); setColor(255, 0, 255); break; // 停止-紫
default: setColor(255, 255, 255); break; // 白-待机
}
}
// 电机控制函数(带渐变加速)
void forward() {
for (int i = 0; i <= 100; i++) {
analogWrite(ENA, i); analogWrite(ENB, i);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
delay(5);
}
}
void reverse() {
for (int i = 0; i <= 100; i++) {
analogWrite(ENA, i); analogWrite(ENB, i);
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
delay(5);
}
}
void left() {
analogWrite(ENA, 127); analogWrite(ENB, 0);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void right() {
analogWrite(ENA, 0); analogWrite(ENB, 127);
digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void stopRobot() {
analogWrite(ENA, 0); analogWrite(ENB, 0);
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}
// 超声波测距 + 避障停车
void checkDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration * 0.0343) / 2; // cm
if (distance < 20) {
stopRobot();
setColor(255, 0, 255); // 紫色报警
delay(1000);
}
delay(100);
}
// RGB LED 控制(共阳:0=亮, 255=灭)
void setColor(int r, int g, int b) {
analogWrite(RED_LED, 255 - r);
analogWrite(GREEN_LED, 255 - g);
analogWrite(BLUE_LED, 255 - b);
}
应用拓展
该平台可扩展为:家庭巡逻机器人、工厂物流 AGV 原型、室内导航实验平台等。只需在代码中加入路径规划、SLAM 或更多传感器即可。
原理图
制造工艺
- 基于树莓派的视觉避障移动机器人
- 蓝牙控制树莓派机器人:语音反馈功能构建指南
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 树莓派手势控制机器人:告别按键,挥手即达
- 树莓派WiFi机器人:手机App远程控制实战
- 在树莓派 2 上用 Windows 10 IoT Core 构建语音控制机器人
- 用 Python 构建 Wi-Fi 控制的树莓派机器人:分步指南
- ROObockey:精准辅助的遥控街头曲棍球机器人
- Arduino 强化学习避障小车:Q-Learning 让机器人自主学会“右转”
- Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
- 以太网远程控制机械臂 — 基于 Arduino 101 与 WIZ750SR
- MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体