Arduino Roboter macht Probleme (Mblock)

Hallo,

Ich habe ein Problem mit meinem Arduino Roboter. Wenn ich im Programm (mBlock) sage, dass er Z.b. vorwärts fahren soll, dreht das linke Rad vorwärts, aber das rechte Rad dreht sich nach hinten.
Genau das Gleiche passiert, wenn er Rückwärts fahren sollte. Ich habe es mit mehreren Mblock Versionen versucht (Mit der neusten und mit ein paar älteren), aber es hat sich nichts geändert.

Kann mir jemand weiterhelfen?


:warning:
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.

Was heisst "das Gleiche" dreht dann rechts auch vorwärts und links rückwärts, oder dreht das rechte Rad immer richtig rum und das linke immer falsch?

Wenn letzteres, kannst Du den Anschluß drehen.

Vielen Dank für deine Antwort.

Egal was ich beim Programm programmiere ob vorwärts, rückwärts, links oder rechts, das linke Rad dreht immer vorwärts und das rechte immer rückwärts.
Ich habe die Anschlüsse schon einmal vertauscht, aber dann kann er nur gerade aus fahren.
Mein Ziel ist es, dass der Roboter für Z.b. 5 Sekunden vorwärts fährt, dann dreht er sich um 90° und immer so weiter.

Wie meinst du das? Hast du das dann auch mit einem Block für Rückwährts fahren ausprobiert?

Ich hatte das Ardublock hier mal am spielen, bin damit aber nicht warm geworden, weil zu aufwändig und irgendwie kam da eigenartiger Code raus.

Woher is'n der Robot? (link) vielleicht kann man ja mal schnell ne Routine schreiben um die Funktion zu testen.

Ich habe alles versuche, also auch wenn der Anschluss vertauscht ist fährt er nur gerade aus.
Auch wenn ich im Programm sage, dass er rückwärts fahren soll.

Ich habe den Roboter in einem programmier Lager gemacht, und die haben nicht gesagt was das genau ist, aber ich vermute ein Roboter von MBlock
Also das untere Teil ist ein Arduino Uno (Die Blaue Platine auf dem Foto)
Die Obere Platine (Die Grüne) ist keine Ahnung was. Aber ich vermute, dass das eine Custom Platine ist von KidsCode ist.

Sensoren gegeneinander getauscht?

Hm..
Ich seh grad auf dem Bild 6/9 und 5/10 als Anschlußnummern.
Sind das die Pins für die Motoren und das PIN-Äquivalent vom UNO?

Dann wäre das ne recht einfache Geschichte.
Der folgende Code lässt die Pins abwechselnd ein und aus gehen.
Damit müssten sich dann die Antriebe je nach Richtung drehen.
Dazu gibt es auch Ausgaben auf dem seriellen Monitor.
Also einfach mal in die Arduino-IDE reinkopieren und raufladen.



// Forensketch
// https://forum.arduino.cc/

const byte motL[2] = {5, 10};
const byte motR[2] = {6, 9};



void setup()
{
  Serial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  for (byte b = 0; b < 2; b++)
  {
    pinMode(motL[b], OUTPUT);
    pinMode(motR[b], OUTPUT);
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }
}

void  loop()
{
  Serial.println(F("Starte Motor L Richtung 1"));
  digitalWrite(motL[1], HIGH);
  delay(5000);
  digitalWrite(motL[1], LOW);
  delay(100); // Kurze Pause zum anhalten
  Serial.println(F("Starte Motor L Richtung 2"));
  digitalWrite(motL[0], HIGH);
  delay(5000);
  Serial.println(F("Stoppe Motor L"));
  digitalWrite(motL[0], LOW);
  delay(100);
  Serial.println(F("Starte Motor R Richtung 1"));
  digitalWrite(motR[1], HIGH);
  delay(5000);
  Serial.println(F("Starte Motor R Richtung 2"));
  digitalWrite(motR[1], LOW);
  delay(100); // Kurze Pause zum anhalten
  digitalWrite(motR[0], HIGH);
  delay(5000);
  Serial.println(F("Stoppe Motor R"));
  digitalWrite(motR[0], LOW);
}

@fony - hier ist jetzt Schluß :zzz:, vielleicht hast ja noch Ideen... :wink:

Vielen Dank für deine Antwort, ich werde es morgen mal versuchen

Was sind das für Motoren? Solche gelbe ?
Grüße Uwe

Keine Ahnung was das für Motoren sind. Vielleicht erkennst du sie in diesem Bild.

Vielen Dank für deine Antwort.

Ich habe das in die Arduino-IDE eingefügt. Dein Code hat funktioniert, die Motoren drehen sich abwechselnd. Ich kenne mich leider nicht so gut mit dieser Programmiersprache aus, deswegen wollte ich fragen, ob man theoretisch den Ultraschall Sensor auch einbinden oder kann man nur die Motoren drehen lassen kann?

Das Ardublock baut aus deinem zusammengeschobenen genau solchen Code.
Nur viel umständlicher.

Das mit den US-Sensoren funktioniert genauso.
Du kannst, bei richtiger Programmierung, ganz viele Dinge machen, ohne das die sich gegeneinander beeinflussen.

Arduino basiert auf C++. Alles was c++ für den AVR kann, kann also Arduino auch. Die Macher haben sich für viele Dinge nur "Abkürzungen" ausgedacht und damit den einfachen Einstieg ermöglicht.

Das ardublock baut genau darauf auf. Um nicht zu sagen noch ne Abkürzung auf der Abkürzung zum Code :wink:

