
简介面向电子信息、自动化与计算机相关专业毕业设计阶段的学生这份文档提供了一套完整的蓝牙智能遥控小车论文范本可用于选题立项、方案论证、硬件绘制与程序编写的参考借鉴。压缩包内仅含 1 个 doc 文件体积约 2.49MB为图文混排的论文正文包含中英文摘要、关键词、目录、方案比较与论证、智能车机械结构分析及原理图与 PCB 绘制说明等章节。硬件以 STC12C5A60S2 单片机为主控搭配 L293D 电机驱动并由蓝牙遥控、红外光电传感与超声波收发模块构成外围电路软件涵盖蓝牙指令解码、传感器数据处理、PWM 调速与电机控制逻辑。论文完整记录了蓝牙遥控、自动避障、自动循迹、自动测速与测距功能的调试结果目前已有 121 人学习浏览适合需要快速搭建论文框架、对照硬件方案与程序结构的中高年级本科生参考。1. 一块 STC12C5A60S2 加 L293D为什么能撑起四轮蓝牙小车实验室里最常见的小车是三轮结构前面一个万向轮后面两个驱动轮。玩法简单跑直线却总往一边偏。原因不复杂万向轮径向阻力极小左右两个电机的微小转速差都会被放大成方向偏移。本设计直接改成四轮驱动四个轮子全是驱动轮偏差方向离散同侧偏差不一致整车反而更容易走直。这套毕业设计的主控是 STC12C5A60S2驱动是 L293D外围挂蓝牙串口模块、红外光电对管、超声波收发模块靠 PWM 调速、红外循迹、超声波避障、光电码盘测速完成一整套闭环控制。它适合正在做单片机课设、毕业设计的人当模板拆解也适合已经写过 51 代码、想搞明白 H 桥和 PWM 寄存器怎么配合的工程师对着电路回看一遍。读完至少能自己搭出一辆能遥控、能循迹、能测速的小车而不是只跑通一个点灯程序。2. STC12C5A60S2 与 L293D 的硬件选型与电路设计选型不是拍脑袋定的每一块都可以用对比表说话。下面先看主控和驱动再看传感器和电源。2.1 STC12C5A60S2 相比经典 51 的硬件升级很多教程还在用 STC89C51理由是资料多、便宜。但这套设计里要跑 PWM、要采 A/D、要接多个传感器中断STC12C5A60S2 的优势就显出来了。类型STC12C5A60S2STC89C51 RC工作电压V5.5–3.55.5–3.4Flash 程序存储器60K4KRAM1280 字节512 字节定时器T0、T1、PCAT0、T1独立波特率发生器有无PCA16 位PWM8 位2 路无A/D8 路 10 位无I/O4440外部中断4 路4 路提示60K Flash 意味着循迹、避障、测速、蓝牙解码可以一起塞进去不必为省空间把功能砍掉。1280 字节 RAM 对多传感器缓冲区也够用。真正好用的是片上 2 路 PCA PWM 和 8 路 10 位 A/D。PWM 直接驱动电机调速A/D 留给光敏电阻或者温度传感器做扩展不用外挂 ADC0832 这种额外芯片PCB 面积和成本都省下来。CPU 里的位处理器是另一处方便的地方它本质是一个独立的 1 位微计算机有自己的 CPU、位寄存器、I/O 口和指令集位操作速度比普通 8051 快 8 到 12 倍。循迹判断、避障标志位这类逻辑用位操作写起来干净。2.2 L293D 的 H 桥结构与真值表电机驱动选 L293D16 脚封装内部是双极性管搭的两组 H 桥。输出电流 100mA峰值 2A最高工作电压 36V能驱动感性负载正反转都能控。H 桥名字来自电路形状像字母 H。四个三极管分两组控制它们的通断就能改变电流流过电机的方向转向随之改变。ENA、ENB 两个使能端固定为 1只通过 IN1 到 IN4 改变状态。IN1IN2IN3IN4右电机左电机1010正正1001正反0110反正0101反反0000停停前进时 IN1、IN2、IN3、IN4 为 1010T1、T4、T5、T8 导通左右电机同时正转。后退、原地左转、原地右转都能从表里直接读出。void Forward(unsigned char Speed_Right, unsigned char Speed_Left) { L293D_IN1 1; L293D_IN2 0; // 右电机正转 L293D_IN3 1; L293D_IN4 0; // 左电机正转 PWM_Set(255 - Speed_Right, 255 - Speed_Left); // 装比较初值 }参数说明Speed_Right、Speed_Left 是用户给定初值范围 0 到 255数值越大越快。这里用 255 减是因为 PCA 的 PWM 输出与比较值反相关具体方向取决于寄存器配置实机调试时把两个方向都试一遍确认。2.3 PCA PWM 调速的寄存器写法L293D 只负责换向调速靠 MCU 自带的 PWM 脉冲发生器。STC12C5A60S2 里有一个计数器 CL 和比较寄存器 CCAPnLCCAPnL 存 0 到 255 之间的一个数。CL 小于 CCAPnL 时 PWM 引脚输出低电平大于时输出高电平占空比随写入值变化。// PWM_Set装入左右两路的比较初值 void PWM_Set(unsigned char PWM0_DATA, unsigned char PWM1_DATA) { CCAP0L PWM0_DATA; // 右电机占空比 CCAP0H PWM0_DATA; CCAP1L PWM1_DATA; // 左电机占空比 CCAP1H PWM1_DATA; }逻辑说明只写 CCAP0L 会在周期结束时被硬件自动重载的 CCAP0H 覆盖所以高低字节都要写。PWM0 对应右电机PWM1 对应左电机两路独立直行时给相同值转向时给不同值。注意软件调速和硬件 PWM 是两回事。常见做法是把 PCA 模块配成 8 位 PWM 模式再用定时器中断做软件占空比调节两者混用容易互相抢定时器资源先确认自己的工作模式。2.4 电源电路与 PCB 走线要点电源分两路一路 5V 供单片机、液晶、传感器一路直接给电机供电。电机启动瞬间电流大会把 5V 拉下去所以两路必须分开走只在电源地汇合。常见做法是电机电源正极串一个二极管和电容滤波防止电机换向尖峰灌进单片机。PCB 上要留意三点电机驱动的大电流线尽量宽1mm 以上的间距晶振脚走线短旁边铺地蓝牙模块天线区域底部禁止铺铜否则通信距离会明显缩水。这些不是理论是焊好板子跑起来才发现的问题。3. 传感器布局、机械结构与避障测速环路硬件搭好之后能不能跑直、能不能避障一半取决于机械结构和传感器位置另一半才是代码。3.1 四轮驱动底板与电机支架底板用亚克力板材板上开了红外传感器安装槽、超声波安装孔、电机定位槽和走线孔其余槽孔预留给扩展。整车由车盘、轮子、电机、电机支架、测速码盘、托板组成。电机支架每块电机用两片支架板夹住靠左右两侧肩台与底板卡在一起材料同为 PMMA。表 3.1 的机械零件清单可以直接照着买零件数量电机支架2 片螺丝螺母M3若干M3 螺柱若干码盘4 片四轮驱动比三轮重、费电但稳定性提升明显。整车约 500g受力集中在中部做共振分析时以底板四角安装孔为固定点中心加 5N 力可以看出中间区域应力最集中。如果车体振动频率过快底板可能从中部断裂优化方向是缩短底板长度或者加厚板材。3.2 红外循迹的反射式检测与阈值判断循迹原理是红外光照射到路面后反射黑线白线反射系数不同接收管收到的反射光强弱不同。设计里采用反射式红外发射接收器直流供电结构简单抗环境光干扰能力尚可。传感器装在车体下方离地面很近外界光干扰很小。常见做法是每个探头单独配一个可调电位器先让小车停在白底上调到指示灯刚好灭再移到黑线上看是否亮这个临界点就是阈值。四路循迹通常用左右各两个探头中间不装靠逻辑判断走偏方向// 简化循迹逻辑L1/L2 左两路R1/R2 右两路1 表示检测到黑线 if (L1 0 L2 0 R1 0 R2 0) { Forward(200, 200); // 全白直行 } else if (L1 1 R1 0) { Turn_Left(150, 220); // 左偏左轮减速 } else if (R1 1 L1 0) { Turn_Right(220, 150); // 右偏右轮减速 } else { Stop(); // 全黑可能是急弯或终点 }参数说明200 是基础速度值转向时一侧降到 150、另一侧升到 220差值越大转向越快但差值太大容易冲出赛道。这个比例要靠实车试没有通用值。3.3 超声波测距与避障程序超声波适合车尾避障波瓣宽一个发射器就能覆盖较宽范围不受物体颜色影响。红外式探测安装在小车两侧覆盖前行方向的近距障碍。方案检测范围m环境要求检测精度开发难度成本超声波探测0.02–4.5高高难高红外式探测0.01–0.5低低易低两者合用是这套设计的取舍倒车靠超声波精度够侧前方靠红外便宜且响应快。超声波测距的基本流程是发一个 10μs 以上的触发脉冲启动定时器等回波引脚变低读定时器值算出距离。// 超声波测距返回单位 cm unsigned int Ultrasonic_Measure(void) { unsigned int time; Trig 1; Delay10us(); Trig 0; // 至少 10us 触发脉冲 while (Echo 0); // 等回波高电平 TH0 0; TL0 0; TR0 1; // 启动定时器 while (Echo 1); // 等回波结束 TR0 0; time TH0 * 256 TL0; return time * 17 / 1000; // 声速换算约 cm }逻辑说明回波高电平持续时间正比于距离除以 2 是往返路程。参数 17 来自声速约 340m/s 换算实测时按温度微调。避障判断里设一个阈值比如 30cm 以内就停车或后退转向阈值太小来不及反应太大让小车频繁停顿。3.4 光电对射式码盘测速测速选光电对射式在轮辐面板上均匀刻槽孔轮子两侧装红外发射接收对管过孔时接收管导通产生脉冲计数就得到速度。设计的码盘刻 20 格方槽车轮每转一周接收管收到 20 个脉冲直接送到单片机中断口计数。为实现可逆计数并列放两个槽型光电耦合器遮光盘先后经过产生两个脉冲根据两路信号先后顺序判断行驶方向。// 外部中断计数20 脉冲/圈 void INT0_ISR(void) interrupt 0 { pulse_count; // 每来一个脉冲加一 } // 定时 1 秒读取一次 speed pulse_count * 60 / 20; // 转/分 pulse_count 0;参数说明20 是每圈脉冲数60 把每秒脉冲换算成每分钟转速。测周时间越短实时性越好但计数少误差大1 秒是个折中。若换用不同槽数的码盘只需改这一个除数。4. 蓝牙模块配置与上位机实时监控链路无线这块方案比较里蓝牙、红外、WiFi、ISM 射频四种都能提供可靠通信但蓝牙在成本和开发难度之间平衡最好所以最终选它。4.1 短距离无线方案对比与蓝牙 AT 配置技术蓝牙红外WiFiISM 射频通信距离100m10m300m1000m通信速率10Mb/s16Mb/s11Mb/s500kb/s频率或波长2.4GHz0.75–24μm2.4GHz315/433/868/915MHz开发难易难易难易模块成本高很低较低低蓝牙短板是传输距离短、芯片价格高但家电遥控方向在推这些问题在逐步缓解。串口蓝牙模块用 AT 指令配置常见做法是先用 USB 转 TTL 接电脑用串口助手发指令改波特率和设备名AT # 测试连通返回 OK ATNAMESmartCar # 设置设备名 ATBAUD4 # 设置波特率4 通常对应 9600 ATROLE0 # 设为主机/从机0 为从机参数说明波特率必须和单片机串口一致否则收到的全是乱码。设备名用于手机端配对识别。改完断电重启才生效这一步很多人漏掉以为指令没起作用。注意模块供电要稳电压跌落会导致 AT 指令无响应。先单独给模块供电验证再接到小车主板上能少走一半弯路。4.2 单片机串口接收与蓝牙指令解码单片机端用串口中断接收上位机发来的指令帧。建议定一个简单协议比如起始字节加重任分类加校验避免误动作。void UART_ISR(void) interrupt 4 { unsigned char dat; if (RI) { RI 0; dat SBUF; if (dat 0xAA) { rx_state 1; rx_index 0; } else if (rx_state 1) { rx_buf[rx_index] dat; if (rx_index 3) { rx_state 0; Parse_Cmd(rx_buf); } } } }逻辑说明0xAA 是帧头收到后进入接收状态连收 3 字节后交给解析函数。解析函数里对照指令表执行前进、后退、左转、右转和调速。把协议做简单一点调试阶段能省很多排查时间。4.3 上位机实时数据显示方案显示方案在数码管、LCD1602、PC 上位机三者之间PC 显示开发最简单也最方便观察。小车行进中盯着 LCD 看并不现实所以主显示走 PC 串口软件同时保留 1602 液晶做扩展。方案开发难易成本观察方式数码管易很低繁琐LCD 显示易低繁琐PC 机显示较难高方便上位机每隔固定时间接收速度、里程、时间数据并刷新。数据格式建议一帧一行字段之间用逗号分隔方便串口软件直接抓取SPEED:120,RPM:150,DIST:23,TIME:45提示1602 单独用单刀双掷开关控制通断不用时直接断电省电这对电池驱动的小车很实际。5. 分段调试法让蓝牙小车一次跑通的排查顺序小车焊完、程序烧进去一次就全部跑通的情况很少。我一般按模块从外到内分段验证先把最容易出问题的位置锁死。5.1 按模块顺序验证功能调试顺序按供电、主控、驱动、传感器、无线来走每一步单独确认后再合并。上电先量 5V 和电机电源两路电压确认电机不转时单片机不被拉低。烧一个点亮 LED 的程序确认晶振、复位、下载电路都正常。单独给 L293D 的 IN 脚加电平看电机能否正反转先把换向搞对。接 PWM用不同占空比看转速是否连续变化避免占空比写反导致堵转。红外探头逐个贴地测阈值超声波对着墙测距离与卷尺比对。这套顺序的核心是每一层验证过再叠加下一层出问题时能立刻定位到刚加的那一层而不是整个系统一起怀疑。5.2 常见现象与对应排查点现象优先排查蓝牙连不上波特率是否与单片机一致模块供电是否稳电机不转使能端 ENA/ENB 是否为高IN 脚电平是否正确小车跑偏左右 PWM 初值是否对称码盘是否装反循迹抖动阈值没调准或者探头离地太高测距跳变回波引脚干扰定时器被其他中断抢占串口乱码波特率不匹配或晶振频率选错实测中跑偏是最常见的原因往往是两个电机的机械阻力不同哪怕 PWM 值一样转速也不一样。解决方式是在基础速度上给一侧加一个补偿偏移量这个偏移量靠试出来别指望算出来。蓝牙连不上则先查波特率模块默认波特率不一定和你代码里写的一致。5.3 从端口复用看 STC12C5A60S2 的扩展上限STC12C5A60S2 只有 44 个 I/O这套设计里红外四路、超声波两路、L293D 六路、串口两路、液晶若干路加起来已经吃掉大半。剩下的口要留给扩展。功能占用引脚备注L293D 控制6 路 I/OIN1–IN4 加 ENA/ENB红外循迹4 路 I/O四路探头超声波2 路 I/OTrig 与 Echo蓝牙串口RX/TX占用 P3.0、P3.1LCD16026–11 路可切 4 位模式省口口不够时的常见做法是用 74HC595 扩展或者把 LCD1602 切到 4 位数据模式。蓝牙模块固定占用 P3.0、P3.1所以外部中断 INT0、INT1 最好留给测速和避障触发别被其他功能抢走。最后补一个省事的技巧把每块功能的初始化都做成独立函数主函数里按开关宏选择启用哪部分。调蓝牙时就只开蓝牙和电机调循迹时就只开循迹和电机避免无关中断互相干扰。这样即使一版代码要同时跑五六个模块排查时也永远只面对一个变量。本文还有配套的精品资源点击获取