超声波测距仪
基本原理
?超聲波是利用反射的原理測量距離的,被測距離一端為超聲波傳感器,另一端必須有能反射超聲波的物體。測量距離時,將超聲波傳感器對準反射物發射超聲波,并開始計時,超聲波在空氣中傳播到達障礙物后被反射回來,傳感器接收到反射脈沖后立即停止計時,然后根據超聲波的傳播速度和計時時間就能計算出兩端的距離。測量距離D為???????????????????????????????
式中??? c——超聲波的傳播速度;
????????? ?t——超聲波發射到接收所需時間的一半,也就是單程傳播時間。
程序框圖
超聲波測距儀的主要技術指標
測量距離:0.20m-1.3m
測溫范圍:-10℃~115℃
測量距離精度:1cm
實時功率:0.05W
標準頻率:40kHz
聲壓級:120±3(公式:S.P.L.= 20logP/Pre (dB))
系統發射功率:1mW(max)
工作電流:80mA(min)、90mA(max)
輸入電源電壓:5V
超聲波模塊
HC-SR04
程序
/***********************************************************************************************************/ //HC-SR04 超聲波測距模塊 DEMO 程序 //晶振:11。0592 //接線:模塊TRIG接 P1.2 ECH0 接P1.1 //串口波特率9600 /***********************************************************************************************************/ #include <AT89X51.H> #include <intrins.h> #include <STDIO.H>#define uchar unsigned char #define uint unsigned int #define RX P1_1 #define TX P1_2unsigned int time=0; unsigned int timer=0; float S=0; bit flag =0;/********************************************************/ 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 delayms(unsigned int ms) {unsigned char i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}} } /********************************************************/ void zd0() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍 {flag=1; //中斷溢出標志 } /********************************************************/ void StartModule() //T1中斷用來掃描數碼管和計800MS啟動模塊 {TX=1; //800MS 啟動一次模塊_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_();TX=0; } /********************************************************/ void main(void) { TMOD=0x21; //設T0為方式1,GATE=1;SCON=0x50;TH1=0xFD;TL1=0xFD;TH0=0;TL0=0; TR0=1; ET0=1; //允許T0中斷TR1=1; //開啟定時器TI=1;EA=1; //開啟總中斷while(1){StartModule();while(!RX); //當RX為零時等待TR0=1; //開啟計數while(RX); //當RX為1計數并等待TR0=0; //關閉計數Conut(); //計算delayms(10); //100MS} }測距2cm-400cm
總結
- 上一篇: 2.模块Ⅰ
- 下一篇: 【专题5:硬件设计】 之 【49.运算放