INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wattmeter - Schwierigkeiten mit Stromsensor
19.01.2014, 23:04
Beitrag #1
Wattmeter - Schwierigkeiten mit Stromsensor
Liebe Arduino Community,

ich habe ein Problemchen mit meinem Arduino Wattmeter. Ich habe das Wattmeter nach nach dieser Anleitung aufgebaut. Allerdings habe ich als Stromsensor keinen acs715 sondern einen acs712 genommen (weil günstiger und auch negative Ströme gemessen werden können) und den Code entsprechend angepasst. Ich habe auch ansonsten einige Veränderungen am Code vorgenommen (z.B. Ausgabe über Seriellen Port LogView kompatibel, Anschluss für DC-DC-SSR um einen Shunt-Regler zu realisieren). Allerdings bin ich Anfänger und weiß manchmal nicht so recht was ich da mache ;-). Mein aktuelles Ziel ist, dass Strom und Spannung den Wert Null anzeigen wenn keine Spannung anliegt und kein Strom fließt. Bei der Spannung funktioniert das inzwischen einwandfrei. Anders beim Strom. Der Wert springt zwischen -2A und +2A hin und her ohne, dass ich dafür einen konkreten Grund erkennen könnte. Ich habe inzwischen den 3. Stromsensor im Einsatz. Am Sensor liegts also nicht.
Vielelicht hat jemand Zeit sich meinen Code mal anzuschauen. Ich bin gerade mit meinem Latein am Ende...

Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

/*Voltage Divider
11.93 from + to A4
909 from A4 to Gnd
Ratio 13.124312431243124312431243124312
*/

int batMonPin = A4;    // input pin for the voltage divider
int batVal = 0;       // variable for the A/D value
float pinVoltage = 0; // variable to hold the calculated voltage
float batteryVoltage = 0;
int analogInPin = A0;  // Analog input pin that the carrier board OUT is connected to
int sensorValue = 0;        // value read from the carrier board
int outputValue = 0;        // output in milliamps
unsigned long msec = 0;
float time = 0.0;
int sample = 0;
float totalCharge = 0.0;
float averageAmps = 0.0;
float ampSeconds = 0.0;
float ampHours = 0.0;
float wattHours = 0.0;
float amps = 0.0;

int R1 = 11930; // Resistance of R1 in ohms
int R2 = 909; // Resistance of R2 in ohms

float ratio = 13.124312431243124312431243124312;  // Calculated from R1 / R2

// Steuerung DCDC-SSR Shunt Controller
boolean Mindestspannung;
int ledpin = 3;

void setup() {
  
  // initialize serial communications at 57600 bps:
  Serial.begin(57600);

  lcd.begin(20, 4);

  analogReference(EXTERNAL);

  // Steuerung DCDC-SSR Shunt Controller
  pinMode(ledpin, OUTPUT);

}


