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

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

[复制链接]
木木&点点 发布时间:2019-3-25 22:38
本帖最后由 点点&木木 于 2019-4-12 11:22 编辑
+ N* \  x9 u" T( f. I6 x# M9 q
- R0 F! s- A" `4 I: g7 C: ^8 i
该系统实现了插入插座的电器的功耗测量,并可控制一些电器的开/关。
& h4 x+ ?& H* U& |

* a9 d. K8 ~7 ]6 v
1.jpg
硬件组件
英特尔Galileo Gen 2          ×       1      
STM32F4DISCOVERY      ×       1      
LV 20-P - 电压传感器    ×     1      
LA 55-P - 电流传感器     ×       1      
继电器模块5V / 4通道板屏蔽
我用了4个频道    ×          1      
12伏电源
这些电源用于为传感器供电   ×       2      
# h% z6 f- o) X# t! n6 v) @

  x0 O( U& l; ~
介绍
该项目的目标是开发一个实时监控功耗的工具,每日/每月的消耗登记,并允许设备打开/关闭的时间表。
系统测量设备的功率,功率信息(表观,有效,无功),电压和电流显示在网络接口中。在此界面中,有四个按钮可以打开/关闭继电器模块上连接的任何设备。
在界面中,有两个图形:第一个显示电压和电流,另一个显示条形图形的电源。图形每1秒更新一次。
目前正在开发每日/每月的消费登记。
/ J8 _9 e! D# A2 J
2.4.jpg
$ J) l0 F' [: ^3 u2 X
5 p: p- a- X. C6 \5 W" |9 M: i
2.2.jpg

* l9 [6 O! K0 d
) }1 I% @$ L; A3 j2 y6 }/ h6 y! f$ y. Y. y' V
2.3.jpg
/ U3 E& T- L4 z
# q9 I9 V3 Q9 X* T" u

% n. g9 E% T$ D( O
7 O( u# T8 ^3 [7 f; d
3 [- i/ ~1 V4 U, R

0 j5 S% _; Z: O
1 b& ]0 q8 y; v( u% d3 j6 u$ b( }% T* q: w" ?$ D) G& S
定制零件和外壳

* f  W  m! P6 Y/ z
% m- v$ m. }4 e
3.jpg
% q1 }# ?2 k- |! q% ~5 h6 s! `
, ~" t' H9 Q, Q: @# ?) ]$ v
% H& g. {  K  y& m3 b
原理图
电路设施
4.PNG
* U! W  y6 I: F9 J1 n
% b9 R9 l& H3 K) o( q' R% j0 _
系统图

$ L' m; v( L7 c2 t
5.png
5 e+ a5 c9 r8 K  W$ }! o( {' `: ]% \
2 L+ `' U0 U- ]9 ^! v" Z
- [; G+ j* }: M3 w4 w6 U
代码
        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");
$ t( z$ e# ^1 M: C

! C, _! [; c+ y; i, J5 J, Z  N: |% i& P7 f" K
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版