Stap 5: Arduino meting Routine
- Gedurende 5 seconden
- Neem een monster van de ADC
- Filter uit de DC component van de potentiële Divider Circuit en lawaai met behulp van een digitale Band Pass Filter
- Berekenen van de waarde van de gemiddelde Square (MS) van de huidige (d.w.z. vierkant de waarden en krijgen de running gemiddelde)
- De RMS-waarde van de MS-waarde berekenen door het plein-wroeten.
- Vermenigvuldigen met de RMS spanning (230V in Ierland / UK; 110V in de VS).
- Schaal voor de huidige transformer winst en ADC.
Hier is de relevante codesectie
voidloop() { // send the value of analog input 0: r2 = r1; r1 = r0; r0 = analogRead(A0); u2 = u1; u1 = u0; // 0.5Hz to 200Hz Band Pass Filter u0 = 0.2929*(r0-r2) + 1.411*u1 -0.4142*u2; v = u0; // Calculate Mean-Square Current (Amps) AMS = 0.99*AMS +0.01*v*v; // Calculate Root-Mean-Square (Amps) Arms = sqrt(AMS); // Convert to RMS Power: // Multipy by 230V (rms) // 30*5/1024 accounts for the gain of the Current Transformer and ADC Prms = 230*30*Arms*5/1024; delay(1);
De digitale Filter berekening verdient waarschijnlijk een speciale vermelding.
U hoeft niet te begrijpen om het project te doen, maar misschien vindt u het interessant.
Het geïmplementeerd in de volgende coderegel:
u0 = 0.2929*(r0-r2) + 1.411 * u1-0.4142 * u2;
Het is een IIR filter omdat het werkt op de invoerwaarden (heden en verleden) en eigen output waarden (heden en verleden). De reactie van de BPF is hierboven weergegeven.
De z-domein-Pole / Transfer Function, MTF nul is:
0.2929 (z+1)(z-1)
=================
(z-0.9952) (z-0.4162)
Een soortgelijke techniek wordt gebruikt voor het filteren van de huidige lezingen zodanig dat de huidige Mean-Square waarde weergeeft.
AMS = 0.99 * AMS + 0,01 * v * v;
Dit is gewoon een low-pass filter te vormen een lange termijn gemiddelde van haar inbreng (v ^ 2).