久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11657|回復: 12
收起左側

關于超聲波模塊測量水位

  [復制鏈接]
ID:99130 發表于 2017-3-28 14:17 | 顯示全部樓層 |閱讀模式
問題:超聲波測量一個水塔的水位,假如水塔1.5米高,水位有1米,那么我把超聲波模塊固定在水塔的口子上(因為模塊不防水,沒辦法放進水里),測出來的就只是0.5米已經用了的水位,而不是還有多少,這個問題怎么解決?我這有源程序和原理圖大神幫忙修改一下程序使其測的水位是還有多少水而不是用了多少。
謝謝
原理圖.jpg
  1. /***********************************************************************************************************/
  2. //hc-sr04 超聲波測距模塊 DEMO 程序
  3. //晶振:11。0592
  4. //接線:模塊TRIG接 P0.2 ECH0 接P0.1
  5. //數碼管:共陽數碼管P1接數據口,P2.5 P2.4 P2.3接選通數碼管
  6. /***********************************************************************************************************/
  7. #include <AT89x51.H> //器件配置文件
  8. #include <intrins.h>
  9. #define RX P0_1
  10. #define TX P0_2
  11. unsigned int time=0;
  12. unsigned int timer=0;
  13. unsigned char posit=0;
  14. unsigned long S=0;
  15. bit flag =0;
  16. unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
  17. unsigned char const positon[3]={ 0xdf,0xef,0xf7};
  18. unsigned char disbuff[4] ={ 0,0,0,0,};
  19. /********************************************************/
  20. void Display(void) //掃描數碼管
  21. {
  22. P2=0xfe;//消隱
  23. //delay(5);
  24. if(posit==0)
  25. {P1=(discode[disbuff[posit]])&0x7f;}
  26. else
  27. {P1=discode[disbuff[posit]];}
  28. P2=positon[posit];
  29. if(++posit>=3)
  30. posit=0;
  31. }
  32. /********************************************************/
  33. void Conut(void)
  34. {
  35. P2=0xfe;
  36. time=TH0*256+TL0;
  37. TH0=0;
  38. TL0=0;
  39. P2=0xfe;//消隱
  40. S=(time*1.7)/100; //算出來是CM
  41. if((S>=700)||flag==1) //超出測量范圍顯示“-”
  42. {
  43. P2=0xfe;//消隱
  44. flag=0;
  45. //delay(5);
  46. disbuff[0]=10; //“-”
  47. disbuff[1]=10; //“-”
  48. disbuff[2]=10; //“-”
  49. }
  50. else
  51. {
  52. P2=0xfe;//消隱
  53. //delay(5);
  54. disbuff[0]=S%1000/100;
  55. disbuff[1]=S%1000%100/10;
  56. disbuff[2]=S%1000%10 %10;
  57. P2=0xfe;
  58. }
  59. }
  60. /********************************************************/
  61. void zd0() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍
  62. {
  63. flag=1; //中斷溢出標志
  64. }
  65. /********************************************************/
  66. void zd3() interrupt 3 //T1中斷用來掃描數碼管和計800MS啟動模塊
  67. {
  68. P2=0xfe;
  69. TH1=0xf8;
  70. TL1=0x30;
  71. Display();
  72. timer++;
  73. if(timer>=400)
  74. {
  75. P2=0xfe;
  76. timer=0;
  77. TX=1; //800MS 啟動一次模塊
  78. _nop_();
  79. _nop_();
  80. _nop_();
  81. _nop_();
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. _nop_();
  86. _nop_();
  87. _nop_();
  88. _nop_();
  89. _nop_();
  90. _nop_();
  91. _nop_();
  92. _nop_();
  93. _nop_();
  94. _nop_();
  95. _nop_();
  96. _nop_();
  97. _nop_();
  98. _nop_();
  99. TX=0;
  100. }
  101. }
  102. /*********************************************************/
  103. <DIV class=blockcode>
  104. <BLOCKQUOTE>void main( void )

  105. {
  106. P2=0xfe;//消隱
  107. //delay(5);
  108. TMOD=0x11; //設T0為方式1,GATE=1;
  109. TH0=0;
  110. TL0=0;
  111. TH1=0xf8; //2MS定時
  112. TL1=0x30;
  113. P2=0xfe;
  114. ET0=1; //允許T0中斷
  115. ET1=1; //允許T1中斷
  116. TR1=1; //開啟定時器
  117. EA=1; //開啟總中斷

  118. while(1)
  119. {
  120. while(!RX); //當RX為零時等待
  121. TR0=1; //開啟計數
  122. P2=0xfe;
  123. //delay(5);
  124. while(RX); //當RX為1計數并等待
  125. TR0=0; //關閉計數
  126. Conut(); //計算
  127. }

  128. }
