Arduino-projekt för att logga strömförbrukning hemma.
Genom att räkna och spara blinkningar på elmätaren så går det att räkna strömförbrukning mellan olika tidpunkter i efterhand.
Detta görs med hjälp av en Arduino och en PC.
Lösningen är inte helt helt klar men fungerar.
Material
- 1st – LDR
- 1st – Resistor (10K Ohm)
- 1st – Arduino UNO R3
- 1st – labbplatta
- 1st – PC (dator med Windows om du vill nyttja mitt Powershell script)
Övergripande information
På elmätaren klistras en labbplatta med ett motstånd samt en LDR, dvs ett ljuskänsligt motstånd. LDR:en ska placeras framför den blinkade dioden på elmätaren.
För att slippa ha en dator i närheten av elskåpet så valde jag att ha en uppklippt nätverkskabel mellan Arduinon och kopplingsplattan. Det går att enbart montera LDR:en på elmätaren och ha motståndet kopplat direkt på Arduinon.
Varje blinkning skickas från Arduinon till PC:n via com porten. När datorn tar emot detta så skrivs tidpunkten ner i en fil. Varje timme skapas en ny fil.
Genom att registrera elmätarens blinkningar så går det att se hur mycket man förbrukar (ett blink = 1W)
Arduinon kopplas direkt i PC:n via USB och skickar data via Com porten. Ingen extra strömförsörjning behövs.
Kopplingsschema:
Koppla ett 10K ohms motstånd parallellt med A0 (analog) och GND (jord)
Koppla LRD direkt till +5V och andra benet till A0 (analog)
Arduinokoden:
Jag har gjort en loop som kontrollerar om A0 har ett värde över 600, har den det så skickas värdet via serieporten till datorn en gång. Sedan avvaktar Arduinon på att porten ska gå låg igen.
Om ljuset runt LDR:en varierar så går det att ändra vädret ”600” till ett högre eller lägre för att undvika brus och felaktiga avläsningar.
Kod:
const int analogInPin = A0; // Analog pinne dit LDR:en kopplas
const int analogOutPin = 13; // port 13 Arduinon (inbyggd led för att visa att allt är ok)
int AnalogState = 0; // sätter senast lästa värde.
int AnalogLastState = 0; // sätter näst senaste värdet
int AnalogCounter = 0; // Räknar pulser
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
void setup()
{
Serial.begin(9600);
}
void loop()
{
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 200, 800, 0, 255); // räknar värde 200 som 0, och 800 som 255)
if (sensorValue > 600 && AnalogState == 0){
AnalogState = 1;
//Serial.print(”HIGH”);
Serial.println(sensorValue);
}
else if (sensorValue < 600 && AnalogState == 1)
{
AnalogState = 0; // Sensorn gick nu under 600, dvs nolla och börja räkna igen.
}
else
{
// om man inte har ett värde över 600 och att Analogstate inte va 1
}
analogWrite(analogOutPin, outputValue);
AnalogLastState = AnalogState;
}
PowerShell script
För att spara data på PC:n så har jag gjort ett PowerShell script som lyssnar på Com port, skrivs något på Com porten så sparas tidpunkten ner till en fil. En ny fil skapas varje timme.
Genom att starta scriptet så loggas varje blinkning på din elmätare till en fil. Ändra sökvägen $loggmapp dit du vill ha loggarna sparad. Ändra $comport till porten som Arduinon har presenterat sig på.
### Start script
$loggmappen = ”D:\PowerLoggen” # Sökvägen dit alla loggar skapas
$comport = ”COM3” # Ange den aktuella porten som Arduinon hamnar på!
if (!(Test-Path $loggmappen)){New-Item $loggmappen -ItemType directory -Force -Confirm | Out-Null; Write-Verbose ”Skapade en mapp”}
$loggmappen = Join-Path -Path $loggmappen -ChildPath ”Ström-”
[System.IO.Ports.SerialPort]::getportnames()
$port= new-Object System.IO.Ports.SerialPort $($comport),9600,None,8,one
$port.open()
while ($true){
$tillf = ””
$tillf = $port.ReadLine()
if ($tillf -ne ””){
Write-Verbose $tillf
Out-File -FilePath ”$($loggmappen)$(Get-Date -UFormat %y-%m-%d_%H_00).log” -InputObject ”$((get-date).ToString(”HH:mm:ss:fff”))” -Append
}
}
$port.Close() # detta måste köras för att stänga porten när man är klar!
### slut på scriptet.
På följande sätt ser loggen ut för 10W.
- 22:58:44:350
- 22:58:46:475
- 22:58:48:585
- 22:58:50:710
- 22:58:52:850
- 22:58:54:929
- 22:58:57:069
- 22:58:59:147
- 22:59:01:304
- 22:59:03:413
Schemalägg scriptet så det alltid körs
1: Öppna schemaläggaren på datorn
2: Högerklicka och välj skapa ny standardaktivitet, hitta sedan på ett bra namn
3: Välj att aktiviteten ska köras varje gång datorn startas.
4: Välj ”starta ett program”
5: Ange nu följande:
Program eller script:
- C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
argument: (Ändra till sökväg och namn på ditt sparade script)
- ”D:\dittScript.ps1”
9: Välj nu slutför
10: Öppna aktiviteten du just skapade och ändra till ”kör oavsett om användaren är inloggad eller inte”
Nu loggas förbrukningen extremt noggrant, det går att se direkt vilken millisekund en watt drogs. Jag kommer att lägga upp ett script för att summera detta till snygga grafer så fort jag hinner.
// Markus

