• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomiar prądu zmiennego z gniazdka (230v) czujnikiem acs712 na Arduino Leonardo
#1
Mam prośbę o pomoc w zrozumieniu prowadzonych obliczeń zużycia energii w kodzie poniżej. Zrobiłem testy pomiarów zużycia energii przy wykorzystaniu czujnika acs712 wersja 20A podłączonego do Arduino Leonardo.

Niestety nie do końca rozumiem metodę obliczeń, którą częściowo znalazłem w sieci i to co finalnie poskładałem. Proszę o wyjaśnienie przebiegu kodu z perspektywy wykonywanych działań pomiarowych. 

Zakładam, że w pętli for prowadzony jest pomiar odczytów z wejścia analogowego. Pomiar jest prowadzony w dłuższej perspektywie czasowej, dane są odczytywane z częstotliwością 1 ms, a następnie są przypisywane są do zmiennej AggregateReadingInTime.
 
Proszę o potwierdzenie  czy działanie to robione jest że względu na, potrzebę wyeliminowania znacznych odchyleń dla wartości prowadzonych odczytów? Rozumiem, że bez zebrania  w czasie 1000 ms kilkuset odczytów i późniejszego „uśrednienia” wyniku zebrane dane będą mocno rozstrzelone?
 
Zastanawiałem się też nad potrzebą podnoszenia odczytywanych wartości do potęgi. Czy tu chodzi o to, że ze względu na amplitudę prądu wartości są raz dodatnie, a raz ujemne?  Rozumiem, że dzięki podniesieniu do potęgi eliminujemy znoszenie się przebiegu funkcji na osi ujemnej i dodatniej? Potem za pętlą przeprowadzane jest działanie odwrotne – wyciągamy pierwiastek, dzięki czemu sprowadzamy liczbę do pierwotnej postaci. Proszę o potwierdzenie  lub wytłumaczenie jeśli coś mylę. 
 
W całym tym programie są dwie rzeczy, które są dla mnie zupełnie niejasne.
 
Dlaczego przy każdym odczycie wejścia analogowego odejmujemy wartość  -510? Z czego wynika ta liczba?
 
Nie rozumiem co w całej układance wyraża mi wartość zmiennej relation?  Skąd jest ta relacja 5%1023?


Kod:
int PinId =A0;

int SensorAnalogValue = 0;
float AggregateReadingInTime = 0;
float CurrentValue = 0;
float relation = 0.004887586;// 5 dzielone przez 1023
// Czujnik ACS712 5 Amper use 0.185
// Czujnik ACS712 10 Amper use 0.100
//  Czujnik ACS712 30 Amper use 0.066
float resolution = 0.100; // rozdzielczość czujnika ACS712


int voltage = 233; // napięcie w gniazdku w Polsce jest ~233v w USA ~120V




void setup() {

 Serial.begin(9600);
 pinMode(PinId, INPUT);

}

void loop() {

 AggregateReadingInTime =0;

 for(int i=1;  i<=1000; i++){
 
   SensorAnalogValue = (analogRead(PinId) -510);

    // funckja pow podniesienie do potęgi drugiej
   AggregateReadingInTime += pow(SensorAnalogValue,2);
   delay(1);
 }

//funkcja sqrt pierwiastek drugiego stopnia

 AggregateReadingInTime = (sqrt(AggregateReadingInTime/1000)) * relation;

 CurrentValue = (AggregateReadingInTime/resolution);

 
 if(CurrentValue <= 0.095){
   CurrentValue = 0;
 }




 
 Serial.print("Current : ");

 Serial.print(CurrentValue);
 Serial.print(" A ");



 Serial.print("Energy:");
 Serial.print(CurrentValue * voltage);
 Serial.println(" Watt ");



 delay(100);

}
 
Odpowiedź
  


Wiadomości w tym wątku
Pomiar prądu zmiennego z gniazdka (230v) czujnikiem acs712 na Arduino Leonardo - przez kamil2234 - 21-01-2016, 13:32

Skocz do:


Przeglądający: 1 gości