基于PIC16F877的红外测距系统
2025-06-13 09:36:47
晨欣小编
红外测距主要利用红外光的反射原理或三角测量原理实现距离检测:
主动式红外测距:红外发射器发出一束光,遇到障碍物后反射,红外接收器接收反射信号,并根据反射强度或角度计算距离。
典型模块:如Sharp GP2Y0A21YK0F红外测距模块,输出为模拟电压,电压与距离成非线性关系。
测距范围:一般为10cm~80cm;
精度适中,响应快;
抗干扰能力强,适合室内场景。
PIC16F877是Microchip公司推出的8位高性能RISC单片机,主要特性如下:
主频:20MHz;
I/O口:33个通用引脚;
A/D转换器:8通道10位ADC;
串口通信:支持USART;
存储容量:8K字节程序存储器、368字节RAM;
编程方式:支持ICSP。
具备多路A/D转换能力,适合读取红外模块模拟输出;
中断系统完善,利于控制实时响应;
功耗低,适用于电池供电设备。
css复制编辑[红外测距模块] → [PIC16F877 A/D输入] → [数据处理] → [LCD显示/串口输出]
部件
功能说明
PIC16F877 单片机
主控核心,负责采集、计算与显示
红外测距模块(如GP2Y0A21)
输出与目标距离相关的模拟电压
LCD1602 液晶显示屏
实时显示测得距离值
电源模块
提供5V稳压电源
串口模块(可选)
用于将测距数据上传至上位机
电阻、电容等基础元件
构成滤波、电平匹配等辅助电路
以GP2Y0A21YK0F为例:
输出电压范围:0.4V ~ 2.4V;
距离范围:10cm ~ 80cm;
电压与距离成反比(非线性关系);
响应时间:39ms(典型值)。
将红外模块输出端连接至PIC16F877的AN0通道;
启用ADC模块,设置基准电压为5V;
采样电压转换为数字值,精度为10位(0~1023);
利用查表或拟合函数将电压转换为距离。
复制编辑系统初始化 →红外模块采样 →ADC转换 →距离计算 →LCD显示或串口发送 →延时或中断等待 →循环执行
c复制编辑void ADC_Init(){ ADCON0 = 0x41; // 选择AN0,启动ADC ADCON1 = 0x80; // 设置结果右对齐}unsigned int ADC_Read(){ ADCON0 |= 0x04; // 启动转换 while(ADCON0 & 0x04); // 等待完成 return ((ADRESH << 8) + ADRESL);}
可用经验公式拟合,如:
c复制编辑float voltage = adc_value * 5.0 / 1023;float distance = 27.86 * pow(voltage, -1.15); // 实测拟合
或采用查表法提高精度。
c复制编辑lcd_set_cursor(1,1);lcd_print("Dist:");lcd_print_float(distance);lcd_print(" cm");
距离(cm)
模块输出(V)
ADC值
计算距离(cm)
10
2.4
490
10.2
20
1.6
327
19.7
40
0.8
163
39.1
70
0.5
102
69.8
6.2 优化建议
增加滑动平均滤波,降低跳变误差;
添加温度补偿机制(对于某些应用);
将数据上传至上位机进行可视化分析。
应用场景
实现方式
智能小车避障
每隔30ms测距一次,小于阈值即转向
安全距离警示
距离过近蜂鸣报警或LED提示
工业传送带计数
利用红外探测物体进入/离开判断计数
自动门控制
人体接近门时触发开门机制
基于PIC16F877的红外测距系统结构简单、成本低廉,但却拥有良好的扩展性与可靠性。通过合理选型、精准拟合与稳定算法,能够实现满足大多数入门级或中低速工业应用的测距功能。
未来可以通过引入数字滤波算法、红外测距阵列、**无线通信模块(如蓝牙/WiFi)**进一步提升系统智能化水平,向物联网感知层迈进。
SMCJ130A
CC1206MKX7R6BB226
RC-12L4R30FT
1206W3F500MT5E
SC0603F140RF2BNRH
RLM20FECR050
C1206X331K101T
AP131-20WG-7
1210W2J080LT5E
FTT0347R0DTP
海量现货云仓
闪电发货
原厂正品 品质保障
个性化采购方案
售前客服
售后客服
周一至周六:09:00-12:00
13:30-18:30
投诉电话:0755-82566015
扫一扫,加我微信
感谢您的关注,当前客服人员不在线,请填写一下您的信息,我们会尽快和您联系。