Hallo zusammen,
heute möchte ich Ihnen ein Projekt vorstellen auf das wir durch eine Kundenanfrage aufmerksam wurden. Wir bauen einen einfachen Linienfolge-Roboter.
Das Projekt ist so ausgelegt, dass der Code sowohl mit zwei-, als auch mit vierrädigen Robotern lauffähig ist und stellt einen Kompromiss dar. Für einen Dauerbetrieb sollte der Sketch und die Verschaltung unbedingt geändert werden, da die Last der vier Motoren auf einen IC sehr hoch ist.
Mithilfe zweier Sensoren unterscheidet das Fahrzeug zwischen weißen und schwarzen Untergrund und korrigiert die Fahrtrichtung entsprechend, wir benutzen dazu unsere neuen Sensormodule, ohne Poti.
Das Prinzip ist recht einfach und der dazugehörige Code dementsprechend kompakt was uns an diesem Projekt sehr gefallen hat.
Für dieses Projekt habe ich Ihnen ein Set erstellt, dieses finden Sie hier.
Wir brauchen also:
- Chassis mit Fahrmotoren und Reifen (aktuell nicht im AZ-Shop verfügbar)
- 2 Linienfolgemodule
- Mikrokontroller, kompatibel mit Arduino R3
- Motor-Shield L2930
- Stromversorgung (mit 4x AA-Batterien für 4 Fahrmotoren etwas unterversorgt)
Wir starten mit dem zusammenbauen des Chassis:
Zuerst sollen Sie die Schutzfolien abziehen, wir haben das nicht gemacht, da sich transparente Platten noch schlechter fotografieren lassen.
Zum leichteren Zusammenbau sollten Sie die Motoren, noch vor dem Einbau verdrahten.
Löten Sie dazu Kabel an die kleinen Messing-Fähnchen der Motoren. Wo rot und schwarz befestigt werden spielt vorerst keine Rolle. Kurz zum Verständnis: die Laufrichtung der Motoren kann geändert werden indem die Polung umgedreht wird.
Als nächstes die Halterungen für die Motoren durch das Chassis stecken.
Im Anschluss die bedrahteten Motoren mit den langen, beiliegenden Schrauben befestigen und mit den Muttern sichern:
Dann die Messingbolzen durch die Platte stecken und mit den beiliegenden Muttern befestigen, wo Sie diese anbringen ist abhängig von Ihrem Entwurf und dem späteren Verwendungszweck. Die Positionen sind variabel.
Als nächsten Schritt können Sie schon die Oberseite montieren und festschrauben:
Zum bessern Verständnis hier noch ein Bild von der Seite:
Wo Sie Ihren Controller anbringen und in welche Richtung der Linienfolger fährt können Sie ebenfalls bestimmen. Damit ist der Zusammenbau der Mechanik abgeschlossen. Als nächsten Arbeitsschritt sollten Sie auf dem Motor-Shield die Stiftleisten anlöten, wie hier im Bild zu sehen:
Diese werden benötigt, um später die Sensoren anschließen zu können.
Die aufgeklebten Kühlkörper sind nicht unbedingt notwendig, aber sehr empfehlenswert. Es ist ohne weiteres möglich die Last auf mehrere ICs zu verteilen und alle vier Motoren getrennt am Shield anzuschließen (kann auch im Sketch geändert werden).
Als nächsten der Anschluss der Motoren: zuerst schalten wir die beiden Motoren der linken Seite und der rechten Seite jeweils zusammen. Hier müssen Sie etwas probieren, bis die Motoren der einen, und die Motoren der anderen Seite zusammen in die gleiche Richtung laufen. Wie bereits erwähnt kann diese ganz leicht, durch vertauschen der Pole geändert werden.
Hier die Motoren anschließen:
Die Anschlüsse sind auf der Platine mit M3 und M4 beschriftet, jeweils die linken Motoren auf einer Klemme, und die rechten an der zweiten Klemme.
Jetzt noch die Stromversorgung: Das Shield versorgt auch den Mikrocontroller mit Strom.
Die beiden Pfeile unten rechts im Bild markieren die Anschlüsse für A4 und A5, wo wir unsere Linienfolger-Sensoren anschließen.
Da wir unser Robo-Car öfter umbauen haben wir die Sensoren nur temporär mit Klebeband befestigt. Den linken Sensor an Pin A4, den rechten Sensor auf A5, wie hier im Bild:
Dabei ist es wichtig, die Sensoren nicht frontal zu montieren, sondern leicht schräg an den Flanken, wie oben im Bild zu sehen.
Bevor wir uns dem Code widmen, welchen wir uns von Aarav geliehen haben, brauchen wir noch eine Libary für das Motor-Shield. Wir haben die Adafruit Libary benutzt welche Sie hier finden.
Hier der Code:
//////////////////////////////////////////////////////// // LinoBot v1.0 // // By Aarav Garg // //////////////////////////////////////////////////////// //I have added the possibilities of testing //The values of analogRead could be changed for trouble shooting //including the libraries #include <AFMotor.h> //defining pins and variables #define lefts A4 #define rights A5 //defining motors AF_DCMotor motor1(4, MOTOR12_8KHZ); AF_DCMotor motor2(3, MOTOR12_8KHZ); /* AF_DCMotor motor3(1, MOTOR12_8KHZ); AF_DCMotor motor4(2, MOTOR12_8KHZ); */ void setup() { //setting the speed of motors motor1.setSpeed(100); motor2.setSpeed(100); //declaring pin types pinMode(lefts,INPUT); pinMode(rights,INPUT); //begin serial communication Serial.begin(9600); } void loop(){ //printing values of the sensors to the serial monitor Serial.println(analogRead(lefts)); Serial.println(analogRead(rights)); //line detected by both if(analogRead(lefts)<=400 && analogRead(rights)<=400){ //stop motor1.run(RELEASE); motor2.run(RELEASE); } //line detected by left sensor else if(analogRead(lefts)<=400 && !analogRead(rights)<=400){ //turn left motor1.run(BACKWARD); motor2.run(FORWARD); /* motor1.run(RELEASE); motor2.run(FORWARD); */ } //line detected by right sensor else if(!analogRead(lefts)<=400 && analogRead(rights)<=400){ //turn right motor1.run(FORWARD); motor2.run(BACKWARD); /* motor1.run(FORWARD); motor2.run(RELEASE); */ } //line detected by none else if(!analogRead(lefts)<=400 && !analogRead(rights)<=400){ //stop motor1.run(FORWARD); motor2.run(FORWARD); /* motor1.run(BACKWARD); motor2.run(BACKWARD); */ } }
Übrigens wurden die Analog-Pins genutzt weil diese im Gegensatz zu den Digital-Pins auf dem Shield leicht zugänglich sind.
Das Projekt ist so ausgelegt, dass der Code sowohl mit zwei-, als auch mit vierrädigen Robotern lauffähig ist und stellt einen Kompromiss dar. Für einen Dauerbetrieb sollte der Sketch und die Verschaltung unbedingt geändert werden, da die Last der vier Motoren auf einen IC sehr hoch ist.
Das Einstellen der Laufrichtung für die Fahrmotoren kann u.U. etwas knifflig werden, hier ist etwas Geduld gefragt.
Viel Spaß beim nachbauen & bis zum nächsten mal :)
7 comments
Andreas Wolter
@Michael Beylich: das ist eine sehr interessante Idee.
Die Funktionsweise der Linienfolger ist so aufgebaut, dass sich die Spannung an der Fotodiode verändert, wenn sich die Intensität des reflektierten Lichts verändern. Daher ist auch ein hoher Kontrast notwendig (hier schwarz und weiß, also der höchstmögliche Kontrast).
Wenn ich Ihre Idee richtig verstanden habe, möchten Sie einen Leitstrahl installieren.
Dafür sollte man eher andere Sensoren verwenden, da die Linienfolger nur geringe Abstände zulassen.
Ich hatte schonmal ein ähnliches Projekt mit einem robocar, Fotosensor und einer Taschenlampe.
Mit einem IR-Laser könnte man das theoretisch genauso umsetzen. Um die Richtungsänderung des Lasers zu detektieren, bräuchten man mehrere voneinander getrennte Fotodioden, die auf den IR-Laser reagieren können. Ich würde zuerst probieren, vier in einer Matrix anzuordnen und mit Sichtschutz voneinander zu trennen. Ähnlich wie beim Solartracker von Miguel Torres Gordo: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/solar-tracker-mit-schrittmotoren-und-oled-display
Ansonsten können Sie uns auch gern kontaktieren über die blogs@ Adresse. Vielleicht finden wir eine praktikable Lösung.
Grüße,
Andreas Wolter
Michael Beylich
Hallo,
Ich komme aus dem Schiffsmodellbau und frage mich, ob es möglich ist, diesen Aufbau zu adaptieren. Bei Rettungskreuzern gibt es sog. Tochterbote, die nach dem Aussetzen auch mal wieder aufgenommen werden müssen. Das ist bei ruhigem Wasser schwierig, bei bewegtem nahezu unmöglich. Man „trifft“ die Tochterboot-Wanne nicht.
Die Idee wäre, im Mutterschiff z.B. eine IR-Diode zu platzieren und dann dem „Strahl“ automatisch zu folgen. Gesteuert werden müsste nur der Motor für die Schraube und das Lenkservo.
Wäre das realisierbar? Und auch nicht zu gross und schwer?
Danke im voraus.
Andreas Wolter
@Wulv: A sensor detects differences in contrast. A black line on a white background has the highest contrast. If a change is detected, the direction will be corrected. Since a black line has a transition to the white background on both sides, two sensors are used. It would also work with one sensor. Then the code looks different.
Best Regards,
Andreas Wolter
AZ-Delivery Blog
>Ich verstehe nicht, wie man mit dieser Position der Sensoren einer Linie folgen kann. Ist es nicht so, dass es über die Linie schwingt?
Wulv
Ik snap niet hoe je met die positie van de sensoren een lijn kan volgen. Zo zwabbert het toch over de lijn?
Stefan
Der set link funktioniert nicht.
Lg
Moritz
Hallo,
die vier Motoren sind im Beitrag oben am Shield an M3 und M4 angeschlossen. Das funktioniert bei uns wunderbar, allerdings ist die Last auf den IC recht hoch. Die Last lässt sich bei zusätzlicher Nutzung von M1 und M2 auf dem Shield verteilen, sprich je einen Motor pro Anschluss. Den Sketch müssen Sie dann erweitern, indem Sie die beiden zusätzlichen Motoren zuerst definieren und anschließend mit motor3.run und motor4.run erweitern.
Frank Raddau
Hallo,
Wie würde der Sketch und die Verschaltung für eine Dauerbelastung aussehen?
Danke im voraus.