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

【Proteus仿真】【STM32单片机】智能阳台控制系统

文章目录

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


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用按键、LCD1604液晶、DHT11温湿度模块、PCF8591 ADC、光线传感器、PM2.5传感器、土壤湿度传感器、继电器、水泵、电灯、28BYJ48步进电机等。
主要功能:
系统运行后,LCD1604显示环境温湿度、光线、风速、PM2.5、土壤湿度,
窗帘和窗户开关状态;
若按下K4键可切换自动/手动模式,手动模式下,K1控制窗帘开关;
K2控制窗户开关;K5控制电灯开关;K6控制水泵开关;
在自动模式下,若按下K3键进入阈值设置模式,K3选择参数,
可通过K1和K2调节阈值,当设定好后按下K4键确定并退出设置界面;
如果光线太亮或者晚上,关闭窗帘;
如果晚上,检测有人,打开电灯,人离开关闭电灯;
如果PM2.5检测超限,关闭窗户,否则打开窗户;
如果土壤湿度高于上限,关闭水泵;
如果土壤湿度低于下限,打开水泵;


二、软件设计

/*
作者:嗨小易(QQ技术交流群:570487280)*///系统数据设置
void sys_data_set(void)
{u8 key=0;key=KEY_Scan(0);//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>5)sys_ctrl.mode=1;sys_parm_set_show();//系统参数设置界面显示}//设置模式if(sys_ctrl.mode!=0){//加if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://光线下sys_ctrl.set_light[0]++;if(sys_ctrl.set_light[0]>99)sys_ctrl.set_light[0]=0;break;case 2://光线上sys_ctrl.set_light[1]++;if(sys_ctrl.set_light[1]>99)sys_ctrl.set_light[1]=0;break;case 3://PM2.5sys_ctrl.set_pm25++;if(sys_ctrl.set_pm25>255)sys_ctrl.set_pm25=0;break;case 4://土壤湿度低sys_ctrl.set_trhumi[0]++;if(sys_ctrl.set_trhumi[0]>99)sys_ctrl.set_trhumi[0]=0;break;case 5://土壤湿度高sys_ctrl.set_trhumi[1]++;if(sys_ctrl.set_trhumi[1]>99)sys_ctrl.set_trhumi[1]=0;break;}}//减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://光线下sys_ctrl.set_light[0]--;if(sys_ctrl.set_light[0]<0)sys_ctrl.set_light[0]=99;break;case 2://光线上sys_ctrl.set_light[1]--;if(sys_ctrl.set_light[1]<0)sys_ctrl.set_light[1]=99;break;case 3://PM2.5sys_ctrl.set_pm25--;if(sys_ctrl.set_pm25<0)sys_ctrl.set_pm25=255;break;case 4://土壤湿度低sys_ctrl.set_trhumi[0]--;if(sys_ctrl.set_trhumi[0]<0)sys_ctrl.set_trhumi[0]=99;break;case 5://土壤湿度高sys_ctrl.set_trhumi[1]--;if(sys_ctrl.set_trhumi[1]<0)sys_ctrl.set_trhumi[1]=99;break;}}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;sys_open_show();//系统开机界面显示}}//正常模式else{//自动手动if(key==KEY4_PRESS){sys_ctrl.auto_flag=!sys_ctrl.auto_flag;}//手动模式if(sys_ctrl.auto_flag==1){//窗帘开关if(key==KEY1_PRESS){sys_ctrl.cl_flag=!sys_ctrl.cl_flag;}//窗户开关else if(key==KEY2_PRESS){sys_ctrl.ch_flag=!sys_ctrl.ch_flag;}//电灯开关else if(key==KEY5_PRESS){DD_PIN=!DD_PIN;}//水泵开关else if(key==KEY6_PRESS){SB_PIN=!SB_PIN;}}}
}//系统功能控制
void sys_fun_ctrl(void)
{static u8 cl_oneflag=0;static u8 ch_oneflag=0;//自动模式if(sys_ctrl.auto_flag==0){//正常模式if(sys_ctrl.mode==0){//如果光线太亮或者晚上,关闭窗帘if(sys_ctrl.light>sys_ctrl.set_light[1]|| sys_ctrl.light<sys_ctrl.set_light[0]){sys_ctrl.cl_flag=0;}else{sys_ctrl.cl_flag=1;}//如果晚上,检测有人,打开电灯,人离开关闭电灯//如果晚上if(sys_ctrl.light<sys_ctrl.set_light[0]){//如果检测有人,打开电灯if(sys_ctrl.man==1){DD_PIN=0;}else DD_PIN=1;	}else{DD_PIN=1;}//如果PM2.5检测超限,关闭窗户,否则打开窗户if(sys_ctrl.pm25>sys_ctrl.set_pm25){sys_ctrl.ch_flag=0;LED_PIN=0;//指示灯打开}else{sys_ctrl.ch_flag=1;LED_PIN=1;//指示灯关闭}//如果土壤湿度高于上限,关闭水泵if(sys_ctrl.trhumi>sys_ctrl.set_trhumi[1]){SB_PIN=1;}//如果土壤湿度低于下限,打开水泵else if(sys_ctrl.trhumi<sys_ctrl.set_trhumi[0]){SB_PIN=0;}}}//窗帘打开if(sys_ctrl.cl_flag==1){if(cl_oneflag==0){step_motor_28BYJ48_send_pulse(4,cl_oneflag,STEPMOTOR_MAXSPEED,3,1);cl_oneflag=1;}}//窗帘关闭else{if(cl_oneflag==1){step_motor_28BYJ48_send_pulse(4,cl_oneflag,STEPMOTOR_MAXSPEED,3,1);cl_oneflag=0;}}//窗户打开if(sys_ctrl.ch_flag==1){if(ch_oneflag==0){step_motor2_28BYJ48_send_pulse(4,ch_oneflag,STEPMOTOR_MAXSPEED,3,1);ch_oneflag=1;}}//窗户关闭else{if(ch_oneflag==1){step_motor2_28BYJ48_send_pulse(4,ch_oneflag,STEPMOTOR_MAXSPEED,3,1);ch_oneflag=0;}}
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化KEY_Init();DHT11_Init();ctrl_pin_init();pcf8591_init();step_motor_gpio_init();step_motor2_gpio_init();lcd1604_init();//LCD1604初始化sys_open_show();//系统初始界面显示while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制		}
}

