一款超声波测距模块运用程序

合集下载

超声波测距报告(带报警)

超声波测距报告(带报警)

目录一、超声波测距原理二、超声波测距模块介绍1.主控模块2.电源模块3.显示模块4.超声波模块5.扬声器模块三、超声波测距功能介绍四、超声波测距前景展望五、心得附:程序超声波测距(可报警)一、超声波测距原理超声波发射器定期发送超声波,遇到被测物体时发生反射,反射波经超声波接收器接收并转化为电信号,只要测出发送和接收的时间差t,即可测出超声测距装置到被测物体之间的距离S:S=c*t/2(式中c为超声波在空气中的传播速度,c=331.45*√(1+T/273.16)) 由此可见声速与温度的密切的关系。

在应用中,如果温度变化不大或者对测量要求不太高(例如汽车泊车定位系统),则可认为声速是不变的,否则,必须进行温度补偿。

超声波传感器是超声测距核心部件,传感器按其工作介质可分气相、液相和固相传感器;按其发射波束宽度可分为宽波束和窄波束传感器;按其工作频率又可分为40kHz, 5OkHz等不同等级。

超声波在空气传播过程中,由于空气吸收衰减和扩散损失,声强随着传播距离的增大而衰减,而超声波的衰减随频率增大而成指数增加。

本设计选用气相、窄波束、40kHz的超声波传感器。

二、超声波测距模块介绍该产品共有五个模块,其中主控模块、电源模块、显示模块、扬声器模块集成在开发板上,超声波模块是外接的。

1.主控模块主要部分是51单片机。

51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。

该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATLEM公司的AT89系列,它广泛应用于工业测控系统之中。

目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。

51单片机是基础入门的一个单片机,还是应用最广泛的一种。

需要注意的是52系列的单片机一般不具备自编程能力。

主要功能:·8位CPU·4kbytes 程序存储器(ROM) (52为8K)·256bytes的数据存储器(RAM) (52有384bytes的RAM)·32条I/O口线·111条指令,大部分为单字节指令·21个专用寄存器·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)·一个全双工串行通信口·外部数据存储器寻址空间为64kB·外部程序存储器寻址空间为64kB·逻辑操作位寻址功能·双列直插40PinDIP封装·单一+5V电源供电CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。

DL-51单片机入门系列教程之七《超声波测距模块编程》

DL-51单片机入门系列教程之七《超声波测距模块编程》

51入门系列教程超声波测距模块编程Revision0.01(2011-10-18)刚好这次做机器人用到了超声波,才开始看它的工作原理,感觉还很简单,但是调试到最后,发现了很多问题,该碰到的都碰到了,趁着写单片机入门教程的机会,写出来分享给大家。

先把超声波的工作原理贴出来:从超声波的工作原理可以知道,其实只要单片机的两个引脚就足够,一个引脚接发送端,一个引脚接接收端即可。

工作时,发送端引脚置高电平10us时间的脉冲,这将激发超声波模块发送8个40khz周期的电平信号,然后模块的收端开始检测回波(实际上,两个眼睛,一个是发送的,一个是用来接收的)。

一旦发现有回波信号,就会输出一个响应给接收端引脚,这个响应是一个高电平脉冲。

所以,我们只要在接收端去检测是否有高电平脉冲即可。

但从程序编写与调试的过程来看,并没有那么简单。

因为超声波第一次发送40KHZ的信号出去后反射回来,有可能又被反弹回去,这样以来,相当于超声波在两个障碍物之间不断地来回反弹,导致接收端不断地收到”回波信号“——实际上第一次反弹回来的才是回波信号,其他的都是二次、三次...的反弹回波信号。

如果每次检测到回波就让蜂鸣器响一次,那么,我们程序运行时,可能会听到蜂鸣器不断地响,可能就是这个原因。

另外,需要关注的是,超声波如果前面没有障碍物,也会在接收端引脚上故意输出140us的电平,以”防止发射信号对回响信号的影响“。

从上面的分析看来,不管超声波前面有无障碍物,接收端引脚肯定都会出现高电平脉冲。

所以我们在编程时,必须过滤掉这140us。

讲完超声波的工作原理,我们来看下编写程序的思路。

由于超声波可能会连续收到回响信号,导致接收端不断出现高电平脉冲,而实际上,我们有用的仅仅是第一次反射回来的回响信号,因此,使用”查询接收端引脚是否出现高电平“的方法行不通。

可以使用外部中断,只检测第一次反射回来的信号,后续的反射信号全部丢弃不管。

下面看下140us的处理。

HC-SR04超声波测距模块说明书

HC-SR04超声波测距模块说明书

HC-SR04超声波测距模块◼产品概述HC-SR04是一款升级的超声波测距模块。

