找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8761|回复: 1
收起左侧

基于51单片机的智能垃圾桶设计论文

[复制链接]
ID:229530 发表于 2017-8-27 16:51 | 显示全部楼层 |阅读模式



要求:
1.指导教师按照课程设计大纲要求完成学生课程设计指导工作。
2.课程设计任务书由指导教师照大纲要求填写,内容要全面。
3.课程设计报告由参加本学生填写。课程设计结束时交指导教师。
4.指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。
5.课程设计任务书和报告要语言流畅,图表正确规范。
6.本表要用钢笔、圆柱笔填写或打印,字迹工整。




课程设计任务书
班级      4101090102    姓名    王 彤            学号   410109060209              
课程设计题目           基于Arduino的智能垃圾桶的设计
课程设计起止日期           2013.12.23              2014.1.10                    
实习地点            实验楼 106         
课程设计内容与要求
  设计任务:基于Arduino的智能垃圾桶
要求:
     1.可以用遥控器控制垃圾桶的行走,并由人们实时随意控制;
     2.垃圾桶在行进过程中可以躲避障碍物;
     3.有人伸手扔垃圾时,垃圾桶盖自动打开,之后自动关闭;
     4.圾桶内垃圾到达一定程度时,垃圾桶能自动发出提醒声;  


[size=12.0000pt]
[size=14.0000pt]
[size=14.0000pt]
[size=14.0000pt]
                                        指导教师: 李明亮
                                        2013 年 12月 23 日
注:此表可加附页
一、设计原理与技术方法
(包括:电路工作原理分析与原理图、元器件选择、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。)
1. 智能垃圾桶的功能分析
为实现所有功能,需要一个控制中心,即主控单元,实时接收各方面信息并处理,然后发出指令,从而实现功能。
要实现无线遥控功能,需要一个外置的遥控器,垃圾桶主体还要设置一个信号接收的模块接受遥控的指令并把信号转换为电信号传输给主控单元,再由主控单元处理并发送指令,驱动发动机转动和控制轮子以改变方向。
而对于自动避障功能,需要设置一个避障模块和电机驱动模块,能够检测前方是否有障碍。若有,则发送电信号至主控单元,再由主控单元发送指令至发动机,从而停止行进。需要检测环境的功能还有自动开盖功能和自动提醒垃圾已满功能。自动开盖功能需要一个感应模块和一个轴承控制模块。如果有人体靠近,感应模块就发送信号到主控单元,通过主控单元控制轴承控制模块,打开垃圾桶盖。自动提醒垃圾已满功能需要一个测试模块和语音控制模块。桶内垃圾达到一定高度时测试模块就发送信号给主控单元,从而使语音控制模块发出提醒声。以上三个功能都需要传感器来检测外界环境从而判断是否发出信号给主控单元,实现其相应的功能。
1.1 设计方案的选择
Arduino板作为控制中心的主控单元,为实现垃圾桶的智能化,还需要加入其他功能模块,分别与主控单元相连接,接收主控单元的命令从而实现其特有功能。需要的功能模块如下:
用于为各个模块供电的电源模块,其电源输出端分别连接上述各个模块的电源端;
用于接收遥控命令的无线信号接收模块;
用于避免障碍物的红外避障模块,用于测试垃圾高度的红外测试模块,用于自动感应人体靠近的红外感应模块;
用于驱动电机工作的电机驱动模块;
用于当垃圾桶内物品到达指定高度时,自动发出提醒声的语音控制模块。
用于当人体靠近时自动开盖的轴承控制模块。
1.2 设计方案的各模块关系框图及说明

