Pages: [1] 2 3   Go Down
Author Topic: ACS 712 sketch  (Read 6139 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
Ich hab einen ACS 712 Strommesser (20A) geholt.(s.Bild)
Ich wollt fragen ob den auch jemand hat und mir nen einfachen sketch geben kann damit ich mit ihm Ampere messen kann?

Mfg

strohhirn


* sensor.JPG (3094.14 KB, 3968x2976 - viewed 114 times.)
Logged

Gruß

strohhirn

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf Seite 7 des Datasheets findest Du das Diagramm "Output Voltage versus Sensed Current". Wie Du daraus ersehen kannst, ist der Output 2.5V bei 0A, 0.5V bei -20A und 4.5V bei +20A. Somit

Code:
float a =((float) analogRead(A0) / 512.0 - 1.0) * 2.5 / 2 * 20;

Auf Seite 5 ist auch noch aufgeführt, dass der Wert von 100mV/A im Range von 96mV - 104mV liegt. Somit hast Du in etwa eine Genauigkeit von +/- 4%.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hab hier mal eine seite gefunden dort ist alles gut erklärt:
http://www.lucadentella.it/en/2011/11/29/sensore-di-corrente-con-arduino/

Daher habe ich auch meine jetztige formel:
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
int backLight = 29;
void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
}
 
void loop() {
 
  float average = 0;
  for(int i = 0; i < 1000; i++) {
    average = average + (0.048875855327468 * analogRead(A0) -25) / 1000;
    delay(1);
  }
  float watt;
  for(int i = 0; i < 1000; i++) {
    watt = 220 * average;
    delay(1);
  }
 
  lcd.setCursor ( 0, 0);
  lcd.print(average); 
  lcd.print("A       ");
 
  lcd.setCursor ( 0, 1);
  lcd.print(watt); 
  lcd.print("W       ");
}

Natürlich habe ich die formel meinem 20A sensor angepasst.
Ich habe auch noch eine formel zum umrechnen in Watt aufgestellt.
Eig. klappt es relativ genau. Wenn kein strom fließt wird mir meißt 0.04A angezeigt, doch in Watt sind das 8,8W  und das ist ja doch schon ziehmlich ungenau.
Kann ich denn Sensor noch irgendwie genauer trimmen?

Desweiteren habe ich ein paar tests durchgeführt:
Ich habe eine kleine 6V 0,1A glühlampe angeschloßen und es wure mir 0,12-0,15A angezeigt. Diese lampe wurde mit gleichstrom betrieben.
Denn habe ich eine 220V, 40W glühlampe angeschloßen, d.h. sie müsste ca. 200mA verbrauchen, doch diese werden nicht angezeigt, stattdessen wird als wär nichts 0,04-0,08A gezeigt. Diese lampe wurde mit wechlesstrom betrieben.

Ist der Sensor bei wechselstrom ungenauer ? Oder brauche ich für wechselstrom eine andere formel?
Logged

Gruß

strohhirn

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 251
Posts: 21265
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Du die Meßwerte eine Wechselspannung über eine oder mehrere Periode summierst erhälst Du null (der positive Teil entspricht dem negaiven Teil). Du mußt die Absolutwerte (bzw die Differenz zum Offset) vorzeichenlos summieren.

Bei kleinen Strömen ist der Sensor und die AD-Wandlung ungenau. 1-2 digit fehler ist dabei fisiologisch (das sind Deine 0,04A weil 1 digit 0,0488A entspricht).
Grüß Uwe
« Last Edit: January 20, 2013, 08:16:47 am by uwefed » Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, ich kaper hier einfach mal den Thread. Wie sieht es eigentlich mit der Dauerbelastbarkeit bei diesen ACS712-modulen aus? Ich hab mir überlegt einige direkt im Sicherungskasten an den Phasen einiger Stromkreise unterzubringen, um zu sehen, welcher Stromkreis wieviel Strom verbraucht...
Logged


Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 251
Posts: 21265
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich entkapere mal den tread.
Die Spezifikationen stehen im Datenblatt.
2.1 kVRMS minimum isolation voltage from pins 1-4 to pins 5-8

The internal resistance of this conductive path is 1.2 mΩ typical, providing low power
loss. The thickness of the copper conductor allows survival of the device at up to 5× overcurrent conditions.

Also kann der Sensor dauernd mit 20 A und 230V beaufschlagt werden.

Grüße Uwe
« Last Edit: January 20, 2013, 09:55:03 am by uwefed » Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank fürs entkapern Uwe.  smiley-lol
Das heißt, ich könnte das so umsetzen, ohne alle paar tage den ACS auszutauschen.

Gruß
Marcus
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

Quote
Wenn Du die Meßwerte eine Wechselspannung über eine oder mehrere Periode summierst erhälst Du null (der positive Teil entspricht dem negaiven Teil). Du mußt die Absolutwerte (bzw die Differenz zum Offset) vorzeichenlos summieren.

Ich versteh nicht  richtig wie ich das vorzeichenlos summieren soll. Könntest du mir das näher erläutern?

Mfg

strohhirn
Logged

Gruß

strohhirn

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ich versteh nicht  richtig wie ich das vorzeichenlos summieren soll. Könntest du mir das näher erläutern?

Wenn Du als Werte 2, 8, 3, -1, -5, -9, -6 kriegst, dann musst Du 2 + 8 + 3 + 1 + 5 + 9 + 6 ausrechnen.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahh, ok, jetzt verstehe ich besser.
Aber wie summiere ich vorzeichen los? Gibt es da irgend einen befehl?
Logged

Gruß

strohhirn

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Funktion abs() entfernt ein allenfalls vorhandenes negatives Vorzeichen.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke,
hab das so umgesetzt:
Code:
average = abs(average) + abs((0.048875855327468 * analogRead(A0) -25) / 1000);

Jetzt wird auf jeden fall schon mal annähernd was angezeigt.

Ich habe den ACS an einen spiral Wasserkocher angeschlossen, auf dem steht 1kw. Also ca. 4,5 A.
Bei mir wird angezeigt 3,7A und 800W .

Wieso ist das so ungenau?
Logged

Gruß

strohhirn

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 251
Posts: 21265
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Woher kommt das 25 in
Code:
average = abs(average) + abs((0.048875855327468 * analogRead(A0) -25) / 1000);
?

Kein Strom bedeutet einen Ausgang von 0,5* Versorgungsspannung.

Grüße Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.lucadentella.it/en/2011/11/29/sensore-di-corrente-con-arduino/

2,5 V ist die offset spannung. Da dieses in der Formel durch 0,1 geteilt wird, weil ich ja die 20A version habe mit einer sensivity von 100, ergibt das 25.
Logged

Gruß

strohhirn

Offline Offline
Sr. Member
****
Karma: 8
Posts: 287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hab gerade mit nem Messgerät nachgemessen. Da wurde 4,3A angezeigt, der auf dem Arduino LCD stand 3,3A.
Das sind 1A unterschied, aber ich seh den fehler nicht.
Logged

Gruß

strohhirn

Pages: [1] 2 3   Go Up
Jump to: