本帖最后由 左岸cpx 于 2017-10-20 17:25 编辑
原创声明:本文原创,严禁转载,引用请注明出处! 一 项目概述 物联网的浪潮席卷全球,加之李***的互联网+的提出与推动,全国都兴起了物联网与互联网的浪潮。本文,笔者将介绍一个“我的家庭电能管家”的项目。 本作品,即家庭电能管家,综合考虑了传统电器的缺点,以及目前家用电器更换周期长的实际情况,开发了一套切实可行的方案来智能化和辅助控制传统电器,达到节能、辅助和防护的目的。采用智能插座收集电器的实时用电信息,将信息上传至服务器后,服务器根据其运行情况做出节电和辅助推荐,并在电器的异常状况下做出应对措施,及时反馈至用户的移动设备上,方便用户查看电器情况和用电量等信息。作品实验情况表明该系统可以为用户提供节能、辅助和安防作用,对目前的家庭均切实可行。
原料:Intel Edison 开发板、路由器、220V转5V非隔离式电源、220V转5V隔离式电源、功率计量电路、光耦电路、XDK开发包
二 项目实现过程 【硬件篇】版本1 : 版本2 : 版本3 : 【软件篇】Intel Edison的socket编程、web、手机APP步骤1:功率采集通过上文,我们已经知道,通过硬件电路的实现,我们已经把功率信息转换为频率信息。所以我们只需要让爱迪生实现一个频率计的功能,就可以测量出用电器的实时功率值。 代码:var mraa = require("mraa"); var back_time = 0; var interval = 0; var freq = 0; var wave_begin = true;
var key = new mraa.Gpio(8); key.dir(mraa.DIR_IN); key.isr(mraa.EDGE_RISING, function(){ if(wave_begin){ var d = new Date(); front_time = d.getTime(); wave_begin = false; }else{ var d = new Date(); back_time = d.getTime(); wave_begin = true; interval = back_time - front_time; } });
//主循环 setInterval(function(){ var d = new Date(); var time_now = d.getTime(); if(time_now - back_time > 1500){ //1.5秒超时,认为无信号,freq = 0 Hz interval = 0; } //计算频率 if(0 == interval){ freq = 0; }else{ freq = 1000/interval; } console.log("The frequency is " + freq + " Hz"); }, 1000); 分析:实验目的:通过外部中断和time时间戳来测量方波频率 原理:方波信号作为外部中断源,第一个上升沿(前沿front_time)到来时,爱迪生记录前沿时间戳;第二个上升沿(后延back_time)到来时,爱迪生记录后延时间戳。两个时间戳之差就是该方波的周期(注意时间戳的单位是毫秒哦!)。 在中断服务函数中记录方波前沿和后延对应的时间戳,在主循环中计算方波频率。设置超时时间为1.5秒(所以,测量最低范围是1/1.5 Hz),1秒钟打印一次测量频率。 现象:我这边是通过CPLD输出了频率为100 Hz的方波信号,和爱迪生共地后连接IO8,观察实验现象: 可以看到在控制台打印出了 方波频率!
步骤2:socket编程,网页设计,手机APP客户端:通过html语言写一个静态网页,是这个样子的。 相当于web前端开发,所以我们还需要用CSS和JavaScript来写两个文件。文件是在XDK的Demo程序里面改的,附件里可以看到工程文件。 服务器:服务器这边我们用node.js 语言开发,XDK里面有个Web Sockets的Demo,如下图所示,一次点击3个红色方框,就可以建立起一个Socket通信程序。 在这个Demo中修改,来实现自己的功能。 现象:
用户连接:可以显示当前和服务器(爱迪生)连接的客户端(网页)数量,从u0, u1, u2...以此类推。 开关状态:通过鼠标点击蓝色方框内的“开关”来切换开关状态。ON或者OFF。 实时功率:测量用电器的实时功率。 所以,我们的爱迪生完成了两个工作,1:采集用电器功率。2:充当socket通信服务器。监听它的某一个端口(本文设置为3000),浏览器访问爱迪生所在ip的3000端口,即可获取此页面。 这是我自己根据XDK Demo程序修改而成的工程,还很粗糙。我的学长也写了一个逼格更高的网页端和手机APP,在腾讯云上租用了一个公网服务器,有一个静态IP,我用爱迪生采集功率信息上传到腾讯云上,浏览器或手机APP即可向服务器索要数据,实现开关功能,和用电器功率计量功能。下面上图! Web端: 手机端: 三 演示视频及项目总结 首先来几张安装示意图:
不会插入本地视频,我就把演示视频放在附件里面吧,供大家参考学习批评。
本项目如题所示,完成了一个完整软硬件系统。硬件部分包括电源管理、功率计量、PCB设计(涉及到开槽隔离等布线技巧)。软件部分包括socket通信编程,node.js, python, html, javascript, css, express等语言及框架。在试用的过程中,也学到了很多东西,希望分享给大家!
最后分享一句话:真正的科技是让人感觉不到科技的存在!
|