Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino_Hecker Fahrzeuge Fahrzeug von SainSmart

Fahrzeug von SainSmart

http://www.sainsmart.com/sainsmart-uno-sensor-shield-v5-4wd-mobile-car-l298n-hc-sr04-for-arduino-robot.html

https://learn.adafruit.com/adafruit-motor-shield/library-install

zip

 

//  Testprogramm für den Roboter von Sainsmart.com

const int links_richtung = 9; //   IN 4,  HIGH = Vorwärts, LOW = Rückwärts
const int rechts_richtung = 10; //  IN 1,  HIGH = Vorwärts, LOW = Rückwärts
const int rechts_geschwindigkeit = 11; //   IN 2, 0 = langsam,  255 = schnell
const int links_geschwindigkeit = 12; //   IN 3, 0 = langsam,  255 = schnell

int ganzlangsam = 50;    // Auf ganz langsam wird im Programm verzichtet, da sich bei schwachen Batterien die Motoren nicht mehr drehen
int langsam = 100;
int mittel = 150;
int schnell = 200;
int ganzschnell = 250;

void setup () {
  Serial.begin(9600);
  pinMode(links_richtung,OUTPUT);
  pinMode(rechts_richtung,OUTPUT);
  pinMode(links_geschwindigkeit,OUTPUT);
  pinMode(rechts_geschwindigkeit,OUTPUT);
}

void linksvor(int v)      {  digitalWrite(links_richtung,HIGH); analogWrite(links_geschwindigkeit,255-v);}  //Rechte Seite wird dadurch nicht beeinflusst
void linkszurueck(int v)  {  digitalWrite(links_richtung,LOW);  analogWrite(links_geschwindigkeit,v);}  //Rechte Seite wird dadurch nicht beeinflusst
void rechtsvor(int v)     {  digitalWrite(rechts_richtung,HIGH); analogWrite(rechts_geschwindigkeit,255-v);}  //Linke Seite wird dadurch nicht beeinflusst
void rechtszurueck(int v) {  digitalWrite(rechts_richtung,LOW);  analogWrite(rechts_geschwindigkeit,v);}  //Linke Seite wird dadurch nicht beeinflusst

void vorwaerts (int v)    {  linksvor(v); rechtsvor(v);              }
void rueckwaerts (int v)  {  linkszurueck(v); rechtszurueck(v);      }
void rechtsdrehen (int v) {  linksvor(v); rechtszurueck(v);          }
void linksdrehen (int v)  {  linkszurueck(v); rechtsvor(v);          }
void halt()               {  linkszurueck(0);   rechtszurueck(0);      }


void loop () { 

  Serial.println("linksvor(langsam)");  linksvor(langsam);     delay(3000); halt(); delay(1000);
  Serial.println("linksvor(mittel)");   linksvor(mittel);      delay(3000); halt(); delay(1000);
  Serial.println("linksvor(schnell)");  linksvor(schnell);     delay(3000); halt(); delay(1000);

  Serial.println("linkszurueck(langsam)");  linkszurueck(langsam);     delay(3000); halt(); delay(1000);
  Serial.println("linkszurueck(mittel)");   linkszurueck(mittel);      delay(3000); halt(); delay(1000);
  Serial.println("linkszurueck(schnell)");  linkszurueck(schnell);     delay(3000); halt(); delay(1000);


  Serial.println("rechtsvor(langsam)");  rechtsvor(langsam);     delay(3000); halt(); delay(1000);
  Serial.println("rechtsvor(mittel)");   rechtsvor(mittel);      delay(3000); halt(); delay(1000);
  Serial.println("rechtsvor(schnell)");  rechtsvor(schnell);     delay(3000); halt(); delay(1000);

  Serial.println("rechtszurueck(langsam)");  rechtszurueck(langsam);     delay(3000); halt(); delay(1000);
  Serial.println("rechtszurueck(mittel)");   rechtszurueck(mittel);      delay(3000); halt(); delay(1000);
  Serial.println("rechtszurueck(schnell)");  rechtszurueck(schnell);     delay(3000); halt(); delay(1000);


  Serial.println("linksvor(mittel)");      linksvor(mittel);      delay(3000); halt(); delay(1000);
  Serial.println("linkszurueck(mittel)");  linkszurueck(mittel);  delay(3000); halt(); delay(1000);
 
  Serial.println("rechtsvor(mittel)");     rechtsvor(mittel);     delay(3000); halt(); delay(1000);
  Serial.println("rechtszurueck(mittel)"); rechtszurueck(mittel); delay(3000); halt(); delay(1000);

  Serial.println("vorwaerts(mittel)");     vorwaerts(mittel);     delay(3000); halt(); delay(1000);
  Serial.println("rueckwaerts(mittel)");   rueckwaerts(mittel);   delay(3000); halt(); delay(1000);

  Serial.println("rechtsdrehen(mittel)");  rechtsdrehen(mittel);  delay(3000); halt(); delay(1000);
  Serial.println("linksdrehen(mittel)");   linksdrehen(mittel);   delay(3000); halt(); delay(1000); 
 
}

 

 

// Testprogramm für den Roboter mit 2 Abstandssensoren

const int echovorne = 6;
const int triggervorne = 7;
const int echohinten = 2;
const int triggerhinten = 3;


const int links_richtung = 9; //   IN 4,  HIGH = Vorwärts, LOW = Rückwärts
const int rechts_richtung = 10; //  IN 1,  HIGH = Vorwärts, LOW = Rückwärts
const int rechts_geschwindigkeit = 11; //   IN 2, 0 = langsam,  255 = schnell
const int links_geschwindigkeit = 12; //   IN 3, 0 = langsam,  255 = schnell


int mittel = 150;
int status_ = 0;
int status_alt = 0;
float cmvorne = 0;
float cmhinten = 0;
float abstand = 30;

void setup () {
  Serial.begin(9600);
  pinMode(links_richtung,OUTPUT);
  pinMode(rechts_richtung,OUTPUT);
  pinMode(links_geschwindigkeit,OUTPUT);
  pinMode(rechts_geschwindigkeit,OUTPUT);
  pinMode(triggervorne,OUTPUT);
  pinMode(echovorne,INPUT);
  pinMode(triggerhinten,OUTPUT);
  pinMode(echohinten,INPUT);
}

void linksvor(int v)      {  digitalWrite(links_richtung,HIGH); analogWrite(links_geschwindigkeit,255-v);}  //Rechte Seite wird dadurch nicht beeinflusst
void linkszurueck(int v)  {  digitalWrite(links_richtung,LOW);  analogWrite(links_geschwindigkeit,v);}  //Rechte Seite wird dadurch nicht beeinflusst
void rechtsvor(int v)     {  digitalWrite(rechts_richtung,HIGH); analogWrite(rechts_geschwindigkeit,255-v);}  //Linke Seite wird dadurch nicht beeinflusst
void rechtszurueck(int v) {  digitalWrite(rechts_richtung,LOW);  analogWrite(rechts_geschwindigkeit,v);}  //Linke Seite wird dadurch nicht beeinflusst

void vorwaerts (int v)    {  linksvor(v); rechtsvor(v);              }
void rueckwaerts (int v)  {  linkszurueck(v); rechtszurueck(v);      }
void rechtsdrehen (int v) {  linksvor(v); rechtszurueck(v);          }
void linksdrehen (int v)  {  linkszurueck(v); rechtsvor(v);          }
void halt()               {  linkszurueck(0);   rechtszurueck(0);      }


void loop () {

//  Vorne Abstand messen
     digitalWrite(triggervorne, LOW);
     delayMicroseconds(2);
     digitalWrite(triggervorne, HIGH);
     delayMicroseconds(10);
     digitalWrite(triggervorne, LOW);
     cmvorne = pulseIn(echovorne, HIGH) / 58.0;
     cmvorne = (int(cmvorne * 100.0)) / 100.0;

// Hinten Abstand messen
     digitalWrite(triggerhinten, LOW);
     delayMicroseconds(2);
     digitalWrite(triggerhinten, HIGH);
     delayMicroseconds(10);
     digitalWrite(triggerhinten, LOW);
     cmhinten = pulseIn(echohinten, HIGH) / 58.0;
     cmhinten= (int(cmhinten * 100.0)) / 100.0;

 Serial.print("Abstand vorne: "); Serial.print(cmvorne); Serial.print("      Abstand hinten: "); Serial.println(cmhinten);

//Status    0 = Halt, 1 = Vorwärts,  2 = Rückwärts

  if (((cmvorne > abstand) or (cmhinten > abstand)) and (status_alt == 0)) { status_ = 1;}
  if (cmvorne < abstand) { status_ = 2;}
  if (cmhinten < abstand) { status_ = 1;}
  if ((cmvorne < abstand) and (cmhinten < abstand)) { status_ = 0;}

 Serial.print("status_alt: "); Serial.print(status_alt);  Serial.print("      status: "); Serial.println(status_);

if (status_alt != status_) {
  halt();
  delay(50);
  if (status_ == 1)  { vorwaerts(mittel);}
  if (status_ == 2)  { rueckwaerts(mittel);}
  if (status_ == 0)  { halt();}
  status_alt = status_;
}
delay(1000);   // Damit man am Monitor die Daten verfolgen kann
}

Erstellt: Andreas Hecker (23.05.2014) Letzte Änderung: Maximilian Reitz (23.12.2014)