草庐IT

【毕业设计】基于单片机的智能感应垃圾桶设计与实现 - 物联网 stm32 嵌入式

Mdc_stdio 2023-04-10 原文

文章目录


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

基于单片机的智能感应垃圾桶设计与实现

大家可用于 课程设计 或 毕业设计


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


2 绪论

2.1 课题背景与目的

学长设计的系统主要使用 STC89C52 单片机为基础设计并开发一个智能垃圾桶系统。该系统实现智能开盖, 垃圾装满语音报警的功能。设计主要以单片机为控制中心,通过红外传感器检测探测范围内有人与否, 如果有, 经过单片机控制启动步进电机, 打开桶盖, 再经过延时设定时刻后, 自动关闭垃圾桶盖。 步进电机通过线的正反缠绕实现桶盖的开启与关闭。 通过红外对管模块, 检测垃圾桶内的垃圾高度超过限定高度与否, 如果装满, 单片机控制语音播放芯片, 喇叭播放语音提示人们处理垃圾。

3 系统设计

这次学长设计的主要使用 STC89C52 单片机为基础设计并开发一个智能垃圾桶系统。该系统实现智能开盖, 垃圾装满语音报警的功能。

设计主要以单片机为控制中心,通过红外传感器检测探测范围内有人与否, 如果有, 经过单片机控制启动步进电机, 打开桶盖, 再经过延时设定时刻后, 自动关闭垃圾桶盖。 步进电机通过线的正反缠绕实现桶盖的开启与关闭。 通过红外对管模块, 检测垃圾桶内的垃圾高度超过限定高度与否, 如果装满, 单片机控制语音播放芯片, 喇叭播放语音提示人们处理垃圾。

主要内容包括:

    1. 人体检测功能
    1. 步进电机驱动电路的设计
    1. 垃圾高度检测功能
    1. 语音播放报警功能

3.1 系统架构

整个由单片机系统、红外对管传感器模块、电机驱动模块、语音报警模块、稳压模块组成。 两个红外对管传感器模块作为单片机主要的信号输入源, 单片机处理输入信号后, 将控制信号输出到电机驱动模块和语音模块, 完成本系统的设计功能。

稳压模块则是在使用非 USB 供电时, 使系统的输入电压保持在 5V, 是保证工作时系统的稳定性所必须的模块。

通过人体检测模块中的红外对管传感器检测出有人, 把此信号传输给单片机,单片机收到该信号处理后控制电机驱动模块进行开盖, 人离开后经延时一段时间后自动关盖。 当垃圾高度达到设定高度时, 垃圾检测模块中的红外对管传感器发送信号至单片机, 单片机接收处理后控制语音模块播放语音报警。 结构框图如图所示。

3.2 硬件部分

3.2.1 传感器模块

常用的用于检测判断移动物体的传感器有热释电传感器、 红外对管传感器和超声波传感器。 热释电传感器广泛应用人体检测, 比如楼道感应灯, 但对人体的移动方向有要求, 平行于传感器方向移动灵敏度最高。和热释电红外传感器对比,红外对管传感器能够检测的最小距离相对小, 反应灵敏, 且不易受环境光干扰而产生误输出。 而超声波测距模块价格较高且感应角度不大于 15 度, 使用条件非常有限。

3.2.2 语音模块

语音模块常用 ISD 系列产品, 比如 ISD1820 和 ISD4004。 ISD4004 模块需要扩展很多外围电路并需要使用额外单片机进行语音录制存储, 增加了电路的复杂度。 ISD1820 是美国 ISD 公司推出一种单片 8~20 秒语音录制兼播放芯片, 它的基本结构与 1110、 1420 系列完全相同, 只能录放一段语音。

3.2.3 电机及其驱动模块

由于该系统需要控制垃圾桶的开盖及开盖角度, 直流电机只能通过通电时间和电流极性来控制其工作, 不适合搭配单片机使用, 而步进电机可以很简单精确地控制其输出轴旋转角度以及方向。 步进电机可分反应式、 永磁式和混合式三种, 永磁式步进电机输出力矩足够本设计所需且动态性能较好。 所以本设计使用反应式来驱动垃圾桶开盖。

3.2.4 稳压模块

中单片机所工作电压为 5V, 其他模块也均可以在 5V 电压下运行,即需要将 7.5V 直流电源降压为 5V 输入电压。 由于本次设计供电电源为 7.5V,LM78 系列压差不能小于 3V, 而且经查资料发现, AMS1117-5.0 型号稳压芯片与LM7805 相比在发热量上相比有很好的降低, 所以本次设计选用 AMS1117-5.0 型号稳压模块。

3.3 软件部分

程序工作流程如下: 红外传感器检测到有人时, 单片机控制步进电机打开桶盖, 传感器模块感应到人离开后, 经延时后垃圾箱盖将自动关闭。 当红外对管传感器检测到垃圾高度超过设定时单片机控制语音模块播放语音报警, 当垃圾被清理后停止报警, 也可手动关闭。

