Monitore sua conta de energia via Modbus, MKR WiFi 1010 e RS485
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
![]() |
| |||
| ||||
| ||||
|
Aplicativos e serviços online
![]() |
| |||
![]() |
| |||
![]() |
|
Sobre este projeto
Se você realmente deseja tornar sua casa mais inteligente, provavelmente vai querer começar com suas contas mensais (ou seja, energia, gás, etc ...). Como alguns dizem, Good for Planet, The Wallet and The Bottom Line . O hardware de código aberto é a nossa maneira de alcançar a sustentabilidade no ambiente doméstico! Esta ideia levou-nos a construir uma solução simples e segura, fácil de integrar com qualquer software de domótica, uma vez que expõe dados sobre MQTT (no nosso caso vamos mostrar-lhe como integrá-lo ao Home Assistant).
Visão geral
Para medir o consumo de energia elétrica, optou-se pelo uso do Finder Energy Meter, pois é projetado para uso em trilho DIN e se encaixa perfeitamente no gabinete principal de nossa casa. O legal desse produto é que ele tem um Modbus RS485 interface, um protocolo de comunicação padrão industrial que torna a conversa com um Arduino realmente fácil. Na verdade, o Arduino lançou um escudo oficial, o MKR485 e duas bibliotecas para decodificar o protocolo. Como placa principal, escolhemos o Arduino MKR WiFi 1010, uma vez que compartilha o fator de forma MKR e tem conectividade wi-fi.
Configuração
Aviso! Verifique os regulamentos de seu país sobre como lidar com o sistema elétrico de sua casa e seja extremamente cuidadoso porque pode ser mortal! Se você não sabe como , chame um eletricista. O primeiro passo é instalar o medidor em seu quadro elétrico. Para garantir que você esteja trabalhando em um ambiente seguro, desligue o terminal elétrico antes do sistema e verifique com o multímetro se não há tensão entre os terminais .
Em seguida, coloque o medidor de energia dentro do gabinete e conecte os fios vivo e neutro do disjuntor principal à entrada do medidor, lembre-se de usar a convenção de cores (azul para neutro e marrom / preto / cinza para vivo na UE). A saída deve ser conectada ao resto do sistema.

Feito? É hora de parafusar a conexão RS485! Usaremos cabo de par simples trançado com aterramento, normalmente usado para linhas telefônicas. Com este cabo você pode transmitir em longa distância (1,2 km). No entanto, usamos apenas um cabo longo o suficiente para sair do gabinete e colocar o arduino em um local acessível.

A interface RS485 denomina seus terminais A, B e COM.
Como a blindagem MKR também suporta Full Duplex, você verá dois outros terminais, Y e Z. Aqui vamos aparafusar a outra extremidade do cabo, pois sabemos pela ficha técnica que a comunicação half duplex acontece apenas em Y e Z terminais. O terminal COM deve ser conectado ao ISOGND. Como usamos uma conexão half duplex e o cabeamento é ponto a ponto, temos que configurar as chaves na blindagem MKR485 para corresponder à nossa configuração: configuramos HALF (2 para OFF) e terminação em YZ (3 para ON); o primeiro não importa. A terminação é uma resistência conectando os dois terminais de dados, para amortecimento de interferências.

É isso. Agora você pode fechar o gabinete e se concentrar no lado do software!
Software
Inicie o seu computador e abra o seu IDE. Você pode usar o Arduino IDE ou o Arduino Create Editor. O código está atendendo às seguintes solicitações:
- comunicação Modbus,
- gerenciamento de WiFi
- protocolo MQTT
Modbus é um protocolo de código aberto para sensores e máquinas industriais. Para fazer o Arduino falar Modbus, vamos usar a biblioteca Arduino Modbus. Esta biblioteca reúne todos os manipuladores e torna a conexão de qualquer dispositivo Modbus muito rápida. Como vamos ler os registros, seguindo o datasheet do medidor, podemos encontrar todas as informações que precisamos como códigos de função, endereço do registro e tamanho do registro em palavras. Mas para deixar mais claro, vamos explicar como o Modbus funciona:
As mensagens do Modbus seguem uma estrutura simples:
01 03 04 00 16 00 02 25 C7
0x01
é o endereço do dispositivo 0x03
é o Código de Função que diz ao dispositivo se queremos ler ou escrever dados * neste caso, ler registros de retenção 0x04
para Contagem de Bytes00 16 - Enviamos 4 bytes de endereço de registro (00 16) que diz ao dispositivo o que queremos ler 00 02
- t uando o tamanho do registro (00 02) em palavras (cada palavra tem 2 bytes de comprimento) Os últimos 4 bytes são código CRC . Este código é gerado a partir de uma função matemática sobre os bytes anteriores, o que garante que a mensagem foi recebida corretamente.
No Arduino, todas essas coisas são tratadas no
if
doença: // Criado por Alberto Perro - Officine Innesto //// Lê o inteiro de um dispositivo modbus segurando registradoresfloat readCurrent () {float ampere =0 .; // próximo comando formatar a solicitação e enviá-la por RS485 if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {// Tratamento de erro Serial.print ("falha ao ler a tensão!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 =ModbusRTUClient.read (); // lendo MSW do buffer uint16_t word2 =ModbusRTUClient.read (); // lendo LSW do buffer int32_t miliampère =palavra1 <<16 | palavra2; // junte as palavras para recuperar int ampere =milliamp / 1000.0; // converter para ampere} retornar ampere;}
No
else
parte temos o manipulador de resposta. Como esse registro tem duas palavras, temos que juntá-las com matemática binária. Lemos as palavras do buffer e as armazenamos em um inteiro sem sinal de 16 bits de comprimento (2 bytes ou uma palavra), depois as juntamos em um inteiro com sinal de 32 bits de comprimento deslocando a primeira palavra à esquerda e aplicando um
Este mesmo processo é adaptado a tudo o que queremos ler.
O resto do código é dedicado a lidar com redes MQTT e WiFi.
Integração com o Assistente Doméstico
Adicionar o medidor ao Home Assistant é bastante simples. Supondo que você tenha um broker MQTT configurado (aqui está o guia), tudo o que você precisa fazer é incluir novas definições no arquivo configuration.yaml.
sensor:- plataforma:mqtt name:"Main Voltage" state_topic:"energy / main / voltage" unit_of_measurement:"V"
Aqui você deve colocar o nome da medida, o tópico MQTT a ser lido e a unidade de medida da quantidade. Salve o arquivo, verifique a configuração e recarregue o Home Assistant, agora as medidas aparecerão na página principal.

O Home Assistant se encarregará de criar gráficos e automatizar processos acionados por suas leituras. Este tutorial terminou, agora cabe a você adicionar recursos e personalizá-lo para seus próprios propósitos!
Código
Modbus RTU para ponte MQTT para Finder
Este esboço fornece uma ponte completa entre o medidor de energia do localizador e o mqtt. Desenvolvido para monitorar custos e uso de eletricidade na Casa Jasmina.Processo de manufatura
- Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
- Faça Monitor Ambilight usando Arduino
- Como construir um monitor de energia Arduino e registrador de dados
- Animação de LCD e jogos
- Faça você mesmo voltímetro usando Arduino e Smartphone
- Monitor de freqüência cardíaca usando IoT
- Arduino Temp. Monitor e relógio em tempo real com tela 3.2
- WebServerBlink usando Arduino Uno WiFi
- Arduino - Enviar temperatura para a Web via serial
- Formas de energia:energia cinética e potencial