技术文档

51单片机 红外测距 单片机应用分享红外测距 #编程

小编 2024-11-24 技术文档 23 0

单片机应用分享红外测距 #编程

每天分享一个单片机应用。大家好,今天跟大家分享红外车距的实验。

·用的传感器是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就可以得到实际的距离。

贴个测试视频,后面把蜂鸣器和超声波测距结合到一起,实现不同的距离不同报警提示音。

视频加载中...

相关问答

51单片机 怎么与 红外测距 传感器连起来?

与I/O连接,用软件处理数据,先把单片机搞懂,光连传感器没用。与I/O连接,用软件处理数据,先把单片机搞懂,光连传感器没用。

51单片机 怎么做一个 测距 仪?

用51单片机制作测距仪,最简单的做法是选用一个激光测距模块,这种测距模块是UART接口,单片机可以通过指令,完成激光测距、环境温度测量等。目前常用的激光测...

51单片机 超声波 测距 误差太大怎么办?

1、对数据做数字滤波,取几次结果,然后抛弃一些不正常的数据(比如取10个值,去两个最大值,两个最小值,剩下6个数取平均值)等等,这样数据会稳定很多。2、控...1...

单片机 温度传感器和 红外 线接收器作用?

红外线传感器就是利用红外线的物理性质来进行测量的传感器。红外线又被叫做红外光,它包含有反射、折射、散射、干涉、吸收等性质。红外传感器的这种性质使得它...

单片机 超声波 测距 仪器对安全的影响有哪些?

单片机超声波测距仪器对安全的影响主要体现在以下几个方面。首先,超声波测距仪器可以在工业、交通等领域用于测量距离,帮助减少事故发生的可能性,提高安全性。...

请问激光雷达是怎样 测距 定位物体的?

[回答]其设计的优劣直接关系到系统整体性能的发挥和智能程度的上下。由于导航技术触及到挪动机器人人工智能技术的每一个问题:感知,执行,规划,构造,硬件,...

麻烦在线的行家 推荐一下!信阳多屏显示的UWB 测距 多少钱,UWB...

[回答]超出测距范围了吧。。。毕竟以前的测距方法是密位测距法,是人通过瞄具上的密位刻度通过公式来测算的,而不是现在的激光测距呵呵,红外测距!光速!30...

汇编语言小程序求解1.背景:超声 测距 电路中,S=T*V.公式中速度...

[最佳回答]这算法,是要累死单片机呀.时间假定为400ms,估算出来的路程,大约就是34*400=136m.你怎么能知道,这么长的路程,都是40度?温度补偿,纸上谈兵而已...

跑步机是如何 测距 的?

本人做过一款皮带测速传感器,用的是光电传感器的方案,除此之外,还可以用霍尔开关来实现。跑步机测距其实就是计算皮带的线速度,再根据时间确定出来的。下面和...

我想做个小型声纳系统,大家说可能吗?处理器用 单片机 ?

我做过超声波测距,用的52单片机挺简单的不过声纳还有通信的功能,这方面恐怕难度较大,需要用射频芯片发射接收,自己用分立元件搭难度非常大我做过超声波测距...

猜你喜欢