《基于Arduino的校园作息时间控制系统课程设计.doc》由会员分享,可在线阅读,更多相关《基于Arduino的校园作息时间控制系统课程设计.doc(24页珍藏版)》请在三一办公上搜索。
1、目录页码1. 系统总体方案设计22. 系统硬件设计3 2.1. 按键输入电路3 2.2. 输出电路4 2.3. 显示电路53. 软件设计(包括流程图)94. 软件仿真155. 系统的安装调试说明176. 总结187. 参考文献198. 附录191. 系统总体方案设计 校园作息时间控制系统主要用于学校,对一些以24小时为周期的开关量进行自动控制。如上下课打铃、教学音响的定时开与关等。该控制系统是采用Arduino_UNO微控制器来实现对上述开关量的控制,设有四位数码管、可以实时显示时间、系统还设有按键,用以修改实时时钟,体现了系统简单、工作稳定可靠、价廉、控制时间精确及系统体积小等优点。该时钟控
2、制系统有4位数码显示器,具有实时显示时钟(显示当前时间的小时、分钟)功能,可以实现多点、多电器设备的控制。该控制系统可广泛用于学校、工厂和机关的自动打铃、音响及其他对象控制,也可用于家庭或学生寝室进行时间指示及多点时间提醒。为方便仿真与测试,本系统以秒代分,日时间累计误差1分钟。系统设有的按键电路,方便定期进行时间校准。根据设计要求画出系统框图,如图1所示,原理见附录1。该控制系统是由微处理器、蜂鸣器、数码显示部分以及按键输入部分所组成。显示电路采用了74LS48芯片来完成驱动和译码的功能。图1 系统框图根据实际情况对上下课打铃与教学音响的定时开关量在一天内的控制时间列表如下:时间事件动作7:
3、30播放歌曲30分钟LED1亮30分钟8:00第一节课上课打铃Bee响铃1分钟8:45第一节课下课铃响Bee响铃1分钟9:00第二节课上课铃响Bee响铃1分钟9:50第二节课下课铃响Bee响铃1分钟9:55课间操开始,放音乐10分钟LED2亮10分钟10:10第三节上课铃响Bee响铃1分钟11:00第三节下课铃响Bee响铃1分钟11:10第四节上课铃响Bee响铃1分钟12:00第四节下课铃响Bee响铃1分钟表1 作息时间控制表2. 系统硬件设计 这个课程设计主要用到的硬件是PC机,Arduino入门套件。将复位和校时将设定时间覆盖现在时间(T)的按钮依次并列排列在面包板上,并加上代表下课上课铃
4、声的有源蜂鸣器和两个代表播放歌曲和课间操的LED。将以上按照编程与四位数码管和Arduino板连接。 总体连接图如下图2所示:图2 总体连接图 这个电路图是由Fritzing(面包板)软件绘制,软件库中不含有四位数码管。图中用一个同是12管教的显示器代替了。按系统框图分三个部分设计如下:2.1. 按键输入电路窗体底端输入控制是由两个按键组成的,它是微型计算机最常用的输入设备,用户可以通过按键向计算机输入复位和校时指令。本系统中采用独立式按键结构,如图3所示,各按键相互独立地接通一条输入数据线,当任何一个键按下时,与之相连的输入数据线即被置0,而平时该线置1。独立式按键电路配置灵活,软件结构简单
5、。当功能键不很多时,采用该种方式比较合适。图3 按键连接图2.2. 输出电路输出控制信号串口LED灯和蜂鸣器,串口各位所控制的对象见表2,输出部分原理图如图5所示。串口的位控制,“LOW”控制截止、“HIGH”控制导通串口0113用电器LED1LED2有源蜂鸣器表2 位控表图4输出部分原理图2.3. 显示电路 4位LED显示器进行设计。只有理解结构和内部接线图,读引脚图,以便正确连接电路,得到正确的实验结果的。 4位数码管:图5 4位数码管俯视图 四位数码管有12个外部引脚,数码管的引脚标号为,左下角为1,按逆时针方向数,分别为1-12。图6 4位数码管立体视图 共阴极发光二极管的内部接线图:
6、图7 共阴极4位数码管内部接线图 发光二极管的引脚图:图8 共阴极4位数码管引脚图 以下是发光二极管的接线图:图9 共阴极4位数码管接线图显然,连接LED需要占用Arduino的12个引脚(大部分的)。所以添加一个显示系统74LS48芯片来减少引脚数的使用。 74LS48芯片是一种常用的七段数码管译码驱动,常用于各种数字电路和微控制器系统的显示系统,下面是一些参数的组件和应用技术及其他信息。BCD-74LS48引脚图:图10 BCD-74LS48芯片引脚图表3 功能表-七段译码器74LS48驱动函数表十进制数或函数输入BI/RBO输出备注LTRBID C B Aabcdefg0HH0 0 0
7、0H111111011Hx0 0 0 1H01100002Hx0 0 1 0H11011013Hx0 0 1 1H11110014Hx0 1 0 0H01100115Hx0 1 0 1H10110116Hx0 1 1 0H00111117Hx0 1 1 1H11100008Hx1 0 0 0H11111119Hx1 0 0 1H111001110Hx1 0 1 0H000110111Hx1 0 1 1H001100112Hx1 1 0 0H010001113Hx1 1 0 1H100101114Hx1 1 1 0H000111115Hx1 1 1 1H0000000BIxxx x x xL00
8、000002RBIHL0 0 0 0L00000003LTLxx x x xH11111114连接 74LS48 与LED显示器:图11 BCD-74LS48芯片与4位显示器连接图在Proteus绘制的连接图:图12 BCD-74LS48芯片与4位显示器仿真连接图3. 软件设计(包括流程图)软件设计以时钟显示、输出控制为主程序。在设计中利用中断,中断子程序有时间复位,和时间校准。下面是流程图:图13 编程流程图设计程序:首先定义显示器和译码器各个管脚,LED灯,蜂鸣器按钮在Arduino板上的对应管脚。其次设置相应的管脚为输出管脚并设置2个按钮为输入管脚并加上内部change模式。设置2个中断
9、,设置中断引脚数为2和3,此部分程序如下图2所示。接下来,定义需要在显示器上显示的字母和不同时期的数字,并用然后运用if语句定义不同时间断的蜂鸣器运行与LED灯的亮灭。中断程序设置2个按钮不同的功能。以下是完整的4位显示器显示程序:程序注释/*seg_a:(11) -74ls48p(13) seg_b:(7) -74ls48p(12) seg_c:(4) -74ls48p(11) seg_d:(2) -74ls48p(10) seg_e:(1) -74ls48p(9) seg_f:(10) -74ls48p(15) seg_g:(5) -74ls48p(14) */ #define A 4 #
10、define B 5 #define C 6 #define D 7 #define COM1 9 #define COM2 10 #define COM3 11 #define COM4 12 unsigned char table104 = 0,0,0,0, 1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1;void setup()pinMode(A,OUTPUT);pinMode(B,OUTPUT);pinMode(C,OUTPUT);pinMode(D,OUTPUT);pinMode(COM1
11、,OUTPUT);pinMode(COM2,OUTPUT);pinMode(COM3,OUTPUT);pinMode(COM4,OUTPUT);void loop()Display(1,0);delay(500);Display(2,1);delay(500);Display(3,2);delay(500);Display(4,3);delay(500);void Display(unsigned char com,unsigned char num)digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,LOW);digitalWrite
12、(D,LOW);switch(com)case 1:digitalWrite(COM1,LOW);digitalWrite(COM2,HIGH);digitalWrite(COM3,HIGH);digitalWrite(COM4,HIGH);break;case 2:digitalWrite(COM1,HIGH);digitalWrite(COM2,LOW);digitalWrite(COM3,HIGH);digitalWrite(COM4,HIGH);break;case 3:digitalWrite(COM1,HIGH);digitalWrite(COM2,HIGH);digitalWri
13、te(COM3,LOW);digitalWrite(COM4,HIGH);break;case 4:digitalWrite(COM1,HIGH);digitalWrite(COM2,HIGH);digitalWrite(COM3,HIGH);digitalWrite(COM4,LOW);break;default:break;digitalWrite(A,tablenum0);digitalWrite(B,tablenum1);digitalWrite(C,tablenum2);digitalWrite(D,tablenum3);/arduino:(4) -74ls48p(7)/arduin
14、o:(5) -74ls48p(1)/arduino:(6) -74ls48p(2)/arduino:(7) -74ls48p(6)/arduino:(9) -74ls48p(6)/arduino:(10) -74ls48p(8)/arduino:(11) -74ls48p(9)/arduino:(12) -74ls48p(12) /对应 hgfedcba /0 /1/2/3/4/5/6/7/8/9/设置为输出引脚/第一位显示0/二位显示1/第三位显示2/第四位显示3/去除的余辉/选通/选择1位/选择2位/ /选择位3/ /选择位4/查询代码表以下是主程序:此课程设计的完整的程序展示在附录中。4
15、. 软件仿真 Proteus软件是用以测试的程序的功能: 在protues中建模如下:图13 仿真连接图图中使用了以下器件的一部分: 并生成程序对应的HEX文件,放入Atmal328P中:图14 元件编辑窗口图 然后模拟:图15 仿真运行图 所有预想的功能都能实现。运行后,按动不同按钮,显示器上能显示相应的时间。达到具体时间可见相应的LED灯的闪灭,和蜂鸣器的反应。由此验证程序是正确的,建模也是正确的,程序和仿真能达到预期的效果。5. 系统的安装调试说明把所有器件按照图2进行连接,总装图如下:图16 接线实物图 对于没有接蜂鸣器在这里表示非常遗憾。因为我套件里面有源蜂鸣器有问题,就算直接接电源
16、和地也无法响应。 但是由于蜂鸣器接的是13串口,这个串口自带一个led灯,这里勉强可以通过LED灯的反应来代替蜂鸣器的反应,进行观察。 其他所有预想的功能都能实现。运行后,有时候按动不同按钮,显示器上能显示相应的时间。达到具体时间可见相应的LED灯的闪灭,和蜂鸣器的反应。由此验证程序是正确的,建模也是正确的,程序和仿真能达到预期的效果。 也就是说按钮有时候会不灵,这时候时间会继续显示,到了相应时间点所对应的用电器(LED灯)也会反应。为此做出了改进,在程序上加入了上拉响应,硬件上加入了一个电阻。大部分时间,所有功能能够正常运行。 6. 总结通过微控制器课程设计,我不仅加深了对微控制器理论的理解
17、,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。 当然,我的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请老师批评指正。这次设计也让我懂得细节决定成败,在以后的设计中我会严格
18、吸取教训,做的更好! 在设计过程中,通过针对性地查找资料,了解了些电子方面的资料,既增长了自己见识,补充最新的专业知识,又提高了自己的应用能力。这次课程设计对我以前学过的理论知识起到了很好的回顾作用,以前课堂学习时不够清楚如何应用所学知识,对所学的课程不能很好的融会贯通。但现在通过课程设计,让我很好的运用了模拟电路、数字电路、微控制器原理方面的知识,对其加以进一步的消化和巩固,并进行很好的链接。通过校园作息时间控制系统的设计,让我体会到微控制器使用的广泛性以及其重要性,微控制器技术的出现给现代控制领域带来了一项新的改变。目前,微控制器在控制系统诸多领域中得到了极为广泛的应用,具有很好的稳定性,
19、更快和更准确的运算精度,推动了学习生产,影响着人们的工作和学习。所以我们要不断学习加强这方面的知识以及相关的知识,比如电路板设计、汇编语言编程等。总之这次课程设计让我把理论设计和动手实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。最后,我要感谢我的指导老师,是他给了我许多的帮助。7. 参考文献1.Arduino Programming in 24 Hours. Richard Blum2.Arduino程序设计指南. Richard Blum3. Introduction to Arduino-
20、A piece of cake.Alan G. Smith8. 附录完整程序如下:code/*seg_a:(11) -74ls48p(13) seg_b:(7) -74ls48p(12) seg_c:(4) -74ls48p(11) seg_d:(2) -74ls48p(10) seg_e:(1) -74ls48p(9) seg_f:(10) -74ls48p(15) seg_g:(5) -74ls48p(14) */ #define A 4 /arduino:(4) -74ls48p(7)#define B 5 /arduino:(5) -74ls48p(1)#define C 6 /ard
21、uino:(6) -74ls48p(2)#define D 7 /arduino:(7) -74ls48p(6)#define COM1 9 /arduino:(9) -74ls48p(6)#define COM2 10 /arduino:(10) -74ls48p(8)#define COM3 11 /arduino:(11) -74ls48p(9)#define COM4 12 /arduino:(12) -74ls48p(12)int T=449;int i=0; int music =0; int exercise= 1; int bee= 13; int c=2; int a=3;
22、unsigned char table104 = 0,0,0,0, /0 /correspond to:hgfedcba 1,0,0,0, /1 0,1,0,0, /2 1,1,0,0, /3 0,0,1,0, /4 1,0,1,0, /5 0,1,1,0, /6 1,1,1,0, /7 0,0,0,1, /8 1,0,0,1 /9;void setup() pinMode(A,OUTPUT); /设置为输出引脚 pinMode(B,OUTPUT); pinMode(C,OUTPUT); pinMode(D,OUTPUT); pinMode(COM1,OUTPUT); pinMode(COM2
23、,OUTPUT); pinMode(COM3,OUTPUT); pinMode(COM4,OUTPUT); pinMode(c,INPUT_PULLUP); pinMode(a,INPUT_PULLUP); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(13, OUTPUT); pinMode(c,LOW); pinMode(a,LOW); digitalWrite(13, LOW ); digitalWrite(0, LOW ); digitalWrite(1, LOW ); attachInterrupt(0,changeTime, CHA
24、NGE); attachInterrupt(1,again, CHANGE); void loop() T+; if (T=720) T=449; if (digitalRead(c)=LOW) T+; if(T720) T=449; if (digitalRead(a)=LOW) T=449; if (T=450&T=495&T505) digitalWrite(1, HIGH); else digitalWrite(1, LOW); if (T=480|T=525 |T=540|T=590|T=610|T=660|T=670|T=720) digitalWrite(13, HIGH); else digitalWrite(13, LOW);for(i= 0; i720) T=449; void again() /复位按钮 if (digitalRead(a)=LOW) T=449; /code