-         

Ergebnis 1 bis 6 von 6

Thema: Probleme mit dem Antrieb

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2018
    Beiträge
    19

    Probleme mit dem Antrieb

    Anzeige

    Guten Tag Zusammen,
    ich bin gerade dabei einen Roboter zu bauen, der sich autonom bewegen soll. Dafür verwende ich zwei von diesen Motoren:
    https://www.conrad.de/de/getriebemot...z-1573543.html
    und diesen Motortreiber:
    https://www.conrad.de/de/entwickler-...y-1573541.html.

    Momentan sieht das ganze so aus, dass ich einen Ultraschall-Sensor vorne angebracht habe und die Motoren so lange nach vorne fahren lasse bis sich ein Objekt in einer nähe von 15 cm befindet.
    Ich habe 4 Funktionen erstellt, turnRight(), turnLeft, driveForward(), driveBackward(). Mein Plan war es kurz stehen zu bleiben, wenn er was "sieht" dann nach hinten zu fahren (driveBackward()) und dann nach rechts zu drehen und wieder abzufragen, ob er was sieht.
    Das Problem an der Sache ist, dass die Motoren hängen bleiben, wenn man die Fahrtrichtung ändern will. Anfangs hatte ich bei den Abbiegefunktionen beide Motoren in verschiedene Richtungen angesteuert und nur einer hat mit dem Signal arbeiten können, nämlich der für die Vorwärtsbewegung. Der andere blieb einfach stehen. Aus diesem Grund habe ich dann einen Motor einfach ausgeschaltet und nur den anderen angesteuert um ab zu biegen. Als ich den Roboter von Anfang an Rückwärts fahren ließ, weißte er keine Probleme auf. Ich habe auch schon versucht vor der Änderung der Fahrtrichtung die Motoren zum Stillstand zu bringen und mit delay(...) zu arbeiten, aber selbst das erwies sich als hoffnungslos. Außerdem habe ich meinen Roboter an eine ytärkere Quelle geschlossen, aber auch das zeigte keinen Erfolg. Habt ihr eine Ahnung, was ich da machen kann ?
    Gruß, Thomas.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.514
    Hättest du mal etwas Code mit dem man arbeiten kann?!
    Und eventuell auch die Frage ob du richtig verdrahtet hast.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2018
    Beiträge
    19
    peinlich, peinlich... ich wollte eigentlich beides hochladen und habe es vergessen, aber ja klar, hier siehst du beides:

    Code:
    const int s0 = 53;
    const int s1 = 52;
    const int s2 = 51;
    const int s3 = 50;
    const int out = 40;
    const int motor1 = 10;
    const int motor2 = 11;
    const int motor3 = 12;
    const int motor4 = 13;
    const int trigger = A1;
    const int echo = A0;
    float red=0,green=0,blue=0;
    float redA[10], greenA[10], blueA[10];
    float rav=0,gav=0,bav=0;
    int counter;
    int state=0;
    unsigned long time=0;
    int currentTime=0;
    int previosTime=0;


    void setup()
    {
    pinMode(motor1, OUTPUT);
    pinMode(motor2, OUTPUT);
    pinMode(motor3, OUTPUT);
    pinMode(motor4,OUTPUT);

    pinMode(trigger, OUTPUT);
    pinMode(echo, INPUT);
    // pinMode(irPin,INPUT);

    pinMode(s0, OUTPUT);
    pinMode(s1, OUTPUT);
    pinMode(s2, OUTPUT);
    pinMode(s3, OUTPUT);
    pinMode(out, INPUT);

    //Scaling to 20% frequency
    digitalWrite(s0, HIGH);
    digitalWrite(s1, LOW);
    Serial.begin(9600);

    }

    int getDistance()
    {
    long distance=0;
    long t=0;
    digitalWrite(trigger,LOW);
    delayMicroseconds(3);
    noInterrupts();
    digitalWrite(trigger,HIGH);
    delayMicroseconds(10);
    digitalWrite(trigger,LOW);
    t=pulseIn(echo,HIGH);
    noInterrupts();
    t=(t/2);
    distance=(t/29.1);
    return(distance);
    }

    void driveForward()
    {
    analogWrite(motor1,200);
    analogWrite(motor4,223);
    }

    void driveBackward()
    {
    analogWrite(motor2,200);
    analogWrite(motor3,223);
    }

    void turnLeft()
    {
    analogWrite(motor1,0);
    analogWrite(motor4,200);
    }
    void turnRight()
    {

    analogWrite(motor1,200);
    analogWrite(motor4,0);
    }
    void brake()
    {
    analogWrite(motor1,0);
    analogWrite(motor2,0);
    analogWrite(motor3,0);
    analogWrite(motor4,0);
    }


    void loop()
    {

    int distance=getDistance();
    Serial.println(distance);
    if(distance<15)
    {
    turnRight();
    // driveBackward();

    }
    else
    {
    driveForward();
    }
    Achtung nicht alle Variablen werden benutzt. Das liegt daran, dass ich nur den problematischen Code kopiert habe, alles andere läuft.

    Und hier das Bild:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltplan.jpg
Hits:	11
Größe:	53,1 KB
ID:	33416

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.514
    PS pack den code bitte in sog. code-tags, also "[ C O D E ] dein code [ / C O D E ]" ... nur ohne die leerzeichen dann wird der code umformatiert und ist besser lesbar

    und das bild ist irgendwie kaum lesbar, keine ahnung ob beim hochladen umskalliert worden ist
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2018
    Beiträge
    19
    okay.

    Code:
    const int s0 = 53;
    const int s1 = 52;
    const int s2 = 51;
    const int s3 = 50;
    const int out = 40;
    const int motor1 = 10;
    const int motor2 = 11;
    const int motor3 = 12;
    const int motor4 = 13;
    const int trigger = A1;
    const int echo = A0;
    float red=0,green=0,blue=0;
    float redA[10], greenA[10], blueA[10];
    float rav=0,gav=0,bav=0;
    int counter;
    int state=0;
    unsigned long time=0;
    int currentTime=0;
    int previosTime=0;
    
    
    void setup()
    {
      pinMode(motor1, OUTPUT);
      pinMode(motor2, OUTPUT);
      pinMode(motor3, OUTPUT);
      pinMode(motor4,OUTPUT);
      
      pinMode(trigger, OUTPUT);
      pinMode(echo, INPUT);
     // pinMode(irPin,INPUT);
    
      pinMode(s0, OUTPUT);
      pinMode(s1, OUTPUT);
      pinMode(s2, OUTPUT);
      pinMode(s3, OUTPUT);
      pinMode(out, INPUT);
    
      //Scaling to 20% frequency
      digitalWrite(s0, HIGH);
      digitalWrite(s1, LOW);
      Serial.begin(9600);
      
    }
    
    int getDistance()
    {
      long distance=0;
      long t=0;
      digitalWrite(trigger,LOW);
      delayMicroseconds(3);
      noInterrupts();
      digitalWrite(trigger,HIGH);
      delayMicroseconds(10);
      digitalWrite(trigger,LOW);
      t=pulseIn(echo,HIGH);
      noInterrupts();
      t=(t/2);
      distance=(t/29.1);
      return(distance);
    }
    
    void driveForward()
    {
      analogWrite(motor1,200);
      analogWrite(motor4,223);
    }
    
    void driveBackward()
    {
      analogWrite(motor2,200);
      analogWrite(motor3,223);
    }
    
    void turnLeft()
    {
      analogWrite(motor1,0);
      analogWrite(motor4,200);
    }
    void turnRight()
    {
      
      analogWrite(motor1,200);
      analogWrite(motor4,0);
    }
    void brake()
    {
      analogWrite(motor1,0);
      analogWrite(motor2,0);
      analogWrite(motor3,0);
      analogWrite(motor4,0);
    }
    
    
    void loop()
    {
     
      int distance=getDistance();
      Serial.println(distance);
      if(distance<15)
      {
        turnRight();
       // driveBackward();
        
      }
      else 
      {
        driveForward();
      }
        
      
      
    
    }

    https://www.pic-upload.de/view-35155...tplan.jpg.html

    - - - Aktualisiert - - -

    Problem gelöst. Danke für die Hilfe.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Schaltplan_Schaltplan.jpg  

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.728
    Soweit ich das sehe, ist void brake() die einzige Stelle an der gegebene Fahrbefehle zurückgenommen werden.
    Versuche doch einmal den Code wie unten anzupassen.
    Da wird jeweils alle 4 Pins definiert. Damit werden vorhergehende Anweisungen auch zurückgenommen.

    Code:
    void driveForward()
    {
      analogWrite(motor1,200);
      analogWrite(motor2,0);
      analogWrite(motor3,0);
      analogWrite(motor4,223);
    }
    
    void driveBackward()
    {
      analogWrite(motor1,0);
      analogWrite(motor2,200);
      analogWrite(motor3,223);
      analogWrite(motor4,0);
    }
    
    void turnLeft()
    {
      analogWrite(motor1,0);
      analogWrite(motor2,0);
      analogWrite(motor3,0);
      analogWrite(motor4,200);
    }
    void turnRight()
    {
      
      analogWrite(motor1,200);
      analogWrite(motor2,0);
      analogWrite(motor3,0);
      analogWrite(motor4,0);
    }

Ähnliche Themen

  1. Linear-Antrieb
    Von VSP im Forum Motoren
    Antworten: 12
    Letzter Beitrag: 14.08.2013, 09:09
  2. 4WD - Antrieb
    Von BuckWheat im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 01.10.2009, 16:03
  3. antrieb für ein rov
    Von darkbird23 im Forum Motoren
    Antworten: 5
    Letzter Beitrag: 24.09.2007, 20:24
  4. Antrieb?!
    Von JeyBee im Forum Mechanik
    Antworten: 17
    Letzter Beitrag: 17.02.2007, 12:30
  5. Hybrid-Antrieb
    Von OktanPony im Forum Motoren
    Antworten: 18
    Letzter Beitrag: 30.12.2004, 08:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •