🚚 Besplatna dostava za narudžbe veće od 35EUR

KKM: DIGITALNI AMPERMETAR ACS712

KKM: DIGITALNI AMPERMETAR ACS712-Uncategorized

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

U ovom tutorialu upoznat ćemo se sa jednim vrlo jednostavnim, ali korisnim uređajem za mjerenje struje. Modul je lako povezati s mikroupravljačem, npr Dasduinom te pomoću određene formule dobivati točne vrijednosti te ih ispisivati na SerialMonitor ili možda LCD modul.

• Napon: 5V
• Maksimalna struja: 5A, 20A, 30A
• Izlazna karakteristika: 185 mV/A, 100 mV/A, 66 mV/A
• Izlaz: 1.575V – 3.425V, 0.5V – 4.5V, 0.52V – 4.48V
• Mjeri pozitivnu i negativnu struju!

KAKO RADI?

Na sredini modula nalazi se ACS712 čip koji sadrži Hallov senzor smješten u blizini bakrenih vodova. Po Ampereovom zakonu, vodič kojim teče struja stvara oko sebe magnetsko polje, odnosno magnetsko polje nastaje kao posljedica gibanja električnog naboja. Hallov senzor će ga detektirati i pretvoriti taj signal u određeni izlazni napon. Pozitivna stvar kod ovakvog načina mjerenja je ta što je ostatak elektronike izoliran od stezaljki na koje spajamo vodič pa je i rad Dasduina sigurniji.
Modul napajamo s +5V na Vcc i inače kada vodičem ne teče nikakva struja, izlazni napon (Vout) “sjedi” na sredini, odnosno 2.5V. Ovakva karakteristika omogućava nam mjerenje pozitivne i negativne struje, tj. struju je moguće mjeriti u oba smjera.
U datasheetu čipa vidimo osjetljivost pojedine verzije modula:

Uzmimo za primjer modul čija je maksimalna struja 20A. Osjetljivost tog modula iznosi 100 mV/A, što znači da će izlazni napon, ako vodičem teče struja od 1A biti 2.4 V, 2A 2.3V, 3A 2.2V itd. Dakle za svaku promjenu struje od 1A, izlazni napon se promijeni za 0.1 V, odnosno obratno, ako se izlazni napon modula promijenio za 0.1 V znamo da se struja koja teče vodičem promijenila za 1 A. Nakon što saznamo za koliko se volti promijenio izlazni napon, uz poznatu osjetljivost modula lako je doći do prave vrijednosti struje koja teče vodičem, a kako izračunati to pomoću Dasduina vidjet ćemo malo kasnije u dijelu “Arduino kod”.

MJERENJE AC STRUJE
Kao što smo rekli, ovaj senzor može mjeriti i pozitivnu i negativnu struju. Takvu karakteristiku je moguće iskoristiti i za mjerenje izmjenične struje (periodično promjenjive struje sinusnog oblika). Idemo se najprije podsjetiti kakvog je oblika signal izmjenične struje te koje su nam njezine vrijednosti važne kako bismo ju izmjerili.

Ono što bi mi u stvari trebali pronaći je efektivna vrijednost struje, jer nam je ona stvarni pokazatelj što ta struja može „napraviti“ te je ona ekvivalentna DC struji.
Po definiciji, efektivna vrijednost izmjenične struje (vremenski promjenjive) odgovara onoj vrijednosti konstantne istosmjerne struje (vremenski nepromjenjive) koja za isto vrijeme proizvede istu količinu topline na istom otporu kao ta izmjenična struja. Vidimo da ako nađemo maksimalnu vrijednost napona/struje možemo izračunati njezinu efektivnu vrijednost (Vrms = Vpk / sqrt(2)). Na kraju tutoriala je priložen kod koji mjeri ac struju.

KAKO POVEZATI?

Modul se jednostavno povezuje s Dasduinom, GND na GND, Vcc na +5 V te središnji pin OUT na A0 čije ćemo vrijednosti očitavati. Na drugom kraju nalazi se zeleni blok na koji spajamo vodič čiju struju želimo mjeriti.

ARDUINO KOD

Za ovaj modul ne trebaju nam nikakve biblioteke, jer se očitavanje vrijednosti struje u stvari svodi na mjerenje izlaznog napona modula koji pomoću ADC konvertera pretvaramo u digitalne vrijednosti.
Kao što smo rekli, kada vodičem ne teče struja, izlazni napon modula bit će na sredini Vcc-a. Dakle, ako modulu dovedemo 5V output će biti 2.5V (512) i ta razina nam je u kodu označena sa “mid”. Ovaj podatak nam je bitan jer trebamo razliku volti za koju se output odmaknuo od sredine, a ne samo očitanje koliki je napon na outputu modula.
Dasduino sadrži 10-bitne ADC-ove pa maksimalna vrijednost iznosi 1023 što bi odgovaralo naponu od 5V. Sredina toga je 2.5V, tj. 512..međutim to nije uvijek tako jer ni izlaz naponskog regulatora nije uvijek točno 5V, a time ni sredina 2.5V. Kako bismo tu grešku kompenzirali svakako je stoga potrebno najprije provjeriti sredinu, tj. “mid”. Da bismo provjerili koliko je to odkomentirajte u kodu prvi “I=”, a zakomentirajte drugi “I=” uploadajte i otvorite Serial monitor. Nakon korekcije mid-pointa uploadajte ovaj priloženi kod i na Serial monitoru će nam se ispisati iznosi struje koju mjerimo.
U formuli prvo pronađemo odmak u očitanju ADC-a od mid-pointa, zatim dobijemo kolika je ta promjena u voltima tako što ćemo pomnožiti s iznosom volti jednog counta (5/1024) i na kraju podijelimo s osjetljivošću modula (1/0.100). Formulu je možda lakše shvatiti preko mjernih jedinica.
Napomena: U formuli promijeniti osjetljivost ovisno o tome koji modul koristite! Za modul čija je max struja 5A osjetljivost iznosi 0.185 V/A, za max 20A iznosi 0.100 V/A i za max 30A je 0.066 V/A.

MJERENJE DC STRUJE

#define mid 510
float I;
void setup() {
  Serial.begin(9600);
}
void loop() {
  //I = analogRead(A0);
  I = (mid - analogRead(A0)) * 5.0 / 1024.0 / 0.100;
  Serial.println(I);
  delay(1000);
}

MJERENJE AC STRUJE

#define sensorIn A0
#define sensitivity 100    //sensitivity modula koji se koristi [mV/A]
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  Voltage = getVPP();
  VRMS = (Voltage / 2.0) * 0.70710678;
  AmpsRMS = (VRMS * 1000) / sensitivity;
  Serial.print(AmpsRMS);
  Serial.println(" Amps RMS");
}
float getVPP() {
  float result;
  unsigned int readValue;             // vrijednost pročitana sa senzora
  unsigned int maxValue = 0;          // max vrijednost
  unsigned int minValue = 1023;       // min vrijednost
  unsigned long start_time = millis();
  //radi mjerenja jednu sekundu
  while ((millis() - start_time)  maxValue) {
    readValue = analogRead(sensorIn);
    //ako je pročitana vrijednost veća od prijašnje max vrijednosti
    if(readValue > maxValue){
      // postavi tu vrijednost kao maksimalnu
      maxValue = readValue;
    }
    // ako je pročitana vrijednost manja od prijašnje min vrijednosti
    if (readValue < minValue) {
      // postavi tu vrijednost kao minimalnu
      minValue = readValue;
    }
  }
  // pronađi Vpp
  result = ((maxValue - minValue) * 5.0) / 1024.0;
  return result;
}