物联网智能实验室
本帖最后由 王顺 于 2017-11-18 14:16 编辑参赛项目:物联网智能实验室
参赛组员:
4人
王顺 - 一只程序猿,最近喜欢折腾电子,负责电子设计与arduino程序编写
万大圣 - 某物联网公司产品经理,负责物联网智能实验室改造
向芸花 - 程序媛一枚,本职工作是做物联网前端,现在做物联网智能实验室技术分析。
陈宁佳 - 程序媛一枚,产品设计包装,外观包装分析,“打酱油”
项目简介:
关于智能实验室的一些管理装置,从我的了解中我觉得还欠缺不少,不够完善,不够智能。就比如在我们的学校中,没次去实验室都要借钥匙,用完了也要还钥匙,还要登记信息,偶尔管理员外出不能还钥匙,以及其他的种种缺陷,针对这一缺陷,我想能不能设计出一个较为完整的智能实验室系统。(现在只是简单的设计,后期将考虑,门禁系统,远程操作云端,智能安防系统,智能电力管理系统,以及远程视频监控系统和具体每个工作台的管理体系等),在本次的初次设计中,我只能完成其中的一部分智能系统,应为小e的资源有限,后期将逐步完善,达到预期的目的。(未经允许严禁抄袭)
接下来我介绍一下本期将实现的功能
1、微信端控制实验室的电力总闸(强电/弱电)
2、实验室语音广播(给实验室成员传达信息)
3、实验室门禁控制(不能算系统,只是简单的控制)
4、实验室环境监测
以上的只是其中的一部分,也是这次参赛的内容,接下来我将如期完成我的功能
团队成员主要由4个人,关于具体的参赛发帖介绍吧!
http://bbs.kaifakuai.com/data/attachment/forum/201705/09/113006no1t6mb6tftj6x11.png
终于做完了,附上相应教程和作品功能
参赛作品
各位评委大家好!我们是物联网专业的发烧友们,在这里很荣幸能参加开发快平台举办的智能硬件开发大赛,非常感谢平台给我们一个展示的舞台,以及技术帮助和支持!希望有更多的创客朋友和发烧友,在一起交流切磋,通过一些科技技术的创新来解决身边遇到的实际困难。从平台举办这次的大赛以来的这段时间里,我们算的上是开发快的铁粉了,整合这次的开发快的《物联开发大赛》,我们做了一个物联网智能实验室系统,主要解决了实验室使用的一些常用的管理和监测等。 关于智能实验室的一些管理装置,从我的了解中我觉得还欠缺不少,不够完善,不够智能。就比如在我们的学校中,每次去实验室都要借钥匙,用完了也要还钥匙,还要登记信息,偶尔管理员外出不能还钥匙,以及其他的种种缺陷,针对这一缺陷,我想能不能设计出一个较为完整的物联网智能实验室系统,正因为想法,所以我们行动了! 接下来我具体为大家介绍我们作品的硬件demo原型,功能,软件开发,以及我们的团队。
(一)硬件demo原型 1、首先我介绍一下我们参赛作品的硬件demo原型,所需要的硬件如下图所示, 所需要的硬件如下图所示
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204420l36mkgskbeepqmyu.png
IIClcd1602 RC522 RFID射频 IC卡 拨动开关
电磁力锁 两路5V 12V输出电源 8路继电器 lcd12864中文显示 模拟空调风扇 扬声器 自制功放 12V转5V 3.3V模块 arduino nano *2 12V灯泡 人体红外感应模块 小E开发板
作品的全照。由于我们的控制电路做在模型的顶上,所以难免上面有看起来有点笨厚。
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204429jbnoz9i5by9fyiov.png
本次作品从初始想法→解决问题→比赛报名→设计软件→设计硬件→软硬件调试→成功完成,
将花费我们半个月的时间,抛洒了我们的热情,但不后悔,最后完成了我们的硬件demo原型,
感谢开发快平台硬件技术支持和我们的团队队员辛勤劳动的汗水!
2、接下来我为大家标注了我们作品的硬件执行机构模块
这是我们作品正面介绍图
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204421p8l01xd7185zjjz3.jpg
智能实验室侧面室内介绍图
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204421jo53cz5yi6v7zaga.jpg
作品顶面硬件控制部分介绍图
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204422rqq9rpfzjgjcp5cc.jpg
(二)作品功能
1、上面为大家展示了我们作品的硬件demo原型,那接下来我为大家介绍的是我们的作品到的有什么功能,将详细为大家讲解。 本次作品设计采用了原有小e开发板的档位选择功能,在不改变原有的基础功能上来嵌入我们的实验室的功能。通过外接arduino开发板来处理小e开发板下发的指令,当然小e开发板我 们也做了相应的固件源码修 改,具体我将在后面软件部分详细介绍,每次换挡过后都要重新启动小e开发板,arduino开发板来获取ADC的值来进入不同的功能块,达到我们的功能 控制。
本作品原用了小e开发板的4个档模式:原有的功能将通过oled显示,嵌入的功能将通过ldc1602、lcd12864显示。
先说说门禁系统,主要是提示用户刷卡信息和开门状态
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204427nphxdehh9fz8mnn4.png
门禁初始化LCD12864显示界面
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204426tlng78opipaxv45r.png
刷卡成功信息提醒界面
一档模式,当全部档位处于关的状态时,led1602显示如下所示
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204421ikk62uul8ddmfryl.png
首先我们要把档位开关搬到一档,然后重新启动小e开发板上电(最右边按钮),arduino开发板通过ADC判断进入一档模式,
这时候lcd1602会显示如下,判断模式,提示教室是否有人;“0”代表没有人,“1”代表有人;
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204426hpfa0fo12dipff5n.png
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204419kac7b0bn7u2o5hqn.png
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204420mwzb6cgw2gkqr4zf.png
同时oled的显示功能和原来的小e开发板一样,具有温湿度和人机交互显示功能;由于我们的实验室就是我们的教室,所以我们就刷的固件是智能教室。
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204426eds9bbgqqnh0b5g6.png
二档模式,进入二档模式其实和进入一档模式是一样的,先搬档位在给小e开发板上电,然后arduino开发板通过ADC判断进入一档模式, 这时候lcd1602会如下显示,在二档我们做了一个温湿度显示,时刻监控实验室室内环境。
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204421edrmattrrrda2fu4.png
同时手机微信端可以查看大气压数据
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204427goamnltnw3zltlwz.png
三档模式,档位操作同上;这个档位比较特殊,也是我们作品设计的最复杂的部分,我们利用了原来的小e开发板的多彩灯光的GPIO的三个输出引脚的输出状态, 通过arduino开发板来读取相应引脚电平的变化来作出相应的开关控制。(具体软件部分介绍)
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204423oqxrxahqor8wxwz3.jpg
微信控制端用了小e的led多彩控制界面,我为大家标注了每一个颜色所代表的功能,其余预留区域可以更据代码自行开发,在后期将对微信端的多彩控制界面进行修改, 达到预期的控制界面;同时lcd1602会显示三档工作的状态,其中数字可以显示0~7八中状态,对应上面的八种控制;比如显示“5”表示, 工作于八中状态中的第5个状态对应的模拟空调打开;显示“0”,标示所有控制全部断开。
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204428cubkspj5ww28izsu.png
四档模式,第四档我们主要利用了小e开发板的语音留言功能,我们将语音留言通过我们自制的功放播放出来,主要面对使用实验室的同学进行广播通知,省去了人为的传话或者打电话(万一不知道号码)等之内的繁琐的事。功能上我们采用了节约能源模式,当档位开关搬到4档时,自制功放电源打开,收到语音进行广播(可调音量),不需要广播时(其他档位)断开功放电源,节约能源;同时lcd1602会提示功放电源的开关状态。
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204428atglvtg224qqvqzl.png
(三) 软件开发
1、修改小e固件源码;想到软件,大家都觉得是一件头疼的事,但是只要大家看懂了就没有那么复杂了,软件也是硬件的灵魂,是很重要的部分。接下来我为大家解释一下我的软件编 写流程。
首先我们去官网下载小e开发板的固件及开发环境,以及下载工具,至于源码怎么用编辑器打开就不用多说了,我用的是Source Insight 3.5,好像有中文版本的;
Source Insight 3.5 工具
首先我们在et_user_app.c中找到rgb驱动函数,它主要是控制多彩灯GPIO的,
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204426ad6h7d4h664shf6k.png
然后我们根据函数跳进去,在RGB_light.c中,把RGB_light_set_color屏蔽掉,然后再自己写一个函数。
[*]/******************************************************************************
[*]* FunctionName : RGB_light_set_color
[*]* Description: set pwm period
[*]* Parameters : uint16 freq : 100hz typically
[*]* Returns : NONE
[*]*******************************************************************************/
[*]/*void ICACHE_FLASH_ATTR
[*]RGB_light_set_color(et_uint8 r, et_uint8 g, et_uint8 b)
[*]{
[*] et_uint32 period = RGB_light_get_period();
[*] et_uint32 max_duty = PWM_DUTY_MAX(period);
[*]
[*]#ifdef USER_PRINT_DEBUG
[*] printf("set color: R(%02x) G(%02x) B(%02x)\r\n", r, g, b);
[*]#endif
[*]
[*] // red
[*] if (0x41 == r)
[*] r = 0x05;
[*] else if ((r - 0x0c) > 0)
[*] r = r - 0x0c;
[*] else if (r == 0)
[*] ;
[*] else
[*] {
[*] if (0x03 == r)
[*] r = 0;
[*] else
[*] r = 0xff - 0x0c + r;
[*] }
[*]
[*] // green
[*] if (0xc1 == g)
[*] g = 0x81;
[*] else if (0x7f == g)
[*] g = 0x3f;
[*] else if (0xc6 == g)
[*] g = 0xc5;
[*] else if (0x28 == g)
[*] g = 0;
[*] else if ((g - 0x0c) > 0)
[*] g = g - 0x0c;
[*] else if (g == 0)
[*] ;
[*] else
[*] g = 0xff - 0x0c + g;
[*]
[*] // blue
[*] if (0xfa == b)
[*] b = 0x9f;
[*] else if (0x69 == b)
[*] b = 0xf4;
[*] else if (0xe2 == b)
[*] b = 0x5d;
[*] else if ((b - 0x0c) > 0)
[*] b = b - 0x0c;
[*] else if (b == 0)
[*] ;
[*] else
[*] {
[*] if (0x0a == b)
[*] b = 0x0;
[*] else if (0x0c == b)
[*] ;
[*] else
[*] b = 0xff - 0x0c + b;
[*] }
[*]
[*]#ifdef RGB_COMMON_GND
[*] RGB_light_set_duty(RGB_TO_DUTY(r, max_duty), LIGHT_RED);
[*] RGB_light_set_duty(RGB_TO_DUTY(g, max_duty), LIGHT_GREEN);
[*] RGB_light_set_duty(RGB_TO_DUTY(b, max_duty), LIGHT_BLUE);
[*]#else
[*] RGB_light_set_duty(RGB_TO_DUTY((et_uint8)~r, max_duty), LIGHT_RED);
[*] RGB_light_set_duty(RGB_TO_DUTY((et_uint8)~g, max_duty), LIGHT_GREEN);
[*] RGB_light_set_duty(RGB_TO_DUTY((et_uint8)~b, max_duty), LIGHT_BLUE);
[*]#endif
[*] RGB_light_start();
[*]}
[*]
[*]/******************************************************************************
[*]* FunctionName : RGB_light_init
[*]* Description: light demo init, mainy init pwm
[*]* Parameters : none
[*]* Returns : none
[*]*******************************************************************************/
复制代码
整个函数里面的内容全部屏蔽掉,然后就在上面在写一个一样的函数;
[*]#define GPIO_OUTPUT_SET(gpio_no, bit_value) \
[*]gpio_output_conf(bit_value<<gpio_no, ((~bit_value)&0x01)<<gpio_no, 1<<gpio_no, 0)
[*]上面定义部分这个必须要加,才能配置GPIO引脚为输出模式。
[*]RGB_light_set_color(et_uint8 r, et_uint8 g, et_uint8 b)
[*]{
[*] int flag=0;
[*]
[*] //直接控制IO
[*] // red
[*]
[*] os_printf("mode error, r = %d\n", r);
[*] os_printf("mode error, g = %d\n", g);
[*] os_printf("mode error, b = %d\n", b);
[*]
[*] if (0xfd == r && 0x28 == g && 0x0a == b)//大红
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_LL);//100
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_HL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_HL);
[*] //os_printf("mode error, r = %d\n", r);
[*] flag=1;
[*] }
[*] if (r ==0x00 && 0xd1 == g && b == 0x69)//绿色
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_HL);//010
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_LL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_HL);
[*] //os_printf("mode error, g = %d\n", g);
[*] flag=1;
[*] }
[*] if (r == 0x41 && g ==0x00 && 0xfa == b)//蓝(靛青)
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_HL);//001
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_HL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_LL);
[*] //os_printf("mode error, b = %d\n", b);
[*] flag=1;
[*] }
[*]
[*] if(0xe6 == r && g== 0x1c && b ==0xbe)//玖红
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_LL);//111
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_LL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_LL);
[*] //os_printf("mode error, b = %d\n", b);
[*] flag=1;
[*] }
[*]
[*] if(0x96 == r && g== 0x00 && b ==0xff)//紫色
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_HL);//011
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_LL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_LL);
[*] //os_printf("mode error, b = %d\n", b);
[*] flag=1;
[*] }
[*]
[*] if(0x06 == r && g== 0x76 && b ==0xf4)//钻蓝
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_LL);//101
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_HL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_LL);
[*] //os_printf("mode error, b = %d\n", b);
[*] flag=1;
[*] }
[*]
[*] if(0x03 == r && g== 0xc6 && b ==0xe2)//湖蓝
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_LL);//110
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_LL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_HL);
[*] //os_printf("mode error, b = %d\n", b);
[*] flag=1;
[*] }
[*]
[*] if(flag == 0)//关闭
[*] {
[*] GPIO_OUTPUT_SET(PWM_0_OUT_IO_NUM, LOGIC_HL);//000
[*] GPIO_OUTPUT_SET(PWM_1_OUT_IO_NUM, LOGIC_HL);
[*] GPIO_OUTPUT_SET(PWM_3_OUT_IO_NUM, LOGIC_HL);
[*]
[*] flag=1;
[*] }
[*] }
[*]
复制代码
大家看到这里,想必都已经看清楚我的思路了吧!这段程序是收到手机微信端发来的rgb的值进行的一个判断,然后再配置对应的GPIO口的一个高低电平状态, 接下来我们要去Pwm.h中去定义一下我们要输出的GPIO口的引脚,
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204419lzey4i362zay4o2o.png
定义好了,我们还要去把原来默认的GPIO口的PWM输出去屏蔽了,不然一上电,配置的GPIO就有PWM输出,我们要去掉他默认的输出功能,现在好了,固件就修改到这里,至于oled显示自定义显示文字,我就不说了,太简单了,论坛有教程,接下来就是arduino开发板要做的事情了。
2、写代码获取GPIO脚电平状态。首先我会想到要用arduino开发板来完成GPIO的状态读取,因为arduino开发简单,时间短,易上手,自己写的代码主要有两个个功能,第一读取GPIO状态,第二对GPIO的状态进行相应的控制,第三门禁系统控制;部分源码如下所示:
[*]/**********************************************
[*]函数名:Pattern_Zero
[*]描述:小E开发板工作模式的判断
[*]输入:
[*]输出:
[*]返回:
[*]注意:
[*]***********************************************/
[*]void Pattern_Zero(void)
[*]{
[*]if(val<=10)//不拨动档位0000
[*]{
[*]
[*] mode_4=1;
[*]
[*] AUDIO_state(1);
[*] RGB_state_Close();
[*] lcd.setCursor(0, 1);
[*] lcd.print("Choice Pattern"); //选择模式
[*]}
[*]
[*]else if(val<=60)//四档功放电源控制0001
[*]{
[*] mode_3=1;
[*]
[*] RGB_state_Close();
[*] AUDIO_state(0);
[*] lcd.setCursor(0, 1);
[*] lcd.print("frequency open");//功放电源开关打开
[*]}
[*]
[*]else if(val<=110)//三档RGB模式0010
[*]{
[*] mode_2=1;
[*]
[*] AUDIO_state(1);
[*] RGB_state();
[*]}
[*]
[*]else if(val<=160)//二档温湿度显示0100
[*]{
[*] mode_1=1;
[*]
[*] AUDIO_state(1);
[*] RGB_state_Close();
[*] DHT11_state();
[*]}
[*]
[*]else if(val<=215)//一档待定1000
[*]{
[*] AUDIO_state(1);
[*] mode_0=1;
[*] RGB_state_Close();
[*] people_judge();
[*]}
[*]}
[*]
复制代码
最后,作品的全部质料我将全部上传百度云盘,视频质料等待比赛完毕一并上次!
(四)团队介绍 我们都知道团队应该是Team,而不是Group,也就是说团队不仅仅是一群人的简单的组合,而一定是不同成员有分工、有协同,是一个有机的整体,这个就叫做协同合作、相互支持。团队成员根据工作需要,根据个人特长,合理分工,有效协同,一起把事情做好。团队成员之间协同合作、互相支持,就是要使1+1>2,并且不断改进提高,使效能(效率+效果)达到最大化,1+1能不能=3,能不能=4,甚至更大,就看我们在团队的工作中如何更有效的协作和互相支持,这需要不断的训练。 我们的团队成员,王顺、万大圣、杨琴娟、邹栋才,他们都来自物联网工程,其所涉及的专业知识面很广泛。诸如:模拟电子技术、数字电子技术、通信原理、物联网概论、C语言、单片机应用与编程、PCB电路板绘制、多媒体技术、微信开发、CAD绘图等,通过我们的辛勤劳动,做事认真负责,思虑周详,良好的团队凝聚力和向心力。“相对分工,绝对合作”,取长补短,共同完成项目作品。 以下是我们的作品制作过程的照片
http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204423q4o048lf4l34w554.jpg http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204423e16gbzesbjjatsjn.jpg http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204424olyg2m8sg16ksgkt.jpg http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204424t4g4dvt0jbdgv055.jpg http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204424k6n6xgs3zg95536n.jpg http://bbs.kaifakuai.com/data/attachment/forum/201705/31/204425ucmynyomdncorrle.jpg
到此整个智能实验室系统的制作就完成啦,应该说整个过程并没有任何复杂的编程,经过封装的数据接口只需简单的几句函数就能完成读取。由这个项目的启发,我发现我们的产品还是很有市场前景的,恰好赶上物联网时代的到来,智能实验室系统美好的前景让我们拭目以待吧!
视频连接 http://v.youku.com/v_show/id_XMzExODc5Nzc2OA==.html?spm=a2h3j.8428770.3416059.1
质料百度盘http://pan.baidu.com/s/1i563LHj
谢谢分享学习一下 厉害!!!
高手啊
1.感谢对社区比赛的支持,演示视频开头需要添加大赛宣传海报,请补充完整。具体要求请参考:
http://www.arduino.cn/thread-47517-1-1.html
2.开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
3.比赛结果会在11.15号前公布,请耐心等待。 有点难度啊,兄弟
页:
[1]