【转载】家庭用电小管家,我的智能小家居
时间:2017-05-10 21:42 来源:网络整理 作者:haodiy 点击:次
一 项目概述
图1 隔离式AC220V转DC5V电路 非隔离式电源部分选用MonolithicPower公司生产的MP150芯片,图2所示的典型电路图可以实现AC220V至DC5V的非隔离式Buck电路,输出电流理论可达到200 mA。 非隔离式220V转5V是面向功率计量电路供电的,而隔离式220V转5V电路是面向用户接口和主控模块供电的。
图2 非隔离式AC220V转DC5V电路 系统供电模块还需要3.3V的电压用以提供数字芯片的供电电压,选用AMS公司的直流稳压芯片AMS117-3.3,来实现5V到3.3V的直流稳压功能。AMS117-3.3具有800 mA的电流输出,适用于电源稳压电路,输入输出电压差最低可到1V。如图3,SOT-223封装的AMS1117共有4个引脚,3脚VIN连接220V市电转换得到的5V直流电压,1号管脚VSS接地线,2号管脚和4号管脚内部短路,并将5V稳定在3.3V。C9是输入5V的滤波去耦电容,C10和C11是输出3.3V的滤波去耦电容。POWER_LED作为供电电源开启时指示灯,R16作为指示灯支路的限流电阻。
图3 5V转3.3V稳压电路 功率计量模块 系统采用深圳合力为科技公司生产的功率计量芯片HLW8012。HLW8012为单相多功能计量芯片,满足50/60Hz IEC 687/1036标准的准确度要求,其提供高频脉冲CF用于电能计量和高频CF1用于指示电流有效值或者电压有效值。如图4所示,芯片采用5V直流电压供电,C4和C5为电源滤波电容,用来滤除来自电网的高频及低频噪声。网络标号L_RELAY为经过继电器的火线,可通过继电器控制L_RELAY是否连接到电网的火线上。 在HLW8012的电能采样端,P2(LOAD)为市电供电的电器负载,它与锰铜采样电阻RS(ResSample)串联,电流信号经锰铜电阻采样后接入HLW8012。电压信号则通过电阻网络(R5~R11分压网络)后输入到HLW8012。 在HLW8012的数字接口端,电能信息经片内压频转换电路从CF和CF1输出TTL电平的方波。CF的频率用于指示用电电器所耗用的有功功率,而CF1的频率用于指示用电电器的电流有效值(SEL=0)或者电压有效值(SEL=1)。本系统将SEL接地,由于CF和CF1输出的是高电平为5V的方波,但主控模块Intel Edison的电平标准为3.3V,所以CF和CF1首先要经过电平处理模块(光耦电路),将5V电平隔离转换为3.3V电平,才可以接到爱迪生的I/O口。爱迪生通过计算CF和CF1的频率便可以得到用电电器的电能信息,有关频率计功能的实现请参照我的第5篇试用报告。
图4 功率计量电路 电平处理模块 上文提到的电平处理模块如图5所示,选用双通道光电耦合器实现5V电平方波到3.3V电平方波的转换。由于光耦输入输出以光电转换的方式实现电平转换,而无电气连接,所以可以实现隔离前后级的作用,使得前后级的输入输出阻抗和电压不会相互影响。 系统选用美国惠普公司光电耦合器HCPL-0630,该耦合器共有两个通道,其电路连接如图5所示。光耦左侧是一个发光二极管,当CF1和CF拉低是,发光二极管因导通而发光,R18和R19是限流电阻。光耦右侧是集电极开路三极管,所以需要在集电极通过电阻R20和R21连接到3.3V电压。当左侧二极管发光时(输入电平拉低),右侧三极管也对应导通(输出电平拉低);当左侧二极管熄灭时(输入电平抬高),右侧三极管也对应断路(输出电平抬高)。从而实现5V到3.3V的电平隔离与转换。
图5 双通道光耦电路 电器通断控制模块 系统利用交流继电器来控制电器的通断,如图6所示。选用厦门宏发公司生产的交流继电器HF32FA-G 005-HSL1。额定电压250V,额定电流10A。继电器和整流二极管1N4007反向并联,可以有效防止继电器开合瞬间导致的电流逆流,防止烧坏电路元器件。继电器线圈电压为5V,将继电器放置在NPN型三极管S9013的集电极,基极通过1KΩ的限流电阻连接到主控MCU的I/O口作为控制端,实现小电平控制大电平的作用。 当MCU在三极管的基极输出高电平时,三级管道通,从而继电器处于闭合状态;而当MCU在三极管的基极输出低电平时,三极管截止,从而继电器处于断开状态。从而通过在网络标号为RELAY的I/O口施加高低电平,便可以控制继电器的开合状态,从而控制火线的通断。再配合WIFI模块,便可以实现远程控制电器开关的功能。
图6 交流继电器电路 最后,硬件设计成熟的最后,当然少不了PCB的设计啦,OK,这个项目我真是下了大工夫,光底板的PCB图就画了3个版本,打样了3次,下面是3个版本的PCB图。 版本1 :
版本2 :
版本3 :
最后的实物图:
焊接上电子元器件后的正面:
焊接上电子元器件后的反面:
【软件篇】Intel Edison的socket编程、web、手机APP步骤1:功率采集 通过上文,我们已经知道,通过硬件电路的实现,我们已经把功率信息转换为频率信息。所以我们只需要让爱迪生实现一个频率计的功能,就可以测量出用电器的实时功率值。 代码: var mraa = require("mraa"); var front_time = 0; 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等语言及框架。在试用的过程中,也学到了很多东西,希望分享给大家!
(责任编辑:admin) |
- 上一篇:微信运动榜首的秘密就是这个刷步机 视频
- 下一篇:让我来朵蜜你吧!先做个魔幻装备吧!