Dringende Hilfe! Strommessung mit Arduino

Hallo zusammen,
Ich benötige dringende Hilfe bei einem Schulprojekt, was ich nächste Woche abgeben muss.
Ich bin leider nicht so erfahren in Arduino.
Ich muss von einem Motor die Spannung und den Strom messen.
Spannung geht bis 30V und Strom bis 3A, jedoch soll auch der negativ Strom gemessen und angezeigt werden

Die Spannung messe ich mit einem Spannungsteiler und einem Code den ich aus dem Internet habe.
Für den Strom wollte ich eigentlich diesen Strom Sensor benutzen: "ACS712 5A"
Leider ist anscheinend nun etwas defekt da er mir 18 A ausgibt im seriellen Monitor.

Nun brauche ich dringend eine Lösung um den Strom zu messen.
Mein Gedanke war, dass ich einfach den Strom ausrechne, anhand des Widerstandes vom Spannungsteiler und der ausgerechneten Eingangsspannung. Leider das nicht so einfach zu funktionieren.

Hat mir jemand vielleicht einen Tipp?
Anbei mal den Code den ich jetzt für den Stromsensor benutzt habe und nicht funktioniert, vielleicht findet ja jemand auch da den Fehler...

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Strommesser
const int analogIn = A1;
int mVperAmp = 185; 
int RawValue= 0;
int ACSoffset = 2500; 
double Voltage = 0;
int Amps = 0;
int mAmps= 0;
//Display
LiquidCrystal_I2C lcd(0x27,16,2);

//Spannungsteiler
int analogInput = A0;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // Widerstandswert R1 (100K) - siehe Schaltskizze!
float R2 = 10000.0; // Widerstandswert R2 (10K) - siehe Schaltskizze!
int values = 0;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
 lcd.init();
  Serial.begin(9600); //Seriellen Monitor einbinden
 pinMode(analogInput, INPUT);
 lcd.init();
 lcd.backlight();
 lcd.setCursor(2, 0);
}

void loop() {
 //Strom ausrechnen
RawValue = analogRead(analogIn);
Voltage = (RawValue / 1024.0) * 5000; // Gets you mV
//Amps = ((Voltage - ACSoffset) / mVperAmp);
Amps = ((Voltage - ACSoffset) / mVperAmp);
Serial.print("Raw Value = " ); // shows pre-scaled value 
Serial.print(RawValue); 
Serial.print("\t mV = "); // shows the voltage measured 
Serial.print(Voltage,3); // the '3' after voltage allows you to 
//display 3 digits after decimal point
Serial.print("\t Amps = "); // shows the voltage measured 
Serial.println(Amps,3); // the '3' after voltage allows you to display 
//3 digits after decimal point

//Strom anzeigen in mA
mAmps= (Amps*1000);

 lcd.setCursor(0, 1);
 lcd.print("Strom: ");
 lcd.print(mAmps);
 lcd.print("mA");

//if (mAmps < 0.1) {
// mAmps = 0; // Unterdrücken unerwünschter Anzeigen
 //}
 delay(100);

 //Spannung ausrechnen
 values = analogRead(analogInput); //Messwerte am analogen Pin als "values" definieren
 vout = (values * 5.0) / 1024.0; // Messwerte in Volt umrechnen = Spannung am Ausgang des
// Spannungsteilers mit Zuleitung zu Pin A0 
 vin = vout / (R2 / (R1 + R2)); // Berechnen, welche Spannung am Eingang des Spannungsteilers
// anliegt. Das entspricht der Spannung der zu untersuchenden Batterie 
 if (vin < 0.09) {
 vin = 0.0; // Unterdrücken unerwünschter Anzeigen
 }
 
 //Spannung anzeigen mit 1 Nachkommastelle
 
 lcd.setCursor(0, 0);
 lcd.print("Spannung: ");
 lcd.print(vin,1);
 lcd.print("V");

 delay(100);

 Serial.print("V= ");
 Serial.println(values); // Messwerte am anologen Pin im seriellen Monitor anzeigen
}

Danke im Voraus!

So kriegst du den Stom der durch den Spannungsteiler fließt.

Schon richtig, wenn du es richtig machst.

