你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F4的智能家居在线监控

[复制链接]
木木&点点 发布时间:2019-3-25 22:38
本帖最后由 点点&木木 于 2019-4-12 11:22 编辑 ; G5 I0 e0 U: a5 b6 m: W+ \& \

2 y/ u% g, z# H& L2 z) U
该系统实现了插入插座的电器的功耗测量,并可控制一些电器的开/关。

4 l* s( Y/ v  `( @5 T3 V
6 y; g9 p( ?( g6 F  W
1.jpg
硬件组件
英特尔Galileo Gen 2          ×       1      
STM32F4DISCOVERY      ×       1      
LV 20-P - 电压传感器    ×     1      
LA 55-P - 电流传感器     ×       1      
继电器模块5V / 4通道板屏蔽
我用了4个频道    ×          1      
12伏电源
这些电源用于为传感器供电   ×       2      

9 L9 i- {0 f/ N8 N
3 \7 y8 |( _5 Z0 j* p4 z
介绍
该项目的目标是开发一个实时监控功耗的工具,每日/每月的消耗登记,并允许设备打开/关闭的时间表。
系统测量设备的功率,功率信息(表观,有效,无功),电压和电流显示在网络接口中。在此界面中,有四个按钮可以打开/关闭继电器模块上连接的任何设备。
在界面中,有两个图形:第一个显示电压和电流,另一个显示条形图形的电源。图形每1秒更新一次。
目前正在开发每日/每月的消费登记。

+ B/ o3 Z8 s$ c& Z2 A* N
2.4.jpg

- w# h+ j1 J4 t* ~/ p# H0 y" Z1 O0 I) D5 ~* n$ z
2.2.jpg
! R8 i1 U9 Z) q/ u3 ?

6 @7 V( M9 R. l/ D; M! b2 @# H( J9 N, I, |4 M
2.3.jpg

( Y- W/ M6 I1 C8 T
: w0 N. w  z' h& Z, R  X% H5 J3 k; {& Y7 [

+ Q/ [) P* E! Y# X1 O$ f6 `$ x8 a: e& `% t* a9 Q
# q) G+ Z: |  M: k
8 n# n  ], y) f# ?! ]6 d

' T7 r4 q4 M2 m& a  r1 ^2 i
定制零件和外壳
6 d' r# e  y9 F8 w0 \' U
5 x3 h( I: @: ~2 o4 O- m3 \8 U
3.jpg

2 b4 S5 C& u1 p3 Y! V- }. t! q# z, T2 z' X. [9 z/ t4 ?
5 M( x' m8 ~5 G" G$ u9 X
原理图
电路设施
4.PNG
9 T3 [+ M. G! j+ _

! L1 N  \( Y* R; U2 B
系统图
& ]7 U- d( e0 y& e( a8 U
5.png
$ T. j1 t/ ]8 m# {' q* a

. i0 _) \# d6 d6 i2 `. `2 c4 l9 @# g; c! u; Z
代码
        var express = require("express");
var app = express();
app.set('view engine', 'ejs');
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var fs = require('fs');
var mraa = require('mraa');
Gpio_2 = new mraa.Gpio(2);
Gpio_3 = new mraa.Gpio(3);
Gpio_4 = new mraa.Gpio(4);
Gpio_5 = new mraa.Gpio(5);
Gpio_6 = new mraa.Gpio(6);
Gpio_7 = new mraa.Gpio(7);
Gpio_2.dir(mraa.DIR_OUT);
Gpio_3.dir(mraa.DIR_OUT);
Gpio_4.dir(mraa.DIR_OUT);
Gpio_5.dir(mraa.DIR_OUT);
Gpio_6.dir(mraa.DIR_IN);
Gpio_7.dir(mraa.DIR_IN);
Gpio_2.write(0);
Gpio_3.write(0);
Gpio_4.write(0);
Gpio_5.write(0);
An_0 = new mraa.Aio(0);
An_1 = new mraa.Aio(1);
var intervalHandler;
var dados_send = {v0: 0, v1: 0, v2: 0, v3: 0, v4: 0, v5: 0, v6: 0, v7: 0};
var com = require('serialport');
var serialPort = new com.SerialPort("/dev/ttyS0", {
                baudrate: 115200,
                dataBits: 8,
                parity: 'none',
                stopBits: 1,
               flowControl: false,
                parser: com.parsers.readline('\n')
});
serialPort.on('open', function(){
                console.log('\nSerial OK\n');
});
serialPort.on('data', function(data){
                var str = data.toString();
               var vet = str.split('x');
                dados_send.v0 = Math.sqrt(parseFloat(vet[0]));
                dados_send.v1 = Math.sqrt(parseFloat(vet[1])*0.001);
                dados_send.v2 = parseFloat(vet[2]);
                dados_send.v3 = Math.sqrt(Math.abs(parseFloat(vet[3])*0.001))*dados_send.v0;
                dados_send.v4 = Math.sqrt(Math.abs(parseFloat(vet[4])*0.001))*dados_send.v0;
                //console.log(dados_send);
                /*
                if(str.indexOf("V")== 0){
                                dados_send.v0 =parseFloat(str.replace("V","0"))/10.0;
                }elseif(str.indexOf("I") == 0){
                                dados_send.v1 =parseFloat(str.replace("I","0"))/1.0;
                }else if(str.indexOf("P")== 0){
                                dados_send.v2 =parseFloat(str.replace("P","0"))/10.0;
                }elseif(str.indexOf("Q") == 0){
                                dados_send.v3 =parseFloat(str.replace("Q","0"))/10.0;
                }elseif(str.indexOf("D") == 0){
                                dados_send.v4 =parseFloat(str.replace("D","0"))/1.0;
                }
                */
});
app.use(express.static(__dirname + '/js'));
app.get('/', function(request, response) {
               response.render('smartgrid', {
                                title: '',
                                message: ''
                });
});
app.get('/set', function(request, response) {
                response.render('smartgrid', {
                                title: '',
                                message: ''
                });
});
io.on('connection', function(socket) {
                socket.on('cmd_general',function(dados){
                        console.log('teste');
                        console.log(An_0.read());
                        console.log(Gpio_6.read());
                        fs.appendFile('leituras.txt','Nova linha ' + An_0.read()+ '\n');
                });
                 socket.on('cmd_rele',function(dados){
                         //console.log(dados);
                         Gpio_2.write(dados.r1);
                         Gpio_3.write(dados.r2);
                         Gpio_4.write(dados.r3);
                         Gpio_5.write(dados.r4);
                         //console.log(fs.readFileSync('leituras.txt')+"");
                        //serialPort.write("teste", function(){});
                });
});
var intervalFunction = function(){
                fs.readFile('/sys/class/thermal/thermal_zone0/temp','utf8',function(err,data){
                           dados_send.v5 = data.replace('\n','');
                });
                io.emit('data',dados_send);
};
function isr_Gpio_7(){
       console.log('Interrupcao');
       if(Gpio_7.read()){
               //io.emit('isr_gpio_7',dados_send);
       }
}
Gpio_7.isr(mraa.EDGE_BOTH,isr_Gpio_7);
intervalHandler = setInterval(intervalFunction,1999);
server.listen(8080);
console.log("\nServidor OK\n");

' z! ]9 I, L, {$ U# I2 v/ x( C9 {
1 I$ Y3 ]1 v) ~  v3 N
2.1.jpg
2.5.jpg
收藏 评论4 发布时间:2019-3-25 22:38

举报

4个回答
卖身学Linux 回答时间:2019-3-26 08:10:37
大佬!
吕小布丶 回答时间:2019-3-26 08:50:34
老板开放下原理图和源代码呗
wudianjun2001 回答时间:2019-3-26 09:01:01
直接开发板
mzr85 回答时间:2019-3-26 10:24:43
666,学习
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版