digitalRead beeinflusst Ausgangsspannung

Hallo zusammen

ich beschäftige mich schon eine weile mit Arduinos und lese hier schon eine ganze weile mit.
Jetzt habe ich aber ein Problem wo ich weder hier noch via google eine Lösung gefunden habe :confused: .

Zu meinem Problem,

ich arbeite derzeit an einem Kettenfahrzeug, das ich mit dem Arduino UNO steuern möchte. In meinem sketch benutze ich digitalRead und 4 if/else schleifen, um jeweils 4 pins vom Arduino einzulesen, um damit dem Motortreiber (L298N) zu steuern. Wenn ich jetzt nur eine schleife benutze, habe ich an meinen Ausgängen 4,8V aber sobald ich zwei schleifen nutze nur noch 2,4V und bei allen 4 schleifen nur noch 1.2V. Die Schaltung bleibt dabei unverändert.

Jetzt meine frage: Warum ist die Ausgangsspannung, wenn ich ein pin im Sketch auslese bei 4,8V und wenn ich 4 pins im Sketch auslese nur noch bei 1,2V ?

MFG G4M3R1986

void Rueck();
void Vor();
void Links();
void Rechts();
void Debug();

void setup()
{
  pinMode( 2 , INPUT);
  pinMode( 3 , INPUT);
  pinMode( 4 , INPUT);
  pinMode( 5 , INPUT);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  Serial.begin(9600);
  pinMode( 6 , OUTPUT);
  pinMode( 7 , OUTPUT);
  pinMode( 8 , OUTPUT);
  pinMode( 9 , OUTPUT);


  Debug();

}

void loop()
{
  delay( 10 );
  Vor();
  delay( 10 );
  Rueck();
  delay( 10 );
  Rechts();
  delay( 10 );
  Links();
}

void Debug()
{
  delay( 500 );
  Serial.print("Pin2:");
  Serial.print(digitalRead(2));
  Serial.println();
  Serial.print("Pin3:");
  Serial.print(digitalRead(3));
  Serial.println();
  Serial.print("Pin4:");
  Serial.print(digitalRead(4));
  Serial.println();
  Serial.print("Pin5:");
  Serial.print(digitalRead(5));
  Serial.println();
}

void Rueck()
{
  if (digitalRead(3))
  {
    digitalWrite( 6 , HIGH );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , HIGH );
    digitalWrite( 9 , LOW );
  }
  else
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , LOW );
  }
}

void Vor()
{
  if (digitalRead(2))
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , HIGH );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , HIGH );
  }
  else
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , LOW );
  }
}

void Links()
{
  if (digitalRead(5))
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , HIGH );
  }
  else
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , LOW );
  }
}

void Rechts()
{
  if (digitalRead(4))
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , HIGH );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , LOW );
  }
  else
  {
    digitalWrite( 6 , LOW );
    digitalWrite( 7 , LOW );
    digitalWrite( 8 , LOW );
    digitalWrite( 9 , LOW );
  }
}

G4M3R1986:
Jetzt meine frage: Warum ist die Ausgangsspannung, wenn ich ein pin im Sketch auslese bei 4,8V und wenn ich 4 pins im Sketch auslese nur noch bei 1,2V ?

Da Dein Code ein bisschen lang ist, habe ich ihn noch nicht gelesen. Mein erster Gedanke war, dass es gut wäre, den Schaltplan zu sehen und zu erfahren, ob Du sicher bist, alles richtig angeschlossen zu haben. Kannst Du den Schaltplan zeigen und würdest Du für die korrekte Verdrahtung Deine Hand ins Feuer legen?

Gruß

Gregor

Schwierig ohne Schaltplan. Womit genau misst Du denn die Spannung ( Multimeter oder Oszilloskop) ? Am Pin 6.....9 des Arduino, oder
am Ausgang des Motortreibers? Von wievielen Motoren
sprechen wir? (Ich denke Zwei ?)
Es "riecht" irgendwie danach, als hättest Du dir mit
dem Sketch eine "PWM Library" gebastelt...
So genau komme ich aber auch (noch) nicht dahinter.

Eventuell magst Du noch etwas mehr Infos zur
Verfügung stellen?

StB

Du schaltest die Motore nur für ein viertel der Zeit ein.

Du hast zB nur die Taste VOR gedrückt

Vor Motor ein
pause
zurück motor aus
pause
rechts motor aus
pause
links motor aus
pause

Im Endeffekt ist der Motor 1/4 der Zeit an und Du mißt als Mittelwert mit dem Meßgerät 1/4 der Spannung.

Du mußt die Logik der Motoransteuerung ändern.
Die 4 Tasten abfragen und auswerten und dann erst je mach gedrückter Taste den Motor ansteuern.
Bedenke und berücksichtige auch die Möglichkeit mehrer gleichzeitig gedrückter Tasten.

Grüße Uwe

Danke schon mal für die schnelle Hilfe

#gregorss
Klar Schaltplan kommt, bin mir auch sicher das ich nach Plan alles richtig verdrahtet habe. Aber ob der Plan zu 100% korrekt ist bleibt offen :confused:

#StefanBoth
Die Spannung habe ich direkt an pin 6 - 9 gemessen. Einmal mit Multimeter und danach mit einem oszi.
Ja wie sie richtig erkannt haben handelt es sich um zwei DC Motoren.

#uwefed
falls sie die pausen meine, die waren vorher nicht drinnen. Hatte nur irgendwo gelesen das der Arduino kleine pausen zwischen dem abragen der Taster brauch. Mit (Die 4 Tasten abfragen und auswerten und dann erst je nach gedrückter Taste den Motor ansteuern.) meinen sie die Werte der pins erst in einer var zu speichern und danach zu verarbeiten ?

Hier die gleich Schaltung nochmal auf einem Steckbrett. Um den Motor-treiber auszuschließen habe ich ihn durch 4 Led's mit Widerständen ersetzt.

falls sie die pausen meine, die waren vorher nicht drinnen. Hatte nur irgendwo gelesen das der Arduino kleine pausen zwischen dem abragen der Taster brauch

Nein. Du musst die Taster nur entprellen:

Das kann man primitiv mit einem Delay von vielleicht 10ms direkt nach dem Auslösen machen (und nur dann. Also nicht ständig). Aber es geht auch ohne Blockierung.

Dein Sketch schaltet 10 mS die Motore ein (zb vorwärts) und dann für 30mS wieder aus (Rückwärts, rechts links). Dadurch mißt Du 1/4 der Spannung.
Das ist Dein Problem.

Mit Abfragen meine ich kontrolliere alle 4 Taster wenn zB vorwärts gedrück ist, dann schaltest Du entsprechenden Motore an. Nach einiger Zeit kontrollierst Du wieder die Taster und schaltest Du gegebenenfalls den Motor aus oder einen anderen ein oder läßt ihn an.

Grüße Uwe

Wenn Du das Oszilloskop an einen der Pins klemmst,
"müsste" 1X lang ein 5V Pegel zu messen sein - und 3X lang 0V. Ziemlich schnell hintereinander...
Versuche mal die Timeline entsprechend anzupassen. Ähnlich, wie es eine PulsWeitenModulation an einem der ~ PWM Ausgänge des Arduinos bei machen würde.
Mit dem Voltmeter gemessen, bildet sich dadurch ein Mittelwert von ca. 25% der eigentlichen Spannung.

"müsste" eigentlich ... :wink:

StB

Danke erstmal an alle die mir helfen wollten aber Uwe hatte den richtigen Tipp. Nach der Anpassung funktioniert es nun wie es soll.

Schön daß ich helfen konnte.
Grüße Uwe