- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: Sensorgesteuertes Auto mit Arduino Uno

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2014
    Beiträge
    6
    Danke für deine Antwort/ Hilfe Peter(TOO)

    so habe ich es auch mal ausprobiert, jedoch fuhr/fährt es die ganze Zeit gegen die Wand ohne etwas dagegen zu unternehmen.
    Ich habe auch jetzt deinen beispielcode eingefügt und es fährt immer noch gegen die wand.

    EDIT:

    So ich hab da etwas angepasst und es geht doch einigermaßen, jedoch glaube ich dass die Geschwindigkeit der Motoren etwas zu hoch ist, wäre es vll über PWM zu lösen?
    MfG Vangola
    Geändert von vangola (24.06.2014 um 17:17 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Vangola,

    Du postest hier halt auch nur halbe Wahrheiten und nicht deinen Ganzen Code!

    Ich habe gerade gesehen, dass da mal cm und cm3 als Variable zu sehen ist ......

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2014
    Beiträge
    6
    Ich habe für jeden Sensor eigene Abstandsvariable angelegt. (Ist es etwa falsch?)

    Code:
    // Sensor Links
    long laengelinks;
    long cm2;
    // Sensor Vorne
    long laengevorne;
    long cm;
    // Sensor Rechts
    long laengerechts;
    long cm3;
    // Motor Rechts
    const int Motor1Pin1 = 1;
    const int Motor1Pin2 = 0;
    //Motor Links
    const int Motor2Pin1 = 2;
    const int Motor2Pin2 = 3;
    
    //int Abstand = 10;
    
    void setup()
    
    {
      // Sensor PINS
    //  Serial.begin (9600);
      pinMode(11,OUTPUT);
      pinMode(10,INPUT);
      pinMode(12,OUTPUT);
      
      pinMode(8,OUTPUT);
      pinMode(9,INPUT);
      pinMode(7,OUTPUT);
      
      pinMode(5,OUTPUT);
      pinMode(6,INPUT);
      pinMode(4,OUTPUT);
    
      // Motor PINS
      pinMode(Motor1Pin1, OUTPUT);   
      pinMode(Motor1Pin2, OUTPUT);   
      pinMode(Motor2Pin1, OUTPUT);   
      pinMode(Motor2Pin2, OUTPUT); 
    
    //  pinMode(13,OUTPUT);
    }
    
    void loop()
    {
    
      
       scanvorne();
      if (cm >= 20)
        {
          GoForward();
          delay(300);
        }
      else
        {
          Stop(); 
    
          scanlinks();
          if (cm >= 20)
            {
              GoLeft();
              delay(250);
            }
          else
            {
              Stop();
    
              scanrechts();
              if (cm3 >= 20)
                {
                   GoRight();
                   delay(250);
                 }
              else
                {
                   Stop();
                }
            }
        }
    
    }
    
    
    
    
    // Sensor Steuerung
    void scanvorne()
    
    {
      digitalWrite(12,HIGH);
      
     
      digitalWrite(11,HIGH);
      delayMicroseconds(1000);
      digitalWrite(11,LOW);
      
      laengevorne = pulseIn(10,HIGH);
      
      cm = (laengevorne/2)/29.1;
      
      Serial.print(cm);
      Serial.println("cm1");
      
      
      
    }
    void scanlinks()
    
    {
      digitalWrite(7,HIGH);
      
    
      digitalWrite(8,HIGH);
      delayMicroseconds(1000);
      digitalWrite(8,LOW);
      
      laengelinks = pulseIn(9,HIGH);
      
      cm2 = (laengelinks/2)/29.1;
      
      Serial.print(cm2);
      Serial.println("cm2");
      
     
      
    }
    
    void scanrechts()
    
    {
      digitalWrite(4,HIGH);
      
      
      digitalWrite(5,HIGH);
      delayMicroseconds(1000);
      digitalWrite(5,LOW);
      
      laengerechts = pulseIn(6,HIGH);
      
      cm3 = (laengerechts/2)/29.1;
      
      Serial.print(cm3);
      Serial.println("cm3");
      
      
      
    }
    
    //Motoren Steuerung
    
    void GoForward(){
       
      digitalWrite(Motor1Pin1, HIGH);
      digitalWrite(Motor2Pin1, HIGH);
      digitalWrite(Motor2Pin2, LOW);
      digitalWrite(Motor1Pin2, LOW);
    }
    
    void GoBackward(){
      
      digitalWrite(Motor1Pin1, LOW);
      digitalWrite(Motor1Pin2, HIGH);
      digitalWrite(Motor2Pin1, LOW);
      digitalWrite(Motor2Pin2, HIGH);
    
    }
    
    void GoLeft(){
      
      digitalWrite(Motor1Pin1, HIGH);
      digitalWrite(Motor1Pin2, LOW);
      digitalWrite(Motor2Pin1, LOW);
      digitalWrite(Motor2Pin2, LOW);
    }
    
    void GoRight(){
      digitalWrite(Motor2Pin2, LOW);
      digitalWrite(Motor2Pin1, HIGH);
      digitalWrite(Motor1Pin1, LOW);
      digitalWrite(Motor1Pin2, LOW);
    }
    
    void Stop(){
      digitalWrite(Motor1Pin2, LOW);
      digitalWrite(Motor1Pin1, LOW);
      digitalWrite(Motor2Pin1, LOW);
      digitalWrite(Motor2Pin2, LOW);
    }

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von vangola Beitrag anzeigen
    Ich habe für jeden Sensor eigene Abstandsvariable angelegt. (Ist es etwa falsch?)
    Nach Scanlinks() fragst du aber cm ab, also den Wert von Vorn !!

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2014
    Beiträge
    6
    Hallo,

    ja das hab ich auch eben gesehen und korrigiert, danke dir.
    Das fährt jetzt einwandfrei, aber wie du es auch gemeint hast, hat es einen Linksdrall.
    Ich überlege gerade wie man es macht damit es den Weg mit dem größten Abstand nimmt.

    MfG Vangola

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Code:
    if ( (cm2 >= 10) && (cm2 >= 10) )  // links und rechts min. 10cm frei
      {
        If (cm2 > cm3)
          Links();
        else
           Rechts();
      }
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    So richtig wird das mit deinem Aufbau nicht funktionieren, denn die Sensoren haben nicht genug Öffnungswinkel (grob zwischen 15 und 25 Grad).
    Das heisst, du hast Bereiche (schräg nach vorn) die gar nicht erfasst werden.
    Besser wärs, zwei Sensoren schräg nach vorn zu richten, und zwar so, dass sich beide in der Mitte "überlappen", dann kannst du feststellen ob genau vor dem Roboter alles frei ist (sogar ziemlich genau, da du beide Sensoren auswerten kannst) und auch, in welche Richtung mehr Platz ist.
    Der Haken dabei ist dann: das braucht Zeit, da du die Sensoren nacheinander permanent abfragen musst. Da kann man noch bisschen tricksen: bei Gradeausfahrt nur einen benutzen, und _wenn_ der nen Ping bekommt, den anderen fragen, ob er auch was sieht.

    Wenn man das gut justiert (so dass sich die Erfassungsbereiche grad um die Breite des Roboters überlappen) dürfte man ziemlich gut auch schmale Lücken noch "vermessen" können. Man muss ja nicht die komplette Reichweite benutzen (die Dinger reagieren auf bis zu 5m).
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Ähnliche Themen

  1. Arduino: laufendes Programm auf Arduino Uno beenden?
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 15.06.2014, 08:25
  2. 0-10V Ausgang mit Arduino UNO
    Von MHeymann im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 11.06.2013, 15:00
  3. Arduino Uno mit BASCOM
    Von uddo im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 14.02.2012, 19:22
  4. Habe Arduino Uno,GPS Modul,RC Auto.Möchte haben:Auto,dass GPS Waypoints abfährt
    Von de8msharduino im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 9
    Letzter Beitrag: 07.10.2011, 21:53
  5. [ERLEDIGT] [ARDUINO] 2 Motoren + Servo mit dem Arduino Uno steuern
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 16:31

Berechtigungen

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

12V Akku bauen