PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tamiya Linienfolger entsteht...



oderlachs
31.03.2013, 10:30
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 (http://arduino.cc/en/Main/ArduinoBoardProMini) (5v/16Mhz), die Motoren werden von einem Pololu MiniMotortreiber (http://www.pololu.com/catalog/product/713) 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 (http://robot.oderlachs.de/tamiya_lf1/) (wird lfd erneuert)

Für verbessernde Hinweise bin ich Euch allen dankbar.

Der Arduino-Code wird demnächst vorgestellt

Gerhard

Arduino-Code ( Entwurf, unfertig)
/* ================================================== ======================== */
/* */
/* 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
}

robo_tom_24
31.03.2013, 11:08
Hallo
Sieht ja schon ganz gut aus :)

Was sind denn das für Sensoren, die du für das Erkennen der Linie verwendest?

grüße

oderlachs
31.03.2013, 11:17
Hallo
Sieht ja schon ganz gut aus :)

Was sind denn das für Sensoren, die du für das Erkennen der Linie verwendest?

grüße

Danke für die "Blumen" :)

Zu den Sensoren, ich habe diese hier verwendet : 2 x TCRT5000 (http://circuits.datasheetdir.com/351/TCRT5000-pinout.jpg) Optosensor
Beispiel dazu HIER (http://www.bajdi.com/analogread-from-a-tcrt5000-sensor/)

Zur allgemeinen Info die Bauteile/Module sind alle im Listing(Code) erwähnt...

Gerhard

oberallgeier
31.03.2013, 13:44
Alle Achtung, sieht ja sauber aus. Mein Glückwunsch!

Gibts zum Fahrgestell Angaben? Lieferant, gibts die Ketten-Antriebsräder separat - ohne Getriebe? Sind die Ketten fixlang oder Meterware . . . Woher beziehst Du den TCRT5000 ? Welche Entfernung schafft der? Damit würde ich ja gern mal spielen - und ich zahle NIE PayPal *ggg*.

oderlachs
31.03.2013, 14:21
Danke Josef, für die Anerkennung .
Dies ist auch der erste Robot den ich ganz und gar selber zusammenbaue, wenn auch aus viel Handelsüblichem , aber das liegt in meiner Krankheit mit Augen bzw. Gelenke begründet.
Im Quellcode ist eigendlich alles beschrieben:

/* 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..) */
/* ================================================== ========================*/
/*


Es ist als Ketten- oder Radmodell ausgelegt, darum versch. Teilevarianten oben zu lesen


Gekauft habe ich bei Watterott, Lipoly und Ebay(TCRT5000). Ich habe den Code eigendlich für einen Freund zum Erlernen geschrieben,
daher auch die viele Dokumentation da drinnen. Wir bauen dann ähnliche Projekte auf, damit ich beibei Ihm auftretende Fehlern ,
in Sachen Software/Elektronik helfen kann. Das nächste Projekt ist ein Rover 5(4WD) , danach folgt ein HEXABot,
wo ich wieder auf seine "CNC-Fräskunst" angewiesen bin. So kann man sich doch gut untereinander helfen.:)

So nun gibt es Oster(-Schnee)kaffee...

Gruss Gerhard

PS. Gebe Tamiya + obige Item Nr. bei Google ein dann findest Du alles dazu ....

oberallgeier
31.03.2013, 16:55
... Gekauft habe ich bei Watterott ... Tamiya + obige Item Nr. bei Google ein dann findest Du alles dazu ...Danke. Watterott und Tamiya - wenn ich das lese, schau ich gleich bei pololu nach. Da steht fast alles. Nur Abmessungen nicht. Die habe ich aus den Bildern rausgemessen.

oderlachs
31.03.2013, 17:13
@JoeamBerg : Sag wenn Du Details benötigst, messen kann ich noch..das sehen meine beiden "Hühneraugen" noch.. ;)
Manchmal ist es "furchtsam" mit den Daten der Abmessungen usw. in den Datenblättern.

Gerhard

Zur Beachtung: in der LtrPl.-Zeichnung auf meiner Webseite, ist der 5V Regler falsch eingezeichnet. Er muss mit den Anschlüssen um 180° gedreht werden. Das hatte ich übersehen, nur falls sich da wer dran "stossen" sollte.

HeXPloreR
31.03.2013, 17:55
Hallo Gerhard,

das sieht doch klasse aus was Du da gebaut hast.
Nur weiter so :) *alle Daumen hoch mach*

Dir auch noch Frohe Ostern.

oderlachs
31.03.2013, 18:53
Danke für die Anerkennung HeXPlorer !
ja ich habe aber bei nochmaliger Betrachtung einen Fehler in der Leiterzeichnung festgestellt, C2 geht mit + an die Dr1, so ist es richtig, er soll nochmals die Spannung vor dem Motortreiber glätten/sieben, kann sein das ich die µF"ahrräder" mit ein paar Picos oder Nanos noch brücke...weil ein wenig viel HF bei mir noch umherschwirren kann, mal sehen was die Praxis zeigt(CB-Funk, PMR-Funk).
Auch hatte ich heute einen "schlechten Blick", habe alle Kollosionstaster verkehrt eingelötet, nun ja waren auch nicht die die eigendlich da rein sollten, muss ich noch umlöten. Das mache ich morgen in Ruhe, heute war ein wenig Wirbel um uns , alle Ostereier aus dem Schnee graben ;)
Meine bilderfolge im Web werde ich so gut es geht aktualisieren, wenn was neues kommt, werde auch Kommentare zu den Fotos noch einstellen.

Gerhard

robo_tom_24
31.03.2013, 23:46
Ok danke, ich sollt halt vorher lesen ;)

grüße

oderlachs
01.04.2013, 15:20
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...
25022Ich sage schon mal Danke,
Gerhard

robo_tom_24
01.04.2013, 16:43
Ich würd das so berechnen, dass du maximal rund 20kOhm der Signalquelle hast, die den Mindeststrom zum Aufladen des Speicherkondensators im Controller liefert. Dann die Wunschspannungen definierten (in deinem Fall 1,2,3 und 4V) und so die Widerstände R1 bis R5 berechnen. Den R6 würd ich von Anfang an mit so ca 20k-30k nehmen (der was gerade am nächsten in der Bastelkiste liegt) ;)

grüße

Searcher
02.04.2013, 09:42
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...

Ich versuch es mal:
Datenblatt
24.6.1 Analog input circuitry
An analog source applied to ADCn is subjected to the pin capacitance and input leakage of that pin

Bedeutet für mich, daß, nachdem die Kapazität aufgeladen ist, nur noch der Eingangsleckstrom fließt.

Nach "29. Electrical characteristics" ist der input leakage maximal 1µA - der Eingang also so hochohmig ist, daß der statische Widerstand vernachlässigt werden kann.

Wieder nach "24.6.1 Analog input circuitry":
The ADC is optimized for analog signals with an output impedance of approximately 10kOhm or less.

Nachdem der letzte Taster geöffnet ist, sollte also ein optimaler Quellwiederstand von 10kOhm oder weniger anliegen. Das wäre R6, der den Eingang auf 5V bringt. Für R6 also 10kOhm wählen.

Um bei fünf (R1 bis R5) Widerständen ohne parallel getasteten R6 auf die 1,2,3,4Volt Abstufungen zu kommen, müßten alle Widerstände gleich groß sein, zB 1kOhm. Davon ausgehend und dem untersten geschlossenen Taster müßte nun der ADC 4kOhm nach Vcc (und 1kOhm nach GND) "sehen" um 1Volt zu messen. R5 soll also 1kOhm sein. Da aber mit dem Taster nun R6 parallel zu Reihenschaltung von R1 bis R4 liegt, können die NICHT je 1kOhm groß sein.
Berechnung:

Wenn der oberste Taster geschlossen wird, sind R1 und R6 parallel und sollten nun gemeinsam auf 1kOhm kommen.

R1||R6 = Rg = R1*R6/(r1+R6)
R1 = Rg * R6 / (R6 - Rg)
R1 = 1111,11.. Ohm

Wird der zweite Taster geschlossen, ist R6 parallel zu Reihenschaltung von R1 und R2 und muß auf 2kOhm kommen
R12 = Rg * R6 / (R6 - Rg)
R12 = 2000 * 10000 / (10000 - 2000) [Ohm]
R12 = 2500 Ohm
R2 = R12 - R1 = 2500 Ohm - 1111,11 Ohm = 1388,89 Ohm

... und so weiter ...

Wenn ich alles richtig gerechnet habe (im Excel sheet) komme ich auf ca. 0,65mA durch R1..R5 wenn alle Taster offen sind.

EDIT: Sorry, in der Rechnung steckt ein Denkfehler. Siehe weiter unten (https://www.roboternetz.de/community/threads/61501-Tamiya-Linienfolger-entsteht?p=575577&viewfull=1#post575577)

Die Widerstände R1 bis R5 so zu berechnen, daß bei geöffneten Tastern genau 1mA fließt ist weit umfangreicher und meiner Ansicht nach nicht notwendig.

(keine Gewähr für Richtigkeit)
Gruß
Searcher

oderlachs
02.04.2013, 10:07
Hallo Searcher !
Habe vielen vielen Dank für Deine Mühen, um den Rechenweg. Vielleicht bin ich auch ein bischen pingelig in dieser Sache. Ich könnte ja einfach diese Sache vom "Asuro" übernehmen, aber ich wollte mal was Eigenes machen, wenn auch mit Hilfe und Infos von Anderen.
Wenn man das erste Mal so aus eigenen Entwürfen u. Gedanken baut, gibt es noch viele problem. Sachen die man einfach erst beim Aufbau merkt, weil man ja noch so keine Erfahrungen hat. So musste ich das Chassis ändern und auch eine 2. Ebene noch einbauen, schlimmer ist mein Batteriehalter passt nicht so wie gewollt, also erst bestellen, dann warten, dann kann es weitergehen...
Ich wollte die Auswertung der Taster über Switch/Case machen, darum brauche ich genaue Werte. Mit der softwaremässigen Auswertung von bestimmten Bereichen tue ich mich noch etwas schwer in C/C++, aber vielleicht komme ich noch dahinter und es ist einfacher als switch/case..mal sehen..
Der Baufortschritt ist auf der im Signum angegebenen Webseite wieder aktualisiert, vielleicht werde ich noch eine Webseite mit dem aktuellen Code einbinden, na mal sehen...
Danke Dir nochmal


Gerhard

P.S. Das mit den 1mA war nur ein Richtwert...nicht das unnötiger Strom gezogen wird, ein 9V Block ist nicht gerade die Kapazität

Searcher
02.04.2013, 10:20
Ich könnte ja einfach diese Sache vom "Asuro" übernehmen, aber ich wollte mal was Eigenes machen, wenn auch mit Hilfe und Infos von Anderen.

Find ich komplett in Ordnung. So lernt man mehr als nur abzukupfern.




Ich wollte die Auswertung der Taster über Switch/Case machen, darum brauche ich genaue Werte. Mit der softwaremässigen Auswertung von bestimmten Bereichen tue ich mich noch etwas schwer in C/C++, aber vielleicht komme ich noch dahinter und es ist einfacher als switch/case..mal sehen..

Ich kann eigentlich nur bei BASCOM mitreden. CASE wird aber auch in C nicht groß anders arbeiten und ist meiner Ansicht nach schon das Richtige. Statt eines genauen Wertes gibt man einen Wertebereich an, zB "0,5 to 1,5"[Volt]. Kommt man sicher nicht drumrum, da man die errechneten Werte nicht als realen Widerstand kaufen kann, die auch noch eine Toleranz haben und der ADC auch mit einer Toleranz arbeitet.

EDIT: Wertebereich in CASE scheint es in C nicht zu geben. Dann muß man wohl mit IF... arbeiten bzw eine Variable, die mit CASE ausgewertet wird vorher mit IF entsprechend belegen :confused:

Bin gespannt wie es weitergeht und viel Erfolg

Gruß
Searcher

Searcher
02.04.2013, 13:10
Ich glaub in meiner wunderschönen Rechnung steckt ein noch hübscherer Denkfehler. Hab zwar aus den 1k, 2k, ... Parallelwiderständen die R1, R2 ... ausgerechnet aber nicht bedacht, das R3, R4 auch nicht mehr 1k groß sind und sich dadurch die Spannungsteilerverhältnisse verschoben sind :( Hab noch keine Ahnung wie man es einfach und richtig macht :(

Sorry und Gruß
Searcher

oderlachs
02.04.2013, 14:33
Mach Dir nicht so den Kopf darüber, ich habe erst mal für die Version 1 den Code (http://robot.oderlachs.de/tamiya_lf.html)und die Schaltung geändert, nutze für jede Kollosionstaste einen separ. Analogeingang, ist in dieser Bauweise noch möglich , das Teil wird ja modular aufgebaut, also einzelne Baugruppen vielseitig verwendbar, na und code ändert man 1 fix 3...wenn sie dann auch geht grinsel ;)
Die aktuelle Code ist auch jetzt in meiner Signatur abrufbar.
Ich werde aber mit Deiner Anregung weiterarbeiten, mal sehen ob es einfach machbar ist. Hatte das Kollisions-Teil schon mal bei meinem Roboduino (http://robot.oderlachs.de/roboduino) so gebaut, hat noch nicht recht geklappt, aber ich denke es lag da an meinem Code dafür.

Gerhard

Searcher
02.04.2013, 14:52
Mach Dir nicht so den Kopf darüber,
:-) zu spät. Hat meinen Ehrgeiz geweckt. Leider läuft mir das immer auf eine Gleichung mit zwei Unbekannten hinaus. Wär ja an sich nicht so das Problem - mag aber nicht so große Formeln schreiben :(

Gruß
Searcher

oderlachs
02.04.2013, 17:12
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 ??
25032
Gruss Gerhard

Searcher
02.04.2013, 17:26
Hier die Schaltung , das müsste so gehen, oder bedarf es noch Kondis an den Tastern ??
Ja, müßte gehen. Ob Kondensatoren benötigt werden hängt vom Programm ab. Stichwort: Entprellung. Kann man auch softwaremäßig machen oder ist vielleicht sogar gar nicht notwendig.

Für die Schaltung reichen auch digitale Eingänge. Anstelle der 4,7k Pullups kann man auch die µC internen Pullups nehmen.


Falls Du noch Lust auf Deine erste Schaltung hast (https://www.roboternetz.de/community/threads/61501-Tamiya-Linienfolger-entsteht?p=575506&viewfull=1#post575506), hier noch ein Versuch von mir :-)

Von der ersten Überlegung (https://www.roboternetz.de/community/threads/61501-Tamiya-Linienfolger-entsteht?p=575567&viewfull=1#post575567) bleibt R5 = 1kOhm
Wenn der unterste Taster geschlossen wird muß der Reihenwiderstand (R1..R4) parallel zu R6 (10kOhm) 4kOhm ergeben um 1Volt zu messen.

Daraus folgt, daß der Reihenwiderstand 6666,66 Ohm sein muß (R1234 = Rg*R6/(R6-Rg) = 4000*10000/(10000-4000) )

Nächster Schritt: R4 ausrechnen wenn voletzter Taster gedrückt ist und 2 Volt gemessen werden sollen.

Hab nun zwei Gleichungen aufgestellt:

1. Reihenschaltung R123 plus R4 ohne R6 parallel muß 6666 Ohm ergeben.
R123 + R4 = 6666,66 Ohm

2. Wenn vorletzter Taster gedrückt muß über R123 mit R6 parallel eine Spannung von 3 Volt abfallen.
Über die Reihenschaltung von R4 und R5 dann die restlichen 2 Volt. Spannungen verhalten sich in Reihenschaltung wie die Widerstände.



R123 * R6 / (R123 + R6) 3 Volt
----------------------- = ----------
R4 + R5 2 Volt

Jetzt kann man mit Hilfe der ersten Gleichung zB R123 in der zweiten Gleichung ersetzten und kommt zu einer quadratischen Gleichung. Die hab ich dann mit Hilfe der Wolfram Alpha INET Seite aufgelöst (Schule liegt auch schon einiges zurück) und bin bei R4 auf etwas mehr als 1300 Ohm gekommen.


Das kann man nun mit dem drittletzten Taster wiederholen:

1. R12 + R3 = R1234 - R4 = 6666,66 Ohm - 1300 Ohm

2.



R12 * R6 / (R12 + R6) 2 Volt
----------------------- = ----------
R3 + R4 + R5 3 Volt

Hoffentlich kennt da noch jemand was einfacheres

Gruß
Searcher

HeXPloreR
02.04.2013, 18:25
hallo,

ich würde es so machen:

25036

und dann einfach die werte einmal übers terminal anzeigen lassen - und dann in Programm mit toleranz eintragen.

Searcher
02.04.2013, 18:48
@HeXPloreR: Eine Frage von oderlachs war nach dem Eingangswiderstand des ADC bzw wie sollte die Außenbeschaltung des ADC Pins aussehen. Nach Datenblatt sollte die Impedanz der Außenbeschaltung optimalerweise 10k und weniger sein. Ich bin da auch nicht sicher, ob ich das Datenblatt richtig verstanden und angewendet habe.

Bei Deiner Schaltung zieht der 1M Widerstand den ADC nach GND. Wenn der oberste Taster gedrückt ist und dann gelöst wird, sinkt die Spannung am ADC Pin durch den hohen 1M zu langsam ab. Wenn in dem Augenblick eine Messung kommt, könnte eine falsche Taste als gedrückt erkannt werden. Wie gesagt, bin mir da nicht sicher:confused:

Gruß
Searcher

oderlachs
07.04.2013, 10:43
Also, da ich noch freie Analogeingänge in dieser variante hatte, habe ich nun alle 4 Taster gegen GNG an diese analogen Ports ,mit 4k7 gegen +5V auf High gelegt, verbunden. da für jede neue Variante eine eigene Elektronikleiterplatte gebaut wird, mit Fassungen für Arduino-Pro-Mini und den Motortreiberbaustein, kann ich das bei einer anderen Variante dann ohne Probleme ändern. Meine weitere Bautätigkeit ist in der Webgalerie aktualisiert, auch der Code ist im Web, aber noch nicht fertig, wird je nach Weiterfertigung der Baugruppen des Bots vervollkommnet.
Leider werde ich durch fehlende Sachen die ich erst bestellen und auch erhalten(!) muß, immer etwas ausgebremst bei der Fertigstellung. Nachdem ich eine "China-Quelle" angebohrt habe, wo der Ardu-Pro-Mini nur noch 1 € kostet, werde ich die anderen Platinen direkt auf die Leiterplatte verlöten, ist ja billiger als ne Fassung. Leider muss ich da noch einen guten Monat drauf warten.. :(
Soweit zur weiteren Fertigstellung des Linienfolgers. Mit den Tamiya Teilen, Chassis, Getriebe ,Antrieb usw. bin ich sehr zufrieden, gegenüber dem Preis. So werde ich ein kleine Robo-Flotte für unsere Jugendeinrichtung erstellen, damit wir Wettbewerbe machen können.

Einen sonnigen Sonntag wünscht

Gerhard

HeXPloreR
07.04.2013, 14:57
Bei Deiner Schaltung zieht der 1M Widerstand den ADC nach GND. Wenn der oberste Taster gedrückt ist und dann gelöst wird, sinkt die Spannung am ADC Pin durch den hohen 1M zu langsam ab. Wenn in dem Augenblick eine Messung kommt, könnte eine falsche Taste als gedrückt erkannt werden. Wie gesagt, bin mir da nicht sicher:confused:

hmm, die Schaltung habe ich aus einem Buch übernommen - ich gehe natürlich davon aus das sie auch funktioniert.
Ich werde das gelegentlich mal aufbauen und austesten.

...Vielen Dank, ich wünsche auch einen schönen Sonntag.

radbruch
07.04.2013, 16:28
Hallo

Durch die Verwendung von lauter gleichen Widerstandswerten kann man mehrere gleichzeitig gedrückte Tasten nicht unterscheiden (beide inneren oder beide äußeren Tasten jeweils zusammen gedrückt ergeben die gleiche Spannung, wenn man die Bauteiletoleranzen vernachlässigt). Besser macht es z.B. das RN-Control:

http://www.rn-wissen.de/images/c/c6/Rncontrol1.4schaltplan.gif

Oder auch die Kollegen vom mikrocontroller.net: http://www.mikrocontroller.net/topic/113731#1016084

Oder der asuro: http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Tasten

Aber auch andere kämpfen hier mit der Tastenauswertung: https://www.roboternetz.de/community/threads/61294-Hardware-Fragen-zur-Multi-IO?p=576037&viewfull=1#post576037

Gruß

mic

oderlachs
07.04.2013, 16:32
Hallo HXP !

Mach Dir mal keine gedanken so gross darum, bei der nächsten Steuerplatinenversion werde ich das mit integrieren und auf dem Breadboard vorher testen, die Ergebnisse kann ich ja hier Posten. ich habe ja schon ein Projekt und da diese Schaltung HIER (http://robot.oderlachs.de/roboduino/html/kollosion.html)
http://robot.oderlachs.de/roboduino/assets/images/autogen/a_kollosion_r_netz.png
mal sehen was das dann wird.

Gruss und Danke auch für Eure Mithilfe

Gerhard

PICture
07.04.2013, 17:15
Hallo!

Ich denke, dass es mit Öffner-Taster und Konstantstromquelle (KSQ) besser wäre.


VCC
+
|
|-+
| T = Konstantstromquelle
+-->|-+
| |
+-----+------------> Ausgang zu ADC
| |
o| .-.
T1 |==|> | | R1 = R
o| '-'
| |
+-----+
| |
o| .-.
T2 |==|> | | R2 = 2xR
o| '-'
| |
+-----+
| |
o| .-.
T3 |==|> | | R3 = 4xR
o| '-'
| |
+-----+
| |
o| .-.
T4 |==|> | | R4 = 8xR
o| '-'
| |
+--+--+
|
===
GND

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

HeXPloreR
07.04.2013, 17:20
Durch die Verwendung von lauter gleichen Widerstandswerten kann man mehrere gleichzeitig gedrückte Tasten nicht unterscheiden (beide inneren oder beide äußeren Tasten jeweils zusammen gedrückt ergeben die gleiche Spannung, wenn man die Bauteiletoleranzen vernachlässigt). Besser macht es z.B. das RN-Control:

Hmm, dann ist meine gezeigte Skizze wohl nicht so gut als Roboterkolissionerkennung geeignet. Denn das wäre ja schon bischen wichtig bei der Sache ;)
Ich verdränge meistens das bei einer Kolission ja auch mehrer Tasten betätigt werden könnten.

Hab ich wieder bisschen was gelernt ;)

oderlachs
07.04.2013, 18:24
Also ich habe die oben von mir genannte Schaltung ausprobiert mal mit diesen TestCode:
/* ================================================== ======================== */
/* */
/* AnalogRead.c */
/* (c) 2013 Gerhard Hinze */
/* */
/* Description */
/* */
/* ================================================== ======================== */
int Aport = 0;
int led = 13;
int wert = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Ich messe: ")
wert =analogRead(Aport);
wert = map(wert,0,1023,1,5);
Serial.println(wert);
delay(1000);
}
klappt wunderbestens , habe je nach Taste 1,2,3,4 oder keine Ta =5 als Messwert zum Entscheiden....
Das mit 2 oder mehr tasten will ich noch nicht berücksichtigen, soll erst mal so laufen...viel mehr Sorgen bereitet mit der Antrib welcher nach rechts abweicht.
Nun ich will das kleine einfache Ding nicht noch mit Odometrie ausrüsten, vielleicht muss das Getriebe erst einlaufen, aber wieder ein Aspeckt der einem leichte Knüppel zwischen die Beine wirft, wie eine nicht funktionierende Batteriehalterung. Ja nicht falsch gelesen, die - Feder der Halterung schaft nicht die Batterie richtig gegen den Pluspol zu drücken....und das ist nun Ladenneu.. :(

Gerhard

Searcher
07.04.2013, 19:54
Hallo,

...viel mehr Sorgen bereitet mit der Antrib welcher nach rechts abweicht.
Nun ich will das kleine einfache Ding nicht noch mit Odometrie ausrüsten, vielleicht muss das Getriebe erst einlaufen, aber wieder ein Aspeckt der einem leichte Knüppel zwischen die Beine wirft,
Ich denke, die beiden Antriebe werden kaum exakt gleich laufen. Fertigungsbedingt haben Getriebe und Motor immer größere oder kleinere Abweichungen voneinander. Wenn es eingelaufen ist, man es genau ausgerichtet hat und es vielleicht noch mit Schmiere probiert hat (Vorsicht Staubfänger) werden sie vermutlich doch immer noch eine Abweichung des Robos von der Geraden verursachen. Durch das Liniefolgen wird das dann aber ausgeregelt.
Zum Fahren auf freier Strecke wird man sicher immer eine Drehzahlregelung/Odometrie brauchen :(


...wie eine nicht funktionierende Batteriehalterung. Ja nicht falsch gelesen, die - Feder der Halterung schaft nicht die Batterie richtig gegen den Pluspol zu drücken....und das ist nun Ladenneu.. :(
Hab ich auch. Hab günstige Batteriehalter genommen und die sind halt nicht so genau hergestellt. Sind so eng, daß die Batterie in der Schale klemmt und die Feder den Widerstand nicht überwinden kann. Mit dengeln und drücken hab ich den Halter etwas weiten können - ist aber nicht das Wahre...

PS: Auch noch allen einen schönen Sonntagabend
Gruß
Searcher