简易智能小车案例分享:从零搭建与编程实践
·
一、项目概述
智能小车是学习嵌入式系统、传感器技术和自动控制的经典入门项目。本项目将分享一个基于 Arduino 或 ESP32 的简易智能小车搭建案例,涵盖硬件选型、电路连接、核心代码编写以及基础功能实现,适合初学者动手实践。
二、硬件清单与准备
以下是搭建一辆基础避障/巡线智能小车所需的核心硬件:
- 主控板:Arduino Uno 或 ESP32 开发板(推荐 ESP32,集成 Wi-Fi/蓝牙)。
- 电机驱动模块:L298N 或 TB6612FNG 双路电机驱动模块。
- 直流减速电机:两个(带车轮),工作电压 3-6V。
- 小车底盘:带万向轮的亚克力或金属底盘套件。
- 电源:18650 锂电池两节及电池盒(输出 7.4V)。
- 传感器(根据功能选择):
- 避障功能:HC-SR04 超声波模块 或 红外避障传感器。
- 巡线功能:TCRT5000 红外巡线模块(通常需要 3-5 个)。
- 杜邦线、螺丝刀等工具。
三、电路连接示意图
以使用 L298N 驱动两个直流电机、HC-SR04 超声波模块为例,核心连接如下:
Arduino/ESP32 引脚分配:
- 电机驱动 L298N:
IN1 -> D5
IN2 -> D6
IN3 -> D9
IN4 -> D10
ENA -> D3 (PWM 控制左侧电机速度)
ENB -> D11 (PWM 控制右侧电机速度)
- 超声波 HC-SR04:
Trig -> D7
Echo -> D8
- 电源:
L298N 的 12V 输入接电池正极(7.4V)
GND 共地连接
注意:实际接线前请务必查阅所用模块的数据手册,确保电压匹配,避免烧毁元件。
四、核心代码实现(避障功能)
以下 Arduino 代码实现了基本的超声波避障逻辑:当前方障碍物距离小于 20cm 时,小车自动右转避开。
// 引脚定义
const int trigPin = 7;
const int echoPin = 8;
const int IN1 = 5;
const int IN2 = 6;
const int IN3 = 9;
const int IN4 = 10;
const int ENA = 3;
const int ENB = 11;
// 超声波测距函数
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2; // 声速 340m/s,单位 cm
return distance;
}
// 电机控制函数
void forward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150); // 设置速度
analogWrite(ENB, 150);
}
void turnRight() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 150);
analogWrite(ENB, 150);
delay(300); // 右转持续时间
}
void stopCar() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
Serial.begin(9600);
}
void loop() {
long dist = getDistance();
Serial.print("Distance: ");
Serial.println(dist);
if (dist > 20) {
forward(); // 前方无障碍,直行
} else {
stopCar();
delay(100);
turnRight(); // 检测到障碍,右转
stopCar();
delay(100);
}
delay(100); // 循环间隔
}
五、功能扩展与调试建议
- 巡线功能:增加 TCRT5000 模块,通过读取模拟值判断黑线,使用 PID 算法调整电机差速实现精准巡线。
- 蓝牙/Wi-Fi 遥控:利用 ESP32 的无线功能,通过手机 App 或网页控制小车运动。
- 调试技巧:
- 先单独测试每个模块(如电机正反转、超声波测距)是否正常工作。
- 使用串口监视器打印传感器数据,辅助判断逻辑。
- 遇到电机不转时,检查电源电压是否足够,驱动模块使能引脚是否接好。
六、总结
通过这个简易智能小车项目,你可以掌握嵌入式系统开发的基本流程:硬件搭建、传感器数据采集、电机控制和简单决策逻辑。它不仅是学习编程和电子的有趣载体,也为后续学习更复杂的机器人技术(如 SLAM、视觉识别)打下了坚实基础。建议在成功实现基础功能后,尝试增加更多传感器或探索更优的避障算法。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)