历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2021年10月14日 | 基于51单片机的超声波液位控制器设计

2021-10-14 来源:eefocus

一.硬件方案

利用超声波传输中距离与时间的关系,采用8051单片机进行控制及数据处理,设计出了能精确测量两点间距离的超声波液位检测系统。并通过液位的高低开,通过控制继电器,选择注水或者放水。


主要由51单片机+HC-SR04超声波传感器+LCD1602液晶+水泵+按键+蜂鸣器+继电器设计而成;如图:

二.设计功能

(1)本设计中液晶显示有4个字母,分别为

H------容器的最高水位设定值(不能高于实际高度)

L------容器的最低水位设定值

D-----容器实际高度(可以设置)

C-----容器内液体的高度(在实际演示中,障碍物离探头越近,液晶C显示越大,因为障碍物好比液面,离探头近了说明水位高了)

(2)如果容器实际高度D你设置为1米,那么C液体的高度最高能测到98cm,因为探头的盲区在2cm左右。如果D设为2米,那么最高能测到1.98m。

(3)按键功能分别为:设置键 增加键 减小键 复位键。

(4)三个指示灯的分别功能为:红色----超过设定的最高水位H;黄色-----低于设定的最低水位L;绿色----最高H和最低L中间。

(5)当液位高于或者低于设置值,蜂鸣器报警;

(6)当液位高于最高水位设定值,排水继电器打开;当液位低于最低水位设定值,注水继电器打开;


三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

(2)PCB,如图:

四.软件设计

主程序源码

/*********************************************************/

void main(void)

{

initIO();//初始化IO端口

delay500ms(); //启动延时,给器件进入正常工作状态留够时间

initLCD1602(); //LCD初始化

putLineCharsToLCD1602(lineOne, 8, 8, "D:000cm ");//显示distance (总)距离(检测探头到水库底部的距离)D

putThreeCharToLCD1602(lineOne, 8 + 2, uiD);//显示三位数值

putLineCharsToLCD1602(lineOne, 0, 8, "H:000cm ");//显示设定的最高报警水位H

putThreeCharToLCD1602(lineOne, 0 + 2, uiH);//显示三位数值

putLineCharsToLCD1602(lineTow, 0, 8, "L:000cm ");//显示设定的最低报警水位L

putThreeCharToLCD1602(lineTow, 0 + 2, uiL);//显示三位数值

putLineCharsToLCD1602(lineTow, 8, 8, "C:000cm ");//显示当前CURRENT水位C

initTimer0();//初始化定时器0

initTimer1();

//阀门动作:初始先排水

io_Control_Inlet = isio_Control_Inlet_OFF;

io_Control_Outlet = isio_Control_Outlet_ON;

g_flagSwitch = isNo;

while(1)

{

io_US_TX = 1;        //启动超声波模块信号

delay10us();

io_US_TX = 0;

while(io_US_RX == 0);//等待计时开始

TR0 = 1;    //开启定时器0,计时开始

IT1 = 1; //设置外中断INT1输入信号模式(1:Falling only仅下降沿有效 0:Low level低电平有效)

EX1 = 1;                        //使能外中断INT1

while(EX1 == 1 && g_flag == isNo)//等待中断或超时退出

{

uchar ucKeyValue = GetKey();//在等待中检测按键

if(ucKeyValue) execute_key_task(ucKeyValue);//如果有键按下则执行按键任务

}

if(CalculatedWaterLevel() == isNo) continue;//计算水位,如果超出范围返回isNo并重新循环

TR0 = 0;//暂时关闭定时器0

//清零定时器和计数变量以及标志

TL0 = 0;

TH0 = 0;

g_flag = isNo;

ucCount = 0;

g_flag05s = isNo;

TR0 = 1;//打开定时器0

while(g_flag05s == isNo)//延时0.52秒,以防止此期间返回的超声波产生错误信息,并使显示变化放慢,保证视觉效果

{

uchar ucKeyValue = GetKey();

if(ucKeyValue) 

{

if(ucKeyValue == DATA_KEY_DEC)

{

g_flagBeepTimer = isNo;//用减小按键取消报警标志

}


execute_key_task(ucKeyValue);//如果有键按下则执行按键任务

}


}

TR0 = 0;//暂时关闭定时器0

//清零定时器和复位标志

TL0 = 0;

TH0 = 0;

g_flag = isNo;

//-----------------------------------

//水箱清洗提示:

if(g_flagBeepTimer == isYes)

{

buzzerCall();

//用减小按键取消报警标志

}

//-----------------------------------

}

}

推荐阅读

史海拾趣

Faraday Electronics Inc公司的发展小趣事

在XXXX年,电子行业迎来了前所未有的变革。随着物联网、人工智能等技术的快速发展,传统的电子产品市场面临着巨大的挑战。Faraday Electronics Inc意识到,如果不进行战略转型,公司将难以在激烈的市场竞争中立足。于是,公司决定转型为一家专注于智能硬件和软件解决方案的提供商。通过这一战略转型,公司成功抓住了市场机遇,实现了快速发展。

