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

发布时间:2024-07-03 12:01

文章目录

  • 1 简介
  • 2 绪论
    • 2.1 课题背景与目的
  • 3 系统设计
    • 3.1 系统架构
    • 3.2 硬件部分
      • 3.2.1 传感器模块
      • 3.2.2 语音模块
      • 3.2.3 电机及其驱动模块
      • 3.2.4 稳压模块
    • 3.3 软件部分
      • 3.3.1 自动翻盖子程序设计
    • 3.4 实现效果
    • 3.5 部分相关代码
  • 4 最后


1 简介

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

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

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


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

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


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

2 绪论

2.1 课题背景与目的

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

3 系统设计

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

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

主要内容包括:

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

3.1 系统架构

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

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

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

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

3.2 硬件部分

3.2.1 传感器模块

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

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

3.2.2 语音模块

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

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

3.2.3 电机及其驱动模块

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

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

3.2.4 稳压模块

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

3.3 软件部分

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

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

3.3.1 自动翻盖子程序设计

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

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

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

3.4 实现效果

无人状态下
【毕业设计】基于单片机的智能感应垃圾桶设计与实现 - 物联网 stm32 嵌入式_第8张图片

当周围有人出现后,自动打开垃圾桶
【毕业设计】基于单片机的智能感应垃圾桶设计与实现 - 物联网 stm32 嵌入式_第9张图片

3.5 部分相关代码


/************************************************
 
 作者:丹成学长,Q746876041
************************************************/

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

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);
}



/*******************************************************************
篇幅有限,只展示部分代码
作者:丹成学长,q532036360
********************************************************************/




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

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


4 最后

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号