Skribent:
Markus Jakobsson har mer än 10 års erfarenhet inom smarta hem, så han har hunnit testa och lära sig det mesta! Men fullärd blir man aldrig dock aldrig 🙂
TIPS:
Vill gärna tipsa om ett inlägg där du hittar grupperad information om smarta hem: Automatiserar.se/smarta-hem/
Skulle du mot förmodan inte hittat det du sökte kommer du troligen hitta det här: Automatiserar.se/sok-om-hemautomation/
Vill du diskutera smarta hem så har vi en kanal på Facebook med +7000 medlemmar: Smartare hem & Hemautomation | Facebook
Sedan början av 2023 har vi skapat mer material på Youtube kanalen: Stötta oss gärna genom att kolla in filmerna där och följa kanalen
Övrigt
Du kanske uppskattade och fick nytta av det här inlägget och vill hjälpa sidan Automatiserar.se?
Swisha gärna en slant till kaffe på 0705470065 om du vill stötta bloggen. Då visar du din uppskattning av den tid vi lägger på Bloggen och vi kan fortsätta driva sidan helt utan reklam. Du kan även stötta bloggen genom att köpa någon av våra smarta hållare.
Alla bidrag vi får går till att täcka driftkostnaderna för bloggen, samt att köpa den teknik vi kan skriver om på bloggen.
Om bloggen:
Vi kör sidan helt på fritiden, därigenom helt oberoende och gör detta för att det är roligt och lärorikt.
Vi hoppas att du som läsare hittat ett inlägg som hjälper dig att automatisera mera.
Gillade du bloggen så dela den gärna med vänner, och var det något du inte tyckte var allt för bra så hör av dig så vi får veta!
Stort tack för att du tog dig tid att läsa vårt inlägg.
Med vänliga hälsningar Markus Jakobsson
Allt går att automatisera!
Detta är en pulsmätare, inte en elmätare.
Stor skillnad.
Hej, stämmer att benämning kanske inte tekniskt är helt korrekt nu, tänkte bara på själva funktionen. Ber om ursäkt för det.
Men till mitt försvar så kan man hjälp av pulserna den läser beräkna hur mycket energi huset gör av med. dvs resultatet när det behandlats i datorn är en elmätare.
Nästa version av min Esp8266 kommer att nyttja en 219 INA219 I2C, vilket är en mer korrekt ”elmätare” som klarar att mäta åt båda håll. 🙂
// Ispep
Kul!
Jag har kollat på lite alternativ för att göra billiga mätare, och har ett gäng INA219 och några av dens syskonprodukter hemma. Tyvärr blev det projektet liggande…
TI har också en serie av kraftmätande msp430-baserade MCUer som även klarar trefas.
Hur omvandlar du växelströmmen till likström?
(Mina tänkta projekt baserade sig på likströmsmätning)
Det är alltid lite knöligt och farligt med isolering när man jobbar med sånt här. Vad jag märkt är det vanligt att en MCU isoleras helt så slipper man böka med isolering av A/D.
Pingback: Guide: Hemautomation med Node-Red |
Hej!
Blev du klar med skriptet som kan summera det till snygga grafer? Skulle uppskattas otroligt mycket.
Tjena
Länge sedan jag gjorde den där nu 🙂 använder Powershell modulen ( https://www.powershellgallery.com/packages/AutomatiserarSE/2.0.2 ) och skickar informationen till en influx db, detta grafas sedan i Grafana, så modulen finns, du behöver bara göra något liknande get-content loggfilen.log | Send-MJInfluxData
Hur du får igång Grafana och Influx DB kan du läsa om i den här guiden: https://www.automatiserar.se/guide-raspberry-pi/
Rekommenderar starkt grafana om du vill göra snygga grafer enkelt
// Ispep
Pingback: Bygg en egen läsare till elmätaren | Tips för smartare hem
Hur får du ut strömförbrukningen för individuella komponenter så som vardagsrum och poolvärmare, från en blinkande lampa på elmätaren? Är det något jag missat här? Riktigt ballt projekt!