void loop() {
  
int sampleBVal = 0;
int avgBVal = 0;  
int sampleAmpVal = 0;
int avgSAV = 0;
  
for (int x = 0; x < 10; x++){ // run through loop 10x

  // read the analog in value:
  sensorValue = analogRead(analogInPin);  
  sampleAmpVal = sampleAmpVal + sensorValue; // add samples together

  batVal = analogRead(batMonPin);    // read the voltage on the divider
  sampleBVal = sampleBVal + batVal; // add samples together
  
  delay (1); // let ADC settle before next sample

}

  avgSAV = sampleAmpVal / 10;

  // convert to milli amps
  
//Originalcode mit ACS715 Stromsensor
//outputValue = (((long)avgSAV * 5000 / 1024) - 500 ) * 1000 / 133;
/* sensor outputs about 100 at rest.
Analog read produces a value of 0-1023, equating to 0v to 5v.
"((long)sensorValue * 5000 / 1024)" is the voltage on the sensor's output in millivolts.
There's a 500mv offset to subtract.
The unit produces 133mv per amp of current, so
divide by 0.133 to convert mv to ma
*/

//Neuer Code mit ACS712-30 Stromsensor (2,5V entspricht 0A, 66mV pro A)
outputValue = (((long)avgSAV * 5000 / 1024) - 2500) * 1000 / 66;
  
avgBVal = sampleBVal / 10; //divide by 10 (number of samples) to get a steady reading

  pinVoltage = avgBVal * 0.0048  ;       //  Calculate the voltage on the A/D pin
                                /*  A reading of 1 for the A/D = 0.0048mV
                                    if we multiply the A/D reading by 0.00488 then
                                    we get the voltage on the pin.  
                                  
                                    NOTE! .00488 is ideal. I had to adjust
                                    to .00610 to match fluke meter.
                                    
                                    Also, depending on wiring and
                                    where voltage is being read, under
                                    heavy loads voltage displayed can be
                                    well under voltage at supply. monitor
                                    at load or supply and decide.
*/

  ratio = (float)R1 / (float)R2;
  batteryVoltage = pinVoltage * ratio;    //  Use the ratio calculated for the voltage divider
                                          //  to calculate the battery voltage
                                          
                                            
  amps = (float) outputValue / 1000;
  float watts = amps * batteryVoltage;
    
/*
Originalcode
Serial.print("Spannung U (V) = " );                      
Serial.print(batteryVoltage);      
Serial.print("\t Strom I (A) = ");      
Serial.print(amps);  
Serial.print("\t Leistung P (W) = ");  
Serial.print(watts);*/


//Neuer Code - Datenausgabe LogView kompatibel
Serial.print("$1;1;0;");
Serial.print(batteryVoltage);
Serial.print(";");
Serial.print(amps);
Serial.print(";");
Serial.print(watts);
Serial.print(";0");
Serial.println(13,DEC);  
    
sample = sample + 1;
  
msec = millis();
  
  
  
time = (float) msec / 1000.0;
  
totalCharge = totalCharge + amps;
  
averageAmps = totalCharge / sample;
  
ampSeconds = averageAmps*time;

ampHours = ampSeconds/3600;
  
wattHours = batteryVoltage * ampHours;
  




/*Originalcode
Serial.print("\t Zeit (Minuten) = ");
Serial.print(time/60);
Serial.print("\t Ladung C (Ah) = ");
Serial.print(ampHours);
Serial.print("\t Arbeit w (Wh) = ");
Serial.println(wattHours);
  

lcd.setCursor(0,0);
lcd.print(batteryVoltage);
lcd.print(" V ");
lcd.setCursor(10,0);
lcd.print(amps);
lcd.print(" A ");
lcd.setCursor(0,1);
lcd.print(watts);
lcd.print(" W ");
lcd.setCursor(10,1);
lcd.print(wattHours);
lcd.print(" Wh ");  
lcd.setCursor(0,2);
lcd.print(ampHours);
lcd.print(" Ah ");
lcd.setCursor(10,2);
lcd.print(time/3600);
lcd.print(" H ");
*/  
  
// wait 100 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
  
// Steuerung DCDC-SSR Shunt Controller
if (batteryVoltage>33)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (100);
}

if (batteryVoltage>34)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (10);
}

if (batteryVoltage>35)
delay (0.1);
{
digitalWrite(ledpin,HIGH);
}
//delay(1);                    
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.01.2014, 00:44
Beitrag #2
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Hallo D.T.,

mir fiel auf:
Code:
delay (0.1);
Geht nicht. Delay verlangt als Parameter unsigned long. Du benutzt float. Besser ist
Code:
delayMicroseconds(100);
Dann habe ich mal die Berechnungen für amps rausgezogen und daraus einen Sketch gemacht. Du solltest die Rechenoperationen noch weiter auseinander nehmen und mit Serial.print die Zwischenergebnisse im Monitor prüfen:
Code:
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
int avgSAV = 0; // Okay
int sampleAmpVal = 100; // Okay
avgSAV = sampleAmpVal / 10;
Serial.print("avgSAV: ");
Serial.println(avgSAV);
int outputValue = (((long)avgSAV * 5000 / 1024) - 2500) * 1000 / 66;
Serial.print("outputVal: ");
Serial.println(outputValue);
float amps = (float) outputValue / 1000;
Serial.print("amps: ");
Serial.println(amps);
}
void loop()
{}

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2014, 21:16
Beitrag #3
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Hallo Ricardo,

vielen Dank für die Hilfe. ich habe mal versucht das umzusetzen. Die Delay Sache habe ich einfach mal wieder dem Originalcode angeglichen. Das müsste wohl stimmen. Ich hatte das etwas unkoodiniert geändert weil mit die Frequenz in der gemessen bzw. angezeigt wird zu lang war - insbesondere in Hinblick auf den Shunt Controller. Letzteren habe nun doch erst nochmal deaktiviert um nicht durcheinander zu kommen.

