- 12V Akku mit 280 Ah bauen         
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

    Sensorgesteuertes Auto mit Arduino Uno

    Hallo Leute,

    ich bin neu auf diesem Forum habe aber eine Fragen zu meinem Projekt und
    zwar möchte für meine Prüfung in der Schule ein Auto bauen, welches
    durch ein Microcontroller (Arduino Uno) gesteuert werden soll. Das Auto
    habe ich schon "gebaut" es hat zwei 3V-Motoren und drei
    Ultraschallsensoren (HC-SR04) zur Hinderniserkennung.
    Den Code habe ich soweit auch fertig nur habe ich ein kleines Problem.
    Hier die Stelle:

    scanvorne();
    if(cm >= 10){
    GoForward();
    delay(400);
    }
    else{
    Stop(); }
    scanlinks();
    if(cm >= 10){
    GoLeft();
    delay(300);}
    else{
    Stop();}
    scanrechts();
    if(cm3 >= 10){
    GoRight();
    delay(300);}
    else{
    Stop();}
    scanvorne();
    if(cm <= 10){
    GoBackward();
    delay(350);}
    else{
    Stop();}

    Ich möchte dass das Auto nicht rumzuckt wie auf Drogen sondern erst
    soweit fährt bis es etwas erkennt und danach ausweicht und nicht wie
    jetzt, abscannt 3sec fährt und dann plötzlich die Richtung ändert,
    obwohl da nichts ist.

    Ich bin ein Anfänger im Programmieren deswegen wird sich der eine oder
    andere etwas über einen Code ärgern oder sogar lachen.
    Und ich weiß dass mir noch massen an Bauteilen fehlen um alles in
    "Echtzeit" durchführen zu lassen, deswegen muss es nur so ne grobe
    Richtung haben und so ungefähr arbeiten.

    MFG Vangola

    P.S. Danke schon mal im Voraus.
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20140624_124619.jpg
Hits:	26
Größe:	74,8 KB
ID:	28522

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

    Machen wir das man lesbar:
    Code:
      scanvorne();
      if (cm >= 10)
        {
          GoForward();
          delay(400);
        }
      else
        {
          Stop(); 
        }
    
      scanlinks();
      if (cm >= 10)
        {
          GoLeft();
          delay(300);
        }
      else
        {
          Stop();
        }
    
      scanrechts();
      if (cm3 >= 10)
        {
          GoRight();
          delay(300);
        }
      else
        {
          Stop();
        }
    
      scanvorne();
      if (cm <= 10)
        {
          GoBackward();
          delay(350);
        }
      else
        {
          Stop();
        }
    Du machst eine Abfrage ob vorne frei ist, wenn frei fährst du 400ms geradeaus, wenn nicht wird gestoppt.
    Dann fragst du links ab, fährst wenn frei.
    Dann das selbe noch für rechts.
    und nochmals geradeaus .....

    1. Das zweite geradeaus kannst du streichen, das ganze wird in einer Schleife sein und dann fragst du 2x nach geradeaus ab.
    2. Wenn vorne frei ist, brauchst du nicht nach links und rechts sehen. Dort wo jetzt Stop(); ist musst du direkt die anderen Abfragen einfügen.

    Code:
      scanvorne();
      if (cm >= 10)
        {
          GoForward();
          delay(400);
        }
      else
        {
          Stop(); 
    
          scanlinks();
          if (cm >= 10)
            {
              GoLeft();
              delay(300);
            }
          else
            {
              Stop();
    
              scanrechts();
              if (cm3 >= 10)
                {
                   GoRight();
                   delay(300);
                 }
              else
                {
                   Stop();
                }
            }
        }

    Allerdings hat dein Tierchen jetzt einen Linksdrall.
    Da müsste man noch, z.B. mit einer Zufallsauswahl zwischen links und recht auswählen, wenn beides frei ist oder man fährt in die Richtung, in welcher mehr frei ist, jetzt wählst du nur die 10cm.

    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
    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 18:17 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    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?

  5. #5
    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);
    }

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    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?

Ähnliche Themen

  1. Arduino: laufendes Programm auf Arduino Uno beenden?
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 15.06.2014, 09:25
  2. 0-10V Ausgang mit Arduino UNO
    Von MHeymann im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 11.06.2013, 16:00
  3. Arduino Uno mit BASCOM
    Von uddo im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 14.02.2012, 20: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, 22: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, 17:31

Berechtigungen

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

12V Akku bauen