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板模拟 了躲避障碍物,自动感应周围的人来自动开盖关盖的功能。所需材料如表一所示: 表一 设计所需器材说明表 元件名称 | | | | | | | [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 | | | | [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 | | | | 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 | | | | 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 | | | | 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 UNO是Arduino 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) 数字IO脚 14 (其中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)工作电压:DC5V至20V (2)静态功耗:65微安 (3)电平输出:高3.3V,低0V (4)延时时间:可调(0.3秒~18秒) (5)封锁时间:0.2秒 (6)触发方式:L不可重复,H可重复,默认值为H (7)感应范围:小于120度锥角,7米以内 (8)工作温度:-15~+70度 (9)PCB外形尺寸:32*24mm,螺丝孔距28mm,螺丝孔径2mm,感应透镜尺寸:(直径):23mm(默认) 其功能特点如下: (1)全自动感应:当有人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平。输出低电平。 (2)两种触发方式:L不可重复,H可重复。可跳线选择,默认为H。 A.不可重复触发方式:即感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。 B.可重复触发方式: 即感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。 (3)具有感应封锁时间(默认设置:0.2秒):感应模块在每一次感应输出后(高电平变为低电平),可以紧跟着设置一个封锁时间,在此时间段内感应器不接收任何感应信号。此功能可以实现(感应输出时间和封锁时间)两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。 (4)工作电压范围宽:默认工作电压DC5V至20V (5)微功耗:静态电流65微安,特别适合干电池供电的电器产品。 7.输出高电平信号:可方便与各类电路实现对接。 把人体红外感应模块放在垃圾桶盖上,放在桶盖中心位置,一个即可。若有条件,可放4个甚至跟多,均匀的放在桶盖边上,并联即可。 2.1.3 红外避障模块原理 file:///C:\Users\lengshao\AppData\Local\Temp\ksohtml\wpsDA24.tmp.png 图4 红外障传感器实物图 如图4 红外避障模块采用普通的红外障传感器,该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围 2~80cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。 其主要参数说明如下: (1) 当模块检测到前方障碍物信号时,电路板上绿色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离2~80cm,检测角度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 小板数字量输出接口(0和1) 这个模块的主体是三个红外传感器。只需要把三个红外传感器均匀的安装在小车上。 2.1.4 电源 Arduino UNO可以通过3种方式供电,而且能自动选择供电方式 (1)外部直流电源通过电源插座供电。 (2)电池连接电源连接器的GND和VIN引脚。 (3)USB接口直接供电。 电源引脚说明: VIN --- 当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向UNO直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。 5V --- 通过稳压器或USB的5V电压,为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模式改写其各参数。适用于Arduino与PC、手机等设备的无线连接,如图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); } 实验现象说明:当芯片上红外发射管周围有障碍物时,12、13引脚连接的小灯同时亮,有障碍物时一直亮,障碍物除去以后,小灯灭。这说明红外避障模块能够正常工作。 二、课程设计工作记录 1. 设计步骤与时间安排(含调试步骤与时间安排) 12月23日至12月27日,选课题,查阅资料,确定设计方案。 12月28日至1月1日,根据设计方案,确定所需模块及器材,学习Arduino的编写语言,然后分模块编写程序。 1月2至1月5日,通过实验板调试程序,纠正程序的功能错误,不断完善程序。 1月6日,行答辩。 1月7日至1月8日,交实习报告,修改实习报告。 2. 课题完成结果说明 (1)程序实现了以下功能 1)当避障模块周围出现障碍物时,连接的小灯点亮,障碍物移走,小灯灭,反应比较灵敏。 2)当红外感应模块周围有人活动时,连接的小灯点亮,亮一段时间后,小灯灭并延时,再次期间,再有人活动小灯不亮,过了延时期,才会正常感应。 3)通过量模块小灯的亮灭,正确判断了两模块是否正常工作。 (2)遇到的问题总结如下 1)以前没有接触过Arduino,所以开始做有点费力,时间、材料有限的情况下,就做出两个模块的功能。 2)红外感应模块所用的芯片HC-SR501,上面有两个旋转按钮,一个控制延时时间,一个控制感应距离,开始的时候没发现它们的作用,就单靠程序的延时控制小灯的亮灭时间,发现实验现象和预想不符,仔细阅读了芯片引脚功能分析后,发现并解决了这个问题。 3)网上对Arduino的解说材料特别少,查找十分不便,对初期工作造成困扰。 (3)心得体会 三周的实习很快过去了,虽然过程很痛苦,但果实是丰硕的。以前我们学习知识总是停留在知识层面,觉得书本上的只弄懂了就不错了。但通过这次实习我发现我以前的想法真是大错特错。要适应现在高速发展的社会的人才需求,我们不光要具备良好的学习习惯,还有有优秀的仔细能力、融会贯通能力。通过这次实习我发现,我在这方面真的十分欠缺。我们做的基于Arduino的智能垃圾桶的设计,听似简单,但设计之初,我们焦头烂额,首先,没有学过Arduino板,一点都没了解过,那时才发现,作为电子信息工程专业的学生,我们的知识面有多么狭隘。其次,对于智能垃圾桶要具备哪些功能,我们也一无所知,我焦躁过,放弃过,但最终,都想着要最后提交实习报告,而重新振作。我们在网上利用并不丰富关于Arduino的资料,查阅图书馆仅有的一种关于Arduino的图书,团结一致,发挥我们的想象力。在真正设计期间,我们遇到很多困难,但是我们没有在气馁,坚持了三个星期。 在这门课程设计中,我锻炼了自己动手能力,提高了解决问题的能力。我学习了Arduino编程,了解了HC-SR501芯片,及红外避障、红外感应的原理。这次课设,我学到最多的还是,要独立学习,不要满足,不断学习和了解新的内容,电子业是个更新换代特别快的行业,我们不跟上它的脚步,只能被淘汰。
|