超声波模块程序详解

合集下载

超声波模块

超声波模块
测试距离=(高电平时间*声速(340可以在接收口等待高电平输出.
一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,
即可以达到你移动测量的值
接线方式:VCC、trig(控制端)、 echo(接收端)、 GND
基本工作原理: (1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
操作:初始化时将trig和echo端口都置低,首先向给 trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,
捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,
按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。

超声波模块测试程序

超声波模块测试程序

//超声波模块显示程序#include <reg52.h> //包括一个52标准内核的头文件#include "lcd1602.h"#include "delay.h"#include "isd1820.h"uint distance[4]; //测距接收缓冲区uchar ge,shi1,bai,temp,outcomeH,outcomeL,i; //自定义寄存器bit succeed_flag=0; //测量成功标志void chulishuju();/***********************排序函数**************************/ void pai_xu(){uint t;if (distance[0]>distance[1]){t=distance[0];distance[0]=distance[1];distance[1]=t;}if(distance[0]>distance[2]){t=distance[2];distance[2]=distance[0];distance[0]=t;}if(distance[1]>distance[2]){t=distance[1];distance[1]=distance[2];distance[2]=t;}}void chulishuju(){uint distance_data,a,b;uchar CONT_1;i=0;if(succeed_flag==1){distance_data=outcomeH; //测量结果的高8位distance_data<<=8; //放入16位的高8位distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据distance_data*=12; //因为定时器默认为12分频distance_data/=58; //微秒的单位除以58等于厘米} //为什么除以58等于厘米,Y米=(X秒*344)/2// X秒=(2*Y米)/344 ==》X秒=0.0058*Y米==》厘米=微秒/58if(succeed_flag==0){distance_data=0; //没有回波则清零}distance[i]=distance_data; //将测量结果的数据放入缓冲区i++;if(i==3){distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;pai_xu();distance_data=distance[1];a=distance_data;if(b==a) CONT_1=0;if(b!=a) CONT_1++;if(CONT_1>=3){CONT_1=0;b=a;if(b>=50){yuyin_bobao();}}i=0;}}。

AT89S52超声波模块程序

AT89S52超声波模块程序

超声波模块程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longuint c=340;ulong l,time;char i=1,j=1,k=80,aa;char t,tp=10,ts,tg,lb,ls,lg,lsf,fh,cb,cs,cg; sbit RW=P2^1;sbit RS=P2^0;sbit E=P2^2;sbit rece=P3^3;sbit k2=P1^1;sbit k1=P1^0;sbit k3=P1^2;sbit k4=P1^3;sbit sg=P3^7;sbit ctl=P3^5;void delay(uint i){while(i--);}void writercom(uchar q){E=1;RS=0;RW=0;P0=q;E=0;delay(20);}void writerdata(uchar o){E=1;RS=1;RW=0;P0=o;E=0;delay(20);}void writer_d(uchar *u){while(*u)writerdata(*u++);}void xsinit(void){writercom(0x01);writercom(0x38);writercom(0x0c);writercom(0x06);}void inptt(){while(1){ if(k2==0) {tp++;if(tp>=99)tp=99;} delay(7000);if(k1==0){tp--;if(tp<=(-30))tp=(-30);} delay(7000);t=tp;if(t<0){fh=0x2d;t=~t+1;}else{fh=0x20;}ts=t/10;tg=t%10;writercom(0x80);writer_d(" T:");writerdata(fh);writerdata(ts+0x30);writerdata(tg+0x30);writerdata(0xdf);writer_d("C ");writercom(0xba);writer_d("Press K4 finish ");if(k4==0)break;}}void sen(){uchar times=0;TMOD=0x12;IE=0x84;TH0=244;TL0=244;TR0=1;TR1=1;while(1){while(TF0==0);sg=~sg;times++;TF0=0;if(times==20)break;}TR0=0;times=0;}rec()interrupt 2 using 2{TR1=0;ctl=0;time=TH1*256+TL1;l=time*c/2;TH1=0;TL1=0;}void dataxs(){if(tp>=10)c=338+(tp-10)*0.6;else c=338+(10-tp)*0.6;cb=c/100;cs=c%100/10;cg=c%100%10;lb=l/1000000;ls=l%1000000/100000;lg=l%1000000%100000/10000;/******显示********/writercom(0x80);if(l<=360000)writer_d("too near! "); else if(TH1>=93)writer_d("too long! "); else {writer_d("L=");writerdata('.');writerdata(ls+0x30);writerdata(lg+0x30);writer_d("m ");writer_d("c=");writerdata(cb+0x30);writerdata(cs+0x30);writerdata(cg+0x30);writer_d("m/s ");}}void unauto(){while(i){while(k--){writercom(0xba);writer_d("Press K4 measure");if(k4==0||k3==0){i=0;break;}delay(2000);}k=20;while(k--){writercom(0xba);writer_d(" ");if(k4==0||k3==0){i=0;break;}delay(2000);}k=20;}i=1;ctl=0;sen();delay(200);ctl=1;}void aut(){writercom(0xba);writer_d("real time measur");ctl=0;sen();delay(200);ctl=1;}ztxz(){while(k3==0&&aa==0){while(1){if(k3==1)break;}aa=1;}while(k3==0&&aa==1){while(1){if(k3==1)break;}aa=0;}}main(){xsinit();inptt();while(1){ while(!aa){unauto();break;}while(aa) {aut();break;}while(k--)delay(2000);}k=20; dataxs();}。

超声波模块显示程序

超声波模块显示程序
{
WriteData(string[k]);
k++; //指向下字符数组一个元素
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
result=BF; //将忙碌标志电平赋给result
E=0; //将E恢复低电平
return result;
}
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38); //连续三次,确保初始化成功
delay(5);
WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁
_nop_(); //空操作四个机器周期,给硬件反应时间
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
//超声波模块显示程序
#include <reg52.h> //包括一个52标准内核的头文件
#include<intrins.h> //包含_nop_()函数定义的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
IT0=0; //由高电平变低电平,触发外部中断
//ET0=1; //打开定时器0中断
}
i=0;
flag=0;
Tx=0; //首先拉低脉冲输入引脚
TMOD=0x10; //定时器0,定时器1,16位工作方式

超声波模块的工作原理

超声波模块的工作原理

超声波模块的工作原理
超声波模块是一种利用超声波进行测距的设备。

它由超声波发射器和接收器组成,工作原理如下:
1. 发射超声波:超声波发射器通过电信号驱动压电陶瓷片振动产生超声波。

超声波的频率通常在20kHz到200kHz之间。

2. 超声波传播:发射的超声波以球面波的形式向四面八方扩散传播。

超声波在空气中传播速度约为340m/s。

3. 接收超声波:超声波接收器也是一个压电陶瓷片,当超声波碰到物体并被反射回来时,接收器会将接收到的超声波转化为电信号。

4. 信号处理:接收到的电信号会经过放大、滤波、模数转换等处理,以便后续的距离计算和数据分析。

5. 距离计算:根据发射超声波到接收超声波的时间间隔,可以计算出超声波从发射到接收的时间差。

再根据超声波在空气中的传播速度,可以将时间差转换为距离。

6. 输出结果:最终,超声波模块会输出测量得到的距离信息,一般以数字信号或模拟电压输出。

超声波模块的工作原理可应用于测距、障碍物检测、物体定位等场景,在工业、机器人、智能家居等领域有广泛的应用。

单收单发超声波模块使用指南自动跟随机器人

单收单发超声波模块使用指南自动跟随机器人

单收单发超声波模块使用手册V1.01.参数简介最远接收距离:>5米最短接收距离:<4厘米最大接收角度:>90度数据波动范围:<3毫米模块工作电压:5V模块工作方式:串口模块发送频率:50HZ模块通信波特率:1152002.使用过程发送超声波模块:发送超声波模块只需要上电即可。

发送超声波模块上电后,发送超声波模块上的LED会快闪,此时证明,发送超声波模块已经在正常工作了。

(注:发送超声波模块上面留有了RX TX,这是用来刷超声波固件。

)接收超声波模块:当发送超声波模块通上电之后。

需要将发送超声波模块和接收超声波模块对准,此时接收超声波模块需上的LED 会快闪。

此时证明接收超声波模块已经接收到发送超声波模块发射的超声波。

此时接收超声波模块上接收到的数据即是发送和接收超声波的距离数据。

值得注意的是,2个超声波发射头需要对准,才会通信成功,发送超声波模块只需上电即可工作(发送上的LED闪烁),此时只是证明了发送超声波模块已经成功发射出超声波,但并不能证明接收超声波模块会接收到数据,只有接收到发送超声波模块的声波后,接收超声波模块上的LED闪烁后,才能证明这两者已经通信成功。

接收超声波模块才会有距离数据输出。

3.数据格式当接收超声波已经接收到发送超声波的数据后,接收超声波模块上的LED灯会快速闪烁,会通过串口以50Hz的频率发送出距离数据。

数据格式是:0XA5+两个字节数据(16进制),距离的单位是mm,例如:返回数据是:A500C8,意思就是:200mm。

数据的含义是什么呢?0XA5是帧头,另外2个是数据存储字节。

如何解算:很简单,把2个字节数据移位然后逻辑运算即可。

如下:distance_left=dat_left[1]<<8|dat_left[2];。

hcsr04超声波模块工作频率

hcsr04超声波模块工作频率

hcsr04超声波模块工作频率
摘要:
1.HCSR04超声波模块简介
2.HCSR04超声波模块的工作原理
3.HCSR04超声波模块的引脚功能
4.HCSR04超声波模块的使用注意事项
正文:
HCSR04超声波模块是一款常用的测距模块,具有高精度、盲区超近、稳定测距等特点。

它的工作电压为DC 5V,工作电流为15ma,工作频率为
40kHz。

最远射程可达4m,最近射程为2cm,测量角度为15度。

HCSR04超声波模块的工作原理如下:首先,给超声波模块接入电源和地,然后给脉冲触发引脚(trig)输入一个长为20us的高电平方波。

输入方波后,模块会自动发射8个40khz的声波,与此同时回波引脚echo端的电平会由0变为1。

当超声波返回被模块接收到时,回波引脚端的电平会由1变为0,此时应停止定时器计数。

定时器记录的时间就是超声波从发射到返回的时间,根据这个时间可以计算出距离。

HCSR04超声波模块的引脚功能如下:VCC接5V电源,GND接地线,TRIG接脉冲触发信号,ECHO接回响信号。

在使用HCSR04超声波模块时,有一些注意事项:
1.确保模块工作电压稳定,避免电压波动影响测量精度。

2.避免模块长时间连续工作,以免过热损坏。

3.确保触发引脚和回响引脚的连接稳定,避免信号干扰。

4.在测量过程中,保持探头清洁,避免灰尘或污垢影响测量结果。

5.探头应垂直于被测物体,避免因角度不准确导致测量误差。

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),但近距离误差较小。可以根据不同的模块作简单的修 正。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

