Code:
	/* ========================================================================== */
/*                                                                            */
/*       Linienfolger mit Arduino Pro Mini und Tamiya Chassis & Antrieb       */
/*                                                                            */
/* ========================================================================== */
/*                                                                            */
/*   tamiya_lf.c                                                              */
/*   (c) 2013 Gerhard Hinze                                                   */
/*                                                                            */
/*   Beschreibung:                                                            */
/*   Tamiya Chassis und Ketten Antrieb als Lininienfolger                     */
/*   (auch als Radmodell verwendbar )                                         */  
/*                                                                            */
/* ========================================================================== */
/*   verwendetete Tamiya Baugruppen :                                         */ 
/* ========================================================================== */ 
/*                                                                            */
/*   1x Double Gear-Box             ITEM 70168                                */
/*   1x Universal-Plate Set         ITEM 70098                                */
/*   1x Universal-Plate Set         ITEM 70157 *)                             */
/*   1x TRUCK and Wheel Set         ITEM 70100                                */
/*   1x Truck Tire Set              ITEM 70101 *)                             */
/*                                                                            */
/* ========================================================================== */
/*                                                                            */
/*   Pololu Ball Caster 3/8" m. Kunststoffkugel *)                            */
/*                                                                            */
/*   *) je nach Bedarf (als Radmodell, andere Erweiterungen usw..)            */
/* ========================================================================== */
/*                                                                            */
/*   Elektrische Komponenten:                                                 */
/* ========================================================================== */
/*   Arduino Pro Mini 5V/16-MHz                                               */
/*   FETB6612 Miniatur - Motortreiber von  robotikhardware.de                 */
/*   2 x TCRT5000 Optosensor (Linienfolger) Eigenbaumodul                     */
/*   1 Batteriehalter für 3xAA 1,5V  als Motorspannung                        */
/*   Batterieblock 9V mit Anschluss Clip, (f.Elektronikspannung)              */
/*   Baustein mit LS7805, als 5V Regelung U-Betr. für Elektronik, Eigenbau    */ 
/*                                                                            */
/* ========================================================================== */
/*                                                                            */
/*  Beschreibungen unter http://robot.oderlachs.de                            */
/*                                                                            */
/* ========================================================================== */
/*                                                                            */
/* #include usw...                                                            */
/*                                                                            */
/* ========================================================================== */
/*                                                                            */
/* Bezeichnung     Pin Arduino   Erklaerung zur Bezeichnung                   */
/*                                                                            */
/* ========================================================================== */
#define M1_SPEED      5     // Motor left  Speed
#define M2_SPEED      6     // Motor right Speed
#define AIN_1         4     // Motordirektion 1_1
#define AIN_2         7     // Motordirektion 1_2
#define BIN_1         8     // Motordirektion 2_1
#define BIN_2         9     // Motordirektion 2_2
#define STANDBY       10    // Motordriver Standby(ON))  = LOW
#define IRS_LEFT      14    // IR Linien Sensor left, analog Eingang A0
#define IRS_RIGHT     15    // IR Linien Sensor right, analog Eingang A1
#define LED_1         12    // IRS left = LOW 
#define LED_2         13    // IRS right = LOW
#define BUMP_L        16    // Frontkollosion left
#define BUMP_R        17    // Frontkollosion right
#define INT_0         2     // External Interrupt 0
#define INT_1         3     // External Interrupt 1
/* ========================================================================== */
/*     Änderungen bei Verwendung der L298 Dual Bridge  ( Bodo )               */
/* ========================================================================== */
/*  #define STANDBY      10   Motordriver Standby entfällt, also "//" davor   */
/*                                                                            */
/*  alle Codezeilen mit STANDBY im Programm-CODE sind zu löschen!             */
/*                                                                            */
/* ========================================================================== */
/*  die 4 oberen #define  ( AIN_1..., AIN_2, BIN_1, BIN_2 )                   */
/*  sind hiermit zu ersetzen :                                                */
/*                                                                            */
/*  #define IN_1         4     // Motordirektion 1_1                          */
/*  #define IN_2         7     // Motordirektion 1_2                          */
/*  #define IN_3         8     // Motordirektion 2_1                          */
/*  #define IN_4         9     // Motordirektion 2_2                          */
/*                                                                            */
/*  #define EN_A         5     // vorher M1_SPEED  Motor left  Speed          */
/*  #define EN_B         6     // vorher M2_SPEED  Motor right Speed          */
/*                                                                            */
/*  Die nun anderen #define-Variablennamen sind im Code                       */
/*  dementsprechend zu aendern, Suchen/Ersetzen funktion verwenden            */
/*                                                                            */
/* ========================================================================== */
/*          Werte der Variablen voreinstellen  im Hex-Format                  */
/* ========================================================================== */
#define SPEED_NULL    0x00  // Speed Wert NULL
#define SPEED_MAX     0xFF  // Speed Wert Maximum
#define SPEED_HALF    0x80  // Speed Wert halbeKraft
#define SPEED_KURV    0xC8  // Speed Wert für Kurvenfahrt (opt. Wert ermitteln)
#define IRS_OFFSET    0x00  // optm. Wert ermitteln, Speed = Speed - IRS_OFFSET
/* ========================================================================== */
/* IRS_OFFSETT :                                                              */
/* Befinden sich beide Sensoren über den schwarzen Streifen, sind             */
/* beide IRS Ausgänge auf HIGH, schaltet einer der Sensoren auf LOW, d.h. Ab- */
/* weichung von der Mitte, wird jeweils der Motorspeed der anderen Seite um   */
/* den IRS_OFFSETT Wert vermindert. Experimentell zu ermitteln 0x00...0x80    */
/*                                                                            */
/* ========================================================================== */
void setup()
//
{
pinMode(M1_SPEED,OUTPUT);
pinMode(M2_SPEED,OUTPUT);
pinMode(AIN_1,OUTPUT);
pinMode(AIN_2,OUTPUT);
pinMode(BIN_1,OUTPUT);
pinMode(BIN_2,OUTPUT);
pinMode(LED_1,OUTPUT);
pinMode(LED_2,OUTPUT);
pinMode(STANDBY,OUTPUT);
pinMode(IRS_LEFT,INPUT);
pinMode(IRS_RIGHT,INPUT);
pinMode(BUMP_L,INPUT);
pinMode(BUMP_R,INPUT);
digitalWrite(STANDBY,HIGH);
}
void m1_forw()                // Motor 1 (left) forward
{
digitalWrite(AIN_1, LOW);
digitalWrite(AIN_2, HIGH);
}
void m1_rew()                 // Motor 1 (left) reverse
{
digitalWrite(AIN_1, HIGH);
digitalWrite(AIN_2, LOW);
digitalWrite(STANDBY, HIGH);
}
void m2_forw()                // Motor 2 (right) forward
{
digitalWrite(BIN_1, LOW);
digitalWrite(BIN_2, HIGH);
digitalWrite(STANDBY, HIGH);
}
void m2_rew()                 // Motor 2 (right) reverse
{
digitalWrite(BIN_1, HIGH);
digitalWrite(BIN_2, LOW);
digitalWrite(STANDBY, HIGH);
}
void stopp()                  // Motor 1 + 2  stopp
{
digitalWrite(STANDBY, LOW);
analogWrite(M1_SPEED, 0x00);
analogWrite(M2_SPEED, 0x00);
}
void speed(int m1, int m2)    // Speed Motor 1 und 2
{
analogWrite(M1_SPEED, m1);
analogWrite(M2_SPEED, m2);
}
void coll_l()                 // Collosion left
{
stopp();
delay(500);
m2_rew();
speed(0,SPEED_KURV);
delay(500);
stopp();
}
void coll_r()                 // Collosion right
{
stopp();
delay(500);
m1_rew();
speed(SPEED_KURV,0);
delay(500);
stopp();
}
void coll_c()                 // Collosion center
{
stopp();
delay(500);
m1_rew();
m2_rew();
speed(SPEED_HALF,SPEED_HALF);
delay(500);
stopp();
}
void brake_l()                // Bremse left 
{
  ;
}
void brake_r()                // Bremse right
{
  ;
}
void loop()
// Ab hier wird "gearbeitet ;)"
{
  m1_forw();                   // Motor1(links) vorwärtz
  m2_forw();                   // Motor2(rechts) vorwärtz
 digitalWrite(STANDBY, HIGH);  // Motortreiber aus denm Standby aufwecken
  speed(SPEED_MAX,SPEED_MAX);  // Beide Motoren mit 255 ansteuern: 0xFF
}
 
						
Lesezeichen