M-Design设计竞赛-基于ESP32-C3实现智能巡线小车
该项目使用了ESP32C3,实现了智能巡线小车的设计,它的主要功能为:巡线。
标签
嵌入式系统
ADC
开发板
laozheng
更新2025-04-01
重庆电力高等专科学校
24

M-Design创意设计竞赛项目报告

项目名称:基于ESP32C3的智能巡线小车设计


1. 项目介绍和创意介绍

项目介绍

本项目是参加2025茂泽电子M-Design创意设计竞赛方向一边缘智能、智能设备。本项目设计并实现了一款基于ESP32C3微控制器的智能巡线小车。小车通过五路灰度传感器检测地面黑线,从而完成巡线的任务。电源管理模块采用LM2596和AMS1117-adj,电机驱动模块选用TB6612,内置MOS管防反接电路和快恢复保险丝,确保电路安全。此外,通过ADC采集电池电压,实现了电量监测与提示功能。项目使用米斯奇(Mixly)进行图形化编程,并结合自制的3D建模小车结构,完成了硬件与软件的集成。

创意介绍

本项目的创意点主要体现在以下几个方面:

  1. 多传感器融合:采用五路灰度传感器,提高了巡线的精度和稳定性。
  2. 智能化电源管理:通过ADC实时监测电池电压,并结合提示灯提醒用户及时充电,提升了小车的实用性。
  3. 电路保护设计:内置MOS管防反接电路和快恢复保险丝,有效防止电源反接和过流损坏电路。
  4. 图形化编程:使用米斯奇进行开发,降低了编程门槛,适合初学者快速上手。

2. 简短的使用到的硬件介绍

主要硬件清单

  1. ESP32C3微控制器:主控芯片,负责传感器数据采集、电机控制和电池电压监测。
  2. 五路灰度传感器:用于检测地面黑线,输出模拟信号。
  3. LM2596 DCDC模块:将7.5V锂电池电压降压至5V,为电机驱动模块供电。
  4. AMS1117-adj稳压模块:将5V电压降压至3.3V,为ESP32C3和其他低功耗器件供电。
  5. TB6612电机驱动模块:驱动TTL马达,实现小车的运动控制。
  6. MOS管防反接电路:防止电源反接损坏电路。
  7. 快恢复保险丝:防止电流过大损坏电路。
  8. 7.5V (两节)18650锂电池:为整个系统供电。
  9. LED灯:用于电池电量低时提醒用户。

3. 设计思路介绍

项目设计思路

  1. 电源管理:锂电池通过LM2596降压至5V,为电机驱动模块供电;AMS1117-adj进一步降压至3.3V,为ESP32C3和其他低功耗器件供电。
  2. 传感器数据采集:五路灰度传感器检测地面黑线,输出模拟信号,ESP32C3通过ADC采集传感器数据。
  3. 电机控制:ESP32C3根据传感器数据生成控制信号,通过TB6612驱动TTL马达,实现小车的巡线功能。
  4. 电池电压监测:ESP32C3通过ADC采集电池电压,控制提示灯的亮灭,提醒用户及时充电。
  5. 电路保护:MOS管防反接电路和快恢复保险丝确保电路安全。

4. 原理图和PCB介绍

原理图

微信图片_20250315143632.png


图一.5路灰度传感器设计原理图

微信图片_20250315141930.png

图二.主控板设计原理图

微信图片_20250315143001.png

图三.TB661模块原理图

PCB图

微信图片_20250315143955.png

图四.5路灰度传感器设计PCB图

屏幕截图 2025-03-19 170231.png

图五.主控板设计PCB图微信图片_20250315142906.png

图三.TB661模块PCB图


5. 流程框图和建模介绍

软件逻辑框

d280a3d1dca75b028231859d4ab4360.png

电气连接框图

7588b90cfe7cd9adb44af673b0ba718.jpg

关键代码

以下是使用米斯奇生成的部分关键代码:

#include <Arduino.h>
#include <analogWrite.h>

void setup(){
pinMode(4, INPUT);
pinMode(19, OUTPUT);
pinMode(12, OUTPUT);
pinMode(18, OUTPUT);
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
}