So. Nu kannst überlegen, ob Du mit dem Ardublock weiter Experimentieren willst, oder doch lieber die paar Zeilen Code selbst schreibst. (Mit entsprechendem Lerneffekt einer Programmiersprache)

Ich hab mal was schnelles gebaut.
Auf dem Bild von Dir ist ein Sensor mit einem lila und weissen Kabel.
Ein PIN ist vermutlich die 7. Der könnte der EchoPin sein. Der andere muss ermittelt werden.
Wenn Du da nichts drauf zu stehen hast, was das für eine Nummer ist, dann musst Du versuchen das anhand der Leiterbahnen rauszubekommen. (*)

Dann die beiden PinNummern im Code eintragen und aufspielen.
Es sollte funktionieren...
Benutze den seriellen Monitor, damit Du ein paar Ausgaben siehst.



const byte motL[2] = {5, 10};
const byte motR[2] = {6, 9};

const byte triggerPin = 12;           // - Die Pinnummer muss ermittelt werden
const byte echoPin = 7;               // - Hier auch!
const unsigned int maxRange = 300;
unsigned long signalzeit;
unsigned int entfernung;


void setup()
{
  Serial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  for (byte b = 0; b < 2; b++)
  {
    pinMode(motL[b], OUTPUT);
    pinMode(motR[b], OUTPUT);
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }
}

void loop()
{
  messung();
  if (entfernung < 20)       // Objekt in der Nähe
  {
    rueckwaerts();           // Objekt weiter weg
  }
  else if (entfernung < 100) 
  {
    vorwaerts();
  }
  else                       // Ich weiss nicht, wo ich bin
  {
    halt();
  }
}

void vorwaerts()
{
  digitalWrite(motL[1], LOW);
  digitalWrite(motR[1], LOW);
  digitalWrite(motL[0], LOW);
  digitalWrite(motR[0], LOW);
}
void rueckwaerts()
{
  digitalWrite(motL[0], LOW);
  digitalWrite(motR[0], LOW);
  digitalWrite(motL[1], LOW);
  digitalWrite(motR[1], LOW);
}
void halt()
{
  for (byte b = 0; b < 2; b++)
  {
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }
}
void messung()
{
  unsigned long letzteMessung = 0;
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  signalzeit = pulseIn(echoPin, HIGH);
  entfernung = signalzeit / 58;
  if (letzteMessung != entfernung)
  {
    if (entfernung > maxRange || entfernung <= 0)
    {
      Serial.println(F("kein Messwert"));
    }
    else
    {
      Serial.print(F("Entfernung: "));
      Serial.print(entfernung);
      Serial.println(F(" cm"));
    }
  }
}

Und wenn Du ein paar grundlegende Dinge lernen willst, empfehele ich mal nen pdf - das liest sich gut weg und ist besser als jedes Einsteigerbuch, da es sich auf das wesentliche konzentriert.
Hier zum download und jeden Abend unters Kopfkissen packen. :wink: Nicht auswendig lernen. Nur wissen was drin steht - der rest kommt von allein.

(*) Solltest Du die Pinnummern nicht rausbekommen, müsste ich Dir einen Code schreiben, der alle Pins abfragt - ist nicht so problematisch, dauert nur nen Moment.

Vielen dank für deine Antwort.

Tut mir leid für die späte antworte. Ich habe alles eingefügt, aber bei mir kommt eine Fehler- meldung. Weisst du woran das Liegt?

Du must schon ganze Fehlermeldung kopieren und hier einfügen :wink:
Dein Namen kanste mit XXX ersetzen.

Nein. Du hast die Meldung verstümmelt.
Da unten rechts gibt es den Button, da brauchst Du nur raufklicken.
Und bedenke: Leute die schlecht oder gar nicht sehen können, haben keine Chance Dir zu helfen. Mit dem Bild kann niemand was anfangen... Vor allem ist es auch auf kleinen Smartphones oder (wie bei mir) auf einem 10" Netbook kontraproduktiv...

Hinweis: Der Code aus #15 kompiliert Warnungs- und Fehlerfrei.

Ich hab die Fehlermeldung einfach angeschaut und abgetippt...
Ich bin auf diese Problem gestoßen:

  • Entweder haben Sie die main-Funktion gelöscht oder umbenannt, oder
  • Sie haben die setup- oder loop-Funktion vergessen oder falsch geschrieben, oder
  • Sie haben die Arduino-Kernbibliothek nicht richtig eingebunden oder installiert

Ich hoffe das hilft. Da ich aber --> wie oben bereits angemerkt wurde, die Fehlermeldung nicht als Text hab, kann ich nicht beurteilen, und das will ich noch mal betonen, ob dass das Problem lösen kann/bzw. wird.

Können diese kleinen Sensoren überhaupt die Distanz messen? Damals war der grosse Sensor ( Der mit den 4 Kabeln) für die Distanz Messung zuständig. Ich kenne mich nicht sehr gut mit C++ aus, aber ich habe versucht, dass er gerade aus fährt Z.b. für 5 Sekunden


dann biegt er rechts ab und das immer so weiter. Schlussendlich ist er nur noch gerade aus gefahren. Da das mit dem Sensor viel zu kompliziert ist, wollte ich das Problem so lösen. Damals habe ich den so programmiert, dass er gerade aus fährt, bis der Roboter eine gewisse Entfernung zu einem Objekt hatte, danach biegt er rechts ab und das selbe von vorn. Ohne Blöcke wir das ein bisschen schwierig für mich. Wenn du mir helfen könntest wäre ich dir sehr dankbar, wenn nicht muss ich das irgendwie ohne Sensoren zustande bringen.