Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
Componentes e Materiais
| Arduino MKR Fox 1200 | 1 | |
| Protoboard (Genérica) | 1 | |
| Jumpers (Genéricos) | 1 | |
| CNY70 (Sensor Reflexivo) | 1 | |
| Resistor 221 Ω | 1 | |
| Resistor 10k Ω | 1 | |
| Resistor 100 Ω | 1 | |
| Potenciômetro Rotativo (Genérico) | 1 | |
| Chave Pushbutton 12mm (SparkFun) | 1 | |
| LED (Genérico) | 1 |
Aplicativos e Serviços Online
| Arduino IDE |
| Sigfox (Backend/Cloud) |
| ThingSpeak API |
Sobre este Projeto
1) Em Resumo
Este tutorial ajuda a criar um dispositivo que conecta seu antigo medidor de energia indutivo à Internet. Que tipo de medidor? O mais antigo, ainda em uso: possui disco rotativo com tinta reflexiva ao redor e uma pequena faixa preta. Cada vez que a faixa preta passa, uma rotação completa ocorreu. Neste projeto, 120 voltas equivalem a 1 kWh de consumo.
2) Microcontrolador, Rede IoT e Demais Itens
Usaremos o Arduino MKRFOX1200, que possui conectividade Sigfox (a rede). Sigfox é uma rede LPWAN que permite conectar qualquer coisa à Internet. Opera na banda ISM 868 MHz e permite enviar 140 mensagens diárias (payload de 12 bytes cada) no uplink. Mas não é só a rede: o Sigfox permite personalizar como trabalhar com as mensagens. Todas ficam armazenadas na nuvem Sigfox, de onde podemos recuperá-las definindo seu destino — callbacks, etc.
ThingSpeak: Plataforma IoT para visualização amigável de dados. Neste projeto, é o destino do callback Sigfox que exibe o consumo recebido em gráficos assim que a transferência ocorre.
Qual medidor de consumo de energia elétrica usaremos? Este:

3) Parte Prática
- Conecte todos os componentes conforme o diagrama de fiação. Não explicarei a teoria por trás das conexões; se algo não estiver claro, pergunte. Não esqueça de alimentá-lo :) (power bank USB, saída USB do laptop, etc.).
- Escreva o código. O código está anexado ao final da página. Dúvidas? Pergunte.
- Crie Canais ThingSpeak com Análise. Registre-se em https://thingspeak.com/ e crie o canal nº 1 com nome, descrição e Campo 1 — Consumption. Crie o canal nº 2 baseado no nº 1, mas com nome diferente. Selecione a opção Matlab Analysis no canal nº 2 e insira o código:
readChannelID = INSIRA_ID_CANAL1_AQUI; readAPIKey = 'INSIRA_READ_API_KEY_CANAL1_AQUI'; writeChannelID = INSIRA_ID_CANAL2_AQUI; writeAPIKey = 'INSIRA_API_KEY_CANAL2_AQUI'; data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table'); analyzedData = data; analyzedData.('Consumption') = (data.('Consumption') + SEU_CONSUMO_ATUAL_EM_WH)/1000; thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey); - Crie Callback no Sigfox. Assumo que já registrou seu MKRFOX1200 no backend. Após logar em https://backend.sigfox.com/, vá à seção de callbacks e crie um assim:
- TYPE: DATA UPLINK
- CHANNEL: URL
- CUSTOM PAYLOAD CONFIG: status::uint:32:little-endian
- URL PATTERN:
https://api.thingspeak.com/update?api_key=EXPLICADO1&field1={customData#status} - USE HTTP METHOD: GET
*EXPLICADO1 — substitua pela WriteApiKey do Canal 1 do ThingSpeak.

4) Instalação do Dispositivo e Lógica

Partes difíceis feitas. Agora fixe o sensor CNY70 no vidro do medidor com fita dupla face — cuide para centralizá-lo no disco rotativo (fig. Instalação). Pressione o botão do dispositivo duas vezes e faça a calibração: se o sensor ler a parte reflexiva do disco, o LED deve acender; se ler a faixa preta, deve apagar. Após calibração bem-sucedida, pressione o botão mais uma vez. O dispositivo começa a ler o consumo e envia o valor a cada 30 minutos via Sigfox. A precisão de leitura é de 25 Wh (no nosso caso, a cada 3 voltas do disco).
5) Resultado Final

Após todos estes passos, você verá seu consumo real de energia elétrica em um belo gráfico ThingSpeak como acima.
Código
Sigfox kWh electric energy power meter (Arduino)
#include <SigFox.h>
int DIODE = 13; int BTN = 12; int BTN_state = 0; int BTN_prev = 0;
int BTN_NR_OF_PRESS = 0; int CALC = 0; unsigned long i = 0;
uint32_t CONSUMPTION = 0; boolean SHINE = false; boolean KARDAN = false;
void setup() {
pinMode(DIODE, OUTPUT); pinMode(BTN, INPUT); Serial.begin(9600);
if (!SigFox.begin()) { Serial.println("Modulo Sigfox indisponivel."); }
}
void loop() {
int senzor = analogRead(A3);
BTN_state = digitalRead(BTN);
if (BTN_state != BTN_prev) {
if (BTN_state == HIGH) { BTN_NR_OF_PRESS++; }
}
BTN_prev = BTN_state;
if (BTN_NR_OF_PRESS % 3 == 0) { // Modo calibração
if (senzor > 300 && senzor < 950) { digitalWrite(DIODE, HIGH); }
else { digitalWrite(DIODE, LOW); }
}
if (senzor < 1020 && SHINE == false) { SHINE = true; }
if (senzor > 1020 && SHINE == true && BTN_NR_OF_PRESS == 4) {
CALC++; SHINE = false;
}
if (CALC % 3 == 0 && CALC != 0 && KARDAN == false) {
KARDAN = true; CONSUMPTION += 25; // 25 Wh por 3 voltas
}
if (CALC % 3 != 0) { KARDAN = false; }
if (BTN_NR_OF_PRESS % 4 == 0) { // Modo operação normal
digitalWrite(DIODE, LOW);
if (SHINE == false) {
for (millis(); (millis() - i) > 1800000;) { // A cada 30 min (1.800.000 ms)
i = millis();
SigFox.debug();
SigFox.beginPacket();
SigFox.write(CONSUMPTION);
SigFox.endPacket();
}
}
}
}
Esquemáticos

Processo de manufatura
- Alerta Inteligente de Sede para Plantas – Sensor DIY para Hidratação Ideal
- Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
- Economize Pinos do Arduino: Conecte Teclado 4x3 com Apenas Três Conexões
- Monitor de Temperatura com Bluetooth usando Arduino Nano
- Medidor de Capacitância Autoranging DIY (10 pF–10 µF) – Montagem Fácil com Arduino
- Fechadura por Gestos Sem Toque: Acesso Seguro com APDS-9960 e Arduino
- Companion IC: Relógio, Ohmímetro, Capacímetro e Testador de Diodos com Arduino Nano
- Kit Adaptador USB-MIDI para Arduino Micro/Leonardo – Lista Completa de Peças
- Circuito de Entrada Analógica Isolada para Arduino
- Teste de Tempo de Reação Preciso com Arduino UNO