Astema公司的发展小趣事

Astema公司注重人才培养和团队建设。公司设立了完善的培训体系,为员工提供持续的学习和发展机会。同时,Astema还积极引进优秀人才,打造了一支高素质、专业化的团队。这支团队不仅为公司的技术创新提供了有力支持,还为公司的长期发展奠定了坚实的基础。

Brand-Rex公司的发展小趣事

除了在欧洲和中国市场取得显著成就外,Brand-Rex还积极拓展全球市场。其亚太区总部设在澳大利亚墨尔本市,大中国区办事处分别设在北京、上海及香港,东南亚办事处设在新加坡。这些布局使得Brand-Rex能够更好地服务全球客户,满足不同地区的市场需求。同时,Brand-Rex还积极寻求与全球知名企业的合作机会,通过战略合作和技术交流不断提升自身的竞争力和创新能力。

综上所述,Brand-Rex在电子行业中的发展是一个充满挑战和机遇的过程。凭借其卓越的技术、优质的产品和全球市场的布局,Brand-Rex不断壮大并成为行业内的佼佼者。未来,随着全球电子行业的不断发展,Brand-Rex有望继续保持其领先地位,并为全球客户提供更加优质的产品和服务。

BELDEN公司的发展小趣事

在20世纪初,BELDEN公司在技术创新方面取得了显著突破。公司不仅将塑料绝缘材料应用于电线和电缆制造,还着眼于精密和高质量产品的需求,致力于高附加值的绝缘材料、电缆、防护和护套材料的生产。这些技术创新使得BELDEN的产品在性能和质量上都有了显著提升,进一步巩固了公司在市场中的地位。同时,公司还不断扩大产品线,增加了橡胶绝缘材料等多种新产品,满足了不同客户的需求。

博林(BL)公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Bellin Dynamic Systems公司的发展小趣事

随着国内市场的饱和,Bellin Dynamic Systems开始寻求国际化发展的道路。公司首先在欧洲设立了研发中心,以更好地了解当地市场需求和技术趋势。随后,公司又在美国和亚洲等地建立了生产基地和销售网络。通过这一系列的国际化战略举措,Bellin Dynamic Systems成功打开了国际市场,实现了业务的快速增长。

问答坊 | AI 解惑

大家做上位机都是用什么语言?

是用VB,VC++还是Delphi. 说说每种的优势是什么?让我确定一下方向。3Q ~…

查看全部问答>

请教各位大大 USB设备无法识别

自己做的一个USB设备插上电脑想写驱动  电脑提示USB设备无法识别  UNKOWN DEVICE  接着又提示驱动已装上可以正常使用了!!!我驱动还没开始写呢  这是怎么回事啊…

查看全部问答>

求助 开发板无法下载程序?

今天我给单片机写了一个串口通信的程序,下载进去后可以正常运行,后来我把程序改了一下后,再下载的时候,下载不进去,并且电脑重启了好几次,这该怎么解决啊?谢谢各位了!…

查看全部问答>

asp访问wince的问题

想通过ASP进行远程访问WINCE,实现文件操作,查了N久都没有头绪,fso不支持,写了com组件又不知道怎么用,急啊,哪位有类似经验的高人拜托指点下,谢谢!!…

查看全部问答>

关于中断的疑问!

比如我定义了一个外中断函数,里面执行的程序大约用10秒,, 那么,如果我在第5秒的时候再激活一个中断(时间中断),那么,这个外中断会继续执行吗?还是停下来,或者什么的?…

查看全部问答>

安装EVC4.0出异常。

系统是XP SP3 点完SETUP进入安装界面 点下一步就会出异常退出 怎么回事啊 ?…

查看全部问答>

一个二进制转BCD的问题搞得很郁闷,求大侠帮助

把一个二进制转成BCD码,一个截图是主程序,一个使用逻辑分析仪抓的数据,输入的数据最大为189975,加个60000后最大249975,平时这个数据是不断变化的,最大会有正负1000左右的跳动。现在的问题是:假如输入为100000,那么正确的输出应该是1、6、0 ...…

查看全部问答>

模拟电路中的运放电源设计要注意些什么

模拟电路中的运放电源设计要注意些什么…

查看全部问答>

菜鸟求前辈们帮我扫盲

最近要学低功耗的STM8L101,这个也是大家说的STM8家庭中的一员吗? 目前我只学到51. 请大侠们说说他和51的区别号码? 从硬件和软件编程(环境和语言)都说说 。。。。。谢谢了 我想这也是很多菜鸟的问题。 [ 本帖最后由 mcuPathfinder 于 2011-7- ...…

查看全部问答>

MSP430G2231产生PWM波

如何用MSP430G2231产生150Kz的方波?求教各位大神,谢谢了…

查看全部问答>