# 小学生避障小车 **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 **应用场景**:教育机器人、智能小车、自动化演示