课程设计报告
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F4.tmp.png
1 各模块关系框图
各模块关系图如图1 所示,电源模块A用于为各个模块供电的,其电源输出端分别连接所用到的各个模块的电源端。当使用时,首先通过遥控器B1发送命令,此命令通过无线信号传输给无线电模块B2,无线模块B2将信号处理后传送至Arduino主控单元G,由主控单元G发送命令至电机驱动模块D,垃圾桶按照命令,在电机驱动模块D的驱动下实现前进、后退、左移、右移功能。在行驶过程中,距离障碍物20cm处,垃圾桶可通过红外避障模块C1感应前方障碍物,此模块发送命令至主控单元G,再发送给电机驱动模块指令,此时垃圾桶会向左或向右转弯,控制者可根据自己的方位对垃圾桶进行实时控制以使垃圾桶到达控制者附近,控制者向垃圾桶内扔垃圾,当手靠近垃圾桶时,垃圾桶可通过红外控制模块C3发送命令到主控单元G,再由主控单元G发送命令到轴承控制模块F,使垃圾桶自动开盖,5秒后自动关盖。如果垃圾桶内物品装满时,可通过红外测试模块C2感应到垃圾桶内物品高度,如果桶内物品高度到达距桶盖5厘米处,红外测试模块C3可向主控单元G发送命令,主控单元G向语音控制模块E传输命令,使得语音控制模块E自动发出提醒声。
2. 智能垃圾桶设计器材的选择
由于时间及材料有限,我们仅利用红外避障模块和红外感应模块及Arduino板模拟                               了躲避障碍物,自动感应周围的人来自动开盖关盖的功能。所需材料如表一所示:
表一 设计所需器材说明表
元件名称
参考规格
数量
实物参考图
Arduino开发板
[size=10.0000pt]
Uno R3


一块
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F5.tmp.jpg
[size=10.0000pt]
[size=10.0000pt]
[size=10.0000pt]
9V电池



----