Dann habe ich Deinen Code in den vorhanden eingefügt (war das so gedacht?). Leider ist mein Arduino im Keller und ich kann ihn jetzt nich holen wegen den Kindern... Ich berichte dann in den nächsten Tagen ob ich weiter gekommen bin.

Vielleicht mache ich parallel dazu noch ein paar Versuche mit einem anderen Stromsensor oder einem Messwiderstand. Ich bin mir nämlich nach wie vor unsicher ob's nicht doch am Stromsensor liegt...

Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

/*Voltage Divider
11.93 from + to A4
909 from A4 to Gnd
Ratio 13.124312431243124312431243124312
*/

int batMonPin = A4;    // input pin for the voltage divider
int batVal = 0;       // variable for the A/D value
float pinVoltage = 0; // variable to hold the calculated voltage
float batteryVoltage = 0;
int analogInPin = A0;  // Analog input pin that the carrier board OUT is connected to
int sensorValue = 0;        // value read from the carrier board
int outputValue = 0;        // output in milliamps
unsigned long msec = 0;
float time = 0.0;
int sample = 0;
float totalCharge = 0.0;
float averageAmps = 0.0;
float ampSeconds = 0.0;
float ampHours = 0.0;
float wattHours = 0.0;
float amps = 0.0;

int R1 = 11930; // Resistance of R1 in ohms
int R2 = 909; // Resistance of R2 in ohms

float ratio = 13.124312431243124312431243124312;  // Calculated from R1 / R2

// Steuerung DCDC-SSR Shunt Controller
/*boolean Mindestspannung;
int ledpin = 3;*/

void setup() {
  
  
  
  
  
Serial.begin(9600);
int avgSAV = 0; // Okay
int sampleAmpVal = 100; // Okay
avgSAV = sampleAmpVal / 10;
Serial.print("avgSAV: ");
Serial.println(avgSAV);
int outputValue = (((long)avgSAV * 5000 / 1024) - 2500) * 1000 / 66;
Serial.print("outputVal: ");
Serial.println(outputValue);
float amps = (float) outputValue / 1000;
Serial.print("amps: ");
Serial.println(amps);







  
  // initialize serial communications at 57600 bps:
  Serial.begin(57600);

  lcd.begin(20, 4);

  analogReference(EXTERNAL);

  // Steuerung DCDC-SSR Shunt Controller
  /*pinMode(ledpin, OUTPUT);*/

}


