Auteur: Peter Jensen
Ceci est ma première tentative de projet IoT «utile». J'ai un Arduino Uno depuis un moment, mais je ne l'ai pas vraiment utilisé pour quoi que ce soit, sauf en passant par un tutoriel à LED clignotant. Il était temps de l'utiliser. Je trouve gratifiant de penser une idée de projet, puis de rechercher les informations dont vous avez besoin lorsque vous en avez besoin. Bien sûr, souvent, vous constatez que d'autres ont fait quelque chose de similaire, mais ça va, vous apprendrez toujours du processus.
Je voulais qu'un appareil mesurait la consommation d'énergie dans ma maison et qu'il le signale à un service «cloud» lorsque les choses ont changé; Les lumières allumées / éteintes, etc. De plus, je voulais un écran sur la boîte, afin que je puisse lire quelle était la consommation d'énergie actuelle.
J'ai commencé par brancher un capteur de courant à une broche d'entrée analogique; comme ça:
Source: OpenEnergyMonitor.org
Pour l'étalonnage, j'utilisais un multimètre capable de mesurer jusqu'à 10a et de le connecter à un fil qui alimentait une lampe à trois ampoules. Chacune des ampoules pourrait être activée et éteinte individuellement. Avec des ampoules 60W dans les prises, je pouvais obtenir des échantillons pour 60W, 120W et 180W.
Remarque, le capteur de courant ne doit pas contourner un seul fil, afin que le courant alternatif passe par ce fil pour induire un courant dans le capteur.
Le courant mesuré est le courant qui passe par la ligne électrique que le capteur de courant s'enroule.
Si tout ce que vous faites dans la fonction loop() dans votre croquis Arduino est d'appeler analogRead() et de stocker le résultat dans un tampon de mémoire, vous pourrez obtenir environ 100 échantillons pendant un cycle (60 Hz - 16,7 ms). L'Arduino fonctionne à 16 MHz. Cela devrait être suffisant pour calculer la valeur de la souris à moyens racinaires (RMS) de l'entrée de manière assez précise.
Pourquoi avez-vous besoin de la valeur RMS? L'entrée sur la broche d'entrée analogique est la chute de tension sur la résistance de charge / charge. Cette chute de tension est directement proportionnelle au courant passant par la ligne électrique mesurée au moment de la mesure.
Lorsque le courant et la tension varient dans le temps, la puissance est calculée comme la puissance moyenne sur la période de l'onde sinusale de 60 Hz, en utilisant les valeurs RMS de I et V:
Le composant V RMS est maintenu constant par la compagnie d'électricité à 120 V, donc l'intéressant est la valeur I RMS . Les convertisseurs analogiques arduino-numériques sont de 10 bits, et les circuits sont conçus de sorte que le point médian de l'entrée du sinus est de 2,5 V, ce qui devrait entraîner une lecture de ~ 511. Si les lectures sont également espacées dans le temps, la valeur I RMS peut être calculée comme:
où n est le nombre d'échantillons qu'il faut pour couvrir la période complète de l'onde de sinus de 60 Hz, K est une constante d'étalonnage qui sera déterminée après avoir mesuré les valeurs réelles I RMS avec un multimètre, et V i sont les valeurs renvoyées par les appels à analogRead()
Plus d'informations sur les mathématiques peuvent être trouvées ici: Wikipedia
<TODO: Insérer une image de la configuration de la mesure des tests>
J'ai acheté tout ce dont j'avais besoin sur Amazon Prime. Si vous n'êtes pas un abonné à Prime, vous pourriez finir par en payer un peu plus. Pour certains articles, il était logique d'acheter plus d'une unité, car ce n'était que quelques dollars de plus et il est toujours agréable d'avoir une rechange au cas où vous en fiez un. De plus, si vous souhaitez faire une deuxième (ou troisième) unité, vous avez déjà ce dont vous avez besoin.
| Article | Coût total | Coût unitaire |
|---|---|---|
| Arduino Pro Mini (3-pack) | 11 $ | 4 $ |
| Module d'alimentation 3,3 V / 5V (pack 5) | 9 $ | 2 $ |
| ESP8266 ESP-01 (4-pack) | 14 $ | 4 $ |
| 2x SCT-013-000 Capteur de courant CA non invasif | 26 $ | 13 $ |
| Module d'affichage LCD 16x2 | 6 $ | 6 $ |
| Adaptateur 110VAC-> 9V | 6 $ | 6 $ |
| PCB du prototype double côté 4x6cm de 4x6cm | 7 $ | 1 $ |
| Jacks montés sur PCB de PCB de 3,5 mm de 10pcs 3,5 mm | 8 $ | 2 $ |
| Misc: condensateur, résistances, bouton, fils | ~ 2 $ | 2 $ |
| Total | 89 $ | 40 $ |
Voici comment j'ai tout câblé ensemble:
J'ai utilisé le logiciel Digikey Scheme-It pour créer le schéma de câblage matériel ci-dessus. Il fonctionne dans un navigateur!
Il y a quelques choses à souligner:
Les informations indiquées sur l'écran LCD à 2 lignes traversent ces informations, lorsque le bouton est enfoncé:
Si une longue presse est détectée lorsque les «options avancées» sont affichées, ces écrans supplémentaires sont inclus dans la rotation:
Afin de modifier l'état ON / OFF ou de réinitialiser les données, une appuye longue sur le bouton doit être effectuée.
Puissance totale | Ligne de ligne |
Courant de ligne | Consommation d'énergie totale depuis la dernière réinitialisation |
Adresse IP locale | Longue presse pour les options avancées |
Transmission WiFi ON / OFF | Transmettre chaque valeur d'échantillon |
Transmission en cours |
L'affichage / interface du navigateur ressemble actuellement à ceci:

Les lignes noires et rouges représentent la puissance tirée de chacune des deux phases entrant dans la maison. Les boutons de flèche gauche et droite en haut iront à la veille ou au lendemain. Si vous êtes à la journée d'aujourd'hui, de nouvelles données seront récupérées. Pas besoin de frapper «rafraîchir»!
Voici quelques-unes des choses qui peuvent en être dérivées:
La consommation de secours «noire» est d'environ 125 W et la «rouge» est de 25 W. Ceci est le tirage parasite de tous les appareils qui sont en mode veille (télévision, micro-ondes, ordinateurs, webcams, etc.)
Le motif carré haut / bas sur la ligne «noire» est le compresseur dans le réfrigérateur qui s'allume et désactivé.
Je me suis réveillé vers 6 heures du matin et j'ai commencé à tourner les lumières et le téléviseur. Le téléviseur tire de la ligne «noire».
La pointe du «rouge» est mon ventilateur de CO2 sur mon chauffe-eau. Le chauffe-eau dure environ 10 minutes
Le plus petit pic après la pointe du chauffe-eau est l'ouverture de la porte du garage.
J'ai utilisé OpenSCAD pour concevoir une boîte. Le fichier .scad et les fichiers .stl rendus sont dans ce dépôt. La boîte avec les découpes pour l'affichage, le bouton et divers connecteurs ressemble à ceci:

Alimentation scolarisée
S'appuyer sur l'alimentation électrique de l'USB a provoqué une certaine vague dans les lectures de broches analogiques. De plus, afin de fournir de l'énergie à l'ESP-01, j'avais besoin d'une alimentation 3,3 V. L'Arduino Pro Mini n'a pas de régulateur de tension de 3,3 V, comme l'UNO. Le module d'alimentation électrique très bon marché correspond à la facture et semble fournir une puissance suffisamment stable pour garantir des lectures stables.
Taux en bauds de ESP8266 ESP-01
J'ai dû utiliser quelques broches d'E / S numériques sur l'Arduino pour la communication série entre l'Arduino et le module ESP-01. Les broches TX / RX régulières sont nécessaires pour clignoter le logiciel sur l'Arduino. Lorsque vous utilisez le module logiciel avec des broches d'E / S numériques, il n'était pas possible d'obtenir une liaison de communication fiable vers l'ESP-01 au taux de bauds par défaut 115200. Étant donné que la quantité d'échange de données entre l'Arduino et l'ESP-01 est assez limitée, j'ai fixé le taux de bauds sur un bauds de 9600 sûr.
Courant de mémoire sur l'Arduino
L'Arduino n'a que 2k de mémoire RAM. Le RAM est utilisé pour toutes les données globales, les données de pile et même les données de chaîne constantes. Le compilateur ATMEL 328 GCC fait un bon travail en éliminant tous les code et données morts, et je suis assez étonné que vous puissiez réellement exécuter un programme C ++ de 1000+ lignes dans cette petite quantité de RAM. Il faut cependant un tripotage pour le faire en sorte.
new opérateur pour allouer des objets:String : Vue de haut niveau | Connecteurs d'alimentation |
Connecteurs CT | Antenne partie de l'ESP8266 |
Vue du bas | Vue inférieure sans arduino |
Vue inférieure sans Arduino et ESP8266 | ![]() |
Bouton et écran LCD attaché en haut | ![]() |
PCB inférieur | Boîte avec couvercle |
here's some code
Voici une table:
| 1 | 2 | | | | | adadf | adfadf |