- Schéma fonctionnel du compteur d'énergie intelligent Raspberry Pi
- Composants requis
- Préparer le Pi
- Schéma du circuit du compteur d'énergie Pi
- Code Python pour compteur d'énergie Pi
- Démo
Les moniteurs d'énergie, qu'ils couvrent tout l'appartement ou déployés pour surveiller un seul appareil, vous permettent de suivre votre consommation et d'effectuer les ajustements nécessaires. Bien qu'ils deviennent de plus en plus disponibles sur le marché, le fabricant en moi pense toujours que ce sera une excellente idée de créer une version DIY qui pourrait être adaptée pour répondre à des besoins personnels spécifiques. En tant que tel, pour le didacticiel d'aujourd'hui, nous allons construire un moniteur de consommation d'énergie Raspberry Pi capable d'obtenir la consommation d'énergie et de le télécharger sur Adafruit.io.
Vous pouvez également consulter le compteur d'énergie IoT basé sur Arduino et le compteur d'énergie GSM prépayé que nous avons construit précédemment.
Schéma fonctionnel du compteur d'énergie intelligent Raspberry Pi
Un schéma fonctionnel montrant le fonctionnement du système est présenté ci-dessous.
Pour choisir les unités les unes après les autres;
Unité de détection de courant: L'unité de détection de courant est composée du capteur de courant SCT -013 qui peut mesurer jusqu'à 100 A, selon la version que vous achetez. Le capteur transforme le courant traversant le fil sur lequel il est serré en un petit courant qui est ensuite introduit dans le CAN via un réseau de diviseurs de tension.
Unité de détection de tension: alors que je ne pouvais pas mettre la main sur un module de capteur de tension, nous allons construire un bricolage un capteur de tension sans transformateur qui mesure la tension en utilisant le principe des diviseurs de tension. Le capteur de tension DIY implique l'étage diviseur de tension où la haute tension est transformée en une valeur appropriée pour l'entrée dans l'ADC.
Unité de traitement: L'unité de traitement comprend l'ADC et le Raspberry pi. L'ADC prend le signal analogique et l'envoie au raspberry pi, qui calcule ensuite la quantité exacte d'énergie consommée et l'envoie vers un cloud d'appareil désigné. Pour les besoins de ce tutoriel, nous utiliserons Adafruit.io comme notre Device Cloud. Nous avons également construit d'autres
Avertissement: Avant de commencer, il est important de mentionner que ce projet implique une connexion à une alimentation CA qui est dangereuse et pourrait être fatale si elle n'est pas manipulée en toute sécurité. Assurez-vous que vous avez une expérience de travail avec AC avant de tenter cela.
Prêt? Plongeons-nous.
Composants requis
Les composants suivants sont requis pour construire ce projet;
- Raspberry Pi 3 ou 4 (le processus devrait être le même pour le RPI2 avec un dongle WiFi)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- Adaptateur secteur microUSB 2.5A 5V
- Résistance 2W 10K (1)
- Résistance 1 / 2W 10K (2)
- Résistance 33ohms (1)
- Résistance 2W 3,3k (1)
- Diode IN4007 (4)
- Diode Zener 3.6v (1)
- Potentiomètre 10k (ou préréglage) (1)
- Condensateur 50v 1uf
- Condensateur 50v 10uf (2)
- PainBoard
- Cavalier
- Autres accessoires pour l'utilisation de Raspberry Pi.
Outre les composants matériels répertoriés ci-dessus, le projet nécessite également des dépendances logicielles et des bibliothèques que nous installerons au fur et à mesure.
Bien que ce didacticiel fonctionne quel que soit le système d'exploitation Raspberry pi utilisé, j'utiliserai le système d'exploitation Raspberry Pi buster fonctionnant sur un Pi 3 (devrait également fonctionner sur un Pi 4) et je suppose que vous êtes familiarisé avec la configuration du Raspberry Pi avec le système d'exploitation Raspbian Buster (à peu près le même processus que les versions précédentes), et vous savez comment s'y connecter en SSH en utilisant un logiciel de terminal comme hyper. Si vous rencontrez des problèmes avec tout cela, il existe des tonnes de tutoriels Raspberry Pi sur ce site Web qui peuvent vous aider
Préparer le Pi
Avant de commencer à câbler les composants et le codage, il y a quelques tâches simples que nous devons effectuer sur le raspberry pi pour nous assurer que nous sommes prêts à partir.
Étape 1: Activation du Pi I2C
Au cœur du projet d'aujourd'hui, il n'y a pas que le Raspberry Pi, mais l'ADC ADS1115 16 bits I2C. L'ADC nous permet de connecter des capteurs analogiques au Raspberry Pi car le Pi lui-même ne dispose pas d'un ADC intégré. Il prend les données via son propre ADC et les transmet au raspberry pi via I2C. En tant que tel, nous devons activer la communication I2C sur le Pi afin qu'il puisse communiquer avec lui.
Le bus I2C du Pi peut être activé ou désactivé via la page de configuration du raspberry pi. Pour le lancer, cliquez sur l'icône Pi sur le bureau et sélectionnez les préférences suivies de la configuration Raspberry pi.
Cela devrait ouvrir la page de configuration. Cochez le bouton radio activé pour l'I2C et cliquez sur OK pour l'enregistrer et redémarrez le Pi pour effectuer les modifications.
Si vous exécutez le Pi en mode sans tête, la page de configuration de Raspbian est accessible en exécutant sudo raspi-config.
Étape 2: Installation de la bibliothèque ADS11xx d'Adafruit
La deuxième chose que nous devons faire est d'installer la bibliothèque python ADS11xx qui contient des fonctions et des routines qui nous permettent d'écrire facilement un script python pour extraire les valeurs de l'ADC.
Suivez les étapes ci-dessous pour ce faire.
- Mettez à jour votre pi en exécutant; sudo apt-get update suivi de sudo apt-get upgrade cela mettra à jour le pi en s'assurant qu'il n'y a aucun problème de compatibilité pour tout nouveau logiciel que vous choisissez d'installer.
- Ensuite, exécutez la commande cd ~ pour vous assurer que vous êtes dans le répertoire de base.
- Ensuite, installez les build-essentials en exécutant; sudo apt-get install build-essential python-dev python-smbus git
- Ensuite, clonez le dossier git Adafruit contenant la bibliothèque ADS en exécutant; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Accédez au répertoire du fichier cloné et exécutez le fichier d'installation en utilisant; cd Adafruit_Python_ADS1x1z suivi de sudo python setup.py install
Une fois cela fait, l'installation devrait maintenant être terminée.
Vous pouvez tester l'installation de la bibliothèque en connectant l'ADS1115 comme indiqué dans la section des schémas ci-dessous et exécuter l'exemple de code fourni avec la bibliothèque en le remplaçant d'abord par; exemples de cd et exécution de l'exemple en utilisant; python simpletest.py
Étape 3: Installez le module Python Adafruit.IO
Comme mentionné lors des introductions, nous publierons les lectures des capteurs de tension et de courant sur l'Adafruit IO Cloud à partir duquel il pourra être visualisé de partout dans le monde ou connecté à IFTTT pour effectuer les actions que vous souhaitez.
Le module python Adafruit.IO contient des sous-routines et des fonctions sur lesquelles nous allons exploiter, pour diffuser facilement des données vers le cloud. Suivez les étapes ci-dessous pour installer le module.
- Exécutez le cd ~ pour revenir au répertoire de base.
- Ensuite, exécutez la commande; sudo pip3 installe adafruit-io . Il devrait installer le module python Adafruit IO.
Étape 4: Configurez votre compte Adafruit.io
Pour utiliser Adafruit, IO devra tout d'abord créer un compte et obtenir une clé AIO. Cette clé AIO ainsi que votre nom d'utilisateur seront utilisés par votre script python pour accéder au service cloud Adafruit IO. Pour créer un compte, visitez; https://io.adafruit.com/, cliquez sur le bouton commencer gratuitement et remplissez tous les paramètres requis. Une fois l'inscription terminée, vous devriez voir le bouton Afficher la clé AIO à droite de votre page d'accueil.
Cliquez dessus pour obtenir votre clé AIO.
Avec la clé copiée, nous sommes prêts à partir. Cependant, pour faciliter le processus d'envoi de données au service cloud, vous pouvez également créer les flux auxquels les données seront envoyées. (plus d'informations sur les flux AIO peuvent être trouvées ici). Puisque nous allons essentiellement envoyer la consommation d'énergie, nous allons créer une alimentation pour l'énergie. Pour créer un flux, cliquez sur «flux» en haut de la page AIO et cliquez sur ajouter un nouveau flux.
Donnez-lui le nom que vous voulez mais pour garder les choses simples, je l'appellerai consommation d'énergie. Vous pouvez également décider de créer des alimentations pour la tension et le courant et adapter le code pour y publier des données.
Avec tout cela en place, nous sommes maintenant prêts à commencer à construire le projet.
Schéma du circuit du compteur d'énergie Pi
Les schémas du projet Raspberry Pi Energy Monitor sont relativement complexes et impliquent de se connecter à une tension alternative comme mentionné précédemment, veuillez vous assurer de prendre toutes les précautions nécessaires pour éviter les chocs électriques. Si vous n'êtes pas familiarisé avec la gestion des tensions CA en toute sécurité, laissez la joie de l'implémenter sur une maquette, sans l'alimenter, être satisfaisante.
Les schémas impliquent la connexion de l'unité de capteurs de tension et de courant à l'ADC qui envoie ensuite les données des capteurs au Raspberry Pi. Pour faciliter le suivi des connexions, les schémas de chaque unité sont présentés séparément.
Schéma du capteur de courant
Connectez les composants du capteur de courant comme indiqué dans les schémas ci-dessous.
Le transformateur de courant utilisé dans ce projet est montré ci-dessous, comme vous pouvez le voir, nous en avons trois fils, à savoir la terre, Cout et 3,3V
Schémas du capteur de tension
Connectez les composants du capteur de tension comme indiqué dans les schémas ci-dessous.
Schémas de l'unité de traitement
Connectez le tout avec l'ADC (ADS1115) connecté au raspberry pi et la sortie des capteurs de courant et de tension connectés respectivement aux broches A0 et A1 de l'ADS1115.
Assurez-vous que les broches GND des deux unités de détection sont connectées au GND de l'ADC ou du Raspberry Pi.
Pour rendre les choses un peu moins instables, j'ai implémenté les capteurs de tension et de courant sur un Protoboard. De plus, il n'est pas recommandé de construire un circuit d'alimentation secteur sur la platine d'expérimentation. Si vous faites de même, votre configuration finale pourrait ressembler à l'image ci-dessous;
Une fois les connexions terminées, nous sommes maintenant prêts à écrire le code du projet.
Code Python pour compteur d'énergie Pi
Comme d'habitude avec nos projets raspberry pi, nous développerons le code du projet en utilisant python. Cliquez sur l'icône raspberry pi sur le bureau, sélectionnez la programmation et lancez la version de python que vous souhaitez utiliser. J'utiliserai Python 3 et certaines des fonctions de python 3 peuvent ne pas fonctionner pour python 2.7. Il peut donc être nécessaire d'apporter des modifications importantes au code si vous souhaitez utiliser python 2.7. Je vais faire une ventilation du code en petits extraits et partager le code complet avec vous à la fin.
Prêt? Cool.
L'algorithme derrière le code est simple. Notre script python interroge l'ADS1115 (via I2C) pour les lectures de tension et de courant. La valeur analogique reçue est reçue, échantillonnée et la valeur quadratique moyenne de la tension et du courant est obtenue. La puissance en kilowatts est calculée et envoyée à l'alimentation Adafruit IO après des intervalles spécifiques.
Nous commençons le script en incluant toutes les bibliothèques que nous utiliserons. Cela inclut les bibliothèques intégrées comme la bibliothèque time and math et les autres bibliothèques que nous avons installées précédemment.
importation de temps import Adafruit_ADS1x15 depuis Adafruit_IO import * import math
Ensuite, nous créons une instance de la bibliothèque ADS1115 qui sera utilisée pour adresser l'ADC physique à l'avenir.
# Créer une instance ADS1115 ADC (16 bits).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Ensuite, indiquez votre nom d'utilisateur adafruit IO et votre clé «AIO».
username = 'entrez votre nom d'utilisateur entre ces guillemets' AIO_KEY = 'your aio key' aio = Client (username, AIO_KEY)
Veuillez garder la clé en sécurité. Il peut être utilisé pour accéder à votre compte adafruit io sans votre autorisation.
Ensuite, nous créons des variables comme le gain pour l'ADC, le nombre d'échantillons que nous voulons et définissons l'arrondi qui n'est certainement pas critique.
GAIN = 1 # voir la documentation ads1015 / 1115 pour les valeurs potentielles. samples = 200 # nombre d'échantillons prélevés sur les annonces1115 places = int (2) # set rounding
Ensuite, nous créons une boucle while pour surveiller le courant et la tension et envoyer les données à Adafruit io à intervalles réguliers. La boucle while commence par mettre toutes les variables à zéro.
while True: # reset variables count = int (0) datai = datav = maxIValue = 0 #max current value within sample maxVValue = 0 #max voltage value within sample IrmsA0 = 0 #root average square current VrmsA1 = 0 # root average square voltage ampèresA0 = 0 # volts de crête de courant A1 = 0 # kilowatts de tension = flottant (0)
Puisque nous travaillons avec des circuits AC, la sortie du SCT-013 et le capteur de tension seront une onde sinusoïdale, donc afin de calculer le courant et la tension à partir de l'onde sinusoïdale, nous devrons obtenir les valeurs de crête. Pour obtenir les valeurs de crête, nous échantillonnerons à la fois la tension et le courant (200 échantillons) et trouverons les valeurs les plus élevées (valeurs de crête).
pour compter dans la plage (échantillons): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # voir si vous avez une nouvelle impression maxValue (datai) si datai> maxIValue: maxIValue = datai si datav> maxVValue: maxVValue = datav
Ensuite, nous standardisons les valeurs en convertissant les valeurs ADC en valeur réelle, après quoi nous utilisons ensuite l'équation de la moyenne quadratique pour trouver la tension et le courant RMS.
#calculer le courant à l'aide des données échantillonnées # le sct-013 utilisé est étalonné pour une sortie 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampèresA0 = IrmsA0 / math.sqrt (2) ampèresA0 = round (ampèresA0, places) # Calculer la tension VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Tension: {0}'. format (voltsA1)) print ('Courant: {0} '. Format (ampsA0))
Ceci fait, la puissance est calculée et les données sont publiées sur adafruit.io
#calculate power power = round (ampèresA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', puissance)
Pour les comptes gratuits, adafruit exige qu'il y ait un certain délai entre les demandes ou le téléchargement de données.
# Attendez avant de répéter la boucle time.sleep (0)
Le code complet du projet est disponible en bas de cette page
Démo
Une fois le code terminé, enregistrez-le et appuyez sur le bouton d'exécution de l'IDE python. Avant cela, assurez-vous que le Pi est connecté à Internet via WiFi ou LAN, et que votre clé aio et votre nom d'utilisateur sont corrects. Après un certain temps, vous devriez commencer à voir les données d'énergie (puissance) affichées sur le flux sur Adafruit.io. Ma configuration matérielle pendant la démo était comme ça
Pour aller plus loin, vous pouvez créer un tableau de bord sur adafruit.io et ajouter un composant graphique afin que vous puissiez obtenir une vue graphique des données comme indiqué dans l'image ci-dessous.
Voilà les gars, vous pouvez désormais surveiller votre consommation d'énergie de n'importe où dans le monde. Il est important de noter qu'il y a certainement beaucoup plus de réglages et d'étalonnages à faire pour le transformer en une solution vraiment précise, mais je pense que cela vous donne presque tout ce dont vous avez besoin pour continuer.
N'hésitez pas à me poser des questions sur le projet via la section commentaires. Je vais essayer de répondre au plus grand nombre possible. Jusqu'à la prochaine fois.