新增加UART,IIC及1-WIRE(单总线)功能,模式可以通过外围电阻设置。

2CM超小盲区,4M典型最远测距,2mA超低工作电流。

采用自研超声波测距解调芯片,使其外围更加简洁,工作电压更宽(2.8-5.5V)。

驱动采用扫频技术,减少探头本身一致性对灵敏度的影响。

内部40K驱动频率采用正温度补偿,切合探头中心频率的温度特性,减小温度影响。

外部晶振为外观兼容而放置的晶振,不起任何作用,不焊接晶振的模块价格更有优势。

◼实物图片◼主要特性⚫采用专业解调芯片⚫工作电压:2.8-5.5V⚫工作电流:2mA⚫支持GPIO,UART,IIC及1-WIRE多种接口模式,默认输出模式兼容HC-SR04⚫2CM盲区,4M典型最远测距⚫200mS周期⚫可配置各种颜色及加固型探头◼典型应用⚫玩具,机器人避障⚫液位,水位测量⚫坐姿检测⚫其它测距应用◼性能参数◼GPIO/UART/IIC/1-WIRE模式选择◼测量操作一:GPIO模式工作模式同HC-SR04。

外部MCU给模块Trig脚一个大于10uS的高电平脉冲;模块会给出一个与距离等比的高电平脉冲信号,可根据脉宽时间“T”算出:距离=T*C/2(C为声速)声速温度公式:c=(331.45+0.61t/℃)m•s-1(其中330.45是在0℃)0℃声速:330.45M/S20℃声速:342.62M/S40℃声速:354.85M/S0℃-40℃声速误差7左右。

实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。

如有需要,可关注我司带温补单芯片RCWL-9700。

二:UART模式UART模式波特率设置:9600N1命令返回值说明0XA0BYTE_HBYTE_MBYTE_L 输出距离为:((BYTE_H<<16)+(BYTE_M<<8)+BYTE_L)/1000单位mm0XF1公司及版本信息连接串口。

超声波测距模块的工作流程

超声波测距模块的工作流程

超声波测距模块的工作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!超声波测距模块的工作流程一般包括以下几个步骤:1. 发射超声波:超声波测距模块通过发射电路产生一定频率的超声波信号,并通过换能器将其转换为机械波向目标物体发射。

PIC18F4520单片机超声波测距主要部分程序

PIC18F4520单片机超声波测距主要部分程序

PIC18F4520单片机超声波测距主要部分程序测试环境:MPLAB IDE v8.73a单片机型号:PIC18F4520所需器件:超声波模块电路连接图如下:超声波测距子函数:unsigned int chaosheng(){unsigned int temp1,temp2;//定义两个无符号整型的变量用于存储距离值INPUT = 1;delay(50);//延时INPUT = 0;while(!OUTPUT);//当超声波的输出引脚输出高电平时,打开定时器0,开始计时TMR1ON = 1;while(OUTPUT);//当超声波的输出引脚输出低电平时,关闭定时器0,停止计时TMR1ON = 0;//计算超声波测出的距离temp1 = TMR1L;//将TMR1的低8位赋值给temp1变量temp2 = TMR1H;//将TMR1的高8位赋值给temp2变量temp2 = (temp2 << 8) + temp1;//temp2左移8位,加上temp1TMR1H = 0;//TMR1的高8位清零,为下一次测距做准备TMR1L = 0;//TMR1的低8位清零,为下一次测距做准备//距离 = 时间/2 * 速度//距离:distance;时间:temp2/2单位为&mu;s;速度:340m/s//这里注意下单位,需要进行换算让最终距离的单位为cm/sdistance = temp2 * 1.7/100;//有一定的误差,可以软件填补误差,根据实测值,在右侧的表达式上加减一误差数值。

return distance;//返回超声波测得的距离值,这里的distance为全局变量,可以在其他程序中用到,例如液晶显示部分,可以作为实参传递给其对应程序,用于显示。

}最后:很欣赏Google的面试题:用3句话向老太太讲清楚什么是数据库。

乔布斯说:&ldquo;最好的东西就是关注简单&rdquo;,因为简单的东西比复杂的东西更难做到。

URM04超声波测距模块

URM04超声波测距模块

URM04 超声波测距模块说明性能描述1.工作电源:+5V2.工作电流:<20mA3.工作温度范围:-10℃~+70℃4.超声波距离测量:最大测量距离―500cm最小测量距离―4cm分辨率-1cm5.模块使用RS485总线通讯,编写通讯程序非常的便捷。

6.模块内带温度补偿电路提高测量的精度。