3.3.1 自动翻盖子程序设计

学长使用的是以单双八拍方式工作的五线四相步进电机, 自动翻盖的控制信号输入为检测人体距离的红外对管传感器, 输出信号至步进电机驱动板, 由驱动板直接控制步进电机。

若有人扔垃圾则 1 秒防检测后正转开盖, 人离开后延时3 秒, 反方向旋转相同角度关盖, 通过 delay() 子程序改变步进电机的旋转速度, 通过设置 for 循环的次数来设置步进电机旋转的角度, 从而使桶盖开合合适的角度。 自动翻盖程序流程图如上图所示, 红外 1 传感器指检测是否有人扔垃圾的红外对管传感器。

3.4 实现效果

无人状态下

当周围有人出现后,自动打开垃圾桶

3.5 部分相关代码


//功能: 测试电机驱动功能和电机连线是否正确, 左电机反转, 右电机正转, 电机转速
由小到大。

int INA = 4; //电机 A 正反转控制端
int PWMA = 5; //电机 A 调速端
int INB = 7; //电机 B 正反转控制端
int PWMB = 6; //电机 B 调速端
void setup(){
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT); //配置电机输出 IO 口为输出
}
void loop(){
int value;
for(value = 20 ; value <= 255;value+=2){ //循环每次速度增加 2 最大到 255
motosp(-value,value);//电机速度赋值, 左电机负值为反转, 右电机正转。
delay(50);
}
}
void motosp(int sp1,int sp2)//声明电机速度控制函数。 括号内定义的变量分别为左右电机{
if(sp1>0) {
digitalWrite(INA, HIGH);
}
else
{
digitalWrite(INA, LOW);
}
if(sp2>0)
{
digitalWrite(INB, HIGH);
}
else
{
digitalWrite(INB, LOW);
}
analogWrite(PWMA,abs (sp1));
analogWrite(PWMB,abs (sp2));
}

//红外感应模块:

int Sensor = 2;
int ina = 13;
void setup() {
pinMode(ina, OUTPUT); //13 引脚定义为输出
Serial.begin(9600); //设置下载程序的串口的波特率为 9600
pinMode(Sensor, INPUT); //2 引脚定义为输入
}
void loop() {
int SensorState = digitalRead(Sensor);//读取 2 引脚的电平
while(SensorState == 1){
SensorState = digitalRead(Sensor); //2 引脚为高电平时, 设置 13 引脚为高
digitalWrite(ina,HIGH);
delay(1000); //延时 1000ms
}
while(SensorState == 0){ //当 2 引脚为低电平时, 设置 13 引脚为低
SensorState = digitalRead(Sensor);
digitalWrite(ina,LOW);
}
delay(100); //延时 100ms
}

// 避障模块:
int Sensor1 = 2;
int Sensor2 = 4 ;
int ina = 13;
int inb = 12;
void setup() {
pinMode(ina, OUTPUT); //定义输入、 输出引脚
pinMode(inb, OUTPUT);
Serial.begin(9600);
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
}
void loop() {
int SensorState1 = digitalRead(Sensor1);//读取数据
int SensorState2 = digitalRead(Sensor2);
boolean Write = true; //定义布尔变量
boolean Black = true;
if(SensorState1 == 1){
Write = false;
}
if(SensorState2 == 1){
Black = false;
}
if(Write && Black){ //当量输入引脚同时为高时, 两输出引脚为高
digitalWrite(ina,HIGH);
digitalWrite(inb,HIGH);
delay(1000);
}
digitalWrite(ina,LOW); //复位
digitalWrite(inb,LOW);
delay(100);
}



/*******************************************************************
篇幅有限,只展示部分代码
********************************************************************/




单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


4 最后

有关【毕业设计】基于单片机的智能感应垃圾桶设计与实现 - 物联网 stm32 嵌入式的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  4. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  8. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

  9. ruby-on-rails - Rails 5,公寓和设计 : sign in with subdomains are not working - 2

    我已经使用Apartment设置了一个Rails5应用程序(1.2.0)和Devise(4.2.0)。由于某些DDNS问题,应用只能在app.myapp.com下访问(请注意子域app)。myapp.com重定向到app.myapp.com。我的用例是每个注册该应用的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据。用户不应限定在其子域内。基本上应该可以从任何子域登录。重定向到租户的正确子域由ApplicationController处理。根据Devise标准,登录页面位于app.myapp.com/users/sign_in。这就是问题开始的

  10. ruby-on-rails - 设计中的 ArgumentError::RegistrationsController#new 错误的参数数量(2 代表 0..1) - 2

    我在关注RyanbatesRailsCast的devise和omniauth(第235集-devise-and-omniauth-revised)。当我尝试使用Twitter登录时,标题中不断出现错误。defself.new_with_session(params,session)ifsession["devise.user_attributes"]new(session["devise.user_attributes"],without_protection:true)do|user|user.attributes=paramsuser.valid?end完整跟踪:C:/Ruby20

随机推荐