【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC、DS18B20温度传感器等。
主要功能:
系统运行后,LCD1602显示温度、电量、电压、电流值;电量0-99%,电压0-5V,电流0-5A;
可通过WIFI将检测数据传输至终端显示;
可通过按键K3进入阈值设置模式,K3键用于切换选择温度/电量/电压/电流阈值,
K1和K2用于调节对应阈值,K4用于确定并返回主界面。
当温度超限,报警指示亮,蜂鸣器报警;
当电量过低,报警指示,蜂鸣器报警;
当电压或电流过低,报警指示亮,蜂鸣器报警;
当出现报警时,WIFI会将报警信息发送到终端显示。
二、软件设计
/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据显示
void sys_data_show(void)
{u8 buf[5];static u8 i=0;while(1){//正常模式显示if(sys_ctrl.mode==0){//温度显示lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);//电量显示lcd1602_show_nums(13,0,sys_ctrl.power,2,0);//电压显示buf[0]=sys_ctrl.vol/10+0x30;buf[1]='.';buf[2]=sys_ctrl.vol%10+0x30;buf[3]='\0';lcd1602_show_string(2,1,buf);//电流显示buf[0]=sys_ctrl.cur/10+0x30;buf[1]='.';buf[2]=sys_ctrl.cur%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);//WIFI传输数据,温度、电量、电压和电流i++;if(i%50==0) {UART_SendString("\r\n温度:");buf[0]=sys_ctrl.temp/10+0x30;buf[1]=sys_ctrl.temp%10+0x30;buf[2]='\0';UART_SendString(buf);UART_SendString("°C\r\n");UART_SendString("电量:");buf[0]=sys_ctrl.power/10+0x30;buf[1]=sys_ctrl.power%10+0x30;buf[2]='\0';UART_SendString(buf);UART_SendString("%\r\n");UART_SendString("电压:");buf[0]=sys_ctrl.vol/10+0x30;buf[1]='.';buf[2]=sys_ctrl.vol%10+0x30;buf[3]='\0';UART_SendString(buf);UART_SendString("V\r\n");UART_SendString("电流:");buf[0]=sys_ctrl.cur/10+0x30;buf[1]='.';buf[2]=sys_ctrl.cur%10+0x30;buf[3]='\0';UART_SendString(buf);UART_SendString("A\r\n"); }}//阈值设置显示else{//温度阈值显示lcd1602_show_nums(4,0,sys_ctrl.temph,2,0);//电量阈值显示lcd1602_show_nums(13,0,sys_ctrl.powerl,2,0);//电压阈值显示buf[0]=sys_ctrl.voll/10+0x30;buf[1]='.';buf[2]=sys_ctrl.voll%10+0x30;buf[3]='\0';lcd1602_show_string(3,1,buf);//电流阈值显示buf[0]=sys_ctrl.curl/10+0x30;buf[1]='.';buf[2]=sys_ctrl.curl%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);//阈值设定,数据位置闪烁switch(sys_ctrl.mode){case 1://温度lcd1602_show_string(4,0," ");delay_ms(100);lcd1602_show_nums(4,0,sys_ctrl.temph,2,0);break;case 2://电量lcd1602_show_string(13,0," ");delay_ms(100);lcd1602_show_nums(13,0,sys_ctrl.powerl,2,0);break;case 3://电压lcd1602_show_string(3,1," ");delay_ms(100);buf[0]=sys_ctrl.voll/10+0x30;buf[1]='.';buf[2]=sys_ctrl.voll%10+0x30;buf[3]='\0';lcd1602_show_string(3,1,buf);break;case 4://电流lcd1602_show_string(12,1," ");delay_ms(100);buf[0]=sys_ctrl.curl/10+0x30;buf[1]='.';buf[2]=sys_ctrl.curl%10+0x30;buf[3]='\0';lcd1602_show_string(12,1,buf);break; }}break; }
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=key_scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>4)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;_parm_set_show();//系统参数设置显示}}if(sys_ctrl.mode!=0){//在设置模式下,加if(key==KEY1_PRESS){ switch(sys_ctrl.mode){case 1://温度 sys_ctrl.temph++;if(sys_ctrl.temph>99)sys_ctrl.temph=0;break;case 2://电量 sys_ctrl.powerl++;if(sys_ctrl.powerl>99)sys_ctrl.powerl=0;break;case 3://电压 sys_ctrl.voll++;if(sys_ctrl.voll>50)sys_ctrl.voll=0;break;case 4://电流 sys_ctrl.curl++;if(sys_ctrl.curl>50)sys_ctrl.curl=0;break;} }//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://温度 sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=99;break;case 2://电量 sys_ctrl.powerl--;if(sys_ctrl.powerl<0)sys_ctrl.powerl=99;break;case 3://电压 sys_ctrl.voll--;if(sys_ctrl.voll<0)sys_ctrl.voll=50;break;case 4://电流 sys_ctrl.curl--;if(sys_ctrl.curl<0)sys_ctrl.curl=50;break;}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;oneflag=0;sys_open_show();//系统开机界面显示 } }
}//系统功能控制
void sys_fun_ctrl(void)
{static u8 wdoneflag=0;static u8 dloneflag=0;static u8 dydloneflag=0;//正常工作模式下if(sys_ctrl.mode==0){//温度高于上限,指示灯亮,蜂鸣器报警if(sys_ctrl.temp>sys_ctrl.temph){LED_WD=0;beep_alarm(10,1000);UART_SendString("\r\n温度高...\r\n");wdoneflag=1;}else{LED_WD=1;if(wdoneflag==1){wdoneflag=0; UART_SendString("\r\n温度OK\r\n");}}//电量低于阈值,指示灯亮,蜂鸣器报警if(sys_ctrl.power<sys_ctrl.powerl){LED_DL=0;beep_alarm(10,1000);UART_SendString("\r\n电量低...\r\n");dloneflag=1;}else{LED_DL=1;if(dloneflag==1){dloneflag=0; UART_SendString("\r\n电量OK\r\n");}}//电压或电流低于阈值,指示灯亮,蜂鸣器报警if(sys_ctrl.vol<sys_ctrl.voll || sys_ctrl.cur<sys_ctrl.curl){LED_DYDL=0;beep_alarm(10,1000);UART_SendString("\r\n电压电流低...\r\n");dydloneflag=1; }else {LED_DYDL=1;if(dydloneflag==1){dydloneflag=0; UART_SendString("\r\n电压电流OK\r\n");}} }
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619





联系作者
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
相关文章:
【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC、DS18B20温度传感器等。 主要功能: 系统运行后,LCD1602显示温…...
MobaXterm破解专业版方法
MobaXterm专业版(含授权)-CSDN博客 1.安装python3环境,使用vscode打开文件夹,新建终端,在终端中执行命令 python MobaXterm-Keygen.py "DoubleSine" 20.2 (20.2为MobaXterm版本号,…...
0基础学JMeter:如何开始简单的WEB压力测试(一)
背景 最近工作上被安排针对Web网站进行性能压测,以评估特定的硬件配置下Web网站可支持的并发用户数。考虑到JMeter是流行的Web性能压测工具,因此趁着这次机会上网查阅了很多关于JMeter的资料,也自己动手进行软件的配置和调测,从最…...
ArcGIS数据处理与制图
在数字化和智能化的浪潮中,GIS(地理信息系统)和GPT(生成式预训练模型)的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…...
基于Java微信小程序校园订餐系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…...
基于文件的本地数据库组件 DuckDB, ChDB, SQLite, LevelDB, RocksDB
OLTP 与 OLAP 的区别: OLTP(on-line transaction processing) 联机事务处理,主要就是一些传统的数据库,比如 Mysql。OLAP(On-Line Analytical Processing) 联机分析处理,主要应用在大数据分析处理领域,比如 Clickhous…...
日志记录功能
需求描述: 1,可记录页面操作模块、按钮的日志记录 2,记录详细的指定操作数据日志 3,记录的数据可能需要查询表 4,需要考虑到扩展性及个性化定制 表结构设计: CREATE TABLE YES_DEV.T_COMM_OPERATION_LOG (ID BINARY_BIGINT NOT NULL,OPERATOR VARCHAR(128),OPERATION_MO…...
Android中的多线程与线程池详解
Android中的多线程与线程池详解 一、技术难点 在Android开发中,多线程和线程池是处理复杂任务、提高应用性能和响应性的关键技术。然而,这些技术也带来了一些技术难点。 1. 多线程技术难点 线程同步:多线程环境下,数据访问的同…...
使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。
0.引言 在自己学习的过程中可以自己做一个和聊天大模型对话的一个小网站,成就感不亚于人生第一次跑完10km。 1.项目介绍 前端代码:Vue3, MarkDownIT. 后端代码:Python3, Fernet库, OpenAPI, LangChain, Ollama. Ollama 本地模型的部署和管理…...
excel数据透视
Excel中,数据透视图(PivotChart)和数据透视表(PivotTable)是两个紧密相关的工具,用于分析数据。数据透视表是数据透视图的数据源,也就是说,数据透视图是基于数据透视表中的数据创建的…...
七、(正点原子)Linux并发与竞争
Linux是多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 一、并发与竞争 1、简介 并发就是多个…...
vue2+TS,el-table表格单选的写法
1.打开表格 //父组件引入 <customerChoose ref"customerChooseRef" onSure"setOrderInfoFn"></customerChoose>//子传父,接收值,操作private async setOrderInfoFn(data) {this.form.customerId data.idthis.form.cu…...
北邮《计算机网络》蒋老师思考题及答案-传输层
蒋yj老师yyds! 答案自制,仅供参考,欢迎质疑讨论 问题一览 传输层思考题P2P和E2E的区别使用socket的c/s模式通信,流控如何反映到编程模型三次握手解决什么问题举一个两次握手失败的例子为什么链路层是两次握手而非三次?…...
学懂C#编程:常用高级技术【元组的详细使用】——利用元组获取多个返回值
C#常用高级技术——利用元组获取多个返回值 在C# 7.0及更高版本中,您可以使用元组(Tuples)来实现这种返回多个值的方法。您提供的代码片段是正确的,它定义了一个名为Calculate的方法,该方法接受两个整数参数a和b&#…...
解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存
解决IntelliJ IDEA中卡顿问题,可以尝试以下几个常见且有效的步骤: 1 增加IDEA的JVM内存分配: 位于IDEA安装目录的bin文件夹下,找到对应的操作系统配置文件(idea64.exe.vmoptions(Windows)或id…...
Python爬虫从入门到入狱之爬取知乎用户信息
items中的代码主要是我们要爬取的字段的定义 class UserItem(scrapy.Item):id \ Field()name \ Field()account\_status \ Field()allow\_message\ Field()answer\_count \ Field()articles\_count \ Field()avatar\_hue \ Field()avatar\_url \ Field()avatar\_url\_template…...
apk反编译修改教程系列-----去除apk软件更新方法步骤列举 记录八种最常见的去除方法
在前面几期博文中 有说明去除apk软件更新的步骤方法。我们在对应软件反编译去除更新中要灵活运用。区别对待。同一个软件可以有不同的去除更新方法可以适用。今天的教程对于软件更新去除列举几种经常使用的修改步骤。 通过基础课程可以了解 1-----软件反编译更新去除的几种常…...
SpringMVC系列六: 视图和视图解析器
视图和视图解析器 💞基本介绍💞 自定义视图为什么需要自定义视图自定义试图实例-代码实现自定义视图工作流程小结Debug源码默认视图解析器执行流程多个视图解析器执行流程 💞目标方法直接指定转发或重定向使用实例指定请求转发流程-Debug源码…...
MySQL数据备份的分类
MySQL数据库的备份 在我们使用MySQL数据库的过程中,一些意外情况的发生,有可能造成数据的损失。例如,意外的停电,不小心的操作失误等都可能造成数据的丢失。 所以为了保证数据的安全与一致性,需要定期对数据进行备份。…...
node+nginx实现对react进行一键打包部署--windows版
文章目录 nodenginx实现对react进行一键打包部署--windows版1.功能展示及项目准备1.1功能展示 1.2 项目准备1.2.1技术点1.2.2安装相关配置(windows) 2.实现2.1 实现思路2.2 实现步骤2.1 项目准备2.1.1 创建env文件2.1.2 创建api/index.js文件2.1.3 添加解决跨域代码 2.2 项目实…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