int Trigpin = 7; //定义模块触发引脚
int Echopin = 5; //定义模块接收引脚
float Distance; //定义距离变量
void setup()
{
pinMode(Echopin,INPUT) ;
pinMode(Trigpin,OUTPUT);
Serial.begin(9600);//启动串口功能
}
void loop()
{
Distance = Measurement();//调用测量函数,将采得的值给变量Distance
Serial.print(Distance);//在端口输出距离
Serial.println("cm");//输出单位,并换行
delay(2000);
}
float Measurement()
{
float distance;//定义一个局部变量
digitalWrite(Trigpin,LOW); //初始化触发引脚
delayMicroseconds(2);
digitalWrite(Trigpin,HIGH);//给触发引脚一个信号,使模块发出声波
delayMicroseconds(10);
digitalWrite(Trigpin,LOW);//结束声波信号
distance = (pulseIn(Echopin,HIGH)*17)/1000;//计算距离
return distance;//将算得的距离返回给变量distance
}
伺服舵机+超声波模块
#include<Servo.h>
int Trigpin = 7; //定义模块触发引脚
int Echopin = 5; //定义模块接收引脚
float Distance; //定义距离变量
Servo myservo3;
void setup()
{
myservo3.attach(3);
pinMode(Echopin,INPUT) ;
pinMode(Trigpin,OUTPUT);
Serial.begin(9600);//启动串口功能
}
void loop()
{
myservo3.write(0);
delay(2000);
Distance = Measurement();//调用测量函数,将采得的值给变量Distance
Serial.print(Distance);//在端口输出距离
Serial.println("cm");//输出单位,并换行
myservo3.write(90);
delay(2000);
Distance = Measurement();//调用测量函数,将采得的值给变量Distance
Serial.print(Distance);//在端口输出距离
Serial.println("cm");//输出单位,并换行
myservo3.write(178);
delay(2000);
Distance = Measurement();//调用测量函数,将采得的值给变量Distance
Serial.print(Distance);//在端口输出距离
Serial.println("cm");//输出单位,并换行
}
float Measurement()
{
float distance;//定义一个局部变量
digitalWrite(Trigpin,LOW); //初始化触发引脚
delayMicroseconds(2);
digitalWrite(Trigpin,HIGH);//给触发引脚一个信号,使模块发出声波delayMicroseconds(10);
digitalWrite(Trigpin,LOW);//结束声波信号
distance = (pulseIn(Echopin,HIGH)*17)/1000;//计算距离
return distance;//将算得的距离返回给变量distance
}。

相关文档
最新文档