【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单片机控制器,使用LCD1602液晶、按键、蜂鸣器、液位传感器、ADC转换器、水泵等。 主要功能: 系统运行后,LCD1602显示当前水位、上下限阈…...
【已解决】若依系统前端打包后,部署在nginx上,点击菜单错误:@/views/system/role/index
上面错误,是因为/views/system/role/index动态路由按需加载时候,错误导致。 解决办法: 如果您的前端项目访问时候,需要带有项目名称的话,参考凯哥上一篇文章:【已解决】若依前后端分离版本࿰…...
Java中compareTo方法使用
compareTo方法 1. compareTo方法参数2. compareTo方法返回值3. String类型使用CompareTo方法进行比较 compareTo 是实例方法,只能对象调用。所以不能比较基本类型 1. compareTo方法参数 public int compareTo(参数类型 值) {... }参数类型可以是一个 Byte, Double…...
【霹雳吧啦】手把手带你入门语义分割の番外11:U2-Net 源码讲解(PyTorch)—— 代码的使用
目录 前言 Preparation 一、U2-Net 网络结构图 二、U2-Net 网络源代码 1、train.py (1)parse_args 参数 (2)SODPresetTrain 类 (3)SODPresetEval 类 (4)main 函数 &#x…...
威尔仕2023年的统计数据
威尔仕健身房更新了2023年的统计数据,大家可以猜一猜我是哪一个称号?虽然小伙伴们的健身时长各有不同,有时候在课程中我也会分享自己健身的案例,看似一个简单的增强环路,旁边会有很多的调节环路来限制增强环路的增长&a…...
Spring——Spring基于注解的IOC配置
基于注解的IOC配置 学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…...
spring常用注解(一)springbean生命周期类
一、PostConstruct: 被PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于servlet的inti()方法。被PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。...
【软件测试】2024年准备中/高级测试岗技术面试...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试基础知…...
第11课 实现桌面与摄像头叠加
在上一节,我们实现了桌面捕获功能,并成功把桌面图像和麦克风声音发送给对方。在实际应用中,有时候会需要把桌面与摄像头图像叠加在一起发送,这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…...
SAP 检验批状态修改(QA32质检放行报错:BS002 不允许 “访问使用决定“ (INL 101105415 ))
问题:在做QA32进行使用决策处理的时候发现这个报错: BS002 不允许 "访问使用决定" (INL 101105415 ) 原因:是因为这个检验批的状态已经变成Relase的状态了,但是决策还没有做 解决方案:将这个检验批的REL状态…...
华为交换机如何同时配置多个端口参数
知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 华为交换机如何批量配置端口 使用端口组功能可以实现一次配置多个端口,以减少重复配置工作。端口组分为如下两种方式: 永久端口组。如果用户需要多次…...
Mybatis之多表查询
目录 一、简介 1、使用嵌套查询: 2、使用多个 SQL 语句: 3、使用关联查询: 4、使用自定义映射查询: 二、业务场景 三、示例 1、一对一查询 2、一对多查询 一、简介 MyBatis 是一个优秀的持久层框架,它提供了强大的支持来执…...
部署node.js+express+mongodb(更新中)
1-Linux服务器部署MongoDB 1.升级 yum -y update 2.下载MongoDB安装包 3.上传安装包 上传目录 : /usr/local/ 2-配置MongoDB环境变量并启动 1.配置环境变量全局启动 vi ~/.bash_profile 使用i命令进入编辑模式 添加: export PATH/usr/local/mongodb/bin:$P…...
百度CTO王海峰:文心一言用户规模破1亿
“文心一言用户规模突破1亿。”12月28日,百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上,王海峰以《文心加飞桨,翩然赴星河》为题作了主旨演讲,分享了飞桨和文…...
简单最短路径算法
前言 图的最短路径算法主要包括: 有向无权图的单源最短路径 宽度优先搜索算法(bfs) 有向非负权图的单源最短路径 迪杰斯特拉算法(Dijkstra) 有向有权图的单源最短路径 贝尔曼福特算法(Bellman-Ford&#…...
答案解析——C语言—第3次作业—算术操作符与关系操作符
本次作业链接如下: C语言—第3次作业—算术操作符与关系操作符 1.在C语言中,表达式 7 / 2 的结果是多少? - A) 3.5 - B) 3 - C) 4 - D) 编译错误 答案:B) 3 解析: 在C语言中,当两个整数进行除法运算时&…...
【数据结构】二叉树的链式实现
树是数据结构中非常重要的一种,在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义:二叉树的创建:二叉树的遍历:前序遍历:中序遍历:后序遍历: 二叉树节点个数…...
八、QLayout 用户基本资料修改(Qt5 GUI系列)
目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…...
tomcat、java、maven
JDK|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插件…...
面试官:CSS3新增了哪些新特性?
面试官:CSS3新增了哪些新特性? 一、是什么 css,即层叠样式表(Cascading Style Sheets)的简称,是一种标记语言,由浏览器解释执行用来使页面变得更美观 css3是css的最新标准,是向后兼…...
Vite5 + Vue3 + Element Plus 前端框架搭建
为了开发一套高效使用的 Vite5 + Vue3 + Element Plus 前端框架,你可以按照以下步骤进行。话不多说,先上演示地址:Vue Shop Vite。 1, 安装开发环境 开发之前,确保你的电脑已经安装了 Node.js(建议使用最新稳定版 LTS),然后安装 Vite CLI。在命令行中运行以下命令: …...
STM32 内部 EEPROM 读写
STM32 的某些系列 MCU 自带 EEPROM。笔者使用的 STM32L151RET6 自带 16 KB 的 EEPROM,可以用来存储自定义的数据。在芯片选型时,自带 EEPROM 也可以作为一个考量点,省去了在外接 EEPROM 的烦恼。 下面简单介绍下 STM32 内部 EEPROM 的读写流…...
androidStudio sync failed GradlePropertiesModel (V2)
大家在增加模块的时候经常遇到吧?重启后就好了。 Cannot get GradlePropertiesModel (V2) for project ‘GradleProject{path’:app’}’ 然而,今天开机以后,无论如何,点击gradle的大象图标(Sync Project with Gradle Files)&…...
结构方程模型(SEM)
结构方程模型(Structural Equation Modeling)是分析多变量间因果关系的利器,在众多学科领域具有巨大应用潜力。我们前期推出的《基于R语言结构方程模型》课程通过结构方程原理介绍、结构方程全局和局域估计、模型构建和调整、潜变量分析、复合…...
基于UDP的网络编程
UDP服务端 #ifdef _WIN32 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define close closesocket #include <winsock2.h> #else #include <arpa/inet.h> #include <netdb.h> #include <netinet/in.h> #in…...
vue判断组件有没有传入的slot有就渲染slot没有就渲染内部节点
GPT4国内站点:海鲸AI 在 Vue 中,你可以使用 $slots 对象来检查是否有特定的插槽内容被传递给组件。Vue 3 中的 $slots 是一个对象,其中包含了所有插槽的引用。如果插槽没有内容,对应的插槽属性将会是 undefined。 下面是一个例子…...
MS713/MS713T:CMOS 低压、4Ω四路单刀单掷开关,替代ADG713
产品简述 MS713/MS713T 是一款单芯片 CMOS 4 路可选择开关,具有低 功耗、高开关速度、低导通阻抗、低漏电和高带宽特性。其工作 电压范围是 1.8V 到 5.5V ,可以广泛应用在电池供电仪器仪表、新 一代的模数转换和数模转换系统中。其高带宽特性可用在 …...
Android 内容生成pdf文件
1.引入itext7 implementation com.itextpdf:itext7-core:7.1.13上面比较大,可以直接下载需要集成的jar包 implementation files(libs\\layout-7.1.13.jar) implementation files(libs\\kernel-7.1.13.jar) implementation files(libs\\io-7.1.13.jar) implementatio…...
Javaweb-日程管理
094.日程管理第二期_准备数据库和实体类_哔哩哔哩_bilibili navicat 下载 学生认证: Navicat 教育版 - 学生许可证 | Navicat navicat连接mysql 使用navicat连接mysql数据库创建数据库、表、转储sql文件,导入sql数据_哔哩哔哩_bilibili...
做网站要服务器吗/seo研究协会
说明:操作系统:CentOS 6.5 64位需求:编译安装LAMP运行环境各软件版本如下:MySQL:mysql-5.1.73Apache:httpd-2.2.31PHP:php-5.2.17具体操作:准备篇一、配置防火墙,开启80端…...
个人建站如何赚钱/鞍山seo外包
一,浮点数的2种表示形式 二,浮点数使用的注意事项 ①浮点数不应进行大小比较 ②小数转二进制的做法:乘2并顺序取整数部分③当整数运算的结果超出整数的范围后,会自动转换为浮点数 转载于:https://www.cnblogs.com/you…...
wordpress多级分销插件/短视频排名seo
准备写这篇blog之前,突然发现自己真的不应该挑这样一个虽然很有前途的,但是目前并不火,大家都很陌生得话题开始谈虚拟化。原因是桌面虚拟化涉及的技术很多,因素也很多,目前最火的服务器虚拟化,与其相比&…...
wordpress主题ux themes/信息流广告接单平台
第一节 Linux系统简介初步了解了什么是Linux系统,有何优点、与Windows系统有何不一样,并了解Linux学习方法。linux第二节 基本概念及概念1.完成实验楼入门基础课程,共两个实验:(1)“hello,shiyanlou” (2)"hello world!"…...
wordpress 地图html/百度浏览器广告怎么投放
戳蓝字“火电厂技术联盟”关注我们哦!全文2151字阅读约需2分钟作者 | 孙化军 王鸿宇 王永生大唐环境特许经营分公司摘要燃煤电厂烟气中的SO2占有较大比例,解决燃煤电厂烟气脱硫系统运行优化,不但能够降低空气中的SO2含量,还能够实…...
台湾做的h游戏下载网站/百度推广区域代理
企业管理培训:如何提升中层管理者的执行力?企业中层管理都懂得一个道理“高效执行力是企业做大做强的核心武器,没有好的执行力,再好的决策,也只是一个良好的愿望”,如何提升企业中层管理者的执行力…...