单片机应用分享红外测距 #编程
每天分享一个单片机应用。大家好,今天跟大家分享红外车距的实验。
·用的传感器是gp2d12,用了tlc2543,这个12位的ad转换器,这样就可以做到精确的测量。
·用封门器来报警,调整这个值的时候,检测的距离在液晶上显示。
·当去地狱值的时候报警,用会边缘来实现这个实验。
51单片机超声波测距
之前所发的文章都是基于Proteus仿真的一程序,由于Proteus内部元器件的限制,很多现实中使用的元器件在仿真软件中没有办法实现,尤其是一些国产好(pian)用(yi)的元件,所以在这里再发一波基于51单片机开发板的实际操作,实际上手比软件仿真存在更多的乐趣。
超声波测距模块
今天先来分享一个超声波测距。超声波测距的主要原理是利用超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。上图就是比较常用的超声波测距模块,一个是超声波发送端;另外一个是超声波接收端。模块共有4个接线端子,分别是VCC、Trig、Echo、GND。
模块测距工作原理
超声波测距模块在使用时通过单片机的IO口TRIG触发测距,给至少10us的高电平信号,这样模块会自动发送8个40khz的方波,同时自动检测是否有信号返回。当有信号返回,模块会通过IO口Echo输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2;
本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。
开发板使用普中的51单片机A2开发板。还带个小盒子。
开发板原理图
开发板实物图
本来想自己写程序,但是打开资料后发现里面有写好的测试例程。
/*
实验说明:
根据自己使用的LCD1602是否带有转接板,如果带有转接板的即为4位,需在LCD.H头文件中
将宏#define LCD1602_4PINS打开,我们这里使用的LCD1602是8位,所以默认将该宏注释。
实验接线:
LCD1602液晶模块-->单片机管脚
参考LCD1602液晶显示实验接线(开发攻略内在对应的实验章节内实验现象有接线说明)
超声波模块-->单片机管脚
TRIG-->P21
ECHO-->P20
实验现象:
LCD1602上显示超声波检测的距离,单位mm
*/
#include<reg51.h>
#include<intrins.h>
#include"lcd.h"
sbit Trig = P2^1;
sbit Echo = P2^0;
unsigned char PuZh[]=" Pechin Science ";
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
static unsigned char DisNum = 0; //显示用指针
unsigned int time=0;
unsigned long S=0;
bit flag =0;
unsigned char disbuff[4] ={ 0,0,0,0,};
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=700)||flag==1) //超出测量范围显示“-”
{
flag=0;
DisplayOneChar(0, 1, ASCII[11]);
DisplayOneChar(1, 1, ASCII[10]);//显示点
DisplayOneChar(2, 1, ASCII[11]);
DisplayOneChar(3, 1, ASCII[11]);
DisplayOneChar(4, 1, ASCII[12]);//显示M
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
DisplayOneChar(0, 1, ASCII[disbuff[0]]);
DisplayOneChar(1, 1, ASCII[10]);//显示点
DisplayOneChar(2, 1, ASCII[disbuff[1]]);
DisplayOneChar(3, 1, ASCII[disbuff[2]]);
DisplayOneChar(4, 1, ASCII[12]);//显示M
}
}
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
void StartModule() //启动模块
{
Trig=1; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void main(void)
{
TMOD=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
LcdInit();
LcdShowStr(0,0,PuZh);
while(1)
{
StartModule();
while(!Echo);//当RX为零时等待
TR0=1; //开启计数
while(Echo);//当RX为1计数并等待
TR0=0;//关闭计数
Conut();//计算
delayms(80);
}
}
程序设定单片机的定时器0工作在模式1(16位计数模式)。在进行超声波测距时,首先调用StartModule函数发送一个起始脉冲,控制模块发送超声波信号。然后程序循环读取接收引脚的状态,一但接收引脚Echo为1,程序启动定时器开始进行计数,直到Echo为0时结束计数,关闭定时器,然后根据定时器的计数值计算所测的距离。定时器的计数周期为1微秒;程序中定时器的计数值为声波发出到返回的时间,所以要将最终计算距离除2就可以得到实际的距离。
贴个测试视频,后面把蜂鸣器和超声波测距结合到一起,实现不同的距离不同报警提示音。
视频加载中...
相关问答
GP2Y0A21YK0F 红外测距 传感器怎样用怎样接 51单片机 用51控制它?这个需要AD进行采集。如果用的51单片机有内置AD,就接AD口就可以了。这个需要AD进行采集。如果用的51单片机有内置AD,就接AD口就可以了。
单片机测距 怎么设置?单片机测距离,分为超声波激光测距:基本上是通过激光的发送与接收的时间差来算出距离的。这就要求系统输出一个驱动发光管的电流脉冲,驱动LED发出激光...单...
单片机 超声波 测距 仪器对安全的影响有哪些?单片机超声波测距仪器对安全的影响主要体现在以下几个方面。首先,超声波测距仪器可以在工业、交通等领域用于测量距离,帮助减少事故发生的可能性,提高安全性。...
激光 测距 仪的原理是什么?在对激光测距仪进行使用之前,一定要先进性校准,校准成功之后才能够投入使用。我们先打开激光测距有的开关按钮,然后等待指示灯亮了之后,再将镜头对准目...
智能小车电路原理?目前应用在智能小车或机器人的微控制器主要是8/16单片机或ARM和数字信号...由于MSP430工作电压最大是3.3V,电机驱动采用12V电压,测速模块和超声波模块采用5...
在线的盆友,能告诉我,东西湖恒安 测距仪 公司地址, 测距仪 设...[回答]20m红外测距,收发器件该如何选择?PD-510手持式激光测距仪科力达手持式激光测距仪PD-510+大量程测量,同时确保毫米级精度;PD-57手持式激光测距仪科力...
诸位童鞋我想知道:海南检验科智能泵站,智能泵站排名怎么样...[回答]能将进一步推进检验标准化和智能化,提升检验的速度...在信息高速发展的今天,人工智能将进一步推进检验标准化和智能化,提升检验的速度和质量。自然...
【请教】超声波 测距 干扰问题解决方案及反射波特性?第二个问题:反射回来的信号是属于球面波,理论上真正的平面波是不存在的。第三个问题:不规则平面肯定产生散射,只是信号偏小,并且不规则。别的并没有太多不同...
温度对超声波传播速度有什么影响?如何消除或补偿误差?用89C51的通用I/O端口能很容易的模拟I2C总线的读写时序,LM92的高精度温度测量能很好的补偿超声波在不同温度的传播速度。超声波测距原理超声波测距的原理是...
stc11 单片机 功能?STC11单片机的功能是模块功能,HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。...