超声波模块程序详解
- 格式:doc
- 大小:32.50 KB
- 文档页数:3
//超声波模块显示程序#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;}}。
超声波模块程序#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();}。
超声波模块的工作原理
超声波模块是一种利用超声波进行测距的设备。
它由超声波发射器和接收器组成,工作原理如下:
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超声波模块工作频率
摘要:
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.探头应垂直于被测物体,避免因角度不准确导致测量误差。
超声波传感器模块1)硬件工作原理超声波测距传感器是模拟传感器。
超声波测距传感器利用声音在空气中的传输距离和传输时间成正比的原理,通过检测不同远近的反射面对超声波反射回去的时间不同来检测障碍物的距离。
超声波传感器有一个发射头和一个接收头,安装在同一面上。
在有效的检测距离内,发射头发射特定频率的超声波,遇到检测面反射部分超声波,接收头接收返回的超声波,由芯片记录超声波的往返时间,并计算出距离值,本模块把距离值通过DA芯片转化成模拟值。
“控制器模块”通过扩展接口的模数转换,再通过软件处理,就可以读取离障碍物的距离并在数码管上显示数值。
当超声波测距模块检测到障碍物,同时超声波模块上LED1亮,则数码管显示检测到的距离;当超声波测距模块没有检测到障碍物,同时超声波模块上LED1灭,则数码管显示888。
2)软件工作原理“控制器模块”硬件电路通过扩展接口将完成两个任务:1.读取当前接口的AD 转化结果。
2.把当前的模拟值转化成距离值并把距离值送“显示模块”进行显示。
超声波模块上的DA芯片使用MCP4822,由公式Vout=2.048*2*Dn/4096 (1)Dn是数字输入量Dn=距离<<3(为了提高精度)扩展接口取得的AD值AD_value=(Vin/Vcc)*1024 (2)Vin =(AD_value/1024)* Vcc (3)因为(1)中的Vout与(2)中的Vin相等,则2.048*2*Dn/4096=(AD_value/1024)* Vcc,Dn= AD_value*4096* Vcc/2.048*1024*2;即Dn=0.97* Vcc* AD_value;所需求的距离S=Dn>>3;Vcc=5V;流程图:流程图说明:上电先初始化各端口状态:声光输出口都处于关闭状态,即P0.0、P0.1、P0.2端口输出一个高电平。
声明变量及初始化AD 函数。
完成初始化工作后,程序就读取ADC 转化结果,由公式S= (AD_value*4.84)>>3可以计算小车离障碍物的距离,并把当前的距离值送“显示模块”进行显示。
1.超声波测距//晶振=8M//MCU=STC10F04XE//P0.0-P0.6共阳数码管引脚//Trig = P1^0//Echo = P3^2#include <reg52.h> //包括一个52标准内核的头文件#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned long//***********************************************sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频//为STC单片机的IO口设置地址定义sfr P0M1 = 0X93;sfr P0M0 = 0X94;sfr P1M1 = 0X91;sfr P1M0 = 0X92;sfr P2M1 = 0X95;sfr P2M0 = 0X96;//***********************************************sbit Trig = P1^0; //产生脉冲引脚sbit Echo = P3^2; //回波引脚sbit test = P1^1; //测试用引脚uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9 uint distance[4]; //测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器bit succeed_flag; //测量成功标志//********函数声明void conversion(uint temp_data);void delay_20us();//void pai_xu();void main(void) // 主程序{ uint distance_data,a,b;uchar CONT_1;CLK_DIV=0X03; //系统时钟为1/8晶振(pdf-45页)P0M1 = 0; //将io口设置为推挽输出P1M1 = 0;P2M1 = 0;P0M0 = 0XFF;P1M0 = 0XFF;P2M0 = 0XFF;i=0;flag=0;test =0;Trig=0; //首先拉低脉冲输入引脚TMOD=0x11; //定时器0,定时器1,16位工作方式TR0=1; //启动定时器0IT0=0; //由高电平变低电平,触发外部中断ET0=1; //打开定时器0中断//ET1=1; //打开定时器1中断EX0=0; //关闭外部中断EA=1; //打开总中断0while(1) //程序循环{EA=0;Trig=1;delay_20us();Trig=0; //产生一个20us的脉冲,在Trig引脚while(Echo==0); //等待Echo回波引脚变高电平succeed_flag=0; //清测量成功标志EX0=1; //打开外部中断TH1=0; //定时器1清零TL1=0; //定时器1清零TF1=0; //TR1=1; //启动定时器1EA=1;while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)TR1=0; //关闭定时器1EX0=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; //没有回波则清零test = !test; //测试灯变化}/// 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;conversion(b);}/// i=0;/// }}}//***************************************************************//外部中断0,用做判断回波电平INTO_() interrupt 0 // 外部中断是0号{outcomeH =TH1; //取出定时器的值outcomeL =TL1; //取出定时器的值succeed_flag=1; //至成功测量的标志EX0=0; //关闭外部中断}//****************************************************************//定时器0中断,用做显示timer0() interrupt 1 // 定时器0中断是1号{TH0=0xfd; //写入定时器0初始值TL0=0x77;switch(flag){case 0x00:P0=ge; P2=0xfd;flag++;break;case 0x01:P0=shi;P2=0xfe;flag++;break;case 0x02:P0=bai;P2=0xfb;flag=0;break;}}//***************************************************************** /*//定时器1中断,用做超声波测距计时timer1() interrupt 3 // 定时器0中断是1号{TH1=0;TL1=0;}*///****************************************************************** //显示数据转换程序void conversion(uint temp_data){uchar ge_data,shi_data,bai_data ;bai_data=temp_data/100 ;temp_data=temp_data%100; //取余运算shi_data=temp_data/10 ;temp_data=temp_data%10; //取余运算ge_data=temp_data;bai_data=SEG7[bai_data];shi_data=SEG7[shi_data];ge_data =SEG7[ge_data];EA=0;bai = bai_data;shi = shi_data;ge = ge_data ;EA=1;}//****************************************************************** void delay_20us(){ uchar bt ;for(bt=0;bt<100;bt++);}/*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;} /*交换值}*/2.超声波测距LCD1602显示/*SMC1602A(16*2)模拟口线接线方式连接线图:---------------------------------------------------|LCM-----51 | LCM-----51 | LCM------51 |--------------------------------------------------||DB0-----P1.0 | DB4-----P1.4 | RW-------P3.4 ||DB1-----P1.1 | DB5-----P1.5 | RS-------P3.3 ||DB2-----P1.2 | DB6-----P1.6 | E--------P3.5 ||DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND|---------------------------------------------------接线:模块TRIG接P3.7 ECH0 接P3.6本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。
HC-SR04超声波测距模块程序/************************************************************** *********************************************///HC-SR04 超声波测距模块//晶振:12MHZ//接线://串口波特率2400//编写:by kai*************************************************************** ********************************************/#include#include#include#define uchar unsigned char#define uint unsigned intsbit RX = P3^3; // ECHOsbit TX = P1^4; // TRLGsbit BEEP = P1^6; // BEEPsbit K1 = P4^5; // 报警距离 +sbit K2 = P4^3; // 报警距离 -unsigned int time=0;unsigned int timer=0;float S=999;bit flag =0;unsigned int B1 = 150; //设置报警距离 2-400//延时void Delay10ms() //@12.000MHz {unsigned char i, j;_nop_();_nop_();i = 117;j = 183;do{while (--j);} while (--i);}void Delay800ms() //@12.000MHz {unsigned char i, j, k;i = 37;j = 123;k = 92;do{do{while (--k);} while (--j);} while (--i);}/********************************************************/void Conut(void){time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.87)/100; //算出来是CMif(flag==1) //超出测量{flag=0;printf("-----\n");}printf("S=%f\n",S);}/********************************************************/void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{flag=1; //中断溢出标志}/********************************************************/void StartModule() //T1中断用来扫描数码管和计800MS启动模块{TX=1; //800MS 启动一次模块Delay800ms();;TX=0;}void ceju(void){EA = 0; //关闭中断,防止影响测量数据StartModule();while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数EA = 1;Conut(); //计算}void Timer0Init(void) //微秒@12.000MHz{AUXR &= 0x7F; //定时器时钟12T模式TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0x00; //设置定时初值TH0 = 0x00; //设置定时初值TF0 = 0; //清除TF0标志ET0 = 1; //开启定时器1中断EA = 1; //开启定时器1中断}voidUartInit(void)//***************** {PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xF3; //设定定时初值TH1 = 0xF3; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1TI=1;}void baojing(){EA = 0;while(K1==0||K2==0){if(K1 == 0) // 报警距离 +{BEEP = 1;Delay10ms(); //消抖BEEP = 0;B1 = B1+5;}if(K2 == 0) // 报警距离 -{BEEP = 1;Delay10ms();BEEP = 0;B1 = B1-5;}}if(S{BEEP = 1;Delay800ms();Delay800ms();BEEP = 0;Delay800ms();BEEP = 1;Delay800ms();Delay800ms();BEEP = 0;Delay800ms();BEEP = 1;Delay800ms();Delay800ms();BEEP = 0;}EA = 1;}/********************************************************/ void main(void){Timer0Init();UartInit();K1 = 1;K2 = 1;P1M1 = 0X00;P1M0 = 0X40;BEEP = 1;Delay800ms(); BEEP = 0; while(1){ceju();Delay800ms(); baojing();}}。
51单片机驱动超声波测距模块C51程序51单片机驱动超声波测距模块C51程序#include;#define uchar unsigned char#define uint unsigned int#define ulong unsigned long//******************* 函数声明**************************void init_T otal(); //总初始化void init_T0(); //初始化定时器T0void init_T1(); //初始化定时器T1void init_inter0();//初始化外部中断1void send_T();void delay(uint z);//延时一段时间void delay_300us();//延时300usvoid delay_100us();//延时100us//*********************************************** *********sbit lcdrs=P1^7;sbit lcdrw=P3^1;sbit lcden=P1^5;//1602液晶控制端sbit send=P1^0;//sbit BEEP=P2^5;sbit wei=P2^6;sbit duan=P2^7;volatile uchar Count_TH ,Count_TL;//分别读计数器T1的高位TH1,低位TL1uchar t0,flag;uint time;uchar code table1[]=" distance "; uchar code table2[]=" ";//初始化显示void write_com(uchar com)//1602写指令函数{lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar datb)//1602写数据函数{ lcdrs=1;P0=datb;delay(1);lcden=1;delay(1);lcden=0;}void distance(uchar addr,uint datb){uchar bai,shi,ge ;bai=datb/100;shi=datb%100/10;ge=datb%10;write_com(0x80+0x40+addr);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);}/************************************************ *************************************** 名称:void init_T otal()* 功能:总初始化* 入口参数:NULL* 全局变量:NULL* 返回值:NULL**************************************************************************************/void init_T otal(){init_T0(); //初始化定时器T0为工作方式2 init_T1(); //初始化定时器T1为工作方式1 init_inter0();//初始化外部中断1EA=1; //开总中断}/*************************************************************************************** 名称:void init_T0()* 功能:初始化定时器T0为工作方式2* 入口参数:NULL* 全局变量:NULL* 返回值:NULL**************************************************************************************/void init_T0(){TMOD=0X12;TH0=0XE7;TL0=0XE7;EA=0;ET0=1;TR0=1;}/************************************************ *************************************** 名称:void init_T1()* 功能:初始化定时器T1为工作方式1* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void init_T1(){TMOD=0X12;TH1=0;TL1=0;EA=0;ET1=1;TR1=1;}/************************************************ *************************************** 名称:void init_inter1()* 功能:初始化外部中断1为低电平触发方式* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void init_inter0(){IT0=0; //低电平触发EA=0;EX0=0; //关外部中断1}/************************************************ *************************************** 名称:void inter_T0() interrupt 1* 功能:定时器T0中断函数产生40KHZ的方波* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void inter_T0() interrupt 1{send=~send;}/************************************************ *************************************** 名称:void inter_T1() interrupt 3* 功能:定时器T1中断函数* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void inter_T1() interrupt 3{TR1=0;EX0=0; //关外部中断0TH1=0;TL1=0;flag=2;}/************************************************ *************************************** 名称:void inter1() interrupt 2* 功能:外部中断1函数* 入口参数:NULL* 全局变量:Count_TH,Count_TL* 返回值:NULL************************************************* *************************************/void inter0() interrupt 0{TR1=0;EX0=0;flag=1;}/************************************************ *************************************** 名称:void send_T()* 功能:发送10个超声波脉冲* 入口参数:NULL* 全局变量:Count* 返回值:NULL************************************************* *************************************/void send_T(){delay_100us();//发送100us的方波TR0=0;//关定时器T0}/************************************************ *************************************** 名称:void delay(uint z)* 功能:延时一段时间* 入口参数:z* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay(uint z){uint x,y;for(x=z;x>;0;x--)for(y=1000;y>;0;y--);}/************************************************ *************************************** 名称:void delay_300us()* 功能:延时300us* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay_300us(){uint x;for(x=75;x>;0;x--);}/************************************************ *************************************** 名称:void delay_100us()* 功能:延时100us* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay_100us(){uint x;for(x=24;x>;0;x--);}//*********************************************** ****************************************void main(){uint t,s;init_T otal();//总初始化while(1){TR1=1;//启动定时器1TR0=1;//启动定时器0send_T(); //发送100us超声波脉冲delay_300us();//延时300us跳过盲区EX1=1; //开外部中断1while(!flag); //等待回波或定时器T1溢出if(flag==1) //回波{Count_TH=TH1;//读计数器T1的高位TH1 Count_TL=TL1;//读计数器T1的低位TL1 t=Count_TH*256+Count_TL;s=(33140*t)/400000;distance(4,s);//液晶1602显示距离 }/* else //定时器T1溢出{Count_TH=0XFE;Count_TL=0X7F;// P2=Count_TH;P2=Count_TL;}*/delay(150);flag=0;//标志位清0TH1=0; //T1清0重新计时TL1=0;}}。
超声波测距模块的工作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!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. 发射超声波:超声波测距模块通过发射电路产生一定频率的超声波信号,并通过换能器将其转换为机械波向目标物体发射。
int Trigpin = 7; //定义模块触发引脚int Echopin = 5; //定义模块接收引脚float Distance; //定义距离变量void setup(){pinMode(Echopin,INPUT) ;pinMode(Trigpin,OUTPUT);Serial.begin(9600);//启动串口功能}void loop(){Distance = Measurement();//调用测量函数,将采得的值给变量DistanceSerial.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();//调用测量函数,将采得的值给变量DistanceSerial.print(Distance);//在端口输出距离Serial.println("cm");//输出单位,并换行myservo3.write(90);delay(2000);Distance = Measurement();//调用测量函数,将采得的值给变量DistanceSerial.print(Distance);//在端口输出距离Serial.println("cm");//输出单位,并换行myservo3.write(178);delay(2000);Distance = Measurement();//调用测量函数,将采得的值给变量DistanceSerial.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}。
超声波测距模块SR04测试程序51单⽚机(串⼝助⼿,串⼝通信)#include#includetypedef unsigned char uint8;typedef unsigned int uint16;sbit Trig=P3^3;//触发引脚定义sbit Echo=P3^2;//测量引脚定义uint16 distance;//定义全局变量/******************************************延时让Trig引脚产⽣⼤于10us的脉冲********************************************/void delay(){uint8 i;for(i=0;i<100;i++);}//初始化void init(){EA=1;//开总中断IT0=0;//外部中断0,低电平触发TMOD|=0x01;//定时器0 ⼯作模式1TH0=0;TL0=0;TR0=0;}//串⼝设置void UART_init(){SCON=0x50;TMOD=0x20;TH1=0xFD;TL1=0xFD;TR1=1;}//发送⼀个字节void UART_send_byte(uint8 dat){SBUF=dat;while(TI==0);TI=0;}//发送⼀组测得的distancevoid UART_send_dat(uint16 temp){UART_send_byte((temp/10000)%10 + '0');UART_send_byte((temp/1000)%10 + '0');UART_send_byte((temp/100)%10 + '0');UART_send_byte((temp/10)%10 + '0');UART_send_byte('.');UART_send_byte(temp%10 + '0');UART_send_byte('c');UART_send_byte('m');}//主函数main(){UART_init();//初始化init(); //初始化Trig=0;//先把引脚拉低while(1)//进⼊循环{Trig=1;delay();//产⽣脉冲Trig=0;while(Echo==0);//等待引脚被拉⾼TR0=1;//打开定时器0EX0=1;//打开中断while(TH0<250);//正在测量数据,需要等待TR0=0;TL0=0;TH0=0;UART_send_dat(distance);//向串⼝发送测得的distanceUART_send_byte('\r');UART_send_byte('\n');}}void extra_interrupt() interrupt 0 //外部中断0{distance=(256*TH0+TL0)*0.184;//测得最⼩精度位mm(晶振为11059200Hz)//P0=Echo;EX0=0;//关闭中断}/********************关于上式的计算**************(256*TH0+TL0)机器周期个数⼀个机器周期*⾳速/2=(12/11059200)*340/2=0.184*************************************************/。
US-100超声波测距模块解析1. 简介US-100超声波测距模块是一种用于非接触式测量距离的模块,它可以通过发送超声波信号并接收其回波,根据回波时间计算物体与模块的距离。
US-100模块是HC-SR04模块的升级版,具有较高的精度和更全面的功能。
US-100超声波测距模块有四个引脚:VCC、Trig、Echo和GND。
其中,VCC和GND是电源引脚,Trig是发射引脚,Echo是接收引脚。
模块可以通过直接连接到Arduino等微控制器上进行使用。
2. 原理超声波是一种高频音波,其频率通常在20kHz以上。
US-100模块工作原理是,当Trig引脚发出一个10微秒的高电平信号时,模块内部会产生一次20kHz的超声波发射。
当超声波遇到物体后反射回来,回波会被Echo引脚接收到。
模块会将Echo引脚的电平变化转换成一个时间信号,并将此信号与回波时间进行比较从而计算出距离。
通过改变Trig引脚产生高电平信号的持续时间,我们可以控制超声波的发送距离和精度。
US-100模块可以设置不同的模式,以改变Trig信号的长度和测量单位等参数。
3. 使用方法接线:•VCC引脚接3.3V或5V电源•GND引脚接地•Trig引脚接Arduino的数字输出引脚•Echo引脚接Arduino的数字输入引脚代码:```c int trigPin = 2; int echoPin = 3; long duration, cm, inches;void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);Serial.begin(9600); }void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2);digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 58; inches = duration / 148;Serial.print(cm); Serial.print(。
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
}。