Die klassische Methode: Da man mit dem Arduino nur Spannungen messen kann, brauchst du einen (kleinen aber belastbaren) Widerstand, durch den der Strom des Motors fließt. Nennt man "Shunt".An dem fällt dann eine kleine Spannung ab, die dem Motor zwar fehlt, aber die du messen kannst.

"jedoch soll auch der negativ Strom gemessen und angezeigt werden"
?

Läuft der Motor mit Wechselstom?

zum lesen:

Drehrichtungsänderung durch Umpolung.

Heißt das der Motor wird manchmal zum Generator?

kommt darauf an. Je mehr Details in Form von:

  • Schaltplan wie du alles angeschlossen hast
  • Datenblättern zum Motor, zum Sensor
  • genaue Bezeichnung des Microcontrollers
  • das Programm (den vollständigen Sketch)

du zur Verfügung stellst desto schneller kann geholfen werden.

Schnelle Hilfe funktioniert jedenfalls nicht wenn man nur weiß "Motor" und "Strom messen"

Es soll ja der Strom der durch den Motor fließt gemessen werden.

Jetzt stelle dir folgendes vor
Du willst von einer kleinen Wasserturbine wissen wie viel Liter Wasser da pro Minute durchfließen.

Die Messung funktioniert nur dann wenn du jedes Wassermolekül das durch die Turbine fließt auch durch den Wasserzähler fließt.

Deshalb funktioniert es nicht irgendwo den Wasserdruck zu messen.
Man muss für den Wasserstrom die Anzahl der Wassermoleküle messen.
Natürlich nicht jedes einzelne Molekül aber eben doch die gesamte Wassermenge.
Und das geht entweder über so einen Stromsensor oder über einen shunt-widerstand der
in Reihe mit dem Motor geschaltet wird

Dein Aufbau bisher
+30 V---------Stromsensor---------Motor-----------Minuspol

Mit Messwiderstand
+30 V---------Messwiderstand---------Motor-----------Minuspol

Mit Strom am Spannungsteiler geht da gar nichts weil dort ja nicht der ganze Strom durchfließt sondern nur ein minimaler Messstrom

Also wenn das diese Woche noch etwas werden soll
sofort zwei neue Stromsensoren (vielleicht geht dir noch einer kaputt) per Expresslieferung bestellen damit der morgen da ist

Und parallel sofort alle Details wie oben posten.

vgs

Hallo annika_b

Herzlich Willkomen im besten Arduinoforum der Welt.

Und hier kommt was zum Schlaulesen:

Falscher Sensor :wink: - Den richtigen hat Wolle auch -> #3

1 Like

Wennschon dann den Shund zwischen Motor und Masse schalten. So kann man den Spannungsabfall gegen Masse messen und muß nicht 2 Spannungen mit 2 Spannungsteiler messen und die Differenz bilden.
Also :
+30 V---------Motor-----------Messwiderstand---------Minuspol

Andererseits wenn der Motor in beiden Richtungen dreht dann muß eine H Brücke verwendet werden. Die Strommessung mittels Shund an Masse wird dadurch etwas komplizierter.

@annika_b

Die 18A wenden angezeigt wenn der Motor sich dreht oder wenn er still steht?
Wenn Du die Stromanschlüsse des ACS712 umtauscht (umpolst) was mißt Du dann?
Wenn Du die Drehrichtung des Motors umdrehst was mißt Du dann?

Grüße Uwe

Der ist wahrscheinlich nicht defekt, nur falsch beschriftet / angeboten, solche habe ich auch rumliegen...
Wie andere schon geschrieben haben, wichtig wäre zu wissen wie viel Strom tatsächlich geflossen ist als die 18A angezeigt wurden. Was hattest Du da angeschlossen?
Das einfachste ist m.E. für Dich gerade: Die gleiche Last mit einem normalen Amperemeter messen, dann kannst Du einfach den Wert für mVperAmp entsprechend anpassen, - fertig...

@michael_x @my_xy_projekt @StefanL38 @paulpaulson @uwefed @herbk

Danke für eure ganzen Tipps und ganzen Informationen. Tatsächlich hat sich ein Fehler in der Schaltung eingebaut und ich habe den Strom an der falschen Stelle gemessen. Nun habe ich das Problem gelöst.

Danke vielmals!

1 Like

Schön daß wir Dir helfen konnten (wenn auch indirekt).
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.