Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik WU_Info Arduino 2019-20 Roboter Elegoo Smart Robot Programm für einen Selbstfahrenden Roboter

Programm für einen Selbstfahrenden Roboter

//  ENA    ENB    IN1     IN2     IN3      IN4      was passiert

//  HIGH  HIGH  HIGH  LOW   LOW   HIGH  vorwärts

//  HIGH  HIGH  LOW   HIGH  HIGH  LOW   rückwärts

//  HIGH  HIGH  LOW   HIGH  LOW   HIGH  nach links drehen

//  HIGH  HIGH  HIGH  LOW   HIGH  LOW   nach rechts drehen

//  HIGH  HIGH  LOW   LOW   LOW   LOW   stoppen

 

IN1 – die linken Räder fahren vorwärts

IN2 – die linken Räder fahren rückwärts

IN3 – die rechten Räder fahren rückwärts

IN4 – die rechten Räder fahren vorwärts

 

#include     //Bibliothek mit Befehlen zum ansteuern des Servo hinzufügen

 Servo servoblau;     //Variable für den Servo deklarieren

//int -> gibt einem Pin einen anderen Namen

int entfernung=0;

 long messung=0;

 int echoPin=A4;

 int triggerPin=A5;

 long messung160=0;

 long messung40=0;

 long messung100=0;

 int test = 0;

#define ENA 5

#define ENB 6

#define IN1 7

#define IN2 8

#define IN3 9

#define IN4 11

 

 void setup() {

   // put your setup code here, to run once:

 Serial.begin(9600); // Serielle Kommuntikation starten

 pinMode(triggerPin, OUTPUT); //der Pin soll ein Signal abgeben, also OUTPUT

 pinMode(echoPin, INPUT); // mit dem Pin wird die Messung aufgenommen, also INPUT

 servoblau.attach(3);

 pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

pinMode(ENA, OUTPUT);

pinMode(ENB, OUTPUT);

 }

 

 void loop() {

 //Messung mit dem Ultraschallsensor:

 digitalWrite(triggerPin, LOW);

 delayMicroseconds(2);

 digitalWrite (triggerPin, HIGH); //Messung wird gestartet

 delay (10);

 digitalWrite(triggerPin, LOW);

 messung = pulseIn(echoPin, HIGH); // die Messung soll empfangen werden

 entfernung = (messung/2) / 29;//die Messung wird unter Variable "entfernung" in cm gespeichert

   Serial.println (entfernung);// die entfernung wird auf dem Seriellen Monitor angezeigt

   delay (60);

 vorwaerts();

 

 if (entfernung <= 50)//Wenn etwas näher als 51cm vor dem sensor ist passiert Folgendes:

 {

stopp();//Mit dem Befehl wir der Code aus void stopp eingefügt

 delay(1000);

       servoblau.write(180); //Position 2 ansteuern mit dem Winkel 180°

      delay(1000);

     // Messung mit dem Ultraschallsensor:

      digitalWrite(triggerPin, LOW);

      delayMicroseconds(2);

      digitalWrite (triggerPin, HIGH);

      delay (10);

      digitalWrite(triggerPin, LOW);

      messung160 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung160" in cm gespeichert

      Serial.println(messung160);

 

      servoblau.write(20); //Position 3 ansteuern mit dem Winkel 40°

         delay(1000);

         delayMicroseconds(2);

      digitalWrite (triggerPin, HIGH);

      delay (10);

      digitalWrite(triggerPin, LOW);

 

       messung40 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung40" in cm gespeichert

       Serial.println(messung40);

     servoblau.write(100); //Position 4 ansteuern mit dem Winkel 100°

        delay(1000);//

        delayMicroseconds(2);

     // Messung mit dem Ultraschallsensor:

      digitalWrite (triggerPin, HIGH);

      delay (10);

      digitalWrite(triggerPin, LOW);

     messung100 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung40" in cm gespeichert

     Serial.println(messung100);

 delay(1000);

//Es wird überprüft, ob die Messung160 größer ist als die Messung40

     if ( messung40        //wenn messung100 am grössten ist:

       if(messung100>messung160){

       links();

       delay(550);

       vorwaerts();

       }//Code aus void vorwaerts wird eingefügt

     }

     if(messung40        {//wenn 160 Grad am grössten ist

       if(messung160>messung100){

       links();

       delay(280);

       vorwaerts();

       }

       }

     

     if (messung100       {  //wenn 40 Grad am grössten ist

      if(messung40>messung160){

      rechts();

      delay(280);

      vorwaerts();

      }

      }

 

 }

 }

 

void stopp(){

 

  digitalWrite(ENA,HIGH);

  digitalWrite(ENB,HIGH);

  digitalWrite(IN1,LOW);

  digitalWrite(IN2,LOW);

  digitalWrite(IN3,LOW);

  digitalWrite(IN4,LOW);

})

)

){>

 

void vorwaerts(){

  digitalWrite(ENA,HIGH);

  digitalWrite(ENB,HIGH);

  digitalWrite(IN1,HIGH);

  digitalWrite(IN2,LOW); 

  digitalWrite(IN3,LOW); 

  digitalWrite(IN4,HIGH);

}

void links(){

   digitalWrite(ENA,HIGH);

  digitalWrite(ENB,HIGH);

  digitalWrite(IN1,LOW);

  digitalWrite(IN2,HIGH);

  digitalWrite(IN3,LOW);

  digitalWrite(IN4,HIGH);

}

void rechts(){

  digitalWrite(ENA,HIGH);

  digitalWrite(ENB,HIGH);

  digitalWrite(IN1,HIGH);

  digitalWrite(IN2,LOW);

  digitalWrite(IN3,HIGH);

  digitalWrite(IN4,LOW);

}

 

 

//von Mathias, Dominik, Lukas S., Lukas H., Max, Jakob

Erstellt: Jakob Kalff (26.02.2020) Letzte Änderung: Lukas Herrmann (11.03.2020)