Stap 5: Beginnen met coderen, meer wiskunde!
Voor de meting aan het werk moeten we enkele van de vorige waarden in programmacode berekent. Dit geeft ons vervolgens de waarde van een kalibratie. Hiervoor moeten we de Arduino spanning, maximale RMS, loops en gebruikte last weerstand weer. Zorg ervoor dat de last die u voor de berekening gebruikt is de waarde van de weerstand die u daadwerkelijk gebruikt.
Eerst moeten we om te beginnen nogmaals te berekenen:
double primaryPeak = sqrt(2) * amps; // Peak RMS value.double secondaryPeak = primaryPeak / loops; // Minimum RMS value. _sensorVoltage = voltage; // Voltage at which Arduino is running at. _sensorCalibration = (primaryPeak / secondaryPeak) / burden; // Calculate calibration value.
We berekenen eerst de primaire en secundaire piekwaarden. Net als voorheen. Wij de spanning voor later gebruik opslaan in de berekening en vervolgens een kalibratie-waarde berekenen door de primaire delen door secundaire piekwaarden. Na dat we dit resultaat met de waarde van de weerstand last verdelen.
Omdat mijn weerstand is al gesoldeerd op het bord die ik gebruik, het resultaat van mijn berekening is: 0,078. In het geval van de vorige berekening voor de weerstand van de berekende belasting zou het resultaat 30,03. Deze waarde moet later worden hergebruikt.
Nu voor het reële deel. Bear with me, want dit soort klinkt ingewikkeld, het is eigenlijk vrij eenvoudig. Allereerst die zullen we definiëren een sample-rate, is dit het aantal keren die een meting is verricht. Een goede sample rate zou 1480. Alle monsters zal worden toegevoegd aan en vervolgens gedeeld door het bedrag van de monsters. Dit geeft ons een gemiddelde waarde.
for (int i = 0; i < samples; i++) { _sensorValue = analogRead(_sensorPin); // Value of current sensor value, used for calculations. _calculationOffset = (_calculationOffset + (_sensorValue - _calculationOffset) / 1024); // Calculated offet value from sensor. _calculationFiltered = _sensorValue - _calculationOffset; // Calculated filtered value from sensor. _calculationSquare = _calculationFiltered * _calculationFiltered; // Square value from sensor. _calculationSum += _calculationSquare; // Sumary of all values since last sample reset.}_sensorAmperage = _sensorCalibration * (_sensorVoltage / 10) * sqrt(_calculationSum / samples); // Calculated amperage value from sensor._calculationSum = 0; // Reset summary so that new sample can be made.
Dit geeft ons een gestage stroomverbruik in ampère. U kunt deze ampère waarde handmatig converteren naar een waarde van het vermogen. Een eenvoudige vergelijking:
voltage * amps = wattage
Deze spanning is natuurlijk de ingangsspanning of in uw aangesloten apparaat, meestal 230v 110v.