- Diagrama de blocos do medidor de energia inteligente Raspberry Pi
- Componentes Requeridos
- Preparando o Pi
- Diagrama de circuito do medidor de energia Pi
- Código Python para medidor de energia Pi
- Demo
Os Monitores de Energia, sejam eles cobrindo todo o apartamento ou implantados para monitorar apenas um eletrodoméstico, são uma forma de você acompanhar seu consumo e fazer os ajustes necessários. Embora estejam cada vez mais disponíveis no mercado, o fabricante em mim ainda acha que será uma ótima ideia construir uma versão DIY que possa ser adaptada para atender a requisitos pessoais específicos. Assim, para o tutorial de hoje, construiremos um monitor de consumo de energia Raspberry Pi capaz de obter o consumo de energia e fazer o upload para o Adafruit.io.
Você também pode verificar o medidor de energia IoT baseado em Arduino e o medidor de energia GSM pré-pago que construímos anteriormente.
Diagrama de blocos do medidor de energia inteligente Raspberry Pi
Um diagrama de blocos mostrando como o sistema funciona é mostrado abaixo.
Para escolher as unidades uma após a outra;
Unidade de detecção de corrente: A unidade de detecção de corrente é composta pelo sensor de corrente SCT -013 que pode medir até 100A, dependendo da versão que você comprar. O sensor transforma a corrente que passa pelo fio no qual está preso em uma pequena corrente que é alimentada no ADC por meio de uma rede de divisores de tensão.
Unidade de detecção de tensão: Embora eu não tenha conseguido colocar minhas mãos em um módulo sensor de tensão, vamos construir um DIY, um sensor de tensão sem transformador que mede a tensão usando o princípio dos divisores de tensão. O sensor de tensão DIY envolve o estágio divisor de tensão, onde a alta tensão é transformada em um valor adequado para entrada no ADC.
Unidade de Processamento: A unidade de processamento compreende o ADC e o Raspberry pi. O ADC pega o sinal analógico e o envia para o framboesa pi, que então calcula a quantidade exata de energia que está sendo consumida e a envia para uma nuvem de dispositivo designada. Para o propósito deste tutorial, usaremos Adafruit.io como nossa nuvem de dispositivo. Nós também construímos outros
Isenção de responsabilidade: antes de começar, é importante mencionar que este projeto envolve a conexão a uma fonte de alimentação CA que é perigosa e pode ser fatal se não for manuseada com segurança. Certifique-se de ter experiência em trabalhar com CA antes de tentar isso.
Pronto? Vamos mergulhar.
Componentes Requeridos
Os seguintes componentes são necessários para construir este projeto;
- Raspberry Pi 3 ou 4 (o processo deve ser o mesmo para o RPI2 com um Dongle WiFi)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- Adaptador de alimentação microUSB 2,5 A 5 V
- Resistor 2W 10K (1)
- Resistor 1 / 2W 10K (2)
- Resistor de 33 ohms (1)
- Resistor 2W 3,3k (1)
- Diodo IN4007 (4)
- Diodo Zener 3,6v (1)
- Potenciômetro de 10k (ou predefinição) (1)
- Capacitor 50v 1uf
- Capacitor 50v 10uf (2)
- BreadBoard
- Jumper Wire
- Outros acessórios para uso do Raspberry Pi.
Além dos componentes de hardware listados acima, o projeto também requer algumas dependências de software e bibliotecas que iremos instalar à medida que avançamos.
Embora este tutorial funcione independentemente do sistema operacional Raspberry Pi usado, estarei usando o sistema operacional Raspberry Pi buster em um Pi 3 (também deve funcionar em um Pi 4) e presumo que você esteja familiarizado com a configuração do Raspberry Pi com o Raspbian Buster OS (praticamente o mesmo processo das versões anteriores), e você sabe como fazer SSH nele usando um software de terminal como o hyper. Se você tiver problemas com qualquer um desses, há vários tutoriais do Raspberry Pi neste site que podem ajudar
Preparando o Pi
Antes de começarmos a conectar os componentes e codificar, existem algumas tarefas simples que precisamos realizar no raspberry pi para ter certeza de que estamos prontos para começar.
Etapa 1: Habilitando o Pi I2C
No centro do projeto de hoje não está apenas o raspberry pi, mas o ADC baseado em I2C de 16 bits ADS1115. O ADC nos permite conectar sensores analógicos ao Raspberry Pi, uma vez que o próprio Pi não possui um ADC embutido. Ele recebe os dados por meio de seu próprio ADC e os encaminha para o raspberry pi via I2C. Como tal, precisamos habilitar a comunicação I2C no Pi para que ele possa se comunicar com ele.
O barramento I2C do Pi pode ser habilitado ou desabilitado por meio da página de configuração do raspberry pi. Para iniciá-lo, clique no ícone Pi na área de trabalho e selecione as preferências, seguido de configuração do Raspberry pi.
Isso deve abrir a página de configuração. Verifique o botão de rádio habilitado para I2C e clique em OK para salvá-lo e reinicializar o Pi para efetuar as alterações.
Se você estiver executando o Pi no modo headless, a página de configuração do Raspbian pode ser acessada executando sudo raspi-config.
Etapa 2: Instalando a biblioteca ADS11xx da Adafruit
A segunda coisa que precisamos fazer é instalar a biblioteca ADS11xx python que contém funções e rotinas que tornam mais fácil escrever um script python para buscar valores do ADC.
Siga as etapas abaixo para fazer isso.
- Atualize seu pi executando; sudo apt-get update seguido por sudo apt-get upgrade atualizará o pi garantindo que não haja problemas de compatibilidade para qualquer novo software que você decida instalar.
- Em seguida, execute o comando cd ~ para garantir que você está no diretório inicial.
- Em seguida, instale os fundamentos da compilação executando; sudo apt-get install build-essential python-dev python-smbus git
- Em seguida, clone a pasta Adafruit git que contém a biblioteca ADS executando; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Mude para o diretório do arquivo clonado e execute o arquivo de configuração usando; cd Adafruit_Python_ADS1x1z seguido por sudo python setup.py install
Feito isso, a instalação deve estar concluída.
Você pode testar a instalação da biblioteca conectando o ADS1115 conforme mostrado na seção de esquemas abaixo e executar o código de amostra que veio com a biblioteca primeiro, mudando para sua pasta usando; exemplos de cd e executando o exemplo usando; python simpletest.py
Etapa 3: instalar o módulo Adafruit.IO Python
Conforme mencionado durante as apresentações, publicaremos leituras dos sensores de tensão e corrente para a Adafruit IO Cloud, a partir da qual pode ser visualizado de todo o mundo ou conectado com IFTTT para realizar quaisquer ações que você desejar.
O módulo python Adafruit.IO contém sub-rotinas e funções que aproveitaremos para transmitir dados facilmente para a nuvem. Siga as etapas abaixo para instalar o módulo.
- Execute o cd ~ para retornar ao diretório inicial.
- Em seguida, execute o comando; sudo pip3 instalar adafruit-io . Deve instalar o módulo python Adafruit IO.
Etapa 4: configure sua conta Adafruit.io
Para usar o Adafruit IO, definitivamente será necessário primeiro criar uma conta e obter uma chave AIO. Esta chave AIO junto com seu nome de usuário será usada por seu script Python para acessar o serviço de nuvem Adafruit IO. Para criar uma conta, visite; https://io.adafruit.com/, clique no botão começar gratuitamente e preencha todos os parâmetros necessários. Com a inscrição concluída, você verá o botão View AIO Key à direita de sua página inicial.
Clique nele para obter sua chave AIO.
Com a chave copiada, estamos prontos para começar. No entanto, para facilitar o processo de envio de dados ao serviço em nuvem, você também pode criar os feeds para os quais os dados serão enviados. (mais informações sobre o que são feeds AIO podem ser encontradas aqui). Como basicamente enviaremos consumo de energia, criaremos um feed de energia. Para criar um feed, clique em “feeds” no topo da página AIO e clique em adicionar novo feed.
Dê o nome que você quiser, mas para manter as coisas simples, vou chamá-lo de consumo de energia. Você também pode decidir criar feeds para tensão e corrente e adaptar o código para publicar dados neles.
Com tudo isso implementado, agora estamos prontos para começar a construir o projeto.
Diagrama de circuito do medidor de energia Pi
O esquema do projeto Raspberry Pi Energy Monitor é relativamente complexo e envolve a conexão a uma tensão CA, conforme mencionado anteriormente, por favor, certifique-se de tomar todas as precauções necessárias para evitar choque elétrico. Se você não está familiarizado com o manuseio seguro de tensões CA, deixe a alegria de implementar isso em uma placa de ensaio, sem ligá-la, ser satisfatória.
Os esquemas envolvem conectar a unidade de sensores de tensão e corrente ao ADC, que então envia os dados dos sensores para o Raspberry Pi. Para tornar as conexões mais fáceis de seguir, os esquemas de cada unidade são apresentados individualmente.
Esquema do sensor atual
Conecte os componentes para o sensor de corrente conforme mostrado nos esquemas abaixo.
O transformador de corrente utilizado neste projeto é mostrado abaixo, como você pode ver, temos três fios dele, a saber, terra, Cout e 3,3V
Esquemas do sensor de tensão
Conecte os componentes para o sensor de tensão conforme mostrado nos esquemas abaixo.
Esquemáticos da unidade de processamento
Conecte tudo junto com o ADC (ADS1115) conectado ao raspberry pi e a saída dos sensores de corrente e tensão conectados aos pinos A0 e A1 do ADS1115 respectivamente.
Certifique-se de que os pinos GND de ambas as unidades de detecção estão conectados ao GND do ADC ou ao raspberry pi.
Para tornar as coisas um pouco menos instáveis, implementei os sensores de tensão e corrente em um Protoboard. Além disso, não é recomendado construir um circuito de alimentação CA na placa de ensaio. Se você fizer o mesmo, sua configuração final pode ser semelhante à imagem abaixo;
Com as conexões concluídas, agora estamos prontos para escrever o código do projeto.
Código Python para medidor de energia Pi
Como de costume com nossos projetos raspberry pi, desenvolveremos o código para o projeto usando python. Clique no ícone raspberry pi na área de trabalho, selecione a programação e inicie a versão de python que deseja usar. Usarei Python 3 e algumas das funções em Python 3 podem não funcionar para Python 2.7. Portanto, pode ser necessário fazer algumas alterações significativas no código se você quiser usar o python 2.7. Farei uma análise do código em pequenos fragmentos e compartilharei o código completo com você no final.
Pronto? Legal.
O algoritmo por trás do código é simples. Nosso script python consulta o ADS1115 (sobre I2C) para leituras de tensão e corrente. O valor analógico recebido é recebido, amostrado e o valor da raiz quadrada média da tensão e da corrente são obtidos. A potência em quilowatts é calculada e enviada para a alimentação Adafruit IO após intervalos específicos.
Iniciamos o script incluindo todas as bibliotecas que usaremos. Isso inclui bibliotecas embutidas, como a biblioteca de tempo e matemática e as outras bibliotecas que instalamos anteriormente.
import time import Adafruit_ADS1x15 from Adafruit_IO import * import math
Em seguida, criamos uma instância da biblioteca ADS1115 que será usada para endereçar o ADC físico daqui para frente.
# Crie uma instância ADS1115 ADC (16 bits). Adc1 = Adafruit_ADS1x15.ADS1115 ()
Em seguida, forneça seu nome de usuário adafruit IO e a chave “AIO”.
username = 'digite seu nome de usuário entre estas aspas' AIO_KEY = 'sua chave aio ' aio = Cliente (nome de usuário, AIO_KEY)
Por favor, mantenha a chave segura. Ele pode ser usado para acessar sua conta adafruit io sem sua permissão.
A seguir, criamos algumas variáveis como o ganho para o ADC, o número de amostras que queremos e definimos o arredondamento que definitivamente não é crítico.
GAIN = 1 # consulte a documentação ads1015 / 1115 para valores potenciais. samples = 200 # número de amostras retiradas de ads1115 lugares = int (2) # set arredondamento
Em seguida, criamos um loop while para monitorar a corrente e a tensão e enviar os dados para o Adafruit io em intervalos. O loop while começa definindo todas as variáveis como zero.
enquanto True: # redefinir variáveis contagem = int (0) datai = datav = maxIValue = 0 #max valor de corrente dentro da amostra maxVValue = 0 #max valor de tensão dentro da amostra IrmsA0 = 0 #root média quadrada corrente VrmsA1 = 0 # raiz média quadrada de tensão ampsA0 = 0 # atual pico voltsA1 = 0 #voltage kilowatts = float (0)
Como estamos trabalhando com circuitos AC, a saída do SCT-013 e o sensor de tensão serão uma onda senoidal, portanto, para calcular a corrente e a tensão da onda senoidal, precisaremos obter os valores de pico. Para obter os valores de pico, vamos amostrar a tensão e a corrente (200 amostras) e encontrar os valores mais altos (valores de pico).
para contagem no intervalo (amostras): datai.insert (contagem, (abs (adc1.read_adc (0, ganho = GAIN)))) datav.insert (contagem, (abs (adc1.read_adc (1, ganho = GAIN)))) # veja se você tem um novo maxValue print (datai) if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Em seguida, padronizamos os valores convertendo os valores ADC para o valor real, após o que usamos a equação da raiz quadrada da média para encontrar a tensão e a corrente RMS.
#calcule a corrente usando os dados de amostra # o sct-013 sendo usado é calibrado para saída de 1000mV @ 30A. IrmsA0 = flutuante (maxIValue / float (2047) * 30) IrmsA0 = redondo (IrmsA0, casas) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = redondo (ampsA0, casas) # Calcule a tensão VrmsA1 = flutuante (maxVValue * 1100 / float (2047)) VrmsA1 = redondo (VrmsA1, casas) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = redondo (voltsA1, casas) print ('Voltagem: {0}'. formato (voltsA1)) print ('Atual: {0} '. Formato (ampsA0))
Feito isso, a potência é calculada e os dados publicados no adafruit.io
#calculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', potência)
Para contas gratuitas, adafruit exige que haja algum atraso entre as solicitações ou o upload dos dados.
# Espere antes de repetir o loop time.sleep (0)
O código completo do projeto está disponível no final desta página
Demo
Com o código completo, salve-o e clique no botão executar no IDE do python. Antes disso, certifique-se de que o Pi esteja conectado à internet via WiFi ou LAN e que sua chave aio e nome de usuário estejam corretos. Depois de um tempo, você deve começar a ver os dados de energia (potência) exibidos no feed do Adafruit.io. Minha configuração de hardware durante a demonstração foi assim
Para ir mais longe, você pode criar um painel em adafruit.io e adicionar um componente gráfico para que possa obter uma visão gráfica dos dados, conforme mostrado na imagem abaixo.
É isso pessoal, agora você pode monitorar seu consumo de energia de qualquer lugar do mundo. É importante observar que definitivamente há muito mais ajustes e calibrações a serem feitos para transformá-lo em uma solução realmente precisa, mas acredito que isso lhe dá quase tudo que você precisa para prosseguir.
Sinta-se à vontade para me fazer perguntas sobre o projeto por meio da seção de comentários. Vou tentar responder o maior número possível. Até a próxima.