Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino_Hecker Projekte Raupenfahrzeug auf einem Tisch

Raupenfahrzeug auf einem Tisch

Projekt: Bei unserem Projekt soll ein Fahrzeug auf einem Tisch fahren, ohne von diesem runterzufallen.

Bild 1

image1.JPG

Code:

//Ultraschall VORNE
const int MessungVorneTrig = 25;
const int MessungVorneEcho = 24;

//Ultraschall HINTEN
const int MessungHintenTrig = 37;
const int MessungHintenEcho = 36;

//Ultraschall RECHTS
const int MessungRechtsTrig = 33;
const int MessungRechtsEcho = 32;

//Ultraschall LINKS
const int MessungLinksTrig = 29;
const int MessungLinksEcho = 28;

//Motor
#include
AF_DCMotor motorRechts(1);
AF_DCMotor motorLinks(2);
const int geschw = 150;      //0 = langsam,  255 = schnell


int status_ = 1;                           //Status    0 = Halt, 1 = Vorwärts,  2 = Rückwärts, 3 = RechtsDrehen, 4 = LinksDrehen --- 5 = RechteRaupeVor, 6 = RechteRaupeZurück, 7 = LinkeRaupeVor, 8 = LinkeRaupeZurück
int status_alt = 0;                        //Status    - " -

//Abstand
float cmVorne = 0;
float cmHinten = 0;
float cmRechts = 0;
float cmLinks = 0;

float abstand1 = 20;     // Grenze


void setup () {
    
  //Ultraschall VORNE
  pinMode(MessungVorneTrig,OUTPUT);
  pinMode(MessungVorneEcho,INPUT);
 
  //Ultraschall HINTEN
  pinMode(MessungHintenTrig,OUTPUT);
  pinMode(MessungHintenEcho,INPUT);
 
  //Ultraschall RECHTS
  pinMode(MessungRechtsTrig,OUTPUT);
  pinMode(MessungRechtsEcho,INPUT);
 
  //Ultraschall LINKS
  pinMode(MessungLinksTrig,OUTPUT);
  pinMode(MessungLinksEcho,INPUT);
 
  //Serieller Monitor
  Serial.begin(9600);
 
  //Motor
  motorRechts.setSpeed(geschw);
  motorRechts.run(RELEASE);
  motorLinks.setSpeed(geschw);
  motorLinks.run(RELEASE);
}


void linksVor()      {  motorLinks.run(FORWARD);}          //Rechte Seite wird dadurch nicht beeinflusst
void linksZurueck()  {  motorLinks.run(BACKWARD);}            //Rechte Seite wird dadurch nicht beeinflusst
void rechtsVor()     {  motorRechts.run(FORWARD);}          //Linke Seite wird dadurch nicht beeinflusst
void rechtsZurueck() {  motorRechts.run(BACKWARD);}            //Linke Seite wird dadurch nicht beeinflusst

void vorwaerts ()    {  linksVor(); rechtsVor();              }
void rueckwaerts ()  {  linksZurueck(); rechtsZurueck();      }
void rechtsdrehen () {  linksVor(); rechtsZurueck();          }
void linksdrehen ()  {  linksZurueck(); rechtsVor();          }
void halt()          {  motorRechts.run(RELEASE); motorLinks.run(RELEASE);    }



