找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于超声波模块测量水位

查看数: 11690 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-3-28 14:17

正文摘要:

问题:超声波测量一个水塔的水位,假如水塔1.5米高,水位有1米,那么我把超声波模块固定在水塔的口子上(因为模块不防水,没办法放进水里),测出来的就只是0.5米已经用了的水位,而不是还有多少,这个问题怎么解决 ...

回复

ID:450546 发表于 2018-12-20 10:56
已知水塔深度的话 做减法 水塔深度未知的话 这种方式水塔有水的情况下测量不到水塔深度的
ID:450090 发表于 2018-12-19 18:06
做一个相减就行
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:318695 发表于 2018-4-28 23:29
可以用一个连通器,测得就准了
ID:70302 发表于 2017-5-30 19:20
超声波测水位严重不准,测水上漂浮物还可以。
ID:159139 发表于 2017-5-30 16:15
先测一个空池深度,然后用池深减去你的测量值,最后显示剩下的数就是水深。
ID:187473 发表于 2017-5-30 10:47
实地测试了吗,超声波遇到水面反射的多吗,能测准吗
ID:22751 发表于 2017-3-29 11:01
设置水塔深为初始值,减去超声波测得的距离不就是剩余的水位高度了么?

评分

参与人数 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:151348 发表于 2017-3-29 09:16
用水塔高度减去超声波半程吧,S=150-(time*1.7)/100; //算出来是CM,150是水塔高度,单位cm

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:105425 发表于 2017-3-29 08:18
我的思路是,安装时,先让超声波模块测量并记录空水池的深度,作为初始常量--因为该水池深度是不变。
然后,实际运作时,利用超声波测量到的安装点到水面距离,记录测试变量。
最后,简单计算下即可得到可读的水位信息:水池深度(初始变量)-水面距离(实测变量)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

ID:171096 发表于 2017-3-29 04:34
解决的怎么样了,手绘原理图很漂亮.

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表