Hallo,
ich verwende aktuell ein Arduino Uno R4 Wifi Board mit dem Arduino Motor Shield Rev3, um einen Elektrozylinder zu steuern. Die Verkabelung habe ich wie in diesem Tutorial realisiert: [https://docs.arduino.cc/tutorials/motor-shield-rev3/msr3-controlling-dc-motor/].
Die Steuerung des Motors funktioniert super. Außerdem lese ich über den Analog Pin A5 die Daten von einem Potentiometer, welches die aktuelle Position des Elektrozylinders wiedergibt, aus. Auch das klappt.
Was allerdings nicht so wirklich klappt, ist die Messung des Motorstroms. Der Wert, der über analogRead() ausgelesen wird, liegt während der Elektrozylinder sich bewegt sehr häufig bei 0 (Manchmal aber auch zwischen 600 und 800). Das kann so ja eigentlich nicht sein. Wenn der Elektrozylinder sich bewegt, muss ja ein Strom fließen.
Kann es sein, dass ein defekt am Motor Shield vorliegt (Wackelkontakt oder so)? Oder mache ich etwas falsch?
Hier ist mein Code:
int directionPin = 12; // Channel für die Richtung (LOW = einfahren, HIGH = ausfahren)
int pwmPin = 3; // Channel für Geschwindigkeit (0-100)
int brakePin = 9; // Channel für Bremse (LOW = aus, HIGH = an)
int currentPin = A0; // Channel für Strommessung
//int current = 10;
int potiPin = A5; // Channel für das Lesen des Potentiometers (Blaues Kabel); Gelbes Kabel an Power 5V anschließen; Weißes Kabel an GND
int poti_data = 0;
bool directionState = false; // true = ausfahren (HIGH), false = einfahren (LOW)
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
pinMode(directionPin, OUTPUT);
pinMode(pwmPin, OUTPUT);
pinMode(brakePin, OUTPUT);
delay(3000);
}
void loop() {
// Richtung ändern
directionState = !directionState;
if(directionState == false){
digitalWrite(directionPin, LOW);
}
else{
digitalWrite(directionPin, HIGH);
}
// Poti ausgeben
poti_data = analogRead(potiPin);
Serial.println("Poti Vorher:");
Serial.println(poti_data);
// Bremse lösen
digitalWrite(brakePin, LOW);
// Geschwindigkeit einstellen
analogWrite(pwmPin, 100);
delay(500);
int current = analogRead(currentPin); // Spannung zwischen 0 & 3,3V ausgedrückt in integers zwischen 0 und 1023; max 3,3 V = 2A
Serial.println("Strom:");
Serial.println(current);
delay(500);
// Bremse aktivieren
digitalWrite(brakePin, HIGH);
// Geschwindigkeit auf Null
analogWrite(pwmPin, 0);
// Poti ausgeben
poti_data = analogRead(potiPin);
Serial.println("Poti Nachher:");
Serial.println(poti_data);
delay(5000);
}