LDR modstanden bør sammenbygges med transistorerne, af hensyn til støj. Kredsløbet ser således ud:
LDR modstanden placeres helt tæt på lysdioden på elmåleren sammen med darlingtonkoblingen, og det hele tapes til, så der ikke slipper falsk lys ind. De 5 volt til kredsløbet og puls-signalet kan med fordel føres gennem en skærmet ledning til Arduino.
Her ses monteringen på elmålerens lysdiode:
Udgangen fra LDR-trinnet tilsluttes digital pin 2 eller 3 på Arduino. Afkodningen af pulsen i Arduino sker ved at koble et eksternt interrupt sammen med en funktion:
void setup() {
attachInterrupt(1, doCalc, FALLING);
}
Funktionen doCalc() bliver således kaldt hver gang lysdioden blinker. Her kan vi måle tiden fra det forrige blink og omregne det til watt:
void doCalc() {
timeNow = millis();
timeInterval = (timeNow - timeOld) / 1000.0;
timeOld = timeNow;
watt = 3600.00 / timeInterval;
}
For at undgå at måle prel (meget hurtige støj-pulser lige når dioden tænder og slukker) fra elektrisk støj, accepteres kun intervaller i koden over 100 millisekunder.
Er intervallet for kort, optælles en tæller med 1, og udlæses på displayet som antal fejl-pulser. Denne værdi skal jo selvsagt helst være 0, men er den på et par procent af samlet antal pulser (wattimer) er det til at leve med. I min opstilling ligger den på ca. 1%.
Til udlæsning på display beregnes desuden min, max, gennemsnit, samlet antal watttimer og målingens varighed. Her ses displayet efter at have kørt 1½ minut:
NB! Programmet kan max køre i 50 dage, herefter nulstilles timeren og tallene bliver forkerte.
Koden til Arduino og diagram til LDR-trin kan downloades her
1 kommentar:
Thanks for great information you write it very clean. I am very lucky to get this tips from you
overvågning
Send en kommentar