void loop(){
if (analogRead(4) >= 3100) {
digitalWrite(19,HIGH);
digitalWrite(12,LOW);
digitalWrite(18,LOW);

} else if (analogRead(4) <= 3100 && analogRead(4) >= 2600) {
digitalWrite(18,HIGH);
digitalWrite(19,LOW);
digitalWrite(12,LOW);
} else {
digitalWrite(12,HIGH);
digitalWrite(19,LOW);
digitalWrite(18,LOW);

}

//前进

digitalWrite(18,HIGH);
if (analogRead(0) >= 1000 && (analogRead(1) >= 1000 && (analogRead(2) <= 1000 && (analogRead(3) >= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 200);
analogWrite(6, 200);

} else if (analogRead(0) >= 1000 && (analogRead(1) <= 1000 && (analogRead(2) <= 1000 && (analogRead(3) >= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 100);
analogWrite(6, 150);
delay(50);
} else if (analogRead(0) >= 1000 && (analogRead(1) <= 1000 && (analogRead(2) >= 1000 && (analogRead(3) >= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 100);
analogWrite(6, 200);
delay(100);
} else if (analogRead(0) <= 1000 && (analogRead(1) >= 1000 && (analogRead(2) >= 100 && (analogRead(3) >= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 100);
analogWrite(6, 250);
delay(100);
} else if (analogRead(0) >= 1000 && (analogRead(1) >= 1000 && (analogRead(2) >= 1000 && (analogRead(3) <= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 200);
analogWrite(6, 100);
delay(100);
} else if (analogRead(0) >= 1000 && (analogRead(1) >= 1000 && (analogRead(2) <= 1000 && (analogRead(3) <= 1000 && analogRead(4) >= 1000)))) {
analogWrite(8, 150);
analogWrite(6, 100);
delay(50);
} else if (analogRead(0) >= 1000 && (analogRead(1) >= 1000 && (analogRead(2) >= 1000 && (analogRead(3) >= 1000 && analogRead(4) <= 1000)))) {
analogWrite(8, 250);
analogWrite(6, 100);
delay(100);
} else if (analogRead(0) >= 1000 && (analogRead(1) >= 1000 && (analogRead(2) <= 1000 && (analogRead(3) <= 1000 && analogRead(4) <= 1000)))) {
analogWrite(8, 250);
analogWrite(6, 0);
delay(500);
} else if (analogRead(0) <= 1000 && (analogRead(1) <= 1000 && (analogRead(2) <= 1000 && (analogRead(3) >= 1000 && analogRead(4) <= 1000)))) {
analogWrite(8, 0);
analogWrite(6, 250);
delay(500);
} else {
analogWrite(8, 0);
analogWrite(6, 0);

}
delay(10);

}


6. 功能展示图及说明

功能展示

image.png

image.png

image.png

  1. 巡线功能:小车能够稳定跟随黑线行驶,适应不同曲率的路径。
  2. 电池电压监测:当电池电压低于设定阈值时,提示灯亮起,提醒用户充电。
  3. 电路保护:电源反接或过流时,电路自动断开,保护硬件安全

建模展示

image.png

image.png


7. 设计中遇到的难题和解决方法

难题1:巡线精度不足

问题描述:初期使用三路灰度传感器时,小车在弯道处容易偏离黑线。
解决方法:增加传感器数量至五路,优化阈值参数,提高巡线精度。

难题2:电池电压监测不准确

问题描述:ADC采集的电池电压波动较大,导致提示灯频繁闪烁。
解决方法:增加软件滤波算法,平滑电压数据,提高监测准确性。


8. 对本次竞赛的心得体会

心得体会

通过本次竞赛,我深刻体会到硬件设计与软件开发的紧密结合的重要性。在项目中,我不仅学习了ESP32C3的使用方法,还掌握了传感器数据采集、电机控制、电源管理等技术。同时,米斯奇的图形化编程工具让我快速实现了功能开发,降低了编程门槛。

意见与建议

  1. 增加硬件资源:建议竞赛提供更多种类的传感器和模块,以便参赛者实现更复杂的功能。
  2. 优化评审标准:建议评审时不仅关注功能实现,还注重项目的创新性和实用性。

总结

本项目通过硬件与软件的结合,成功实现了一款智能巡线小车,具有较强的实用性和创新性。未来,可以进一步优化控制算法,增加更多功能,如避障、远程控制等,提升小车的智能化水平。

附件下载
PCB,代码,框图和建模.zip
团队介绍
1. 郑鸿洲 (组长) - 电子信息工程技术 负责模块: 代码编写、硬件电路设计、采购和清点元器件 个人优势: 拥有扎实的电子电路基础,熟悉嵌入式系统开发,具备良好的团队领导能力。 个人宣言: 用代码和电路,让小车跑出智能的轨迹! 2. 杨飞(队员)- 电子信息工程技术 负责模块: 焊接及组装、测试电路、文档撰写以及建模 个人优势: 擅长机械设计和3D建模,熟悉各种传感器原理和应用,动手能力强。 个人宣言: 用精密的机械结构,为小车打造灵活的身躯!
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号