# 小学生避障小车
**Repository Path**: lpkfndn/studentCar
## Basic Information
- **Project Name**: 小学生避障小车
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-16
- **Last Updated**: 2026-05-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ESP32-C3FH4 自动避障智能小车项目
## 📋 项目概述
基于ESP32-C3FH4开发板的自动避障智能小车系统,采用MicroPython编程,实现超声波测距、智能避障、状态指示等功能。小车完全自主运行,上电即自动启动避障程序,无需电脑干预。
---
## 🔧 硬件设备清单
| 设备 | 型号/规格 | 数量 | 说明 |
|------|----------|------|------|
| **主控板** | ESP32-C3FH4(微雪开发板) | 1 | RISC-V架构,支持MicroPython |
| **电机驱动** | TB6612FNG双H桥模块(HW-048) | 1 | 高效低发热,支持4.5-13.5V输入,PWM调速,STBY内部接高电平 |
| **超声波传感器** | US-100 | 1 | UART通信模式,测距范围2cm-450cm |
| **RGB LED** | WS2812 | 1 | GPIO10控制,可编程颜色(板载LED) |
| **直流电机** | TT马达或类似 | 2 | 带减速箱,工作电压6-12V |
| **主电源** | 锂电池组(12V) | 1 | 给整个系统供电 |
| **稳压模块** | LM2596降压模块 | 1 | 将12V降压到5V,给ESP32和US-100供电 |
---
## 🔌 接线方式
### 1. ESP32-C3FH4 ↔ TB6612FNG
```
TB6612FNG STBY → 悬空不接(内部已接高电平)
ESP32 GPIO1 → TB6612FNG AIN1 (左电机方向控制1)
ESP32 GPIO2 → TB6612FNG AIN2 (左电机方向控制2)
ESP32 GPIO3 → TB6612FNG PWMA (左电机PWM调速)
ESP32 GPIO4 → TB6612FNG BIN1 (右电机方向控制1)
ESP32 GPIO5 → TB6612FNG BIN2 (右电机方向控制2)
ESP32 GPIO6 → TB6612FNG PWMB (右电机PWM调速)
ESP32 GND → TB6612FNG GND (⚠️ 必须共地!)
```
**TB6612FNG电源连接:**
```
VM → 12V电池正极(电机电源)
VCC → 5V或3.3V(逻辑电源,来自LM2596)
GND → 电池负极 + ESP32 GND(共地)
```
### 2. ESP32-C3FH4 ↔ US-100
```
ESP32 GPIO8 (TX) → US-100 RX (注意交叉连接)
ESP32 GPIO7 (RX) → US-100 TX (注意交叉连接)
ESP32 5V → US-100 VCC
ESP32 GND → US-100 GND
```
### 3. ESP32-C3FH4 ↔ WS2812 LED
```
WS2812 DATA → GPIO10(板载LED)
WS2812 VCC → 3.3V(内部供电)
WS2812 GND → GND
```
**说明:** 使用ESP32-C3FH4开发板自带的WS2812 RGB LED,连接到GPIO10
### 4. TB6612FNG ↔ 电机
```
TB6612FNG AO1 → 左电机线1
TB6612FNG AO2 → 左电机线2
TB6612FNG BO1 → 右电机线1
TB6612FNG BO2 → 右电机线2
```
### 5. 电源连接
**单电源双路供电方案:**
```
锂电池(12V)
├─→ TB6612FNG VM 和 GND(直接供电,驱动电机)
└─→ LM2596降压到5V
├─→ ESP32 VIN 和 GND
├─→ US-100 VCC 和 GND
─→ TB6612FNG VCC(逻辑电源)
️ 重要:ESP32 GND、TB6612FNG GND 和电池负极必须连接(共地)!
```
**说明:**
- 使用单个12V锂电池作为总电源
- LM2596将12V稳定降压到5V(实测4.95V)
- ESP32、US-100和TB6612FNG逻辑电源共用5V
- TB6612FNG直接使用12V驱动电机(VM引脚)
- **所有GND必须连接在一起**,确保控制信号正常
---
## ⚙️ 软件架构
### 核心功能模块
#### 1. boot.py - 上电自动启动脚本
- 初始化所有电机引脚为LOW,确保上电安全
- 设置WS2812 LED为红色(电源指示)
- 等待2秒后导入并运行main.py
- 实现完全自主运行,无需电脑干预
#### 2. main.py - 主控制程序
- 创建ObstacleAvoidanceCar实例
- 测试传感器连接
- 启动自动避障循环(永久运行)
- 纯英文代码,避免中文字符编码问题
#### 3. motor.py - 电机控制模块
- 支持前进、后退、左转、右转、原地转向
- **TB6612FNG驱动**:短路制动模式(快速停止)
- **速度校准功能**:可调整左右轮速度补偿系数
- **引脚配置**:GPIO1-6控制双电机
#### 4. ultrasonic.py - 超声波传感器模块
- UART通信,波特率9600
- **GPIO8(TX)和GPIO7(RX)**
- 实时距离检测,返回厘米值
- 上电自动唤醒传感器
- 连接测试功能
#### 5. ws2812_led.py - RGB LED控制模块
- GRB颜色顺序(非RGB)
- 亮度可调(0-100%)
- **GPIO10控制(板载LED)**
- 状态指示:安全/警告/危险
---
## 🎯 避障逻辑(三区间控制 + 简化探测)
### 检测频率
- 每**50ms**检测一次距离(每秒20次)
- 快速响应障碍物变化
### 三档距离控制策略
| 距离范围 | LED亮度 | 电机速度 | 动作描述 |
|---------|---------|---------|----------|
| **< 40cm**
危险区 | 90%
(很亮) | - | **完整避障流程**:
1. 立即停止
2. 后退300ms(40%速度)
3. 左转80ms(约10-15度)
4. 停车600ms(等惯性消除)
5. 读取前方距离
6. 根据新距离决策 |
| **40-80cm**
注意区 | 40%
(中等) | 20% | **减速前进**:
谨慎接近障碍物 |
| **> 80cm**
安全区 | 10%
(很暗) | 40% | **正常前进**:
无障碍物区域 |
### 避障决策逻辑(简化版)
```
检测到障碍物 < 40cm
↓
停止
↓
后退300ms
↓
左转80ms(小角度扫描)
↓
停车600ms(等待惯性消除)
↓
读取前方距离
↓
应用三档逻辑判断
├─ < 40cm → 继续左转600ms(下次循环再测)
├─ 40-80cm → 前进20%速度
└─ > 80cm → 前进40%速度
↓
继续检测
```
**关键改进:**
- ❌ 不再测量左右两侧距离
- ✅ 只左转一次,读取前方距离
- ✅ 直接应用三档逻辑,更简洁高效
- ✅ 转向后停车600ms,确保读数准确
---
## 🚀 启动流程
```
上电
↓
boot.py 自动执行
↓
初始化所有电机引脚为LOW(安全保护)
↓
设置LED为红色(电源指示)
↓
等待5秒(硬件稳定 + 传感器初始化)
↓
导入 main.py
↓
创建 ObstacleAvoidanceCar 实例
↓
测试超声波传感器连接(最多5次重试)
↓
开始自动避障循环(永久运行)
```
---
## 🛠️ 高级功能
### 1. TB6612FNG短路制动
- 停止时两个输入引脚设为LOW,PWM设为最大值(100ms)
- 利用电机反电动势快速制动
- 比L298N的反向电压制动更高效、更节能
- 默认启用,可通过`stop(brake=False)`禁用
### 2. 速度校准
解决左右轮速度不一致导致的跑偏问题:
```python
# 如果右轮快,降低右轮速度
car = CarMotor(left_speed_ratio=1.0, right_speed_ratio=0.9)
# 如果左轮快,降低左轮速度
car = CarMotor(left_speed_ratio=0.9, right_speed_ratio=1.0)
```
**建议调整范围:**
- 0.85-0.95:轻微调整
- 0.80-1.00:中等调整
- 0.75-1.05:大幅调整
### 3. LED状态指示
- **10%亮度**:安全区(>80cm),节能模式
- **40%亮度**:注意区(40-80cm),警告提示
- **90%亮度**:危险区(<40cm),强烈警示
- **红色LED**:上电电源指示
---
## 📊 系统架构图
```mermaid
graph TB
subgraph 硬件层
A[ESP32-C3FH4主控板]
B[TB6612FNG电机驱动模块]
C[US-100超声波传感器]
D[WS2812 RGB LED]
E[左直流电机]
F[右直流电机]
G[锂电池 12V]
H[LM2596降压模块
12V→5V]
end
subgraph 软件层
I[boot.py
上电自动启动]
J[main.py
主控制程序]
K[motor.py
电机控制]
L[ultrasonic.py
传感器驱动]
M[ws2812_led.py
LED控制]
end
subgraph 避障逻辑
N{检测距离}
O[< 40cm
危险区]
P[40-80cm
注意区]
Q[> 80cm
安全区]
R[停止]
S[后退300ms]
T[左转80ms]
U[停车600ms]
V[读取前方距离]
W{再次判断}
X[< 40cm: 继续左转]
Y[40-80cm: 减速20%]
Z[> 80cm: 正常40%]
end
G -->|12V| B
G -->|12V| H
H -->|5V| A
H -->|5V| C
H -->|5V| B
B -->|驱动| E
B -->|驱动| F
A -->|GPIO1,2,3| B
A -->|GPIO4,5,6| B
A -->|GPIO9,10| C
A -->|GPIO7| D
B -.->|GND共地| A
I --> J
J --> K
J --> L
J --> M
J --> N
N -->|< 40cm| O
N -->|40-80cm| P
N -->|> 80cm| Q
O --> R
R --> S
S --> T
T --> U
U --> V
V --> W
W -->|< 40cm| X
W -->|40-80cm| Y
W -->|> 80cm| Z
X --> N
Y --> N
Z --> N
P --> Y
Y --> N
Q --> Z
Z --> N
style A fill:#e1f5ff
style B fill:#fff4e1
style C fill:#e8f5e9
style D fill:#fce4ec
style I fill:#f3e5f5
style J fill:#f3e5f5
style O fill:#ffcdd2
style P fill:#fff9c4
style Q fill:#c8e6c9
```
---
## 🔍 故障排查指南
| 问题 | 可能原因 | 解决方法 |
|------|---------|----------|
| LED不亮 | GPIO10未连接或代码错误 | 检查ws2812_led.py,确认GRB顺序 |
| 电机不转 | TB6612FNG无电源或GND未共地 | 检查VM供电(12V),确认GND连接 |
| 传感器无数据 | TX/RX接反 | 交换GPIO7和GPIO8的连接 |
| 小车跑偏 | 左右轮速度不一致 | 调整left/right_speed_ratio参数 |
| 避障不灵敏 | 阈值设置不当 | 修改safe_distance和slow_distance参数 |
| 供电异常 | LM2596输出电压不稳或电流不足 | 检查LM2596输出(应为4.95V),换用≥2A输出电源,或加电容稳压 |
| 程序不自动运行 | boot.py损坏 | 重新上传boot.py |
| 中文字符乱码 | 文件编码问题 | 使用main.py(已移除中文注释) |
| 上电后绿灯闪烁 | 传感器初始化失败 | 检查US-100接线,增加boot.py稳定时间 |
---
## 📝 代码文件结构
```
source/
├── boot.py # 上电自动启动脚本(5秒稳定延迟)
├── main.py # 主程序(简化避障逻辑,40cm/80cm阈值)
├── motor.py # 电机控制模块(TB6612FNG驱动,GPIO1-6)
├── ultrasonic.py # 超声波传感器模块(GPIO8/7,带唤醒序列)
├── ws2812_led.py # LED控制模块(GRB顺序,GPIO10板载)
└── README.md # 项目说明文档(本文件)
```
---
## ✨ 项目特点
✅ **完全自主运行**:上电即自动启动,无需电脑
✅ **智能避障**:三档距离控制(40cm/80cm),渐进式减速
✅ **快速响应**:50ms检测频率,每秒20次采样
✅ **主动刹车**:减少惯性滑行,精准停止
✅ **速度校准**:可调整左右轮平衡,直线行驶
✅ **状态指示**:LED亮度反映距离远近
✅ **纯英文代码**:避免中文字符编码问题
✅ **模块化设计**:各功能独立,易于维护和扩展
✅ **简化探测**:单次左转+前方测距,更高效可靠
---
## 🎓 技术要点
### 1. MicroPython环境
- 固件版本:v1.28.0
- Python版本:3.4.0
- 开发工具:Thonny IDE 或 VS Code + Pymakr插件
### 2. 电平匹配
- ESP32-C3FH4工作电压:3.3V
- TB6612FNG控制信号:兼容3.3V(VCC接3.3V)
- US-100通信:UART 9600波特率
### 3. PWM调速
- 频率:1000Hz
- 占空比范围:0-1023(10位PWM)
- 速度映射:0-100% → 0-1023
### 4. UART通信
- US-100使用UART模式(跳线帽短接)
- 波特率:9600
- 数据格式:2字节,高位在前
- **引脚**:GPIO8(TX), GPIO7(RX)
---
## 📌 注意事项
1. **GND共地**:ESP32、TB6612FNG、US-100的GND必须全部连接,否则控制信号无效
2. **TX/RX交叉**:US-100的TX接ESP32的RX(GPIO7),RX接ESP32的TX(GPIO8)
3. **TB6612FNG VCC**:必须接3.3V(不是5V),以匹配ESP32的3.3V GPIO电平
4. **电源方案**:使用单个12V锂电池,通过LM2596降压到5V给ESP32、US-100和TB6612FNG逻辑电源供电
5. **LM2596调整**:确保LM2596输出稳定在5V(实测4.95V),如不稳需加滤波电容
6. **电机接线**:如果一个轮子反转,交换该电机的两根线
7. **编码问题**:上传代码时使用UTF-8编码,main.py已移除中文注释
8. **电源选择**:选择输出≥2A的优质12V电源,避免电压不稳
9. **TB6612FNG STBY**:HW-048模块STBY内部已接高电平,无需外部连接
10. **传感器初始化**:US-100上电后需要发送唤醒命令,代码已自动处理
---
## 🔄 版本历史
- **v1.0** - 初始版本,基础避障功能(L298N驱动)
- **v1.1** - 优化避障阈值(30cm/80cm)
- **v1.2** - 添加主动刹车功能
- **v1.3** - 添加速度校准功能
- **v1.4** - 优化检测频率至50ms
- **v1.5** - 完善文档和故障排查指南
- **v1.6** - 调整避障阈值为100cm/120cm,解决刹车距离不足问题
- **v2.0** - **重大更新**:更换为TB6612FNG驱动,优化引脚配置
- 电机驱动:L298N → TB6612FNG HW-048
- 制动方式:反向电压制动 → 短路制动
- 超声波引脚:GPIO2/3 → GPIO9/10
- LED引脚:GPIO10 → GPIO7
- 移除main_en.py,统一使用main.py
- **v2.1** - **当前版本**:进一步优化配置和逻辑
- 超声波引脚:GPIO9/10 → **GPIO8/7**
- LED引脚:GPIO7 → **GPIO10**(板载LED)
- 避障阈值:**100cm/120cm → 40cm/80cm**
- 避障逻辑:**左右探测 → 单次左转+前方测距**
- 转向时间:300ms → **80ms**(减小转向角度)
- 停车时间:100ms → **600ms**(等待惯性消除)
- 启动稳定时间:2秒 → **5秒**
- 传感器验证:增加5次重试机制
- TB6612FNG VCC:**5V → 3.3V**(电平匹配)
---
## ⚠️ 目前的问题和不足
### 1. 避障距离阈值优化历程
**问题演进:**
- v1.0:设置为30cm触发避障,但实际测试中发现刹车距离不足
- v1.6:调整为100cm/120cm,有足够反应时间但避障过于频繁
- v2.1:最终确定为**40cm/80cm**,平衡安全性和流畅性
**当前配置(v2.1):**
- < 40cm:触发完整避障流程
- 40-80cm:减速至20%前进
- > 80cm:正常40%速度前进
**效果评估:**
- ✅ 有足够的反应时间和刹车距离
- ✅ 避免碰撞障碍物
- ✅ 避障频率适中,行驶路径更流畅
- 💡 可根据实际场景微调safe_distance参数(建议范围:30-50cm)
### 2. TB6612FNG vs L298N 对比
**更换原因:**
- L298N发热严重,效率低(约60-70%)
- TB6612FNG效率高(约90%),发热小
- TB6612FNG体积更小,适合紧凑型设计
- TB6612FNG支持更低电压(4.5V起)
**性能提升:**
- ✅ 功耗降低约30%
- ✅ 温度降低约20°C
- ✅ 响应速度更快
- ✅ 短路制动比反向电压制动更高效
---
## 📞 技术支持
如遇问题,请检查:
1. 所有接线是否正确
2. 电源是否正常供电
3. GND是否共地
4. 传感器是否能正常读取距离
5. 电机是否能正常运转
---
**项目完成日期**:2026年5月
**开发平台**:ESP32-C3FH4 + MicroPython
**应用场景**:教育机器人、智能小车、自动化演示