void AbstandMessen() {

  //Vorne - Messen
  digitalWrite(MessungVorneTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(MessungVorneTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(MessungVorneTrig, LOW);
  cmVorne = pulseIn(MessungVorneEcho, HIGH) / 58.0;
  cmVorne = (int(cmVorne * 100.0)) / 100.0;            
   Serial.println(cmVorne);
   
  //Hinten - Messen
  digitalWrite(MessungHintenTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(MessungHintenTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(MessungHintenTrig, LOW);
  cmHinten = pulseIn(MessungHintenEcho, HIGH) / 58.0;
  cmHinten = (int(cmHinten * 100.0)) / 100.0;
  Serial.println(cmHinten);
 
  //Rechts - Messen
  digitalWrite(MessungRechtsTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(MessungRechtsTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(MessungRechtsTrig, LOW);
  cmRechts = pulseIn(MessungRechtsEcho, HIGH) / 58.0;
  cmRechts = (int(cmRechts * 100.0)) / 100.0;
  Serial.println(cmRechts);
 
  //Links - Messen
  digitalWrite(MessungLinksTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(MessungLinksTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(MessungLinksTrig, LOW);
  cmLinks = pulseIn(MessungLinksEcho, HIGH) / 58.0;
  cmLinks = (int(cmLinks * 100.0)) / 100.0;
  Serial.println(cmLinks);
}


void RichtungSchalten(){

  //Status    0 = Halt, 1 = Vorwärts,  2 = Rückwärts, 3 = RechtsDrehen, 4 = LinksDrehen --- 5 = RechteRaupeVor, 6 = RechteRaupeZurück, 7 = LinkeRaupeVor, 8 = LinkeRaupeZurück

  if ((cmHinten < abstand1) && (cmVorne < abstand1) && (cmRechts < abstand1) && (cmLinks < abstand1)) {status_ = 1;}  //Ganz Auf dem Tisch
  if (cmVorne > abstand1) { status_ = 6;}      //Vorne........RechtsZurueck  --- Vorne über dem Rand vom Tisch
  if (cmRechts > abstand1) { status_ = 8;}     //Rechts.......LinksZurueck
  if (cmLinks > abstand1) { status_ = 6;}      //Links........RechtsZurueck
  if (cmHinten > abstand1) { status_ = 1;}     //Hinten.......Vor
 
  if ((cmVorne > abstand1) && (cmLinks > abstand1)) { status_ = 6;}       //Vorne && Links    
  if ((cmVorne > abstand1) && (cmRechts > abstand1)) { status_ = 8;}      //Vorne && Rechts
  if ((cmHinten > abstand1) && (cmLinks > abstand1)) { status_ = 7;}      //Hinten && Links
  if ((cmHinten > abstand1) && (cmRechts > abstand1)) { status_ = 5;}     //Hinten && Rechts
 
//2 Sensoren....Vorne-Hinten/Rechts-Links
  if ((cmRechts > abstand1) && (cmLinks > abstand1)) { status_ = 1;}      //Rechts && Links
  if ((cmVorne > abstand1) && (cmHinten > abstand1)) { status_ = 3;}      //Vorne && Hinten
 
//3 Sensoren
  if ((cmVorne > abstand1) && (cmRechts > abstand1) && (cmLinks > abstand1)) {status_ = 4;}
  if ((cmVorne > abstand1) && (cmHinten > abstand1) && (cmRechts > abstand1)) {status_ = 4;}
  if ((cmVorne > abstand1) && (cmHinten > abstand1) && (cmLinks > abstand1)) {status_ = 3;}
  if ((cmHinten > abstand1) && (cmRechts > abstand1) && (cmLinks > abstand1)) {status_ = 1;}
 
//Alle sensoren zeigen zu hohen wert an - z.B. durch hochheben
  if ((cmHinten > abstand1) && (cmVorne > abstand1) && (cmRechts > abstand1) && (cmLinks > abstand1)) {status_ = 0;}

  if (status_alt != status_) {
    halt();
    //delay(50);
    if (status_ == 1)  { vorwaerts();}
    if (status_ == 2)  { rueckwaerts();}
    if (status_ == 3)  { rechtsdrehen();}
    if (status_ == 4)  { linksdrehen();}
    if (status_ == 5)  { rechtsVor();}
    if (status_ == 6)  { rechtsZurueck();}
    if (status_ == 7)  { linksVor();}
    if (status_ == 8)  { linksZurueck();}
    if (status_ == 0)  { halt();}
    status_alt = status_;
    Serial.println(status_);
  }
}


void loop () {
  AbstandMessen();
  RichtungSchalten();
}

 

 

Ein Projekt von Mark Witt, Julius Meier, Lea Hofmann, Jonas Gödecke und Paul van den Berg.

Erstellt: Paul Van Den Berg (15.04.2015) Letzte Änderung: Andreas Hecker (01.12.2015)