三、实验现象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

http://www.lryc.cn/news/548069.html

相关文章:

  • Manus AI Agent 技术解读:架构、机制与竞品对比
  • 【时间序列】因果推断:从时序数据中探寻“因”与“果”
  • IDEA2023 使用枚举类型java: 非法字符: ‘\ufffd‘
  • 深度学习模型组件之优化器--基础优化器(GD、SGD、Mini-batch SGD)
  • 使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes
  • 宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务
  • unity学习64,第3个小游戏:一个2D跑酷游戏
  • rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等
  • 基于开源 AI 大模型、AI 智能名片及 S2B2C 商城小程序源码的个人 IP 用户运营策略研究
  • 什么是:马尔可夫博弈
  • 【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎
  • 用Ruby的Faraday库来进行网络请求抓取数据
  • Ubuntu的软件源
  • 笔记五:C语言编译链接
  • GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程
  • SyntaxError: Invalid regular expression flag “x“
  • HiveServer2与Spark ThriftServer详细介绍对比
  • ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
  • 软考初级程序员知识点汇总
  • 亲测解决笔记本触摸板使用不了Touchpad not working
  • 13.数据结构(软考)
  • 开发环境搭建-完善登录功能
  • HAL库,配置adc基本流程
  • DeepSeek爆火催生培训热潮,是机遇还是陷阱?
  • Apache Httpd 多后缀解析
  • 备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
  • css错峰布局/瀑布流样式(类似于快手样式)
  • 【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析
  • 【虚拟化】Docker Desktop 架构简介