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
}
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"
?
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
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.
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?
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...
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.