
这次我们来看一个“大一小登做的电赛飞线小车”项目。对于刚接触电子设计竞赛电赛的大一同学来说如何从零开始搭建一个能跑起来的智能小车往往是第一个实战门槛。这个项目没有复杂的算法堆砌核心在于解决最实际的问题如何用最基础的元器件、最“接地气”的飞线连接方式快速实现一个具备基本功能如循迹、避障的智能小车原型。它不追求外观精美而是聚焦于功能实现和问题排查非常适合新手入门和赛前练手。如果你正为电赛的小车类题目无论是循迹、平衡还是滚球控制发愁不知道电机怎么选、代码怎么写、电路怎么连这篇文章会直接带你走一遍从硬件搭建到代码调试的全过程。我们会重点关注几个核心问题需要准备哪些硬件成本如何、飞线焊接的要点与坑点、如何给小车“注入灵魂”即程序逻辑以及最后如何系统性地测试与优化。读完你就能知道用有限的预算和精力能否做出一个能稳定完成基础任务的小车平台。1. 核心能力速览首先我们快速了解这个“飞线小车”项目的核心定位和能力边界。它不是一个商业级产品而是一个教学与原型验证平台。能力项说明项目类型电赛入门级智能小车原型核心功能基础移动、红外/超声波循迹与避障、无线遥控可选主控芯片常见为 STM32F103C8T6蓝桥杯/电赛常用或 Arduino UNO/Nano更易上手电机驱动L298N 或 TB6612FNG 驱动模块控制直流减速电机传感器红外对管循迹模块、HC-SR04超声波模块、灰度传感器等电源方案18650锂电池组两节串联或聚合物电池配合降压模块如LM2596通信方式基础版有线下载调试进阶版蓝牙HC-05/06或 WiFiESP8266开发环境Keil MDKSTM32 或 Arduino IDE代码语言C/C适合场景全国大学生电子设计竞赛电赛控制类题目练习、课程设计、毕业设计、机器人社团入门不适合场景高精度定位、复杂SLAM、高速运动控制、长期工业应用2. 适用场景与使用边界这个飞线小车项目主要面向以下几类人群电赛新手尤其是大一、大二学生通过亲手焊接、编程、调试快速建立对嵌入式系统、传感器、电机控制的整体认知为后续更复杂的赛题打下坚实基础。单片机与嵌入式初学者需要一个综合性的实战项目将散落的知识点GPIO、定时器、PWM、ADC、中断串联起来。课程设计或毕业设计作为“智能小车”课题的原型验证平台功能可根据需要扩展。它能解决的核心问题理论与实践脱节将书本上的电路图、代码变成能跑能动的实体。系统集成能力缺失学习如何让单片机、传感器、电机、电源协同工作。调试能力培养掌握使用万用表、逻辑分析仪或串口打印排查硬件连接和软件逻辑故障的方法。需要警惕的使用边界安全第一锂电池充电和使用必须规范防止短路、过充、过放。焊接时注意通风防止烫伤。原型限制“飞线”意味着连接可靠性不如PCB小车应避免高强度碰撞和长时间连续运行主要用于功能验证。性能上限受限于主控芯片算力和传感器精度不适合完成需要复杂图像处理如OpenCV或高动态性能的任务。版权与竞赛规范用于学习完全没问题。若用于竞赛需严格遵守当年电赛规则特别是关于自主设计、元器件清单等要求避免违规。3. 环境准备与前置条件在开始动手前请确保你已准备好以下软硬件环境。这份清单力求精简覆盖最小可行集合。硬件清单基础版主控核心STM32F103C8T6最小系统板推荐资源丰富 或 Arduino UNO R3上手极快。小车底盘四轮/两轮小车底盘套件包含电机、轮子、底盘支架。电机建议选择TT减速电机工作电压3-6V带编码器接口的更好。驱动与电源电机驱动模块L298N经典但发热大或 TB6612FNG效率高更推荐。电源两节18650锂电池及电池盒输出约7.4V或一块7.4V聚合物电池。电压转换LM2596降压模块将电池电压降至5V给主控和传感器供电。传感器按需选择循迹5路或3路红外循迹模块TCRT5000。避障HC-SR04超声波模块。遥控蓝牙模块HC-05/06或 2.4G无线模块NRF24L01。连接与工具杜邦线公对公、公对母、母对母若干用于“飞线”。电烙铁、焊锡丝、松香用于固定关键连接点。万用表必备用于测量电压、通断。螺丝刀套装组装底盘。软件清单开发环境STM32路线Keil MDK-ARMuVision5 STM32CubeMX用于初始化配置。Arduino路线Arduino IDE。驱动与工具串口驱动CH340/CP2102驱动确保电脑能识别开发板。下载器ST-Link V2用于STM32或 直接USB线用于Arduino。串口调试助手如XCOM、SSCOM用于查看程序打印信息。知识前置条件了解C语言基础语法。理解数字电路基础高/低电平、上拉/下拉电阻。对单片机GPIO输入输出有基本概念。4. 硬件搭建与“飞线”连接这是整个项目的实体基础。原则是先布局再连接先电源后信号边连接边测试。4.1 机械组装与电源布线组装底盘按照说明书将电机固定到底盘上安装轮子。注意电机线留出足够长度。布置核心板将STM32或Arduino主板用铜柱或扎带固定在小车中央。建立电源系统将电池正负极接入电机驱动模块的电源输入端子注意电压范围。从电机驱动模块的5V输出或单独从降压模块的5V输出引出一根电源总线正极和一根地线总线负极。可以使用面包板或直接焊接一个公共节点。将主控板、传感器模块的VCC和GND分别连接到这两条总线上。务必确保所有模块共地4.2 电机与驱动连接以TB6612FNG驱动两个电机为例VM接电池正极7.4VVCC接5V给芯片逻辑供电GND接电池负极。AIN1/AIN2、BIN1/BIN2分别接主控的4个GPIO口用于控制电机转向。PWMA/PWMB分别接主控的2个支持PWM输出的GPIO口用于控制电机速度。AO1/AO2、BO1/BO2分别接两个电机的两根线。STBY引脚接高电平5V使能驱动芯片。飞线技巧电机和驱动模块间的电流较大建议使用较粗的导线并且焊接连接点避免杜邦线接触不良导致电机抖动。4.3 传感器连接红外循迹模块通常有3个引脚VCC(5V)、GND、OUT(数字信号输出)。将多个模块的OUT引脚分别接到主控的不同GPIO口。超声波模块VCC(5V)、GND、Trig(控制端)、Echo(接收端)。Trig和Echo接主控GPIO。蓝牙模块VCC(5V)、GND、TXD接主控RXDRXD接主控TXD。飞线管理用不同颜色的杜邦线区分电源红色黑色-、信号线黄、绿、蓝等。用扎带或热熔胶固定线束避免运动中拉扯脱落。5. 软件开发与程序框架硬件连接好后就需要为小车编写“大脑”。我们以STM32HAL库为例给出一个清晰的程序框架。5.1 工程初始化使用STM32CubeMX配置系统时钟通常使用外部晶振主频72MHz。配置GPIO将连接电机驱动AIN/BIN的引脚设为GPIO_Output。将连接PWMPWMA/PWMB的引脚设为TIMx_CHy模式并生成PWM信号。将连接传感器OUT/Echo的引脚设为GPIO_Input。将连接Trig的引脚设为GPIO_Output。配置定时器TIM用于生成PWM和超声波测距计时。配置USART串口用于蓝牙通信和调试打印。生成工程代码IDE选择MDK-ARM。5.2 核心驱动函数封装在生成的工程中创建motor.c和sensor.c等文件封装底层操作。// motor.c #include motor.h void Motor_Init(void) { // 初始化控制引脚的GPIO和PWM定时器 } void Motor_SetSpeed(Motor_Type motor, int16_t speed) { // speed范围-100 ~ 100负数代表反转 uint16_t pwm_duty abs(speed) * (MAX_PWM / 100); __HAL_TIM_SET_COMPARE(htimx, motor.pwm_channel, pwm_duty); if(speed 0) { HAL_GPIO_WritePin(motor.in1_port, motor.in1_pin, GPIO_PIN_SET); HAL_GPIO_WritePin(motor.in2_port, motor.in2_pin, GPIO_PIN_RESET); } else if(speed 0) { // 反转逻辑 } else { // 刹车或停止逻辑 } }// sensor.c // 红外循迹传感器读取假设5路 uint8_t Track_Read(void) { uint8_t result 0; result | (HAL_GPIO_ReadPin(TRACK1_GPIO_Port, TRACK1_Pin) 0); result | (HAL_GPIO_ReadPin(TRACK2_GPIO_Port, TRACK2_Pin) 1); // ... 读取其他路 return result; // 每一位代表一个传感器的状态0白线/悬空1黑线 } // 超声波测距函数简略版需配合定时器中断 float Ultrasonic_GetDistance(void) { HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET); delay_us(10); // 触发信号 HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET); // 等待Echo引脚变高并开始计时 // 等待Echo引脚变低并停止计时 // 计算时间根据声速计算距离 return distance_cm; }5.3 主控制逻辑在main.c中实现一个简单的状态机或循环控制逻辑。// main.c 主循环示例 int main(void) { // HAL库初始化、外设初始化 System_Init(); Motor_Init(); Sensor_Init(); UART_Init(); printf(Smart Car Start!\r\n); uint8_t track_value 0; float distance_cm 0; while (1) { // 1. 读取传感器 track_value Track_Read(); distance_cm Ultrasonic_GetDistance(); // 2. 决策逻辑 // 避障优先 if(distance_cm 15.0 distance_cm 2.0) { // 前方有障碍物停车或转向 Motor_SetSpeed(MOTOR_LEFT, 0); Motor_SetSpeed(MOTOR_RIGHT, 0); // 可以加入转向避障逻辑 HAL_Delay(500); continue; } // 循迹逻辑简单PD控制示例 switch(track_value) { case 0b00100: // 只有中间传感器检测到黑线直行 Motor_SetSpeed(MOTOR_LEFT, 60); Motor_SetSpeed(MOTOR_RIGHT, 60); break; case 0b00010: // 偏右左转微调 Motor_SetSpeed(MOTOR_LEFT, 40); Motor_SetSpeed(MOTOR_RIGHT, 60); break; case 0b01000: // 偏左右转微调 Motor_SetSpeed(MOTOR_LEFT, 60); Motor_SetSpeed(MOTOR_RIGHT, 40); break; case 0b00000: // 全部丢失可能出界原地旋转寻找 Motor_SetSpeed(MOTOR_LEFT, 50); Motor_SetSpeed(MOTOR_RIGHT, -50); break; default: // 其他传感器组合可自定义处理 break; } HAL_Delay(10); // 控制周期约10ms } }6. 系统调试与功能验证这是将“死”的硬件和代码变成“活”的小车的关键步骤。务必分模块、分步骤进行。6.1 电源与基础IO测试上电前用万用表蜂鸣档检查所有电源连接点与地之间是否短路。上电后测量各模块VCC与GND之间电压是否为预期值5V或3.3V。编写一个简单的LED闪烁程序下载到主控确认程序能正常烧录和运行。编写一个控制单个GPIO口高低电平变化的程序用万用表测量该引脚电压是否随之变化验证GPIO控制正常。6.2 电机驱动测试断开电机连接先不接电机测试驱动逻辑。编写测试程序让驱动模块的AIN1/AIN2按固定顺序输出高低电平用万用表测量电机输出端AO1/AO2之间的电压是否正负变化验证转向逻辑。PWM测试编写程序让PWMA输出不同占空比的PWM用示波器或逻辑分析仪观察波形或接一个LED观察亮度变化。连接电机测试接上电机编写前进、后退、左转、右转、停止的简单测试程序观察电机反应。注意将小车悬空避免突然启动跑飞。6.3 传感器测试红外循迹模块将模块OUT引脚接至主控GPIO并开启该GPIO的内部上拉电阻。编写程序循环读取该引脚电平并通过串口打印。用白纸和黑胶带测试观察模块对准不同颜色时打印值是否变化通常黑线为低电平/0白底为高电平/1。超声波模块编写测距函数并通过串口打印距离值。用手或书本在模块前方移动观察打印的距离值变化是否连续、合理。6.4 集成联调与算法调参开环调试将所有硬件连接好编写一个固定的运动序列如前进2秒-右转1秒-停止观察小车整体执行是否顺畅。闭环调试循迹将小车放在自制跑道上电工胶带贴出轨迹根据track_value调整电机速度差即P和D参数。口诀误差大转大弯误差变化快提前刹微分。多试几次找到一组稳定的参数。避障测试超声波模块的有效检测距离和角度设定合理的刹车距离。可以加入旋转扫描寻找自由空间的逻辑。无线控制测试如果包含用手机APP或电脑串口助手通过蓝牙发送字符如‘F’‘B’‘L’‘R’‘S’测试小车是否能正确响应。7. 常见问题与排查方法飞线小车在调试过程中必然会遇到各种问题下表整理了典型故障及排查思路。问题现象可能原因排查方式解决方案上电无反应电源指示灯不亮1. 电池没电2. 电源开关未开3. 电源线虚焊或断开4. 短路导致保护或烧毁1. 万用表测电池电压2. 检查开关通断3. 逐段测量通路4. 闻气味摸芯片是否发烫充电、打开开关、重新焊接、排查短路点、更换损坏模块程序无法下载1. 下载器驱动未安装2. 接线错误SWDIO/SWCLK3. 芯片进入休眠/复位引脚问题4. Boot模式设置错误1. 检查设备管理器2. 核对原理图3. 尝试按复位键4. 检查BOOT0/BOOT1引脚电平安装驱动、纠正接线、手动复位、设置BOOT0为0从主Flash启动电机不转或单向转动1. 电机驱动模块未使能STBY2. 控制逻辑电平错误3. PWM信号未输出或频率不对4. 电机本身损坏1. 测量STBY引脚电压2. 用逻辑分析仪抓取控制引脚波形3. 示波器看PWM波形4. 直接给电机加电测试将STBY接高电平、检查代码逻辑、配置正确的定时器、更换电机红外循迹始终为0或始终为11. 模块供电不正常2. 传感器距离地面太远/太近3. 环境光干扰强烈4. GPIO输入模式配置错误需上拉1. 测模块VCC电压2. 调整模块高度通常离地1cm左右3. 用手遮挡传感器测试4. 检查代码初始化确保5V供电、调整高度、避免强光、配置GPIO为上拉输入模式超声波测距值固定不变或异常大1. Trig或Echo线接反2. 测量超时超出量程3. 定时器配置错误计时不准4. 模块前方有吸声材料1. 核对引脚定义2. 在有效距离2cm-400cm内测试3. 检查定时器时钟和分频4. 对空气测试交换Trig/Echo接线、限制最大测距时间、校准定时器、更换测试物体小车跑偏或画龙1. 左右电机机械差异或负载不同2. 电池电压下降导致PWM驱动能力变化3. 循迹PD参数不合适4. 传感器安装不对称1. 空载时分别测试左右轮速2. 监测电池电压3. 减小P增益增加D增益4. 重新校准传感器安装位置软件上对左右轮PWM进行微调补偿、充满电、重新调整PID参数、对称安装传感器蓝牙无法连接或通信乱码1. 蓝牙模块未进入AT模式或配对模式2. TX/RX交叉接线错误3. 主从模式设置错误4. 波特率不匹配1. 按说明书操作进入AT模式2. 检查TX接RXRX接TX3. 确认模块角色主/从4. 检查双方串口波特率设置正确进入AT模式设置参数、纠正接线、设置一致的波特率如9600或1152008. 优化建议与进阶方向当你的小车能基本循迹和避障后可以考虑以下优化和进阶这会让你的项目更扎实也为应对更复杂的电赛题目做准备。电源管理优化增加电压检测电路实时监控电池电量低压报警。为数字部分主控、传感器和电机驱动部分使用独立的降压模块或磁珠隔离减少电机启停对控制电路的干扰。控制算法升级PID调速为每个电机增加编码器实现闭环速度控制使小车速度更稳定不受电池电量和负载影响。状态机设计将小车的“循迹”、“避障”、“遥控”、“停止”等行为设计成明确的状态使程序逻辑更清晰易于扩展新功能。传感器融合结合陀螺仪MPU6050进行航向角估算实现更精确的转向控制。使用多个超声波或红外传感器实现多方向障碍物检测。无线通信与上位机利用蓝牙或WiFi将传感器数据速度、距离、轨迹状态实时发送到电脑或手机上位机用于调试和数据分析。开发简单的上位机界面可以远程监控小车状态并发送控制指令。机械结构加固将验证成功的飞线电路用洞洞板或自制PCB进行焊接提高可靠性。设计并3D打印传感器支架、电池仓等结构件让小车更整洁、坚固。这个“大一小登的电赛飞线小车”项目其核心价值不在于做出了多么炫酷的产品而在于完整地走通了“需求分析-硬件选型-电路连接-软件编程-系统调试-问题解决”的全流程。它让你真切地体会到一个看似简单的“让小车沿着黑线走”的任务背后涉及了多少个环节的紧密配合。过程中遇到的每一个故障排查解决的每一步都是比书本知识更宝贵的经验。建议你将这个项目作为起点吃透每一个模块然后尝试去挑战电赛真题中更复杂的控制要求比如坡道行驶、定点停车、搬运物料等那时你会发现基础打牢了扩展功能只是水到渠成。