基于51单片机的智能小车:避障、寻迹、温度采集,手动控制,LCD1602显示
基于51单片机智能小车(避障t寻迹+控制 )0.030 1小车超声波避障功能: 2.小车红外寻迹寻黑线功能; 3.小车可以DS18B20温度采集;。 4.可以手动控制小车左转、右转; 5.小车LCD1602显示距离、温度等信息。 仿真 程序 报gao 原理图
玩单片机的人总绕不开智能小车这个经典项目。今天咱们来拆解一个基于51单片机的全能型智能车——能躲障碍、会走黑线、测温度,还能手动遥控,LCD屏实时显示数据。废话不多说,直接上干货!
一、超声波避障的实战技巧
核心代码段:
void HC_SR04_Trigger(){
TRIG = 1;
delay_10us(20);
TRIG = 0;
}
uint getDistance(){
while(!ECHO);
TH1=TL1=0;
TR1=1;
while(ECHO);
TR1=0;
return (TH1<<8 | TL1)*0.017; //换算厘米
}
这段代码藏着两个骚操作:1.用定时器T1直接捕获高电平时间,比外部中断更省资源;2.0.017这个魔术数字其实是声速(340m/s)/2/10000换算来的。实测中发现超声波偶尔会抽风返回超大值,所以后面要加个if(distance>200) distance=0的过滤。
二、红外寻迹的黑科技
寻迹模块的安装高度直接决定成败!建议离地1.5cm左右,用热熔胶固定时记得做防反光处理。核心检测逻辑:
if((LeftIR==0) && (RightIR==0)){ //双黑线
goStraight();
} else if(LeftIR==0){ //左偏
turnLeft(30);
} else if(RightIR==0){ //右偏
turnRight(30);
}
重点是这个30ms的转向微调时长,需要根据电机转速实测调整。有个坑爹的情况:当小车完全跑偏时会出现左右传感器都检测不到黑线,这时候要加入"记忆"功能,继续按上次转向方向执行。
三、DS18B20的温度玄学

基于51单片机智能小车(避障t寻迹+控制 )0.030 1小车超声波避障功能: 2.小车红外寻迹寻黑线功能; 3.小车可以DS18B20温度采集;。 4.可以手动控制小车左转、右转; 5.小车LCD1602显示距离、温度等信息。 仿真 程序 报gao 原理图
单总线协议最让人头秃的就是时序。实测代码:
float read_temp(){
uint temp;
init_ds18b20();
write_byte(0xCC); //跳过ROM
write_byte(0x44); //启动转换
delay_ms(800); //等待转换
init_ds18b20();
write_byte(0xCC);
write_byte(0xBE); //读寄存器
temp = read_byte();
temp |= (read_byte()<<8);
return temp*0.0625;
}
注意这个800ms的延迟绝对不能省!曾经为了提速改成500ms,结果温度值随机跳变,排查三天才发现是转换时间不足。建议在初始化时多做几次复位检测,避免传感器接触不良导致程序卡死。
四、手动控制的骚操作
遥控部分用了最朴素的按键方案:
if(KEY_LEFT){
P1 = 0x0A; //左轮停,右轮转
} else if(KEY_RIGHT){
P1 = 0x05; //右轮停,左轮转
}
P1口直接驱动L298N电机驱动板,这里有个隐藏技巧——在转弯指令后加个5ms的小延迟,能有效防止电机堵转。进阶玩法可以接入蓝牙模块,用手机APP控制,只需要把按键检测改成串口指令解析即可。
五、LCD1602的显示优化
显示刷新率太高会闪屏,太低又不够实时。我的解决方案:
void refreshDisplay(){
static uint8_t count=0;
if(++count>=10){ //每10次循环刷新
sprintf(buffer,"D:%03dcm T:%02.1f",distance,temp);
lcd_show(0,0,buffer);
count=0;
}
}
用静态变量做刷新计数器,实测每500ms更新一次显示效果最佳。注意sprintf的浮点运算会显著增加代码体积,如果内存紧张可以改用整数运算分开显示温度整数和小数部分。
坑王总结:
- 电机电源和单片机必须分开供电,否则PWM会导致复位
- 超声波模块间隔时间不能小于60ms
- 寻迹传感器最好用可调电阻版本,适应不同地面反光
- 所有延时代码都要用定时器实现,否则影响其他功能
完整工程里藏着个彩蛋:当温度超过30度时,小车会自动加速10%来"散热"。虽然没什么实际作用,但答辩时这个设计让老师眼前一亮。需要源码和Proteus仿真文件的老铁,评论区喊666后私信(手动狗头)。

更多推荐
所有评论(0)