Tamiya Linienfolger entsteht...
Nachdem ich einiges im Web gesehen hatte, wie man mit Tamiya Baugruppen auch Roberter bauen kann, habe ich mich auch dazu entschlossen.
Durch die Tatsache nur Online kaufen zu können, weil nächster Händler fast 100km weiter ist, ist es natürlich auch um einiges schwieriger ,gleich das Passende zu finden, bzw. noch Fehlendes nachzukaufen.
Verwenden tue ich eine Grundplatte, Kettenantrieb und Doppelgetriebebox von Tamiya. Der SteuerComputer ist ein Arduino Pro Mini (5v/16Mhz), die Motoren werden von einem Pololu MiniMotortreiber gesteuert. Ein Selbstbau Liniensensor und 4 Taster an der Roboterfront, sorgen für die Steuerung der Fahrtrichtungs- bzw. Kollosionserkennung.
Hier einige Fotos von meinem Baugeschehen (wird lfd erneuert)
Für verbessernde Hinweise bin ich Euch allen dankbar.
Der Arduino-Code wird demnächst vorgestellt
Gerhard
Arduino-Code ( Entwurf, unfertig)
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
}
Liste der Anhänge anzeigen (Anzahl: 1)
Nun ja RB das passiert ja uns alle mal...
ich habe jetzt ein Problem mit dem Spannungsteiler für die Kollosionstaster. ich weiss nicht so recht wie ich anfangen soll mit der Berechnung. Ich habe 4 Taster die einen Spannungsteiler (5R) abfragen und nach Reihenfolge 1,2,3 bzw4 Volt am Ausgang, aus einer stabilisierten 5V-Spannung liefern sollen.
Es soll etwa um die 1mA durch den Spannungsteiler fliessen.
Ich finde einfach nicht den Start wie ich das Berechnen angehen sollte. irgendwo klemmt da der Groschen... wegen dem R6 der den Ausgang normal auf +5V hält (zum Analogeingang µC) Weiss wer wie hochohmig diese Analogeingänge sind ??
Hier die Schaltung, vielleicht kann mir wer einen Tip geben...
Anhang 25022Ich sage schon mal Danke,
Gerhard
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mir das mit der Kollosionserkennung nochmals übedacht un einen anderen Weg gewählt, 4 Taster und 4 Analogeingänge. Da ich ja den µC Baustein(ArduProMini) und auch den Motortreiber steckbar habe auf der Elektronik-Grundplatte, kann ich für andere Anwendungen eine neue Grundplatte für die Elektronik machen. Auch der Tastenkopf liesse sich dann noch verwenden, ebenso Modulbauweise, auch elektrisch gesehen, anders ist auch diese schnell neu zusammen gelötet.
Hier die Schaltung , das müsste so gehen, oder bedarf es noch Kondis an den Tastern ??
Anhang 25032
Gruss Gerhard
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
ich würde es so machen:
Anhang 25036
und dann einfach die werte einmal übers terminal anzeigen lassen - und dann in Programm mit toleranz eintragen.