
本帖最后由 点点&木木 于 2019-4-12 11:22 编辑 : d4 G! u3 J) j' U 该系统实现了插入插座的电器的功耗测量,并可控制一些电器的开/关。 4 G0 a3 j% v: l2 H: Z; g' P![]() 硬件组件 英特尔Galileo Gen 2 × 1 STM32F4DISCOVERY × 1 LV 20-P - 电压传感器 × 1 LA 55-P - 电流传感器 × 1 继电器模块5V / 4通道板屏蔽 我用了4个频道 × 1 12伏电源 这些电源用于为传感器供电 × 2 5 g) w' K# H& {介绍 该项目的目标是开发一个实时监控功耗的工具,每日/每月的消耗登记,并允许设备打开/关闭的时间表。 系统测量设备的功率,功率信息(表观,有效,无功),电压和电流显示在网络接口中。在此界面中,有四个按钮可以打开/关闭继电器模块上连接的任何设备。 在界面中,有两个图形:第一个显示电压和电流,另一个显示条形图形的电源。图形每1秒更新一次。 目前正在开发每日/每月的消费登记。 ' Z# |6 o k: i6 S' v# I![]() ![]() ![]() 1 b5 S" @0 r- A6 o9 l 7 h8 n* A: z" y9 Z' i* F $ l& n. r) X4 R3 i 定制零件和外壳 8 `8 Y/ k& l5 j, f![]() - Q8 T( M% f) g, [ 原理图 电路设施 ![]() ) i2 b* M9 J5 V 系统图 ![]() ; }, b8 G% I P ) O. U+ g( D# Q# e6 S" {3 y) v 代码 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"); ! V! i6 K' A6 ] 6 n0 G/ `8 p9 f. x8 c* K |
大佬!![]() |
老板开放下原理图和源代码呗 |
直接开发板 |
666,学习 |