
基于PIC16F877的红外测距系统
2025-06-13 09:36:47
晨欣小编
一、红外测距系统概述
1.1 红外测距的基本原理
红外测距主要利用红外光的反射原理或三角测量原理实现距离检测:
主动式红外测距:红外发射器发出一束光,遇到障碍物后反射,红外接收器接收反射信号,并根据反射强度或角度计算距离。
典型模块:如Sharp GP2Y0A21YK0F红外测距模块,输出为模拟电压,电压与距离成非线性关系。
1.2 系统特点
测距范围:一般为10cm~80cm;
精度适中,响应快;
抗干扰能力强,适合室内场景。
二、PIC16F877单片机简介
2.1 芯片概览
PIC16F877是Microchip公司推出的8位高性能RISC单片机,主要特性如下:
主频:20MHz;
I/O口:33个通用引脚;
A/D转换器:8通道10位ADC;
串口通信:支持USART;
存储容量:8K字节程序存储器、368字节RAM;
编程方式:支持ICSP。
2.2 优势分析
具备多路A/D转换能力,适合读取红外模块模拟输出;
中断系统完善,利于控制实时响应;
功耗低,适用于电池供电设备。
三、系统总体结构设计
3.1 系统构成框图
css复制编辑[红外测距模块] → [PIC16F877 A/D输入] → [数据处理] → [LCD显示/串口输出]
3.2 硬件组成
部件
功能说明
PIC16F877 单片机 | 主控核心,负责采集、计算与显示 |
红外测距模块(如GP2Y0A21) | 输出与目标距离相关的模拟电压 |
LCD1602 液晶显示屏 | 实时显示测得距离值 |
电源模块 | 提供5V稳压电源 |
串口模块(可选) | 用于将测距数据上传至上位机 |
电阻、电容等基础元件 | 构成滤波、电平匹配等辅助电路 |
四、红外模块与单片机接口设计
4.1 红外模块输出特性
以GP2Y0A21YK0F为例:
输出电压范围:0.4V ~ 2.4V;
距离范围:10cm ~ 80cm;
电压与距离成反比(非线性关系);
响应时间:39ms(典型值)。
4.2 A/D通道连接
将红外模块输出端连接至PIC16F877的AN0通道;
启用ADC模块,设置基准电压为5V;
采样电压转换为数字值,精度为10位(0~1023);
利用查表或拟合函数将电压转换为距离。
五、软件设计与控制流程
5.1 主程序流程图
复制编辑系统初始化 →红外模块采样 →ADC转换 →距离计算 →LCD显示或串口发送 →延时或中断等待 →循环执行
5.2 关键模块详解
(1)ADC初始化与采样
c复制编辑void ADC_Init(){ ADCON0 = 0x41; // 选择AN0,启动ADC ADCON1 = 0x80; // 设置结果右对齐}unsigned int ADC_Read(){ ADCON0 |= 0x04; // 启动转换 while(ADCON0 & 0x04); // 等待完成 return ((ADRESH << 8) + ADRESL);}
(2)电压到距离转换(拟合公式)
可用经验公式拟合,如:
c复制编辑float voltage = adc_value * 5.0 / 1023;float distance = 27.86 * pow(voltage, -1.15); // 实测拟合
或采用查表法提高精度。
(3)LCD 显示
c复制编辑lcd_set_cursor(1,1);lcd_print("Dist:");lcd_print_float(distance);lcd_print(" cm");
六、系统性能测试与优化
6.1 测试参数
距离(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)**进一步提升系统智能化水平,向物联网感知层迈进。