void loop() {
  
int sampleBVal = 0;
int avgBVal = 0;  
int sampleAmpVal = 0;
int avgSAV = 0;
  
for (int x = 0; x < 10; x++){ // run through loop 10x

  // read the analog in value:
  sensorValue = analogRead(analogInPin);  
  sampleAmpVal = sampleAmpVal + sensorValue; // add samples together

  batVal = analogRead(batMonPin);    // read the voltage on the divider
  sampleBVal = sampleBVal + batVal; // add samples together
  
  delay (10); // let ADC settle before next sample

}

  avgSAV = sampleAmpVal / 10;

  // convert to milli amps
  
//Originalcode mit ACS715 Stromsensor
//outputValue = (((long)avgSAV * 5000 / 1024) - 500 ) * 1000 / 133;
/* sensor outputs about 100 at rest.
Analog read produces a value of 0-1023, equating to 0v to 5v.
"((long)sensorValue * 5000 / 1024)" is the voltage on the sensor's output in millivolts.
There's a 500mv offset to subtract.
The unit produces 133mv per amp of current, so
divide by 0.133 to convert mv to ma
*/

//Neuer Code mit ACS712-30 Stromsensor (2,5V entspricht 0A, 66mV pro A)
outputValue = (((long)avgSAV * 5000 / 1024) - 2500) * 1000 / 66;
  
avgBVal = sampleBVal / 10; //divide by 10 (number of samples) to get a steady reading

  pinVoltage = avgBVal * 0.0048  ;       //  Calculate the voltage on the A/D pin
                                /*  A reading of 1 for the A/D = 0.0048mV
                                    if we multiply the A/D reading by 0.00488 then
                                    we get the voltage on the pin.  
                                  
                                    NOTE! .00488 is ideal. I had to adjust
                                    to .00610 to match fluke meter.
                                    
                                    Also, depending on wiring and
                                    where voltage is being read, under
                                    heavy loads voltage displayed can be
                                    well under voltage at supply. monitor
                                    at load or supply and decide.
*/

  ratio = (float)R1 / (float)R2;
  batteryVoltage = pinVoltage * ratio;    //  Use the ratio calculated for the voltage divider
                                          //  to calculate the battery voltage
                                          
                                            
  amps = (float) outputValue / 1000;
  float watts = amps * batteryVoltage;
    
/*
Originalcode
Serial.print("Spannung U (V) = " );                      
Serial.print(batteryVoltage);      
Serial.print("\t Strom I (A) = ");      
Serial.print(amps);  
Serial.print("\t Leistung P (W) = ");  
Serial.print(watts);*/


//Neuer Code - Datenausgabe LogView kompatibel
Serial.print("$1;1;0;");
Serial.print(batteryVoltage);
Serial.print(";");
Serial.print(amps);
Serial.print(";");
Serial.print(watts);
Serial.print(";0");
Serial.println(13,DEC);  
    
sample = sample + 1;
  
msec = millis();
  
  
  
time = (float) msec / 1000.0;
  
totalCharge = totalCharge + amps;
  
averageAmps = totalCharge / sample;
  
ampSeconds = averageAmps*time;

ampHours = ampSeconds/3600;
  
wattHours = batteryVoltage * ampHours;
  




/*Originalcode
Serial.print("\t Zeit (Minuten) = ");
Serial.print(time/60);
Serial.print("\t Ladung C (Ah) = ");
Serial.print(ampHours);
Serial.print("\t Arbeit w (Wh) = ");
Serial.println(wattHours);
  

lcd.setCursor(0,0);
lcd.print(batteryVoltage);
lcd.print(" V ");
lcd.setCursor(10,0);
lcd.print(amps);
lcd.print(" A ");
lcd.setCursor(0,1);
lcd.print(watts);
lcd.print(" W ");
lcd.setCursor(10,1);
lcd.print(wattHours);
lcd.print(" Wh ");  
lcd.setCursor(0,2);
lcd.print(ampHours);
lcd.print(" Ah ");
lcd.setCursor(10,2);
lcd.print(time/3600);
lcd.print(" H ");
*/  
  
// wait 100 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
  
// Steuerung DCDC-SSR Shunt Controller
/*if (batteryVoltage>33)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (10);
}

if (batteryVoltage>34)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (10);
}

if (batteryVoltage>35)
delay (0.1);
{
digitalWrite(ledpin,HIGH);
}*/
delay(10);                    
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.01.2014, 21:44
Beitrag #4
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Moin,

Zitat:dann habe ich Deinen Code in den vorhanden eingefügt (war das so gedacht?)
Nein, eigentlich nicht. Was ich nur meinte war, dass die Rechnerei ziemlich "heftig" aussah. Ich dachte, man sollte vielleicht den Code zur Ermittlung der Amps mal in kleine Stücke "hacken" und sich die Zwischenergebnisse angucken.
Ist das Problem immer noch das gleiche, dass die ausgegebenen Amp ständig wechseln?
Da es heute schon ziemlich spät ist gucke ich mir morgen den jetzigen Code nochmal an.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2014, 23:10
Beitrag #5
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Es tut mir sehr leid. Nun habe ich diesen Thread angefangen und finde gerade einfach keine Zeit mich weiter mit dem Thema zu befassen. Ich mache sicher in den nächsten Wochen nocheinmal weiter und melde mich dann wieder hier. Vielen Dank schon mal für die Unterstützung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.02.2014, 14:19
Beitrag #6
RE: Wattmeter - Schwierigkeiten mit Stromsensor
So, heute hatte ich endlich mal Zeit den Arduino-Kampf wieder aufzunehmen. Ich habe den Tipp bekommen den Stromsensor mit einem großen Filterkondensator zu entstören. Nun habe ich wesentlich weniger Schwankungen.
Allerdings liefert der Stromsensor nicht exakt 2,5V bei Nulldurchgang (nein, das liegt nicht an der fehlenden Referenzspannung. Die Referenzspannung stimmt 100-prozentig) sondern ein klein wenig mehr. Ich kann also den Wert im Code anpassen. Das ist aber wenig praktikabel. Ich bräuchte so eine Art Kalibrierungsbutton, der die Variable für den Strom bei Knopfdruck auf Null setzt. Hat jemand eine Idee wie das funktionieren könnte?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2014, 18:12
Beitrag #7
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Hallo D.T.,
Zitat:Ich bräuchte so eine Art Kalibrierungsbutton, der die Variable für den Strom bei Knopfdruck auf Null setzt. Hat jemand eine Idee wie das funktionieren könnte?
Naja, du hast im Prinzip die halbe Antwort schon selbst gegeben.
Du brauchst erstmal eine Anzeige, ich denke da reicht ein LCD mit nur einer Zeile (gibts sowas überhaupt?) und ein paar Buttons um hoch/runter kalibrieren zu können und den neuen Wert zu setzen.
Das LCD sollte möglichst I2C benutzen um das Kabelgewirr kelin zu halten.
Naja und die Codierung sollte nicht so wild sein:
- LCD -> aktuellen Variablenwert anzeigen
- Button 1 -> Beginn Kalibrierung
- Button 2/ 3 -> pro Push eine Einheit hoch/runter
- Button 4 -> Ende Kalibrierung und übernahme des Wertes in die Variable.
Eigentlich nur die Frage welche Anzeige/Button - Kombi man nimmt.

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2014, 22:13
Beitrag #8
RE: Wattmeter - Schwierigkeiten mit Stromsensor
Ich habe mir gestern ein 4x20 DIsplay mit seriellem Anschluss bestellt. Da ich später Displays in verschienen Größen anschließen möchte erschien mir das am sinnvollsten zumal ich da in etwa weiß wie man die Ausgabe programmiert. I2C sagt mir jetzt gar nix (google...google)...okay scheint auch so eine Art serieller bus zu sein. Das Display unterstützt das auch.
Den Kalibrierungsbutton hatte ich mir eher in der Art vorgestellt, dass man den Messwert einfach per Knopfdruck auf Null stellen kann wenn gerade kein Strom fließt. Die Frage ist eher wie ich das in den Sketch einbaue. Ich scheitere da leider immer wieder an meinen Programmierkenntnissen. Ich würde es vielleicht gerade noch hinbekommen den Arduino dazu zu bewegen festzustellen ob z.B. an Pin ein ein Spannung (Button) anliegt. Wie ich dann aber den Wert auf 0 setze ...keine Ahnung. [/code]Ich verstehe auch nur einen Bruchteil von dem Sketch. Hier nochmal mein aktuellster Code. Ich bin für jeden Hinweis dankbar.

[code]#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

/*Voltage Divider
11.93 from + to A4
909 from A4 to Gnd
Ratio 13.124312431243124312431243124312
*/

int batMonPin = A4; // input pin for the voltage divider
int batVal = 0; // variable for the A/D value
float pinVoltage = 0; // variable to hold the calculated voltage
float batteryVoltage = 0;
int analogInPin = A0; // Analog input pin that the carrier board OUT is connected to
int sensorValue = 0; // value read from the carrier board
int outputValue = 0; // output in milliamps
unsigned long msec = 0;
float time = 0.0;
int sample = 0;
float totalCharge = 0.0;
float averageAmps = 0.0;
float ampSeconds = 0.0;
float ampHours = 0.0;
float wattHours = 0.0;
float amps = 0.0;

int R1 = 12000; // Resistance of R1 in ohms
int R2 = 910; // Resistance of R2 in ohms

float ratio = 13.186813186813186813186813186813; // Calculated from R1 / R2

// Steuerung DCDC-SSR Shunt Controller
/*boolean Mindestspannung;
int ledpin = 3;*/

void setup() {





Serial.begin(9600);
int avgSAV = 0; // Okay
int sampleAmpVal = 100; // Okay
avgSAV = sampleAmpVal / 10;
Serial.print("avgSAV: ");
Serial.println(avgSAV);
int outputValue = (((long)avgSAV * 5000 / 1024) - 2400) * 1000 / 66;
Serial.print("outputVal: ");
Serial.println(outputValue);
float amps = (float) outputValue / 1000;
Serial.print("amps: ");
Serial.println(amps);








// initialize serial communications at 57600 bps:
Serial.begin(57600);

lcd.begin(20, 4);

analogReference(EXTERNAL);

// Steuerung DCDC-SSR Shunt Controller
/*pinMode(ledpin, OUTPUT);*/

}


void loop() {

int sampleBVal = 0;
int avgBVal = 0;
int sampleAmpVal = 0;
int avgSAV = 0;

for (int x = 0; x < 10; x++){ // run through loop 10x

// read the analog in value:
sensorValue = analogRead(analogInPin);
sampleAmpVal = sampleAmpVal + sensorValue; // add samples together

batVal = analogRead(batMonPin); // read the voltage on the divider
sampleBVal = sampleBVal + batVal; // add samples together

delay (10); // let ADC settle before next sample

}

avgSAV = sampleAmpVal / 10;

// convert to milli amps

//Originalcode mit ACS715 Stromsensor
//outputValue = (((long)avgSAV * 5000 / 1024) - 500 ) * 1000 / 133;
/* sensor outputs about 100 at rest.
Analog read produces a value of 0-1023, equating to 0v to 5v.
"((long)sensorValue * 5000 / 1024)" is the voltage on the sensor's output in millivolts.
There's a 500mv offset to subtract.
The unit produces 133mv per amp of current, so
divide by 0.133 to convert mv to ma
*/

//Neuer Code mit ACS712-30 Stromsensor (2,5V entspricht 0A, 66mV pro A)
outputValue = (((long)avgSAV * 5000 / 1024) - 2514) * 1000 / 66;

avgBVal = sampleBVal / 10; //divide by 10 (number of samples) to get a steady reading

pinVoltage = avgBVal * 0.0048 ; // Calculate the voltage on the A/D pin
/* A reading of 1 for the A/D = 0.0048mV
if we multiply the A/D reading by 0.00488 then
we get the voltage on the pin.

NOTE! .00488 is ideal. I had to adjust
to .00610 to match fluke meter.

Also, depending on wiring and
where voltage is being read, under
heavy loads voltage displayed can be
well under voltage at supply. monitor
at load or supply and decide.
*/

ratio = (float)R1 / (float)R2;
batteryVoltage = pinVoltage * ratio; // Use the ratio calculated for the voltage divider
// to calculate the battery voltage


amps = (float) outputValue / 1000;
float watts = amps * batteryVoltage;

/*
Originalcode
Serial.print("Spannung U (V) = " );
Serial.print(batteryVoltage);
Serial.print("\t Strom I (A) = ");
Serial.print(amps);
Serial.print("\t Leistung P (W) = ");
Serial.print(watts);*/


//Neuer Code - Datenausgabe LogView kompatibel
Serial.print("$1;1;0;");
Serial.print(batteryVoltage);
Serial.print(";");
Serial.print(amps);
Serial.print(";");
Serial.print(watts);
Serial.print(";0");
Serial.println(13,DEC);

sample = sample + 1;

msec = millis();



time = (float) msec / 1000.0;

totalCharge = totalCharge + amps;

averageAmps = totalCharge / sample;

ampSeconds = averageAmps*time;

ampHours = ampSeconds/3600;

wattHours = batteryVoltage * ampHours;





/*Originalcode
Serial.print("\t Zeit (Minuten) = ");
Serial.print(time/60);
Serial.print("\t Ladung C (Ah) = ");
Serial.print(ampHours);
Serial.print("\t Arbeit w (Wh) = ");
Serial.println(wattHours);


lcd.setCursor(0,0);
lcd.print(batteryVoltage);
lcd.print(" V ");
lcd.setCursor(10,0);
lcd.print(amps);
lcd.print(" A ");
lcd.setCursor(0,1);
lcd.print(watts);
lcd.print(" W ");
lcd.setCursor(10,1);
lcd.print(wattHours);
lcd.print(" Wh ");
lcd.setCursor(0,2);
lcd.print(ampHours);
lcd.print(" Ah ");
lcd.setCursor(10,2);
lcd.print(time/3600);
lcd.print(" H ");
*/

// wait 100 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:

// Steuerung DCDC-SSR Shunt Controller
/*if (batteryVoltage>33)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (10);
}

if (batteryVoltage>34)
{
digitalWrite(ledpin,HIGH);
delay (10);
digitalWrite(ledpin,LOW);
delay (10);
}

if (batteryVoltage>35)
delay (0.1);
{
digitalWrite(ledpin,HIGH);
}*/
delay(10);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino programmieren Schwierigkeiten Krezimanuel 2 566 08.01.2016 16:10
Letzter Beitrag: Binatone
Question Stromsensor ACS758 - AC messen bis 32A fobi 1 1.238 22.08.2014 20:24
Letzter Beitrag: ardu_arne
  Schwierigkeiten bei If abfragen malerlein 5 1.789 02.07.2013 22:41
Letzter Beitrag: malerlein

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste