欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
關(guān)于超聲波模塊測量水位
[打印本頁]
作者:
越快樂越墮落
時間:
2017-3-28 14:17
標(biāo)題:
關(guān)于超聲波模塊測量水位
問題:超聲波測量一個水塔的水位,假如水塔1.5米高,水位有1米,那么我把超聲波模塊固定在水塔的口子上(因為模塊不防水,沒辦法放進水里),測出來的就只是0.5米已經(jīng)用了的水位,而不是還有多少,這個問題怎么解決?我這有源程序和原理圖大神幫忙修改一下程序使其測的水位是還有多少水而不是用了多少。
謝謝
原理圖.jpg
(294.14 KB, 下載次數(shù): 125)
下載附件
2017-3-28 14:15 上傳
/***********************************************************************************************************/
//hc-sr04 超聲波測距模塊 DEMO 程序
//晶振:11。0592
//接線:模塊TRIG接 P0.2 ECH0 接P0.1
//數(shù)碼管:共陽數(shù)碼管P1接數(shù)據(jù)口,P2.5 P2.4 P2.3接選通數(shù)碼管
/***********************************************************************************************************/
#include <AT89x51.H> //器件配置文件
#include <intrins.h>
#define RX P0_1
#define TX P0_2
unsigned int time=0;
unsigned int timer=0;
unsigned char posit=0;
unsigned long S=0;
bit flag =0;
unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
unsigned char const positon[3]={ 0xdf,0xef,0xf7};
unsigned char disbuff[4] ={ 0,0,0,0,};
/********************************************************/
void Display(void) //掃描數(shù)碼管
{
P2=0xfe;//消隱
//delay(5);
if(posit==0)
{P1=(discode[disbuff[posit]])&0x7f;}
else
{P1=discode[disbuff[posit]];}
P2=positon[posit];
if(++posit>=3)
posit=0;
}
/********************************************************/
void Conut(void)
{
P2=0xfe;
time=TH0*256+TL0;
TH0=0;
TL0=0;
P2=0xfe;//消隱
S=(time*1.7)/100; //算出來是CM
if((S>=700)||flag==1) //超出測量范圍顯示“-”
{
P2=0xfe;//消隱
flag=0;
//delay(5);
disbuff[0]=10; //“-”
disbuff[1]=10; //“-”
disbuff[2]=10; //“-”
}
else
{
P2=0xfe;//消隱
//delay(5);
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
P2=0xfe;
}
}
/********************************************************/
void zd0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
{
flag=1; //中斷溢出標(biāo)志
}
/********************************************************/
void zd3() interrupt 3 //T1中斷用來掃描數(shù)碼管和計800MS啟動模塊
{
P2=0xfe;
TH1=0xf8;
TL1=0x30;
Display();
timer++;
if(timer>=400)
{
P2=0xfe;
timer=0;
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;
}
}
/*********************************************************/
<DIV class=blockcode>
<BLOCKQUOTE>void main( void )
{
P2=0xfe;//消隱
//delay(5);
TMOD=0x11; //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS定時
TL1=0x30;
P2=0xfe;
ET0=1; //允許T0中斷
ET1=1; //允許T1中斷
TR1=1; //開啟定時器
EA=1; //開啟總中斷
while(1)
{
while(!RX); //當(dāng)RX為零時等待
TR0=1; //開啟計數(shù)
P2=0xfe;
//delay(5);
while(RX); //當(dāng)RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
Conut(); //計算
}
}
復(fù)制代碼
作者:
51hei小胡
時間:
2017-3-29 04:34
解決的怎么樣了,手繪原理圖很漂亮.
作者:
william_2016
時間:
2017-3-29 08:18
我的思路是,安裝時,先讓超聲波模塊測量并記錄空水池的深度,作為初始常量--因為該水池深度是不變。
然后,實際運作時,利用超聲波測量到的安裝點到水面距離,記錄測試變量。
最后,簡單計算下即可得到可讀的水位信息:水池深度(初始變量)-水面距離(實測變量)
作者:
imxuheng
時間:
2017-3-29 09:16
用水塔高度減去超聲波半程吧,S=150-(time*1.7)/100; //算出來是CM,150是水塔高度,單位cm
作者:
jiajuntao
時間:
2017-3-29 09:16
既然用超聲波頭測試距離,那么要知道水位,就要進行簡單的距離計算和判斷,修改這一句
S=(time*1.7)/100; //算出來是CM
對S進行重新計算 S=1.5-((time*17)/100)
試試,然后修改
作者:
zhangzhcheng
時間:
2017-3-29 11:01
設(shè)置水塔深為初始值,減去超聲波測得的距離不就是剩余的水位高度了么?
作者:
哈哈嘻嘻嘻
時間:
2017-5-30 10:47
實地測試了嗎,超聲波遇到水面反射的多嗎,能測準(zhǔn)嗎
作者:
3760609865
時間:
2017-5-30 16:15
先測一個空池深度,然后用池深減去你的測量值,最后顯示剩下的數(shù)就是水深。
作者:
yuquanyou
時間:
2017-5-30 19:20
超聲波測水位嚴(yán)重不準(zhǔn),測水上漂浮物還可以。
作者:
手寫的從前
時間:
2018-4-28 23:29
可以用一個連通器,測得就準(zhǔn)了
作者:
dfdfuhuh
時間:
2018-7-17 10:46
其實可以用共陰極的數(shù)碼管來顯示,而且電路圖幾乎跟你一樣,不用到鎖存器。
求黑幣,求黑幣,求黑幣!!!!
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit c=P2^0; //
sbit b=P2^1;
sbit a=P2^2;
sbit d=P2^3;
sbit trig=P2^4;
sbit echo=P2^5;
uint time=0;
uint timer=0;
uchar posit=0;
unsigned long s=0;
bit flag =0;
unsigned char code WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar temp[3]; //測距接收緩沖區(qū)
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display() //顯示函數(shù)
{
a=1,b=0,c=0,d=0;
P0=WE0[s/100];
delay(25);
P0=0x00;
a=0,b=1,c=0,d=0;
P0=WE0[s%100/10];
delay(25);
P0=0x00;
a=0;b=0;c=1;d=0;
P0=WE0[s%100%10];
delay(25);
P0=0x00;
}
void time0() interrupt 1
{
flag=1;
}
void StartModule() //啟動模塊
{
trig=1; //啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//delay(20000);
trig=0 ;
}
void count()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.7)/100; //算出來是CM
display();
}
void main()
{
TMOD=0x01; //設(shè)T0、T1為方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允許T0中斷
EA=1;
// uint z; //開啟總中斷
while(1)
{
StartModule();
while(!echo); //當(dāng)UL_RX為零時等待
TR0 = 1; //開啟計數(shù)
while(echo); //當(dāng)UL_RX為1計數(shù)并等待
TR0 = 0;
count();
}
}
作者:
Thkai
時間:
2018-12-19 18:06
做一個相減就行
作者:
sept80
時間:
2018-12-20 10:56
已知水塔深度的話 做減法 水塔深度未知的話 這種方式水塔有水的情況下測量不到水塔深度的
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1