一块
[size=9.0000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F6.tmp.png


红外避障模块


----


三个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F7.tmp.jpg

红外测距模块


夏普GP2Y0D805Z0


一个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F8.tmp.jpg
[size=10.0000pt]
[size=10.0000pt]
无线遥控模块

[size=10.0000pt]
[size=10.0000pt]
OPENJUMPER蓝牙模块v2.0


两个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsD9F9.tmp.jpg


红外感应模块


HC-SR501


一块
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0A.tmp.png

车体


Openjumper小车车体套件
[size=10.0000pt]

一个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0B.tmp.jpg


扩展板


UNO配套的传感器扩展板
[size=10.0000pt]

一个
[size=9.0000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0C.tmp.png

电机驱动

[size=10.0000pt]
[size=10.0000pt]
openjumperL298电机驱动板
[size=10.5000pt]

一个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0D.tmp.jpg

面包板
[size=10.5000pt]

840孔无焊板

一个
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0E.tmp.png

蜂鸣器

----

一个
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA0F.tmp.jpg
[size=10.5000pt]

面包板专用线

----

若干
[size=10.5000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA10.tmp.jpg


指示灯


LED灯


若干
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA21.tmp.png
2.1 芯片说明
2.1.1 ArduinoUNO芯片


[size=12.0000pt]file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA22.tmp.png
2  Arduino UNO芯片实物图
Arduino UNO芯片,如图2 Arduino UNOArduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。与51单片机相比,Arduino UNO具有很多优势,例如功耗小、每个人模块是打包好的可以直接用,操作简单等等。所以在这里我们选用Arduino UNO芯片。
参考数据
(1) 处理器 ATmega328  
(2) 工作电压 5V
(3) 输入电压(推荐) 7-12V  
(4) 输入电压(范围) 6-20V
(5) 数字IO14 (其中6路作为PWM输出)  
(6) 模拟输入脚 6
(7) IO脚直流电流 40 mA  
(8) 3.3V脚直流电流 50 mA
(9) Flash Memory 32 KB ATmega328,其中0.5 KB 用于 bootloader
(10) SRAM 2 KB ATmega328
(11) EEPROM 1 KB ATmega328)  
(12) 工作时钟 16 MHz
2.1.2 HC-SR501芯片
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA23.tmp.png
3 HC-SR501实物图
红外感应模块可采用HC-SR501普通型人体红外感应模块热释电红外传感器。如图3
其技术参数如下:
1)工作电压:DC5V20V
2)静态功耗:65微安
3)电平输出:高3.3V,低0V
4)延时时间:可调(0.3~18)
5)封锁时间:0.2
6)触发方式:L不可重复,H可重复,默认值为H
7)感应范围:小于120度锥角,7米以内
8)工作温度:-15~+70
9PCB外形尺寸:32*24mm,螺丝孔距28mm,螺丝孔径2mm,感应透镜尺寸:(直径)23mm(默认)
其功能特点如下:
1)全自动感应:当有人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平。输出低电平。
2)两种触发方式:L不可重复,H可重复。可跳线选择,默认为H。     
A.不可重复触发方式:即感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。
B.可重复触发方式: 即感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)
3)具有感应封锁时间(默认设置:0.2):感应模块在每一次感应输出后(高电平变为低电平),可以紧跟着设置一个封锁时间,在此时间段内感应器不接收任何感应信号。此功能可以实现(感应输出时间和封锁时间)两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。
4)工作电压范围宽:默认工作电压DC5V20V
5)微功耗:静态电流65微安,特别适合干电池供电的电器产品。 7.输出高电平信号:可方便与各类电路实现对接。
把人体红外感应模块放在垃圾桶盖上,放在桶盖中心位置,一个即可。若有条件,可放4个甚至跟多,均匀的放在桶盖边上,并联即可。
2.1.3 红外避障模块原理
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA24.tmp.png
4 红外障传感器实物图
如图4 红外避障模块采用普通的红外障传感器,该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围 280cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。
其主要参数说明如下:
(1) 当模块检测到前方障碍物信号时,电路板上绿色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离280cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。
(2) 传感器主动红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。
(3) 传感器模块输出端口OUT可直接与单片机IO口连接即可,也可以直接驱动一个5V继电器;连接方式:VCC-VCC;GND-GND;OUT-IO
(4) 比较器采用LM393,工作稳定;
(5) 可采用3-5V直流电源对模块进行供电。当电源接通时,红色电源指示灯点亮;
(6) 具有3mm的螺丝孔,便于固定、安装;
(7) 电路板尺寸:3.1CM*1.5CM
(8) 每个模块在发货已经将阈值比较电压通过电位器调节好,非特殊情况,请勿随意调节电位器。
模块接口说明(3线制)如下:
(1) VCC  外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
(2) GND  外接GND
(3) OUT  小板数字量输出接口(01
这个模块的主体是三个红外传感器。只需要把三个红外传感器均匀的安装在小车上。
2.1.4 电源
Arduino UNO可以通过3种方式供电,而且能自动选择供电方式  
(1)外部直流电源通过电源插座供电。  
(2)电池连接电源连接器的GNDVIN引脚。  
(3)USB接口直接供电。
电源引脚说明:
VIN --- 当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向UNO直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。
5V --- 通过稳压器或USB5V电压,为UNO上的5V芯片供电。
3.3V --- 通过稳压器产生的3.3V电压,最大驱动电流50mA。   
GND --- 地脚。
2.1.5 遥控器和无线模块:
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA34.tmp.jpg
5蓝牙串口通信模块HC-05实物图
OPENJUMPER蓝牙模块v2.0是主从一体的蓝牙串口通信模块HC-05,可通过AT模式改写其各参数。适用于ArduinoPC、手机等设备的无线连接,如图5 所示。
将蓝牙模块通过USB传串口模块连接到电脑USB端口,可直接通过串口助手发送AT命令来配置蓝牙模块。
设置好AT指令后,让蓝牙主机通过转串口模块连接电脑,蓝牙从机连接小车上。蓝牙处于工作状态,也就是AT引脚接低电平或者悬空(工作状态下,蓝牙state灯为快闪)。此时蓝牙会自动搜索能够与之配对的模块,自动连接配对,配对成功后LINK灯变为常亮
2.1.6 红外测距模块
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA35.tmp.png
6 红外测距传感器实物图
在垃圾桶盖的下方安装一个红外测距传感器,该传感器与主控单元连接,用来测试桶内垃圾高度,实物图如图6所示。
2.1.7 电机驱动模块
file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA36.tmp.jpg
7 整体连接效果图
先下载一个程序来为电机接线做准备。电机的2根线并没有正负之分,电机驱动板上的M1,M2接线端子也不能确定应该对应左右哪一个电机然后要对uno下载一段程序,以方便我们对小车电机进行连线。效果图如图7所示。
2.2 设计说明
由于时间和材料有限,我们利用小灯、面包板、HC-SR501普通型人体红外感应器、红外避障传感器等实验器材,编写了红外避障、红外感应模块的程序,并用小灯的亮灭检测两个模块是否能正常执行。各模块程序如下:
电机测试程序:
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
}

