Autor: Peter Jensen
Esta é a minha primeira tentativa de um projeto de IoT 'útil'. Eu tenho um Arduino Uno por um tempo, mas realmente não o usei para nada, exceto passar por um tutorial de LED piscando. Era hora de usá -lo. Acho gratificante pensar em uma ideia do projeto e, em seguida, procurar as informações necessárias quando precisar. Obviamente, muitas vezes você descobre que outros fizeram algo semelhante, mas tudo bem, você ainda aprenderá com o processo.
Eu queria que um dispositivo medisse o consumo de energia em minha casa e que o relatasse a um serviço de 'nuvem' quando as coisas mudaram; Luzes ligando/desligadas, etc. Além disso, eu queria uma exibição na caixa, para que eu pudesse ler qual era o consumo atual de energia.
Comecei conectando -se aos sensores atuais a um pino de entrada analógico; assim:
Fonte: OpenEnergyMonitor.org
Para a calibração, eu estava usando um multímetro capaz de medir até 10a e ligava -o a um fio que estava alimentando uma lâmpada de três lâmpadas. Cada uma das lâmpadas pode ser ligada e desligada individualmente. Com bulbos de 60W nos soquetes, eu poderia obter amostras por 60W, 120W e 180W.
Observe que o sensor atual deve percorrer apenas um fio, para que a corrente CA atravesse esse fio para induzir uma corrente no sensor.
A corrente medida é a corrente que passa pela linha de energia que o sensor atual envolve.
Se tudo o que você fizer na função loop() no seu esboço do Arduino é chamar analogRead() e armazenar o resultado em um buffer de memória, você poderá obter cerca de 100 amostras durante um ciclo (60Hz - 16,7ms). O Arduino está funcionando a 16MHz. Isso deve ser suficiente para calcular o valor de raiz-quadrado médio (RMS) da entrada com bastante precisão.
Por que você precisa do valor RMS? A entrada no pino de entrada analógica é a queda de tensão sobre o resistor de carga/carga. Essa queda de tensão é diretamente proporcional com a corrente passando pela linha de energia sendo medida no momento da medição.
Quando a corrente e a tensão varia com o tempo, a energia é calculada como a potência média durante o período da onda sinusal de 60Hz, usando os valores de RMS de I e V:
O componente V RMS é mantido constante pela empresa de energia em 120V, então o interessante é o valor I RMS . Os conversores analógicos para digitais do Arduino são de 10 bits e o circuito é projetado para que o ponto médio da entrada sinusal seja de 2,5V, o que deve resultar em uma leitura de ~ 511. Se as leituras estiverem igualmente espaçadas no tempo, o valor do I RMS pode ser calculado como:
Onde n é o número de amostras que são tomadas para cobrir todo o período da onda sinusal de 60Hz, k é uma constante de calibração que será determinada após medir os valores reais de Irms com um multímetro e v i são os valores retornados pelas chamadas para analogRead()
Mais informações sobre a matemática podem ser encontradas aqui: Wikipedia
<TODO: Insira a imagem da configuração de medição de teste>
Comprei tudo o que precisava no Amazon Prime. Se você não é um assinante principal, pode acabar pagando um pouco mais. Para alguns itens, fazia sentido comprar mais de uma unidade, já que era apenas alguns dólares a mais e é sempre bom ter um sobressalente, caso você frite. Além disso, se você deseja criar uma segunda (ou terceira) unidade, já tem o que precisa.
| Item | Custo total | Custo unitário |
|---|---|---|
| Arduino Pro Mini (3-Pack) | $ 11 | $ 4 |
| Módulo de fonte de alimentação 3.3V/5V (5-PACK) | $ 9 | $ 2 |
| ESP8266 ESP-01 (4-PACK) | $ 14 | $ 4 |
| 2x SCT-013-000 Sensor de corrente CA não invasiva | $ 26 | $ 13 |
| Módulo de exibição de 16x2 LCD | $ 6 | $ 6 |
| 110VAC-> 9V Adaptador | $ 6 | $ 6 |
| 10pcs 4x6cm Protótipo lateral duplo PCB | $ 7 | $ 1 |
| 10pcs de 3,5 mm Montos de PCB feminino | $ 8 | $ 2 |
| Misc: capacitor, resistores, botão, fios | ~ $ 2 | $ 2 |
| Total | $ 89 | $ 40 |
Aqui está como eu conectei tudo:
Usei o software Digikey Scheme-IT para criar o diagrama de fiação de hardware acima. Ele corre em um navegador!
Há algumas coisas a apontar:
As informações mostradas nas 2 linhas LCD ciclam por essas informações, quando o botão é pressionado:
Se uma imprensa longa for detectada quando 'opções avançadas' for mostrado, essas telas adicionais serão incluídas na rotação:
Para alterar o status On/Off ou redefinir os dados, uma pressão longa no botão deve ser executada.
Poder total | Poder de linha |
Corrente de linha | Uso de energia total desde a última redefinição |
Endereço IP local | Pressione há muito tempo para opções avançadas |
Transmissão Wi -Fi liga/desliga | Transmitir cada valor de amostra |
Transmissão em andamento |
Atualmente, a exibição/interface do navegador se parece com o seguinte:

As linhas pretas e vermelhas representam o poder extraído de cada uma das duas fases que entram em casa. Os botões de seta esquerda e direita no topo irão para o dia anterior ou no dia seguinte. Se você estiver no dia de hoje, novos dados serão buscados. Não há necessidade de acertar 'Refresh'!
Aqui estão algumas das coisas que podem ser derivadas disso:
O consumo de espera 'preto' é de aproximadamente 125W e o 'vermelho' é 25W. Este é o sorteio parasitário de todos os dispositivos que estão no modo de espera (TV, microondas, computadores, webcams etc.
O padrão quadrado para cima/para baixo na linha 'preto' é o compressor na geladeira ligando e desligando.
Acordei por volta das 6h e comecei a virar as luzes e a TV acesa. A TV está desenhando da linha 'preta'.
O pico no 'vermelho' é o meu ventilador de CO2 no meu aquecedor de água. O aquecedor de água funciona por cerca de 10 minutos
O pico menor após o pico do aquecedor de água é a abertura da porta da garagem.
Eu usei o OpenSCAD para projetar uma caixa. O arquivo .scad e os arquivos .stl renderizados estão neste repositório. A caixa com os recortes para a tela, o botão e vários conectores se parecem com o seguinte:

Fonte de energia escamosa
Contar com a fonte de alimentação do USB causou alguma descamação nas leituras de pinos analógicos. Além disso, para fornecer energia ao ESP-01, eu precisava de uma fonte de 3,3V. O Arduino Pro Mini não possui um regulador de tensão de 3,3V, como o UNO. O módulo de fonte de alimentação muito barato se encaixa na conta e parece fornecer uma energia estável o suficiente para garantir leituras estáveis.
Taxa de transmissão do ESP8266 ESP-01
Eu tive que usar alguns pinos de E/S digitais no Arduino para a comunicação em série entre o módulo Arduino e o ESP-01. Os pinos TX/RX regulares são necessários para exibir o software no Arduino. Ao usar o módulo Softwareserial com pinos de E/S digital, não foi possível obter um link de comunicação confiável para o ESP-01 na taxa de transmissão padrão 115200. Como a quantidade de troca de dados entre o Arduino e o ESP-01 é bastante limitada, defina a taxa de transmissão para um 9600 baud seguro.
Ficando sem memória no Arduino
O Arduino tem apenas 2k em memória de RAM. A RAM é usada para todos os dados globais, dados de pilha e até dados de string constantes. O compilador ATMEL 328 GCC faz um bom trabalho, eliminando todos os códigos e dados mortos, e estou bastante impressionado por você poder executar um programa de mais de 1000 linhas C ++ nessa pequena quantidade de RAM. No entanto, é preciso algumas brincadeiras para fazê -lo em forma.
new operador para alocar objetos:String : Vista superior | Conectores de fonte de alimentação |
Conectores CT | Antena parte do ESP8266 |
Vista inferior | Vista inferior sem Arduino |
Vista inferior sem Arduino e ESP8266 | ![]() |
Botão e LCD conectado ao topo | ![]() |
PCB Underside | Caixa com tampa |
here's some code
Aqui está uma tabela:
| 1 | 2 | | | | | adadf | adfadf |