Autor: Peter Jensen
Dies ist mein erster Versuch, ein "nützliches" IoT -Projekt zu erhalten. Ich habe eine Weile einen Arduino Uno gehabt, habe ihn aber nicht wirklich für irgendetwas verwendet, außer ein blinkendes LED -Tutorial zu machen. Es war Zeit, es zur Verwendung zu bringen. Ich finde es lohnend, eine Projektidee auszudenken und dann die Informationen zu suchen, die Sie benötigen, wenn Sie sie benötigen. Natürlich stellen Sie oft fest, dass andere etwas Ähnliches getan haben, aber das ist in Ordnung, Sie werden immer noch aus dem Prozess lernen.
Ich wollte, dass ein Gerät den Stromverbrauch in meinem Haus misst und ihn in einem "Cloud" -Dienst meldet, wenn sich die Dinge geändert haben. Lichter Ein-/Ausschalten usw. Außerdem wollte ich ein Display auf der Box, damit ich lesen konnte, was der aktuelle Stromverbrauch war.
Ich begann damit, einen Stromsensoren an einen analogen Eingangsnadel anzuschließen. so was:
Quelle: OpenEnergyMonitor.org
Für die Kalibrierung verwendete ich einen Multimeter, der bis zu 10A messen und zu einem Draht sorgte, der eine Dreierlampe mit Strom versorgt. Jede der Glühbirnen konnte einzeln ein- und ausgeschaltet werden. Mit 60 -W -Lampen in den Steckdosen konnte ich Proben für 60 W, 120 W und 180 W erhalten.
Beachten Sie, dass der Stromsensor nur einen Draht umgehen muss, damit der Wechselstrom durch diesen Draht führt, um einen Strom im Sensor zu induzieren.
Der gemessene Strom ist der Strom, der die Stromleitung durchläuft, um die sich der Stromsensor wickelt.
Wenn Sie nur in der loop() -Funktion in Ihrer Arduino -Skizze die Funktion haben, analogRead() aufzurufen und das Ergebnis in einem Speicherpuffer zu speichern, können Sie während eines Zyklus (60 Hz - 16,7 ms) etwa 100 Proben erhalten. Der Arduino läuft bei 16 MHz. Dies sollte ausreichen, um den Wert des Stammmessers (RMS) des Eingangs ziemlich genau zu berechnen.
Warum brauchen Sie den RMS -Wert? Der Eingang am analogen Eingangsstift ist der Spannungsabfall über den Last/Lastwiderstand. Dieser Spannungsabfall ist direkt proportional, da der Strom zum Zeitpunkt der Messung durch die Stromleitung gemessen wird.
Wenn der Strom und die Spannung im Laufe der Zeit variieren, wird die Leistung als durchschnittliche Leistung über den Zeitraum der 60 -Hz -Sinuswelle unter Verwendung der RMS -Werte von I und V berechnet:
Die V -RMS -Komponente wird von der Power Company bei 120 V konstant gehalten, sodass der interessante Wert der I RMS -Wert ist. Die Arduino-Analog-zu-Digital-Konverter sind 10 Bit, und die Schaltung ist so ausgelegt, dass der Mittelpunkt des Sinuseingangs 2,5 V beträgt, was zu einer Lektüre von ~ 511 führen sollte. Wenn die Messwerte gleichermaßen rechtzeitig verteilt sind, kann der I RMS -Wert berechnet werden wie:
Wenn n die Anzahl der Proben ist, die die volle Periode der 60 -Hz -Sinuswelle abdecken, ist k eine Kalibrierungskonstante, die nach der Messung der tatsächlichen I -RMS -Werte mit einem Multimeter bestimmt wird, und V i sind die Werte, die von den Aufrufen an analogRead()
Weitere Informationen zur Mathematik finden Sie hier: Wikipedia
<Todo: Bild des Testmessungsaufbaus einfügen>
Ich habe alles gekauft, was ich bei Amazon Prime brauchte. Wenn Sie kein erstklassiges Abonnent sind, zahlen Sie möglicherweise ein bisschen mehr. Für einige Artikel war es sinnvoll, mehr als eine Einheit zu kaufen, da es nur ein paar Dollar mehr war und es immer schön ist, einen Ersatz für den Fall zu haben, dass Sie einen braten. Wenn Sie eine zweite (oder dritte) Einheit erstellen möchten, haben Sie bereits das, was Sie brauchen.
| Artikel | Gesamtkosten | Einheitenkosten |
|---|---|---|
| Arduino Pro Mini (3-Pack) | $ 11 | $ 4 |
| 3,3 V/5V Netzteil (5-Pack) | $ 9 | $ 2 |
| ESP8266 ESP-01 (4-Pack) | $ 14 | $ 4 |
| 2x SCT-013-000 Nicht-invasiver Wechselstromsensor | $ 26 | $ 13 |
| 16x2 LCD -Anzeigemodul | $ 6 | $ 6 |
| 110VAC-> 9V-Adapter | $ 6 | $ 6 |
| 10pcs 4x6cm doppelter Seitenprototyp -PCB | $ 7 | $ 1 |
| 10pcs 3,5 mm weibliche Platine montierte Buchsen | $ 8 | $ 2 |
| Misca: Kondensator, Widerstände, Knopf, Drähte | ~ $ 2 | $ 2 |
| Gesamt | 89 $ | $ 40 |
Hier ist, wie ich alles miteinander verdrahtet habe:
Ich habe die Digikey Scheme-IT-Software verwendet, um das oben genannte Hardware-Schaltplan zu erstellen. Es läuft in einem Browser!
Es gibt ein paar Dinge, die darauf hinweisen müssen:
Die in der 2 Zeile LCD angezeigten Informationen durch diese Informationen zyklieren, wenn die Taste gedrückt wird:
Wenn eine lange Presse festgestellt wird, wenn „erweiterte Optionen“ angezeigt werden, sind diese zusätzlichen Bildschirme in der Rotation enthalten:
Um den Ein/Aus -Status zu ändern oder die Daten zurückzusetzen, muss eine lange Drücke auf der Taste durchgeführt werden.
Gesamtleistung | Linienkraft |
Linienstrom | Totaler Energieverbrauch seit dem letzten Zurücksetzen |
Lokale IP -Adresse | Lange Presse für fortschrittliche Optionen |
WiFi -Übertragung Ein/Aus | Übertragen Sie jeden Probenwert |
Übertragung in Arbeit |
Das Browser -Display/die Schnittstelle sieht derzeit wie folgt aus:

Die schwarzen und roten Linien repräsentieren die Kraft, die von jedem der beiden Phasen ins Haus kommt. Die linken und rechten Pfeiltasten oben gehen zum Vortag oder am nächsten Tag. Wenn Sie am heutigen Tag sind, werden neue Daten abgerufen. Keine Notwendigkeit, "Aktualisierung" zu treffen!
Hier sind einige der Dinge, die daraus abgeleitet werden können:
Der "schwarze" Standby -Verbrauch beträgt ungefähr 125 W und der "rote" 25W. Dies ist das parasitäre Zeichnen aller Geräte, die sich im Standby -Modus befinden (TV, Mikrowelle, Computer, Webcams usw.)
Das Auf-/Ab -Quadrat -Muster an der "schwarzen" Linie ist der Kompressor im Kühlschrank ein und aus.
Ich wachte gegen 6 Uhr morgens auf und fing an, Lichter und Fernseher einzuschalten. Der Fernseher zeichnet aus der "schwarzen" Linie.
Der Anstieg im 'Rot' ist mein CO2 -Lüfter auf meinem Warmwasserbereiter. Der Wasserkocher läuft ungefähr 10 Minuten lang
Der kleinere Anstieg nach dem Wasserhitzerspike ist die Garagentoröffnung.
Ich habe OpenScad verwendet, um eine Schachtel zu entwerfen. Die Datei. Das Feld mit den Ausschnitten für die Anzeige, die Taste und verschiedene Anschlüsse sieht folgt aus:

Schuppiges Stromversorgung
Das Anziehen der Stromversorgung des USB führte zu einer gewissen Flohiness in den analogen Pin -Messwerten. Um Strom an ESP-01 zu liefern, brauchte ich eine 3,3-V-Versorgung. Der Arduino Pro Mini hat keinen 3,3 -V -Spannungsregler, wie es die UNO tut. Das sehr kostengünstige Stromversorgungsmodul passt in die Rechnung und scheint eine stabile Leistung zu liefern, um stabile Messwerte zu gewährleisten.
Baudrate von ESP8266 ESP-01
Ich musste ein paar digitale E/A-Stifte auf dem Arduino für die serielle Kommunikation zwischen dem Arduino und dem ESP-01-Modul verwenden. Die regulären TX/RX -Stifte werden benötigt, um die Software auf den Arduino zu blinken. Bei der Verwendung des Softwareerialmoduls mit digitalen E/A-Stiften war es nicht möglich, eine zuverlässige Kommunikationsverbindung zum ESP-01 bei der Standard 115200-Baudrate zu erhalten. Da der Datenaustausch zwischen dem Arduino und dem ESP-01 ziemlich begrenzt ist, habe ich den Baudrate auf einen sicheren 9600 Baud festgelegt.
Aus dem Gedächtnis auf dem Arduino ausgeht
Der Arduino hat RAM -Speicher im Wert von nur 2K. Der RAM wird für alle globalen Daten, Stapeldaten und sogar konstante String -Daten verwendet. Der Atmel 328 GCC Compiler macht einen guten Job, um alle toten Code und Daten zu beseitigen, und ich bin ziemlich erstaunt, dass Sie in dieser kleinen Menge RAM tatsächlich ein 1000 Zeilen C ++ - Programm ausführen können. Es braucht jedoch etwas Fummeln, um es fit zu machen.
new Operator zur Zuweisung von Objekten zu verwenden:String -Objekten: Spitzenansicht | Stromversorgungsanschlüsse |
CT -Anschlüsse | Antennenteil des ESP8266 |
Bodenansicht | Untere Sicht ohne Arduino |
Untere Ansicht ohne Arduino und ESP8266 | ![]() |
Taste und LCD oben angeschlossen | ![]() |
PCB Unterseite | Box mit Deckel |
here's some code
Hier ist ein Tisch:
| 1 | 2 | | | | | adadf | adfadf |