实验现象:当我们靠近此模块圆形凸面时,13引脚连接的小灯亮了并延时一段时间,过后小灯灭,也延时一段时间,在此期间内,在接近圆形凸面时,小灯不亮,过后会亮。这说明红外感应模块能够正常工作。
避障模块:
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);
}
实验现象说明:当芯片上红外发射管周围有障碍物时,1213引脚连接的小灯同时亮,有障碍物时一直亮,障碍物除去以后,小灯灭。这说明红外避障模块能够正常工作。
二、课程设计工作记录
1. 设计步骤与时间安排(含调试步骤与时间安排)
1223日至1227日,选课题,查阅资料,确定设计方案。
1228日至11日,根据设计方案,确定所需模块及器材,学习Arduino的编写语言,然后分模块编写程序。
1215日,通过实验板调试程序,纠正程序的功能错误,不断完善程序。
16日,行答辩。
17日至18日,交实习报告,修改实习报告。
2. 课题完成结果说明
1)程序实现了以下功能
1)当避障模块周围出现障碍物时,连接的小灯点亮,障碍物移走,小灯灭,反应比较灵敏。
2)当红外感应模块周围有人活动时,连接的小灯点亮,亮一段时间后,小灯灭并延时,再次期间,再有人活动小灯不亮,过了延时期,才会正常感应。
3)通过量模块小灯的亮灭,正确判断了两模块是否正常工作。
2)遇到的问题总结如下
1)以前没有接触过Arduino,所以开始做有点费力,时间、材料有限的情况下,就做出两个模块的功能。
2)红外感应模块所用的芯片HC-SR501,上面有两个旋转按钮,一个控制延时时间,一个控制感应距离,开始的时候没发现它们的作用,就单靠程序的延时控制小灯的亮灭时间,发现实验现象和预想不符,仔细阅读了芯片引脚功能分析后,发现并解决了这个问题。
3)网上对Arduino的解说材料特别少,查找十分不便,对初期工作造成困扰。
3)心得体会
三周的实习很快过去了,虽然过程很痛苦,但果实是丰硕的。以前我们学习知识总是停留在知识层面,觉得书本上的只弄懂了就不错了。但通过这次实习我发现我以前的想法真是大错特错。要适应现在高速发展的社会的人才需求,我们不光要具备良好的学习习惯,还有有优秀的仔细能力、融会贯通能力。通过这次实习我发现,我在这方面真的十分欠缺。我们做的基于Arduino的智能垃圾桶的设计,听似简单,但设计之初,我们焦头烂额,首先,没有学过Arduino板,一点都没了解过,那时才发现,作为电子信息工程专业的学生,我们的知识面有多么狭隘。其次,对于智能垃圾桶要具备哪些功能,我们也一无所知,我焦躁过,放弃过,但最终,都想着要最后提交实习报告,而重新振作。我们在网上利用并不丰富关于Arduino的资料,查阅图书馆仅有的一种关于Arduino的图书,团结一致,发挥我们的想象力。在真正设计期间,我们遇到很多困难,但是我们没有在气馁,坚持了三个星期。
在这门课程设计中,我锻炼了自己动手能力,提高了解决问题的能力。我学习了Arduino编程,了解了HC-SR501芯片,及红外避障、红外感应的原理。这次课设,我学到最多的还是,要独立学习,不要满足,不断学习和了解新的内容,电子业是个更新换代特别快的行业,我们不跟上它的脚步,只能被淘汰。

课程设计验收
指导教师评语及成绩:
[size=14.0000pt]
成绩
指导教师签字

年   月   日
教研室主任意见
[size=14.0000pt]

教研室主任签字

年   月    日


回复

使用道具 举报

ID:684871 发表于 2020-10-17 23:10 来自手机 | 显示全部楼层
这个没原理图啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表