【Proteus仿真】【STM32单片机】智能垃圾桶设计

文章目录

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


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。

主要功能:
系统运行后,LCD1602显示超声波检测距离和传感器采集有害气体浓度值极其阈值。
当感应到有人时,桶盖舵机开启,此时系统检测垃圾高度是否超限,如果超限,则开启压缩机打包,完成后蜂鸣器报警提示。当人离开,桶盖舵机关闭。如果有害气体浓度超限,蜂鸣器报警。
可通过按键K3进入阈值设置模式,K1和K2调节数据,K4确定。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据获取
void sys_data_get(void)
{while(1){//获取距离sys_ctrl.dis=ultrasonicwave_measure();//获取有害气体浓度sys_ctrl.gas=pcf8591_read_adcvalue(0);sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);//检测有无人if(IRED==0)sys_ctrl.man=1;	else sys_ctrl.man=0;			break;}	
}//系统数据显示
void sys_data_show(void)
{while(1){//距离显示lcd1602_show_nums(4,0,sys_ctrl.dis,3,0);//气体浓度显示lcd1602_show_nums(4,1,sys_ctrl.gas,2,0);//有无人状态显示if(sys_ctrl.man==1)lcd1602_show_string(8,1,"Y");else lcd1602_show_string(8,1,"N");//距离阈值显示lcd1602_show_nums(13,0,sys_ctrl.dish,3,0);//气体阈值显示lcd1602_show_nums(13,1,sys_ctrl.gash,2,0);//阈值闪烁指示switch(sys_ctrl.mode){case 1://距离lcd1602_show_string(13,0,"   ");delay_ms(50);lcd1602_show_nums(13,0,sys_ctrl.dish,3,0);break;case 2://气体lcd1602_show_string(13,1,"  ");delay_ms(50);lcd1602_show_nums(13,1,sys_ctrl.gash,2,0);break;}break;			}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=key_scan(0);//设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>2)sys_ctrl.mode=1;}//阈值设置模式if(sys_ctrl.mode!=0){//加if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://距离sys_ctrl.dish++;if(sys_ctrl.dish>500)sys_ctrl.dish=0;break;case 2://气体sys_ctrl.gash++;if(sys_ctrl.gash>99)sys_ctrl.gash=0;break;}	}//减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://距离sys_ctrl.dish--;if(sys_ctrl.dish<0)sys_ctrl.dish=500;break;case 2://气体sys_ctrl.gash--;if(sys_ctrl.gash<0)sys_ctrl.gash=99;break;}	}//确定else if(key==KEY4_PRESS){sys_ctrl.mode=0;	}	}
}//系统功能控制
void sys_fun_ctrl(void)
{static u8 oneflag=0;//如果红外检测到有人if(sys_ctrl.man==1){//打开桶盖舵机steer_control(2);//如果垃圾高度到达阈值,开启打包if(sys_ctrl.dis>sys_ctrl.dish){if(oneflag==0)//压缩机启动一次{oneflag=1;_dc_motor_zturn();delay_ms(1000);_dc_motor_stop();beep_alarm(100,2000);}	}else oneflag=0;}//如果红外未检测到有人else{//关闭桶盖舵机steer_control(0);		}//如果有害气体浓度高于阈值,报警if(sys_ctrl.gas>sys_ctrl.gash)beep_alarm(10,1000);
}

三、实验现象

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

联系作者

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于Fisher时段划分的配电网源网荷储多时间尺度协调优化调控策略》

这个标题涉及到电力系统领域的一些关键概念和方法。让我们逐步解读&#xff1a; 基于Fisher时段划分&#xff1a; "基于"表示这个策略或方法的核心基础是某个特定的理论或技术。"Fisher时段划分"可能指的是使用Fisher信息矩阵进行时间划分。Fisher信息矩阵…

居家适老化设计第三十条---卫生间之坐便

以上产品图片均来源于淘宝 侵权联系删除 在居家适老化中&#xff0c;马桶是非常重要的设施之一&#xff0c;它能够提供方便、安全、舒适的上厕所体验。以下是一些居家适老化中常见的马桶设计和功能&#xff1a;1. 高度合适&#xff1a;为了方便老年人坐起和站起&#xff0c;马…

Da-transunet:将空间和通道双重关注与Transformer u-net相结合用于医学图像分割

DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION 1、方法1.1 模型1.2 双注意力模块&#xff08;DA-Block&#xff09;1.2.1 PAM&#xff08; 位置注意力模块&#xff09;1.2.2 CAM&#xff08;通道注意力…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

Swing程序设计(6)边界布局,网格布局

文章目录 前言一、布局介绍 1.边界布局2.网格布局3.网格组布局.总结 前言 Swing程序中还有两种方式边界布局&#xff0c;网格布局供程序员使用。这两种布局方式更能体现出软件日常制作的排列布局格式。 一、布局介绍 1.BorderLayout边界布局 语法&#xff1a;new BorderLayout …

laravel8安装多应用多模块(笔记三)

先安装laravel8 Laravel 安装&#xff08;笔记一&#xff09;-CSDN博客 一、进入项目根目录安装 laravel-modules composer require nwidart/laravel-modules 二、 大于laravel5需配置provider&#xff0c;自动生成配置文件 php artisan vendor:publish --provider"Nwid…

windows cmd执行远程长脚本

背景 有时候我们想在未进行一些环境设置&#xff0c;或者工具使用者电脑中执行一段初始化脚本&#xff0c;为了简化使用者的理解成本&#xff0c;通常给使用者一段代码执行初始化电脑中的设置&#xff0c;尤其是这段初始化脚本比较长的时候。 脚本制作者 比如将需要执行的命…

H5ke12--2--学生选课表格的编辑

方法1不可以修改的用label,如何按了哪一行 就会在下面有个文本显示可编辑的一行 方法2每一行后面都有一个编辑, 3对每一个修改,每一个td失去焦点都会有,直接到达我们服务器 注意 如果用span的每一个html元素都可以自己定义属性 Data-属性名,data-Address links也要给为span 1…

递归算法学习——二叉树的伪回文路径

1&#xff0c;题目 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例…

软件设计中如何画各类图之二深入解析数据流图(DFD):系统设计与分析的关键视觉工具

目录 1 前言2 数据流图&#xff08;DFD&#xff09;的重要性3 数据流图的符号说明4 清晰的数据流图步骤4.1 确定系统边界4.2 识别数据流4.3 定义处理过程4.4 确认数据存储4.5 建立数据流动的连线4.6 细化和优化 5 数据流图的用途6 使用场景7 实际应用场景举例8 结语 1 前言 当…

使用 Python 和 NLTK 进行文本摘要

一、说明 文本摘要是一种自然语言处理技术&#xff0c;允许用户将大量文本总结为小块&#xff0c;而不会丢失任何重要信息。本文介绍NLP中使用Gensim和Sumy实现文本摘要的步骤。 二、为什么要总结文本&#xff1f; 互联网包含大量信息&#xff0c;而且每秒都在增加。文本摘要可…

鼠标点击位置获取几何体对象_vtkAreaPicker_vtkInteractorStyleRubberBandPick

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;框选或者点选某一区域&#xff0c;并获取区域prop3D对象&#xff08;红线内为有效区域&#xff0c;polydata组成的3d几何对象&a…

力扣刷题篇之排序算法

系列文章目录 前言 本系列是个人力扣刷题汇总&#xff0c;本文是排序算法。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 这个之前写的左神的课程笔记里也有&#xff1a; 左程云算法与数据结构代码汇总之排序&am…

【前端】数据行点击选择

前言 【前篇文章】说了,我们公司的核心价值就是让人越来越懒,能怎么便捷就怎么便捷,主打一个简单实用又快捷,为了实现这个目标,我看成这个列表陷入了深思在想,要不要子表的数据加载在点击这个行时,就可以展示数据,这样就不用每次都要点那个小圆圈啦。 查资料 这显然…

2023.11.25-istio安全

目录 文章目录 目录本节实战1、安全概述2、证书签发流程1.签发证书2.身份认证 3、认证1.对等认证a.默认的宽容模式b.全局严格 mTLS 模式c.命名空间级别策略d.为每个工作负载启用双向 TLS 2.请求认证a.JWK 与 JWKS 概述b.配置 JWT 终端用户认证c.设置强制认证规则 关于我最后 本…

RevCol实战:使用RevCol实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

「Verilog学习笔记」数据串转并电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 关于什么是Valid/Ready握手机制&#xff1a; 深入 AXI4 总线&#xff08;一&#xff09;握手机制 - 知乎 时序图含有的信息较多&#xff0c;观察时序图需要注意&#xff1a…

Redis常用操作及应用(一)

一、五种数据结构 二、String结构 1、字符串常用操作 SET key value //存入字符串键值对 MSET key value [key value ...] //批量存储字符串键值对 SETNX key value //存入一个不存在的字符串键值对 GET key //获取一个字符串键值 MGET key [ke…

php获取当前域名方法

使用$_SERVER[HTTP_HOST]变量只获取到域名&#xff1a; $domain $_SERVER[HTTP_HOST]; echo $domain; 获取包含协议和域名的完整URL $protocol isset($_SERVER[HTTPS]) && $_SERVER[HTTPS] on ? https:// : http://; $domain $_SERVER[HTTP_HOST]; $current_url…

C++ 之win32多线程应用总结

InterlockedIncrement 函数的作用&#xff1a; 在多线程同时对一个变量访问时&#xff0c;保证一个线程访问变量时其他线程不能访问 事件是很常用的多线程同步互斥机制 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针&…