7.模块重量:约30g模块测量角度模块角度60度功能描述正面图图1 URM04超声波测距模块管脚1: +5V 电源+5V输入2: GND 电源地3: A RS485总线A(正)4: B RS485总线B (负)通讯协议模块波特率 115200BPS,无奇偶效验,一位停止位。

出厂的模块地址可以进行重新编址,以适应组网需要。

注意这时RS485总线只能连接一只待编程的模块。

发送通用的编址命令,将地址ADD参数设置到模块,ADD地址范围0到128。

模块返回操作标志。

设置成功S返回0X01,设置失败无返回。

2.启动超声波测量0XFF本指令读取一次环境温度,温度高字节的高4位代表温度正负,当高4位都是1时说明是负温度,当高4位都是0时是正温度,除去温度高字节的高4位后是12位的温度。

分辨率0.1度,每个数字代表0.1摄氏度。

当测量无效时返回的温度高位和低位数据都是0xff。

55 aa ab 01 55 11 11 返回 55 AA 11 01 55 01 67 设置为地址0X1155 aa 11 00 01 11 返回 55 AA 11 02 01 00 04 17 读取地址为0X11的模块距离55 aa 11 00 02 12 返回 55 AA 11 02 02 01 06 1B 读取地址为0X01的模块温度。

基于labview的超声波测距系统

基于labview的超声波测距系统

基于labview的超声波测距系统超声波测距是目前应用广泛的一种测距方法。

基于超声波原理,该系统实现了一种远距离的非接触测量方式,广泛应用于自动化控制、机器人、仓库管理等领域。

以下将介绍一种基于LabVIEW的超声波测距系统,以实现精准的距离测量和数据显示。

一、系统硬件介绍(1)超声波发射器:该模块主要用来发出超声波,并由控制板控制其发送频率和强度。

通常使用40KHz超声波发射器,可以通过改变脉冲宽度和时间等参数调节其输出强度。

(2)超声波接收器:该模块用来接收反射回来的超声波,并将其转换成电信号传送给控制板进行处理。

(3)温度传感器:由于超声波的传播速度与环境温度有关,实时测量温度可以更准确的计算出声波的传播速度,从而实现更精确的距离测量。

(4)控制板:该板通过Labview软件控制和管理超声波发射器和接收器的工作状态,并处理传感器反馈的数据,从而输出距离测量结果。

控制板一般包含了微处理器、电源、测距传感器等功能模块。

(5)显示屏或LED显示器:用来显示测量到的距离值等信息。

通过显示器可实现测量结果的实时显示。

该系统的软件部分采用了LabVIEW进行设计和开发,主要分为三个主要模块,分别是发射器控制,接收器控制和距离计算。

(1)发射器控制:该模块主要负责对超声波发射器进行控制,包括控制发射频率、脉冲宽度等参数。

通过该模块,用户可以设定发射器的各个参数,实现了对超声波发射器的自动控制和管理。

(2)接收器控制:该模块主要负责对超声波接收器进行控制,包括控制接收幅度、增益等参数。

该模块的设计使得系统可以更好地适应不同环境下的工作。

(3)距离计算:该模块主要包括声速计算、距离计算和温度校准等功能。

系统会实时读取温度传感器的数据,校准当前的声速值,从而更准确地计算出距离值。

三、系统特点该系统具有以下特点:(1)非接触式距离测量,测量精度高。

(2)可适应不同环境下的工作,例如不同温度、湿度等。

(3)快速响应和实时显示,可以满足用户快速响应、数据实时显示的需求。

HC-SR04超声波测距的51单片机程序

