当前位置:首页 > 超声测距
HC-SR04超声波测距模块说明书 1、产品特点:
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。 基本工作原理:
(1)采用IO口TRIG触发测距,给最少10us的高电平信呈。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2; 2、实物图:
如右图接线,VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四个接口端。 图一实物图 3、电气参数:
电气参数HC-SR04超声波模块
工作电压DC5V工作电流15mA工作频率40kHz最远射程4m最近射程2cm测量角度15度 输入触发信号10uS的TTL脉冲
输出回响信号输出TTL电平信号,与射程成比例 规格尺寸 45*20*15mm
公司网上淘宝专卖店:http://jssensor.taobao.com客服:15813727805技术支持QQ:517535000 深圳市捷深科技有限公司http://xycsensor.cn.alibaba.com专业传感器开发与销售 4、超声波时序图: 图二、超声波时序图
以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
注:1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响 模块的正常工作。
2、测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果 5、实物规格:
#include \
#define uint unsigned int #define uchar unsigned char void USARTinit(); void timeinit(); long static uint distance=0; uchar table[]=\ uint x;
for(;y>0;y--)
for(x=100;x>0;x--); }*/ uchar i=0,j=0; void main( ) {
// Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; // USARTinit(); P1DIR|=BIT0; P2DIR=0XFF; timeinit(); lcdinit();
display_string(3,1,table);
P1IE=BIT1; P1IES&=~BIT1; while(1) {
P1OUT|=BIT0; delay(1); P1OUT&=~BIT0; delay(1000); display_one(1,0,(distance/10000)+0x30); display_one(2,0,(distance/1000)+0x30); display_one(3,0,(distance/100)+0x30); display_one(4,0,(distance/10)+0x30); display_one(5,0,distance+0x30); }
}
void timeinit() {
TACTL=TASSEL_2+ID_3+MC_1;//ID_2表示八分频! MC_1表示连续计数模式! BCSCTL2=0x88;//选择SMCLK的信号源XT2CLK(8MHz) CCR0=65535; _EINT(); //打开总中断! }
#pragma vector=PORT1_VECTOR __interrupt void port1_int(void) { if((P1IN&BIT1)==BIT1) {
TACTL|=MC_1+TACLR; P1IES|=BIT1; } else {
TACTL&=~MC_3; P1IES&=~BIT1; distance=TAR*5/3; P2OUT=TAR; }
P1IFG&=~BIT1; }
#include \void writecommand(uchar wdata); void writedata(uchar wdata); void delay(uint y);
void display_xy(uchar x,uchar y); void display_one(uchar x,uchar y,uchar c); void display_string(uchar x,uchar y,uchar *s);
void lcdinit() {
P4DIR=0XFF; P3DIR=0xff; delay(1);
writecommand(0x38); //必须要有,显示模式设置,设置为16*2显示,5*7点阵,8位数据接口! // delay(50);
writecommand(0x08); //关闭显示,要不要都可以 writecommand(0x01); //显示清屏
writecommand(0x0f); //开显示,显示光标,光标闪烁!! writecommand(0x06); //读/写作用时地址自动加一 }
void writecommand(uchar wdata) {
P3OUT &=~BIT0; //使RS=0,表示写命令 P3OUT &=~BIT1; //rw=0, 表示向1602里面写数据 // P3OUT &=~BIT2; //E=0 delay(1);
P3OUT |=BIT2; //使能E置一 P4OUT=wdata; //送命令 delay(10); //短暂延时,代替检测忙状态,产生方波!
P3OUT &=~BIT2; //使能E=0,下降沿将命令货数据送入1602 } void writedata(uchar wdata) {
P3OUT |=BIT0; //使RS=1,表示写数据 P3OUT &=~BIT1; //rw=0, 表示向1602里面写数据 // P3OUT &=~BIT2; 可以加,也可以不加!! delay(1);
P3OUT |=BIT2; P4OUT=wdata; delay(10); P3OUT &=~BIT2; }
void delay(uint y)
{
uint x;
for(;y>0;y--)
for(x=100;x>0;x--);//用8MHz的总频率!!! } void display_xy(uchar x,uchar y) //找字符串的地址!! { if(y==0x01) {
x=x+0x40+0x80; //首地址0X80,,第二行地址0X80+0X40! } else { x=0x80+x; } writecommand(x); }
void display_string(uchar x,uchar y,uchar *s) //显示字符串 { display_xy(x,y); while(*s) { writedata(*s); s++; } }
void display_one(uchar x,uchar y,uchar c) //显示一个字符! { display_xy(x,y); writedata(c); }
共分享92篇相关文档