一.硬件方案
利用超声波传输中距离与时间的关系,采用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();
//用减小按键取消报警标志
}
//-----------------------------------
}
}
上一篇:Maxim推出新一代ChipDNA PUF技术的物联网安全芯片
下一篇:基于51单片机的智能恒温箱设计--数码管显示
推荐阅读最新更新时间:2024-11-06 12:32
设计资源 培训 开发板 精华推荐
- ZXLD1370EV2,基于 ZXLD1370 降压-升压 LED 驱动器的评估板
- ZXLD1356 具有内部开关的高精度 550mA、60V LED 驱动器的典型应用
- #第七届立创电赛#2022暑期训练营 USB电能采集表
- 一款USB type-C供电的锂电池充电器LiPow
- EVAL-ADF7021DBZ2,基于 ADF7021 862 - 870 MHz ISM 频段收发器的子板
- LD39030SJ 300 mA 低静态电流软启动、低噪声稳压器的典型应用
- 斯太克USB转接板
- TDF8599B I 方型 C 总线控制的双通道 43W/4W、单通道 85W/1W D 类功率放大器在 I2C 总线模式下的单 BTL 典型应用图,具有负载诊断功能
- REF196 精密微功率、低压差电压基准的典型应用
- ADR366A 3.3V 低功耗、低噪声电压基准的典型应用,具有灌/拉能力