HC-SR04超声波测距的51单片机程序
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void chushihua1602()
{
lcden=0;
write_order(0x38);
write_order(0x0c);
write_order(0x06);
write_order(0x01);
void zd3() interrupt 3//T1中断用来扫描数L1=0x30;
timer++;
if(timer>=400)
{
timer=0;
trig=1;//800MS启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
{
write_date(a[n]);
delay(3);
}
}
}
a[11]=(s%10000%1000/100)+0x30;
a[12]=(s%10000%1000%100/10)+0x30;
a[13]=(s%10000%1000%100%10)+0x30;
}
else//超出测量范围显示
{
flag=0;
a[9]='w';
a[10]='r';
a[11]='o';
a[12]='n';
write_date(a[0]);
write_date(a[1]);
write_date(a[2]);
write_date(a[3]);

《2024年基于STM32单片机的高精度超声波测距系统的设计》范文

《2024年基于STM32单片机的高精度超声波测距系统的设计》范文

《基于STM32单片机的高精度超声波测距系统的设计》篇一一、引言在现代电子技术的迅猛发展中,精确测量距离的设备扮演着重要的角色。

随着人类对于生活环境安全性的关注提升,对于各种设备的精度要求也在逐渐加强。

超声波测距技术以其非接触性、高精度、低成本等优点,在众多领域得到了广泛的应用。

本文将详细介绍基于STM32单片机的高精度超声波测距系统的设计。

二、系统概述本系统以STM32单片机为核心控制器,结合超声波测距模块,实现对目标物体的精确测距。

系统主要由STM32单片机、超声波测距模块、电源模块、信号处理模块和显示模块等组成。

通过单片机对超声波模块的控制,实现对目标的精确测距,并通过显示模块实时显示测距结果。

三、硬件设计1. STM32单片机:作为系统的核心控制器,负责整个系统的控制与数据处理。

STM32系列单片机具有高性能、低功耗的特点,能够满足系统对于精确度和稳定性的要求。

2. 超声波测距模块:采用高精度的超声波测距传感器,实现对目标物体的距离测量。

通过超声波的发送与接收,实现对目标的距离计算。

3. 电源模块:为系统提供稳定的电源支持,确保系统的正常工作。

电源模块需考虑到功耗问题,以实现系统的长时间运行。

4. 信号处理模块:对超声波测距模块的信号进行滤波、放大等处理,以提高测距的准确性。

5. 显示模块:实时显示测距结果,方便用户观察与操作。

四、软件设计1. 主程序:负责整个系统的控制与数据处理。

主程序通过控制超声波测距模块的发送与接收,获取目标物体的距离信息,并通过显示模块实时显示。

2. 超声波测距模块控制程序:控制超声波的发送与接收,实现对目标物体的距离测量。

通过计算超声波的发送与接收时间差,计算出目标物体的距离。

3. 数据处理程序:对获取的测距数据进行处理,包括滤波、计算等操作,以提高测距的准确性。

4. 显示程序:将处理后的测距结果显示在显示模块上,方便用户观察与操作。

五、系统实现1. 通过STM32单片机的GPIO口控制超声波测距模块的发送与接收,实现超声波的发送与接收功能。

教学项目10超声波测距系统设计

教学项目10超声波测距系统设计

教学项目10超声波测距系统设计超声波测距系统是一种基于超声波传感技术,通过发送超声波脉冲并接收反射回来的超声波脉冲,从而测量目标物体与传感器之间的距离。

本教学项目旨在教授如何设计和实现一个简单的超声波测距系统。

以下是该项目的详细步骤:1.材料准备:- Arduino Uno控制板-超声波传感器模块(如HC-SR04)-面包板-杜邦线2.连接电路:- 将Arduino Uno控制板插入面包板,并让其稳固地固定在面包板上。

- 使用杜邦线将超声波传感器模块连接到Arduino Uno控制板上,确保正确连接,VCC与5V引脚相连,Trig与9引脚相连,Echo与10引脚相连,GND与GND引脚相连。

3.编写代码:- 打开Arduino开发环境,创建一个新的空白文件。

-编写代码以初始化引脚,并定义距离变量。

-编写一个函数来测量距离,该函数将使用超声波发送脉冲并接收回来的脉冲,并计算出目标物体与传感器之间的距离。

-在主循环中调用测量函数,并将测量结果打印到串行监视器中。

以下是一个示例代码:```c++const int trigPin = 9;const int echoPin = 10;void setupinMode(trigPin, OUTPUT);pinMode(echoPin, INPUT);Serial.begin(9600);void loolong duration, distance;digitalWrite(trigPin, LOW);delayMicroseconds(2);digitalWrite(trigPin, HIGH);delayMicroseconds(10);digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH);distance = duration * 0.034 / 2;Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm");delay(1000);```4.上传代码:- 将Arduino Uno控制板通过USB连接到电脑。

超声波测距程序(LCD1602液晶显示)

超声波测距程序(LCD1602液晶显示)

#include<reg52.h>#include<intrins.h>#define uint unsignedint#define uchar unsigned char#define NOP() {_nop_();_nop_();_nop_();_nop_();}//------LCD引脚-----sbit LCD_RS=P2^6;sbit LCD_RW=P2^5;sbit LCD_EN=P2^7;//------超声波引脚-------sbitTx=P3^3; //触发控制信号输入Trigsbit Rx=P3^2; //回响信号输出Echouchar code table[]={"Distance Test:"}; //LCD第一行显示uchartemp_dis[]= {"000.0 cm"}; //LCD第二行longintt,distance;uchar cache[4]={0,0,0,0};//--------延时-------void delay(uintms){uint t;while(ms--)for(t=0;t<120;t++);}//-------读LCD状态-------ucharread_lcd_state(){uchar state;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();state=P0;LCD_EN=0;_nop_();return state;}//-------忙等待------voidlcd_busy_wait(){while((read_lcd_state() & 0x80)==0x80);NOP();}//----------LCD写指令----------voidlcd_write_com(uchar com){lcd_busy_wait();LCD_RS=0; //RS为0时,写指令,RS为1时,写数据LCD_RW=0;P0=com;NOP();LCD_EN=1;NOP();LCD_EN=0;}//----------LCD写数据----------voidlcd_write_data(uchardat){lcd_busy_wait();LCD_RS=1;LCD_RW=0;P0=dat;NOP();LCD_EN=1;NOP();LCD_EN=0;}//-------LCD初始化-------voidlcd_init(){LCD_EN=0;lcd_write_com(0x38); //LCD显示模式设置lcd_write_com(0x0c); //LCD显示开/关及光标设置lcd_write_com(0x06); //当写一个字符后地址指针加1,且光标加1 lcd_write_com(0x01); //显示清屏}//---------设置液晶显示位置-----------voidset_lcd_pos(uchar p){lcd_write_com(p|0x80);}//---------液晶显示程序----------voidlcd_print(ucharp,uchar *s,uint low){uintnum;set_lcd_pos(p);for(num=0;num<low;num++){lcd_write_data(s[num]);delay(1);}}void HC05_Init(){Tx=1; //触发脉冲NOP();NOP();NOP();NOP();Tx=0;distance=0.17*t; //距离计算}voiddistance_convert(long intdat){cache[0]=dat/1000;cache[1]=dat/100%10;cache[2]=dat/10%10;cache[3]=dat%10;temp_dis[0]=cache[0]+'0';temp_dis[1]=cache[1]+'0';temp_dis[2]=cache[2]+'0';temp_dis[4]=cache[3]+'0';}//------------主程序-----------void main(){lcd_init();delay(5);TMOD=0x19;EA=1; //开总中断TR0=1; //启动定时器EX0=1; //开外部中断IT0=1; //设置为下降沿中断方式while(1){HC05_Init();distance_convert(distance);lcd_print(0x01,table,14);lcd_print(0x44,temp_dis,8);}}//外部中断0void int0() interrupt 0{t=(TH0*256+TL0); //计算高电平持续的时间,上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时TH0=0;TL0=0;}。

HC-SR04超声波测距模块及程序(坤)

HC-SR04超声波测距模块及程序(坤)
uint Measure(void) {
char Del20us=0;//延时变量,在超声波脉冲引脚中产生 20us 的方波 char RxBack=1;//超声波返回标志位
TMOD=0x01;//定时器工作方式 1:16 位,初值不能重装
Tx=0;//将超声波脉冲引脚电位拉低 Th0=0;//初始化变量值 Tl0=0;//初始化变量值 TimeUp=0;//初始化
程序:
#include<reg52.h>
#define uint unsigned int #define uchar unsigned char
sbit Tx=P3^2;//产生脉冲引脚,延时 20us sbit Rx=P3^3;//回波引脚,进入外部中断 1。这些引脚可随意改ቤተ መጻሕፍቲ ባይዱ。
bit TimeUp=0;//定时器溢出标志位 long Th0,Tl0; unsigned long time0=0; uint Measureresult=0;
函数中调用了单片机的定时器所以单片机的一个定时器资源已经被占用但是没有使用外部中断而是软件查询引脚电平的方式判断回波信号目的是方便于再接入几个超声波模块因为单片机的外部中断资源有限
超声波模块 HC-SR04 简介以及编程
说明:我编写了一个超声波测距模块(HC-SR04)的程序,主 要把测距的程序写成函数形式,函数的返回值为所测的距离(为十进 制数),单位为毫米(mm)。便于大家嵌入自己开发的主程序中,方 便随时调用。函数中调用了单片机的定时器,所以单片机的一个定时 器资源已经被占用,但是没有使用外部中断,而是软件查询引脚电平 的方式判断回波信号,目的是方便于再接入几个超声波模块,因为单 片机的外部中断资源有限。
效果:可在 3CM-90CM 范围内测量,但是远距离误差较大 (1cm-2cm),但近距离误差较小。可以根据不同的模块作简单的修 正。

51单片机超声波测距程序

51单片机超声波测距程序

//超声波测距,测距X围2cm-400cm; #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit trig=P1^0;sbit echo=P3^2;sbit test=P1^1;//测试灯sbit dula=P2^6;sbit wela=P2^7;sbit BEEP=P2^3;uint timeh,timel,distance;uint ge,shi,bai,xiaoshu,flag,time;/*共阴极数码管不带小数点代码表*/ uchar code list[]={0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d ,0x7d , 0x07 ,0x7f , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 };/*共阴极数码管带小数点代码表*/ uchar code listtwo[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*长延时函数*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--); }/*短延时函数*/void delay20us() {uchar a;for(a=0;a<100;a++); }/*报警函数*/ void beer(){//BEEP=0;delay(10);}/*定时器初始化*/ void initime0() {TMOD=0x01;TH0=0;TL0=0;EA=0;ET0=0;EX0=0;}/*外部中断函数*/void estern() interrupt 0{timeh=TH0;timel=TL0;beer();flag=1;//进入中断,标志位就置1 EX0=0;//同时关断外部中断和定时器 TR0=0;}/*显示函数*/void display(distance) {bai=distance/1000;shi=distance%1000/100; ge=distance%100; xiaoshu=distance%10;dula=1;P0=list[xiaoshu];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);P0=listtwo[ge]; dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(2);dula=1;P0=list[shi]; dula=0;P0=0xff;wela=1;P0=0xfd;delay(1);dula=1;P0=list[bai]; dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);}/*被调用子函数*/ void diaoyong(){uint i;EA=0;echo=1;//为了检测电平的上下,首先必须拉高trig=1;delay20us();trig=0;while(echo==0);//如果进入中断即接收到超声波就向下执行flag=0;//接收到就去除标志位EA=1;//同时打开总中断EX0=1;//打开外部中断TR0=1;//开定时器TH0=0;//定时器清零TL0=0;for(i=0;i<100;i++)//等待测量的结果{display(distance);//用100次显示循环来延时,解决数码管显示不亮问题}//delay(50);//用延时函数数码管闪烁TR0=0;//延时一段时间后关断定时器EX0=0;//延时一段时间后关断外部中断if(flag==1)//如果进入中断,说明测距已经测好{time=timeh*256+timel;//计算测定距离,并显示distance=time*0.1720;display(distance);}if(flag==0)//如果没有进入中断,距离为0,同时灯闪烁{distance=0;test=!test;}}word/*主函数*/void main(){initime0();test=0;trig=0;EA=1;while(1){diaoyong();display(distance);}}11 / 11。

超声波模块HC-SR04调试以及数码管显示

超声波模块HC-SR04调试以及数码管显示

超声波模块HC-SR04简介以及编程1、本模块性能稳定,测度距离精确,模块高精度,盲区小。

产品应用领域:机器人避障物体测距液位检测公共安防停车场检测。

2 主要技术参数:1:使用电压:DC---5V2:静态电流:小于2mA3:电平输出:高5V4:电平输出:底0V5:感应角度:不大于15度6:探测距离:2cm-450cm7:高精度可达0.2cm实物图接线方式:VCC、trig(控制端)、echo(接收端)、GND基本工作原理:(1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离=(高电平时间*声速(340M/S))/2; 本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,即可以达到你移动测量的值操作:初始化时将trig 和echo 端口都置低,首先向给 trig 发送至少10 us 的高电平脉冲(模块自动向外发送8个40K 的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo 的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。

下面是飞思卡尔XS128单片机测距的程序:while(1){PT1AD0_PT1AD00 = 1;//给超声波模块输入高脉冲PITINTE_PINTE1=1; //打开PIT1定时器while(!(counter0>=4)); //等待20usPITINTE_PINTE1=0;counter0 = 0;//关闭定时器,计数清零PT1AD0_PT1AD00 = 0; //trig管脚拉低PORTB_PB0 = 0; //指示灯0while(!(PT1AD0_PT1AD01 == 1)); //等待echo输出上升沿PORTB_PB1 = 0; //指示灯1PITINTE_PINTE0=1; //打开PIT0定时器while(!(PT1AD0_PT1AD01 == 0)); //等待下降沿distance = counter*17/20; //计算距离,单位CMPITINTE_PINTE0=0; //关闭定时器PORTB_PB2 = 0; //指示灯2PITINTE_PINTE0=1; //打开定时器定时500ms,数码管显示while(!(counter>=10000)){Showing(distance); //显示距离,精确1cm}PITINTE_PINTE0=0;counter=0; //关闭定时器,清零}。

基于51单片机超声波测距仪设计

基于51单片机超声波测距仪设计

基于51单片机超声波测距仪设计超声波测距仪是一种应用较为广泛的测量设备,可以用于测量物体与超声波传感器之间的距离。

本文将基于51单片机设计一个简单的超声波测距仪,并介绍其原理、硬件电路和程序设计。

一、原理介绍:超声波测距仪的工作原理是利用超声波传感器发射超声波,并接收其反射回来的波,通过计算发射和接收之间的时间差,从而确定物体与传感器之间的距离。

超声波的传播速度在空气中近似为331.4m/s,根据速度与时间关系,可以通过测量时间来计算距离。

二、硬件电路设计:1.超声波模块:选用一个常见的超声波模块,包括超声波发射器和接收器。

2.51单片机:使用51单片机作为控制器,负责控制超声波模块和处理测距数据。

3.LCD显示屏:连接一个LCD显示屏,用于显示测距结果。

4.连接电路:将超声波发射器和接收器分别连接到单片机的引脚,将LCD显示屏连接到单片机的相应引脚。

三、程序设计:1.初始化:包括初始化单片机的GPIO引脚、定时器以及其他必要的设置。

2.发送信号:发射一个超声波信号,通过超声波模块的引脚控制。

此时,启动定时器开始计时。

3.接收信号:当接收到超声波的反射信号时,停止定时器,记录计时的时间差。

根据超声波传播速度,可以计算出距离。

4.显示结果:将测得的距离数据显示在LCD显示屏上。

四、实现效果:通过以上设计,可以实现一个简单的超声波测距仪。

在实际应用中,可以根据需求扩展功能,例如增加报警功能、计算速度等。

总结:本文基于51单片机设计了一个超声波测距仪,包括硬件电路设计和程序设计。

通过该设备可以实现对物体与超声波传感器之间的距离进行测量,并将结果显示在LCD显示屏上。

该设计只是一个基本的框架,可以根据需要进行进一步的改进和优化。

超声波测距距离越近灯闪烁越快程序代码

超声波测距距离越近灯闪烁越快程序代码

超声波测距距离越近灯闪烁越快程序代码听说你正在寻找超声波测距距离越近灯闪烁越快的程序代码?那么你来对地方了!今天我们将带你详细了解这个有趣而又实用的技术,并为你展示一段用中文编写的优秀的程序代码。

超声波测距技术已经被广泛应用于多个领域,例如测距、车辆自动驾驶、安全控制等等。

它的原理是利用超声波的反射时间来计算距离,通过发射超声波脉冲并接收反弹回来的波形,计算出信号的时间差并将其转换为距离。

在这里,我们将介绍如何使用Arduino和HC-SR04模块来实现距离检测及灯光闪烁。

该模块支持5V直流电源和4个引脚,分别是VCC、GND、Trig和Echo。

Trig引脚用于发射超声波脉冲,Echo引脚用于接收反弹回来的波形。

在代码中,我们将使用Digital Pin 13来控制LED灯的亮灭,并使用Trig和Echo引脚来控制超声波模块。

以下是用中文编写的程序代码:include <NewPing.h>define TRIG_PIN 11define ECHO_PIN 12define MAX_DISTANCE 200define LED_PIN 13NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);void setup() {Serial.begin(9600);pinMode(LED_PIN, OUTPUT);}void loop() {delay(50);int cm = sonar.ping_cm();Serial.print(cm);Serial.println("cm");if(cm < 10){digitalWrite(LED_PIN, HIGH);delay(50);digitalWrite(LED_PIN, LOW);delay(50);}else if(cm < 20){digitalWrite(LED_PIN, HIGH);delay(200);digitalWrite(LED_PIN, LOW);delay(200);}else{digitalWrite(LED_PIN, LOW);}}通过这段代码,我们可以看到程序的运作原理如下:首先,使用NewPing库来设置Trig和Echo引脚,并设置最大探测距离为200cm;然后,在setup函数中,启动串行通信并设置LED_PIN为输出模式;接着,在loop函数中进行距离测量和控制LED灯。

超声波测距仪程序

超声波测距仪程序
void k4cl();
void offmsd();
void main() //主函数
{
EA=1; //开中断
TMOD=0x11; //设定时器0为计数,设定时器1定时
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
制作的超声波测距源程序
#include <REG2051.H>
#define k1 P3_4
#define csbout P3_5 //超声波发送
#define csbint P3_7 //超声波接收
P3=~digit&opto; //依次显示各位数
P1=~buffer; //显示数据送P1口
delay(20); //延时处理
P1=0xff; //P1口置高电平(关闭)
}
else timeToBuffer(); //将值转换成LED段码
offmsd();
scanLED(); //显示函数
if(s<sj2)
{
buffer[2]=0x76;
buffer[1]=0x76;
buffer[0]=0x76;
}
else if(s<sj1)
TR1=1;
while(1)
{
keyscan();
if(jpjs<1)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一款超声波测距模块运用程序
本模块性能稳定,使用方便,测度距离精确。

能和
国外的SRF05,SRF02等超声波测距模块相媲美,且价格
实惠,是你采购超声波器件的理想选择。

模块高精度,
盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!测量范围在2cm~500cm,测量精度3mm,测量
时与被测物体无直接接触,能够清晰稳定地显示测量结果。

由于超声波指向性强,能量消耗缓慢,在介质中传
播的距离较远,因而超声波经常用于距离的测量,如测
距仪和物位测量仪等都可以通过超声波来实现。

超声波测距器,可以应用于汽车倒车、建筑施工工
地以及一些工业现场的位置监控,也可用于液位、井深、管道长度的测量,用于机器人控制、小车躲避障碍等场
合中。

小车上安装此模块配合舵机使用能控制得更方便。

利用超声波检测往往比较迅速、方便、计算简单、易于
做到实时控制,并且在测量精度方面能达到工业实用的
要求。

因此在移动机器人的研制上也得到了广泛的应用。

模块性能
1:使用电压:DC5V;
2:静态电流:小于2mA;
3:输出信号:电平信号,高电平5V,低电平为0V;
4:感应角度:不大于15度;
5:探测距离:2cm-500cm
6: 高精度:可达0.3cm
超声波测距模块工作原理:
(1)采用单片机IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过echo输出一高电平,高电平
持续的时间就是超声波从发射到返回的时间。

用户通过从trig脚输入40kHz的方波信号,即用户从单片机的IO口连续发出高低电平,产生方波,方波的个数一般为10个左右;然后就可以在接收端等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就
可以读定时器的值,高电平的时间就是此次测距的时间,
根据以下公式计算测量距离:
测试距离=(高电平时间*声速(340m/s))/2;
注意事项
1、超声波发射头向外发射60度角的超声束,因此,在
探头与被测物体之间不能有其他障碍物。

2、超声波模块测得的是被测物体与探头之间的垂直距离,测量时要保持探头正对被测物体。

3、超声波测量会受环境风速、温度等的影响。

4、模块应先插好在电路板上再通电,避免产生高电平的误动作,如果产生了,重新通电方可解决。

可能出现的问题
1、由于超声波会受到被测物体不平整、反射角度、环境风速温度以及多次反射的影响,可能会带来测量数据误
差增大。

2、由于超声波有测量盲区的固有特性,因此,如果近距离测量时,当测量位置发生变化而接收到的数据不变时,说明进入了测量盲区。

3、模块在测量远处物体时,如果没有测量数据返回,可能是超出测量范围,或是测量角度不对。

可以适当调整
测量角度。

************************************************* **********************************/
/*模块高精度,盲区2cm,测量范围在2cm~500cm,测量精度3mm*/
#include;
#include;
#define uint unsigned int
#define uchar unsigned char
unsigned char code
WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f,0x80};//0x40-不带点
//unsigned char code
WE1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0x f0,0xef,0x80}; //0-9 带点
unsigned char temp[3];
sbit RX=P3^4; //接受端,ECHO
sbit TX=P3^5; //控制端,TRIG
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
bit flag=0;
uint time=0;
uint s=0;
void delay(int xms)//延时大概x毫秒
{
int i,j;
for(i=xms;i>;0;i--)
for(j=110;j>;0;j--);
}
void start() //给至少10us的高电平,启动模块
{
TX=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_();
_nop_();
TX=0;
}
uchar count()
{
time=TH0*256+TL0;
TH0=0;
TL0=0; //清零
s=(time*1.7)/100;//厘米
return s;
}
void dispros()//数据分割
{
temp[0]=s%1000/100;//百位
temp[1]=s%1000%100/10; //十位
temp[2]=s%100%100%10; //个位
}
void display() //显示函数
{
uchar i;
if(s>;=500||s<=2||flag==1) //进入盲区,溢出
{
flag=0;
s=0;
TH0=0;
TL0=0; //清零
for(i=0;i<3;i++) //显示-
{
P0=0x40;
switch(i)
{
case 0:LSA=0; LSB=0; LSC=0; break; case 1:LSA=1; LSB=0; LSC=0; break; case 2:LSA=0; LSB=1; LSC=0; break; }
delay(2);
}
}
else //正常显示
{
LSA=0;LSB=0;LSC=0;
P0= WE0[temp[0]]; delay(3);
LSA=1;LSB=0; LSC=0;
P0= WE0[temp[1]]; delay(2);
LSA=0;LSB=1;LSC=0;
P0= WE0[temp[2]]; delay(1);
}
}
void main()
{
TMOD=0X01; //定时器工作方式0
TH0=0;
TL0=0;
EA=1; //开总中断
ET0=1;//开定时器中断
while(1)
{
start();//启动模块
while(!RX); //当RX为零时等待
TR0=1; //启动计数
while(RX); //当RX为1时计数并等待TR0=0; //关闭计数器
count(); //计数
dispros(); //处理,分割数据display(); //显示
delay(1);
}
}
void t0() interrupt 0 {
flag=1; //溢出标志
}。

相关文档
最新文档