- Akku Tests und Balkonkraftwerk Speicher         
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
    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);
    }

  2. #2
    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?

  3. #3
    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

  4. #4
    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?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    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..

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2014
    Beiträge
    6
    Danke dir Rebenauge für deinen Beitrag, aber für die Schule reicht es erstmal auch so. Und zudem habe ich tricksen müssen und deswegen sind alle digitalen Pins des Arduinos belegt, da ich auch Pins benutzt habe, um die Sensoren mit Strom zu versorgen und nicht mit Stromumwandler und solchem kram arbeiten zu müssen.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Muss man auch nicht. Der Arduino liefer ja-wie praktisch- auch feine 5V am entsprechenden Pin. Für nen paar US-Sensoren reicht das locker aber: woher versorgst du die Motoren?
    Hoffentlich _nicht_ über den Arduino direkt??
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.700
    ... um die Sensoren mit Strom zu versorgen und nicht mit Stromumwandler und solchem kram arbeiten zu müssen.
    Bei meinen WALL R - (klick hier zum Thread)

    ......

    habe ich den Motor über einen L293D geregelt betrieben, der als Motorversorgung die im Originalfahrzeug enthaltene 3xAA-Station hat. Den Controller mega328 auf einer selbst gebauten Platine, die Sensoren und auch die Versorgung des L293D habe ich mit einem Blöckchen aus 4xAAA-NiMHs versorgt. Dieser Block kommt normalerweise nicht über die zulässige Spannung des Controllers und der sonstigen Peripherie. Spannungwandler wollte/konnte ich im WALL R aus Platzgründen nicht einbauen..
    Ciao sagt der JoeamBerg

Ä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