当前位置: 首页 > news >正文

【Proteus仿真】【Arduino单片机】水箱液位监控系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶、按键、蜂鸣器、液位传感器、ADC转换器、水泵等。

主要功能:
系统运行后,LCD1602显示当前水位、上下限阈值和工作模式,系统默认处于自动模式。
若检测水位高于上限,声光报警,开启抽水。若检测水位低于下限,声光报警,开启加水。
可操作K4键切换为手动模式,然后通过K1/K2键开启加水和开启抽水。再次按下K4键回到自动模式。
若要修改上下限阈值,可通过K3键进入上下限设置,光标定位修改的值,K1和K2进行加减。
还可通过串口助手进行参数修改和模式切换,指令(十六进制)如下:
加–>01
减–>02
模式–>03
确定/自手动–>04


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据获取
void sys_data_get(void)
{u8 ad_value=0;float vol=0;while(1){//读取压力AD值ad_value=pcf8591_read_adcvalue(0);//计算电压vol=(float)ad_value*5.0/256;//计算液位高度VO=K*H+∮=0.038*H+1.105(V)	//H单位cmsys_ctrl.level=(vol-1.105)/0.038;if(sys_ctrl.level<=0)sys_ctrl.level=0;break;}
}//系统数据显示
void sys_data_show(void)
{while(1){//显示当前液位lcd1602_show_nums(5,0,sys_ctrl.level,3,0);//液位阈值显示lcd1602_show_nums(2,1,sys_ctrl.levell,3,0);lcd1602_show_nums(11,1,sys_ctrl.levelh,3,0);//自动手动模式显示if(sys_ctrl.auto_flag==1)lcd1602_show_string(12,0,"Manl");else lcd1602_show_string(12,0,"Auto");//阈值设置位置闪烁switch(sys_ctrl.mode){case 1://液位下限lcd1602_show_string(2,1,"   ");delay_ms(100);lcd1602_show_nums(2,1,sys_ctrl.levell,3,0);break;case 2://液位上限lcd1602_show_string(11,1,"   ");delay_ms(100);lcd1602_show_nums(11,1,sys_ctrl.levelh,3,0);break;}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=KEY_Scan(0);//模式设置if(key==KEY3_PRESS || USART1_RX_BUF[0]==MODE_CMD){USART1_RX_BUF[0]=0;//自动模式下,模式设置if(sys_ctrl.auto_flag==0){sys_ctrl.mode++;if(sys_ctrl.mode>2)sys_ctrl.mode=1;}//手动模式下,停止开关else{MOTOR_JS=1;MOTOR_CS=1;	}}//在设置模式下,加else if(key==KEY1_PRESS || USART1_RX_BUF[0]==ADD_CMD){USART1_RX_BUF[0]=0;switch(sys_ctrl.mode){case 1://液位下限 sys_ctrl.levell++;if(sys_ctrl.levell>100)sys_ctrl.levell=0;break;case 2://液位上限 sys_ctrl.levelh++;if(sys_ctrl.levelh>100)sys_ctrl.levelh=0;break;}//手动模式,加水控制if(sys_ctrl.auto_flag==1){MOTOR_JS=0;MOTOR_CS=1;}}//在设置模式下,减else if(key==KEY2_PRESS || USART1_RX_BUF[0]==MIN_CMD){USART1_RX_BUF[0]=0;switch(sys_ctrl.mode){case 1://液位下限 sys_ctrl.levell--;if(sys_ctrl.levell<0)sys_ctrl.levell=100;break;case 2://液位上限 sys_ctrl.levelh--;if(sys_ctrl.levelh<0)sys_ctrl.levelh=100;break;}//手动模式,抽水控制if(sys_ctrl.auto_flag==1){MOTOR_JS=1;MOTOR_CS=0;	}}//确定/自手动else if(key==KEY4_PRESS || USART1_RX_BUF[0]==SWITCH_CMD) {USART1_RX_BUF[0]=0;if(sys_ctrl.mode!=0)//确定sys_ctrl.mode=0;else//自动/手动切换{sys_ctrl.auto_flag=!sys_ctrl.auto_flag;//自动模式下,关闭加水/抽水if(sys_ctrl.auto_flag==0){MOTOR_JS=1;MOTOR_CS=1;	}		}		}
}//系统功能控制
void sys_fun_ctrl(void)
{//正常模式if(sys_ctrl.mode==0){//自动模式下控制if(sys_ctrl.auto_flag==0){//如果液位高于上限,声光报警,开启抽水if(sys_ctrl.level>sys_ctrl.levelh){MOTOR_JS=1;MOTOR_CS=0;beep_alarm(100,20);}//如果液位低于下限,声光报警,开启加水else if(sys_ctrl.level<sys_ctrl.levell){MOTOR_JS=0;MOTOR_CS=1;beep_alarm(100,20);}//正常液位,关闭加水抽水else{MOTOR_JS=1;MOTOR_CS=1;}}}	
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化KEY_Init();BEEP_Init();ctrl_pin_init();USART1_Init(9600);printf("USART1 Init OK...\r\n");pcf8591_init();lcd1602_init();//LCD1602初始化sys_open_show();//系统开机界面显示while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制		}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关文章:

【Proteus仿真】【Arduino单片机】水箱液位监控系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用LCD1602液晶、按键、蜂鸣器、液位传感器、ADC转换器、水泵等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示当前水位、上下限阈…...

【已解决】若依系统前端打包后,部署在nginx上,点击菜单错误:@/views/system/role/index

​ 上面错误&#xff0c;是因为/views/system/role/index动态路由按需加载时候&#xff0c;错误导致。 解决办法&#xff1a; 如果您的前端项目访问时候&#xff0c;需要带有项目名称的话&#xff0c;参考凯哥上一篇文章&#xff1a;【已解决】若依前后端分离版本&#xff0…...

Java中compareTo方法使用

compareTo方法 1. compareTo方法参数2. compareTo方法返回值3. String类型使用CompareTo方法进行比较 compareTo 是实例方法&#xff0c;只能对象调用。所以不能比较基本类型 1. compareTo方法参数 public int compareTo(参数类型 值) {... }参数类型可以是一个 Byte, Double…...

【霹雳吧啦】手把手带你入门语义分割の番外11:U2-Net 源码讲解(PyTorch)—— 代码的使用

目录 前言 Preparation 一、U2-Net 网络结构图 二、U2-Net 网络源代码 1、train.py &#xff08;1&#xff09;parse_args 参数 &#xff08;2&#xff09;SODPresetTrain 类 &#xff08;3&#xff09;SODPresetEval 类 &#xff08;4&#xff09;main 函数 &#x…...

威尔仕2023年的统计数据

威尔仕健身房更新了2023年的统计数据&#xff0c;大家可以猜一猜我是哪一个称号&#xff1f;虽然小伙伴们的健身时长各有不同&#xff0c;有时候在课程中我也会分享自己健身的案例&#xff0c;看似一个简单的增强环路&#xff0c;旁边会有很多的调节环路来限制增强环路的增长&a…...

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…...

spring常用注解(一)springbean生命周期类

一、PostConstruct&#xff1a; 被PostConstruct修饰的方法会在服务器加载Servlet的时候运行&#xff0c;并且只会被服务器调用一次&#xff0c;类似于servlet的inti()方法。被PostConstruct修饰的方法会在构造函数之后&#xff0c;init()方法之前运行。...

【软件测试】2024年准备中/高级测试岗技术面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试基础知…...

第11课 实现桌面与摄像头叠加

在上一节&#xff0c;我们实现了桌面捕获功能&#xff0c;并成功把桌面图像和麦克风声音发送给对方。在实际应用中&#xff0c;有时候会需要把桌面与摄像头图像叠加在一起发送&#xff0c;这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…...

SAP 检验批状态修改(QA32质检放行报错:BS002 不允许 “访问使用决定“ (INL 101105415 ))

问题&#xff1a;在做QA32进行使用决策处理的时候发现这个报错&#xff1a; BS002 不允许 "访问使用决定" (INL 101105415 ) 原因&#xff1a;是因为这个检验批的状态已经变成Relase的状态了&#xff0c;但是决策还没有做 解决方案&#xff1a;将这个检验批的REL状态…...

华为交换机如何同时配置多个端口参数

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 华为交换机如何批量配置端口 使用端口组功能可以实现一次配置多个端口,以减少重复配置工作。端口组分为如下两种方式: 永久端口组。如果用户需要多次…...

Mybatis之多表查询

目录 一、简介 1、使用嵌套查询: 2、使用多个 SQL 语句&#xff1a; 3、使用关联查询&#xff1a; 4、使用自定义映射查询&#xff1a; 二、业务场景 三、示例 1、一对一查询 2、一对多查询 一、简介 MyBatis 是一个优秀的持久层框架&#xff0c;它提供了强大的支持来执…...

部署node.js+express+mongodb(更新中)

1-Linux服务器部署MongoDB 1.升级 yum -y update 2.下载MongoDB安装包 3.上传安装包 上传目录 &#xff1a; /usr/local/ 2-配置MongoDB环境变量并启动 1.配置环境变量全局启动 vi ~/.bash_profile 使用i命令进入编辑模式 添加: export PATH/usr/local/mongodb/bin:$P…...

百度CTO王海峰:文心一言用户规模破1亿

“文心一言用户规模突破1亿。”12月28日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&#xff0c;王海峰以《文心加飞桨&#xff0c;翩然赴星河》为题作了主旨演讲&#xff0c;分享了飞桨和文…...

简单最短路径算法

前言 图的最短路径算法主要包括&#xff1a; 有向无权图的单源最短路径 宽度优先搜索算法&#xff08;bfs&#xff09; 有向非负权图的单源最短路径 迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 有向有权图的单源最短路径 贝尔曼福特算法&#xff08;Bellman-Ford&#…...

答案解析——C语言—第3次作业—算术操作符与关系操作符

本次作业链接如下&#xff1a; C语言—第3次作业—算术操作符与关系操作符 1.在C语言中&#xff0c;表达式 7 / 2 的结果是多少&#xff1f; - A) 3.5 - B) 3 - C) 4 - D) 编译错误 答案&#xff1a;B) 3 解析&#xff1a; 在C语言中&#xff0c;当两个整数进行除法运算时&…...

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种&#xff0c;在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义&#xff1a;二叉树的创建&#xff1a;二叉树的遍历&#xff1a;前序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 二叉树节点个数…...

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…...

tomcat、java、maven

JDK&#xff5c;JRE Tomcat官网介绍的更清楚 Java 环境安装 安装 wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u392-b08/openlogic-openjdk-8u392-b08-linux-x64.tar.gz tar -xf openlogic-openjdk-8u392-b08-linux-x64.tar.gz mv openlogic-openjdk…...

IDEA好用插件

CodeGlance Pro 右侧代码小地图 Git Commit Template git提交信息模板 IDE Eval Reset 无限试用IDEA Maven Helper 图形化展示Maven项 One Dark theme 好看的主题 SequenceDiagram 展示方法调用链 Squaretest 生成单元测试 Translation 翻译 Lombok lombok插件…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...