Dzień dobry
Usiłuję właśnie zrobić (w zasadzie napisać) watomierz na bazie Arduino i przekładnika prądowego.
Poczytałem różne przykłady, zdecydowałem się na szybkie sumowanie odczytanych wartości napięcia na przekładniku.
Przekładnik (2000x) jest obciążony rezystorem 220 Ohm (z braku 200), co powinno dać interesujący mnie zakres pomiarowy.
Kod niby działa, mierząc prąd pobierany przez lutownicę transformatorową czy halogen 150 W.
Natomiast kompletnie wykłada się na suszarce do włosów
Wiem, że suszarka w niższych trybach pobiera zasilanie, prostując napięcie etc., czym wprowadza zamieszanie...
Pomiary weryfikuję dwoma licznikami - jeden to popularny "watomierz" wkładany w gniazdo, drugi to chiński watomierz WiFi z przekładnikiem prądowym.
Oba pokazują prawie identyczne wyniki, można przyjąć, że poprawne...
Natomiast mój układ / kod kompletnie wykłada się na suszarce - pokazuje zdecydowanie zaniżone wyniki.
Układ wygląda banalnie - dzielnik napięcia, żeby otrzymać 2.5 V, do niego podłączony przekładnik zbocznikowany rezystorem. Drugi przewód od przekładnika do wejścia analogowego Arduino. Kod wygląda jak poniżej.
W czym leży problem? Czy to kwestia przekładnika i trzeba do niego jakiś układ kondycjonujący, czy błąd w moim kodzie???
Będę wdzięczny za podpowiedź...
Usiłuję właśnie zrobić (w zasadzie napisać) watomierz na bazie Arduino i przekładnika prądowego.
Poczytałem różne przykłady, zdecydowałem się na szybkie sumowanie odczytanych wartości napięcia na przekładniku.
Przekładnik (2000x) jest obciążony rezystorem 220 Ohm (z braku 200), co powinno dać interesujący mnie zakres pomiarowy.
Kod niby działa, mierząc prąd pobierany przez lutownicę transformatorową czy halogen 150 W.
Natomiast kompletnie wykłada się na suszarce do włosów
Pomiary weryfikuję dwoma licznikami - jeden to popularny "watomierz" wkładany w gniazdo, drugi to chiński watomierz WiFi z przekładnikiem prądowym.
Oba pokazują prawie identyczne wyniki, można przyjąć, że poprawne...
Natomiast mój układ / kod kompletnie wykłada się na suszarce - pokazuje zdecydowanie zaniżone wyniki.
Układ wygląda banalnie - dzielnik napięcia, żeby otrzymać 2.5 V, do niego podłączony przekładnik zbocznikowany rezystorem. Drugi przewód od przekładnika do wejścia analogowego Arduino. Kod wygląda jak poniżej.
W czym leży problem? Czy to kwestia przekładnika i trzeba do niego jakiś układ kondycjonujący, czy błąd w moim kodzie???
Będę wdzięczny za podpowiedź...
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
int licznik = 0;
float msSTOPER_1 = 0; float msSTOPER_2 = 0;
int czas_pomiaru = 10000;
// int czas_zliczania = 100000;
float korekta = 0.42 / 85;
float offset = 505.03;
float usrednien = 6;
float pomiarow = 15000;
void setup()
{
Serial.begin(115200); //Start serial communication
//Serial.println("START");
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
}
void loop()
{
int pinPRZEKL = 0;
float pomPRZEKL = mierzPRAD(pinPRZEKL, offset, korekta, usrednien, pomiarow);
Serial.print("A: "); Serial.print(pomPRZEKL); Serial.println();
// delay(1000);
}
float mierzPRAD(int pin, float offset, float korekta, int usrednien, int pomiarow)
{
float prad = 0;
float pobor = 0;
float licznikUSR = 0;
float licznikPOM = 0;
for (float p = 0 ; p < pomiarow ; p ) // seria pomiarów
{
licznikPOM ;
for (float pom = 0 ; pom < usrednien ; pom ) // pomiar do uśrednienia
{
licznikUSR ;
float pomPOJ = analogRead(pin);
prad = pomPOJ - offset; // offset wyniku
}
prad = prad / licznikUSR; // uśrednianie wyników
pobor = sqrt(prad * prad) * korekta;
}
return pobor;
}