復制代碼




回復

使用道具 舉報

ID:171096 發表于 2017-3-29 04:34 | 顯示全部樓層
解決的怎么樣了,手繪原理圖很漂亮.
回復

使用道具 舉報

ID:105425 發表于 2017-3-29 08:18 | 顯示全部樓層
我的思路是,安裝時,先讓超聲波模塊測量并記錄空水池的深度,作為初始常量--因為該水池深度是不變。
然后,實際運作時,利用超聲波測量到的安裝點到水面距離,記錄測試變量。
最后,簡單計算下即可得到可讀的水位信息:水池深度(初始變量)-水面距離(實測變量)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:151348 發表于 2017-3-29 09:16 | 顯示全部樓層
用水塔高度減去超聲波半程吧,S=150-(time*1.7)/100; //算出來是CM,150是水塔高度,單位cm

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:104472 發表于 2017-3-29 09:16 | 顯示全部樓層
既然用超聲波頭測試距離,那么要知道水位,就要進行簡單的距離計算和判斷,修改這一句
S=(time*1.7)/100; //算出來是CM
對S進行重新計算    S=1.5-((time*17)/100)
試試,然后修改

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:22751 發表于 2017-3-29 11:01 | 顯示全部樓層
設置水塔深為初始值,減去超聲波測得的距離不就是剩余的水位高度了么?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:187473 發表于 2017-5-30 10:47 | 顯示全部樓層
實地測試了嗎,超聲波遇到水面反射的多嗎,能測準嗎
回復

使用道具 舉報

ID:159139 發表于 2017-5-30 16:15 來自觸屏版 | 顯示全部樓層
先測一個空池深度,然后用池深減去你的測量值,最后顯示剩下的數就是水深。
回復

使用道具 舉報

ID:70302 發表于 2017-5-30 19:20 | 顯示全部樓層
超聲波測水位嚴重不準,測水上漂浮物還可以。
回復

使用道具 舉報

ID:318695 發表于 2018-4-28 23:29 | 顯示全部樓層
可以用一個連通器,測得就準了
回復

使用道具 舉報

ID:305386 發表于 2018-7-17 10:46 | 顯示全部樓層
其實可以用共陰極的數碼管來顯示,而且電路圖幾乎跟你一樣,不用到鎖存器。
求黑幣,求黑幣,求黑幣!!!!
#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];    //測距接收緩沖區        
void delay(uint z)
{
    uchar x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void display() //顯示函數
{

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;                       //設T0、T1為方式1,GATE=1;
    TH0=0;
    TL0=0;         
    ET0=1;                          //允許T0中斷
        EA=1;
//        uint z;                                                          //開啟總中斷
           while(1)
    {
                StartModule();
                while(!echo);                     //當UL_RX為零時等待
                TR0 = 1;                           //開啟計數
                while(echo);                      //當UL_RX為1計數并等待
                TR0 = 0;
                count();
    }
}
回復

使用道具 舉報

ID:450090 發表于 2018-12-19 18:06 | 顯示全部樓層
做一個相減就行
回復

使用道具 舉報

ID:450546 發表于 2018-12-20 10:56 | 顯示全部樓層
已知水塔深度的話 做減法 水塔深度未知的話 這種方式水塔有水的情況下測量不到水塔深度的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜精品久久久 | 91亚洲免费 | 一区二区久久电影 | 国产精品久久久久久久久久久久久久 | 婷婷五月色综合 | 国产精品美女 | 婷婷色成人 | 激情 一区 | 青青草亚洲 | 国产二区在线播放 | 亚洲一区二区久久 | 欧美在线| jizjizjiz中国护士18 | 熟女毛片 | 4h影视| 超碰97在线免费 | 久草网视频 | 国产在线精品一区二区三区 | 精品国产青草久久久久96 | 欧美成人专区 | 视频一区中文字幕 | 97精品超碰一区二区三区 | av天天操| 91精品国产一区二区三区 | 亚洲视频一区二区三区四区 | 亚洲三区在线 | 欧美一区二区三区在线看 | 欧美一级艳情片免费观看 | 日本成人三级电影 | av激情在线 | 久久国产精品99久久久大便 | 日韩在线一区二区三区 | 一区二区三区久久 | 亚洲中午字幕 | 日韩中文字幕免费在线 | 最新高清无码专区 | 91色视频在线观看 | 一区二区三区在线播放 | 青青久久久 | 日韩国产在线 | 高清久久久 |