Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Projekte Fahrzeugsteuerung

Fahrzeugsteuerung

 /* Motosteuerung eines Roboters */

int geschwindigkeit = 150;        /* Standardgewindigkeit für die Motoren  */
float faktor = 0.95;             /* Ausgleichsfaktor für die Motoren.  Muss experimentell ermittelt werden.*/
/* !!!!!!!!  Achtung   Achtung  Bei Linkskurven wird der Kurvenfaktor 2x eingesetzt
Wahrscheinlich reagieren die Motoren bzw. das Fahrgestell beim Vorwärtsgang anders als bei Rückwärtsgang :-((*/
float kurvenfaktor = 1.2;      /* Faktor für den Kurvenradius  */
const int El = 6;          /*   PWM - Ausgang zur Steuerung des Motors 1 = links  */
const int Ml = 7;          /*  Laufrichtung von Motor 1 = links  einstellen HIGH = vorwärts, LOW = rückwärts  */
const int Er = 5;          /*  Analog für Motor 2  = rechts  */
const int Mr= 4;          /*  Analog für Motor 2  = rechts  */
 
void setup()
  {
  Serial.begin(9600);
  pinMode(El, OUTPUT);
  pinMode(Ml, OUTPUT);
  pinMode(Er, OUTPUT);
  pinMode(Mr, OUTPUT);
  }

void halt()
{
    int l = 0;
    int r = 0;
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  halt");
    digitalWrite(Ml,HIGH);
    digitalWrite(Mr, HIGH);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control  
}
 
void geradeausvorwaerts(int g)
{
    int l = floor(g*faktor);
    int r = g;
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  geradeausvorwaerts");
    digitalWrite(Ml,HIGH);
    digitalWrite(Mr, HIGH);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void geradeausrueckwaerts(int g)
{
    int l = floor(g*faktor);
    int r = g;
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  geradeausrueckwaerts");
    digitalWrite(Ml,LOW);
    digitalWrite(Mr, LOW);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void rechtsdrehen(int g)
{
    int l = floor(g*faktor);
    int r = g;
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  rechtsdrehen");
    digitalWrite(Ml,HIGH);
    digitalWrite(Mr, LOW);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void linksdrehen(int g)
{
    int l = floor(g*faktor);
    int r = g;
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  linksdrehen");
    digitalWrite(Ml, LOW);
    digitalWrite(Mr, HIGH);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void rechtskurvevorwaerts(int g)
{
    int l = floor(g*faktor*kurvenfaktor);
    int r = floor(g/kurvenfaktor);
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  rechtskurvevorwaerts");
    digitalWrite(Ml,HIGH);
    digitalWrite(Mr, HIGH);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void linkskurvevorwaerts(int g)
{
    int l = floor(g*faktor/kurvenfaktor/kurvenfaktor);
    int r = floor(g*kurvenfaktor*kurvenfaktor);
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  linkskurvevorwaerts");
    digitalWrite(Ml,HIGH);
    digitalWrite(Mr, HIGH);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void rechtskurverueckwaerts(int g)
{
    int l = floor(g*faktor*kurvenfaktor);
    int r = floor(g/kurvenfaktor);
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  rechtskurverueckwaerts");
    digitalWrite(Ml,LOW);
    digitalWrite(Mr, LOW);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}
 
void linkskurverueckwaerts(int g)
{
    int l = floor(g*faktor/kurvenfaktor/kurvenfaktor);
    int r = floor(g*kurvenfaktor*kurvenfaktor);
    Serial.print(l);  Serial.print("   ");  Serial.print(r);  Serial.println("  linkskurverueckwaerts");
    digitalWrite(Ml,LOW);
    digitalWrite(Mr, LOW);
    analogWrite(El, l); //PWM Speed Control
    analogWrite(Er, r); //PWM Speed Control
}

void loop()
{
   geradeausvorwaerts(geschwindigkeit);
   delay(5000);
   halt();
   delay(1000);
   geradeausrueckwaerts(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   rechtsdrehen(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   linksdrehen(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   rechtskurvevorwaerts(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   linkskurvevorwaerts(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   rechtskurverueckwaerts(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
   linkskurverueckwaerts(geschwindigkeit);
   delay(3000);
   halt();
   delay(1000);
}

Erstellt: Andreas Hecker (01.05.2013) Letzte Änderung: Andreas Hecker (08.05.2013)