Gruppe 4: Zusammenfassung

Vorstellung

Unser Roboter ist ein Auto, das durch ein Labyrinth fahren kann.

Material

Für unseren Roboter haben wir folgendes verwendet:

    • 2 Servomotoren, M5Stack
    • 3 Ultraschallsensoren
    • Lego
    • 2 Motorhalterungen aus dem 3D-Drucker

Funktionsweise

Der Roboter fährt ein Stück geradeaus und bleibt stehen. Dann misst er die Distanz zur linken Wand. Ist die Differenz von der neuen Distanz zur alten Distanz (neue Distanz minus alte Distanz) grösser als 0, so hat sich der Roboter von der Wand entfernt und dreht sich daher nach links. Umgekehrt dasselbe: ist die Differenz kleiner als 0, hat sich der Roboter der Wand genähert und dreht daher nach rechts von der Wand weg. Ist die Differenz zu klein, fährt also der Roboter fast parallel zur Wand, dreht er sich gar nicht. Dann fährt er wieder geradeaus und es beginnt von vorne. Zusätzlich misst der Ultraschallsensor vorne auch jedes Mal die Distanz. Ist die vordere Wand weniger als 15 cm entfernt, macht das Auto eine Rechtskurve.

Vorgehen

Als erstes wollten wir nur ein Auto haben, das fährt. Das haben wir bereits am Montag erreicht; mit einem zweiten Motor, den wir aber im Prozess auch wieder ersetzt haben. Dann haben wir einen Ultraschallsensor vorne angebracht, um den Roboter stoppen zu lassen, wenn sich vor ihm eine Wand befindet. Beim Versuch haben wir realisiert, dass das Auto eine gewisse Reaktionszeit braucht und darum bei einer Mindestdistanz von 5 cm mit der Wand kollidiert. Am Tag darauf haben wir die Mindestdistanz optimiert und uns ans Abbiegen gewagt, sowie Halterungen für die Motoren ausgedruckt. Das Abbiegen war sehr problematisch, da wir keine Geschwindigkeit einstellen konnten und der Roboter meistens trotzdem in die Wand fuhr. Als wir dann am Mittwoch die richtigen Motoren nahmen, konnten wir die Geschwindigkeit verändern und es funktionierte schon besser. Wir hatten den Roboter da an der rechten Wand fixiert und er sollte sich von der Wand abwenden, wenn der Abstand kleiner als 15 cm wurde und sich zur Wand drehen, wenn der Abstand grösser als 25 cm wurde. Das funktionierte jedoch schlecht, da, wenn sich der Roboter zu schräg zur Wand drehte, er selbst beim in die Wand fahren eine Distanz über 15 cm wahrnahm. Dann funktionierte gar nichts mehr und am Donnerstag änderten wir die Funktionsweise mit den bestimmten Abständen zur Differenz der Abstände (siehe Funktionsweise). Dann brachten wir den vorderen Sensor ein, um Rechtskurven zu fahren. So hatten wir dann einen funktionierenden «maze runner». Am letzten Tag präsentierten wir unseren Roboter in einem schneckenhausförmigen Labyrinth.

Script

from machine import Pin, PWM
from hcsr04 import HCSR04
import time

pwmr= PWM(Pin (15), freq = 50) 
pwml= PWM(Pin (13), freq = 50)

sensor = HCSR04(trigger_pin=17, echo_pin=36)
sensorl = HCSR04(trigger_pin=32, echo_pin=39)

while True:
    distance1 = sensor.distance_cm()
    distance3 = sensorl.distance_cm()
    print('Distance left', distance3, 'cm', 'Distance front', distance1, 'cm')
    pwmr.duty(60)
    pwml.duty(92)
    time.sleep(0.3)
    pwmr.duty(75)
    pwml.duty(75)
    time.sleep(0.25)
    
    distance3_alt = distance3
    distance3 = sensorl.distance_cm()
    
    diff = distance3 - distance3_alt
    
    if distance1 < 20:
        pwmr.duty(75)
        pwml.duty(75)
        time.sleep(0.25)
        pwmr.duty(80)
        pwml.duty(80)
        time.sleep(3)
    
    
    if diff > 0 and distance3 > 15:
        pwmr.duty(69)
        pwml.duty(69)
        time.sleep(0.25)
        pwmr.duty(75)
        pwml.duty(75)
        time.sleep(0.25)
          
        
    if diff < 0 :
        pwmr.duty(82)
        pwml.duty(82)
        time.sleep(0.25)
        pwmr.duty(75)
        pwml.duty(75)
        time.sleep(0.25)

Gruppe 4: Tag 4 (22.4.21)

Ablauf:

Als erstes haben wir uns daran gemacht, dass das Auto wieder der Wand entlang fährt. Das hat mit einer neuen Strategie funktioniert; das Auto fährt, bleibt stehen, misst die Distanz nach links (zur Wand), ist die Wand weiter weg als bei der vorigen Messung, dreht sich das Auto zur Wand/nach links, ist die Wand weniger weit weg als vorher, dreht sich das Auto von der Wand weg/nach rechts. 

Zum Vergleich:

alte Strategie

 

neue Strategie

Danach wollten wir das Auto wieder für ein Labyrinth bzw. Parcours fähig machen. Das war schwierig und wir mussten den Sensor vorne wieder brauchen. Da trat die Radproblematik wieder auf: das kleine Rad dreht auch hinten in die falsche Richtung und lenkt ab. Also haben wir es durch eine Kugel ersetzt. 

Dann funktionierte aber gar nichts mehr. Das Auto korrigierte zu stark, zu wenig, fuhr Kreise… Deshalb starteten wir nochmal mit einem neuen Programm von Null und fuhren zuerst geradeaus, Kurven, blieben stehen, etc. und bauten dann wieder ein Programm zusammen, mit dem wir der Wand entlang fahren können und ein anderes, mit dem wir auch durch ein Labyrinth könnten.

Video vom an der Wand fahren

Parcours (nicht ganz benutzt)

Video vom Parcours

Wir sind glücklich, dass es funktioniert

!!!

Gruppe 4: Tag 3 (21.4.21)

Ablauf:

Am Morgen haben wir uns unseren Problemen gestellt. Das gestrige Problem, dass die Verbindung zum Board nicht klappte wurde daher behoben, als dass wir nun ein anderes haben. Dafür entstand dann das Problem, dass wir das Auto nicht mehr zu stoppen war (ausser man zog den Stecker), was sich aber auf Thonny beheben liess. Wir haben auch noch die Konstruktion verbessert für mehr Stabilität.

Da die beiden Tower Pro Motoren nur eine Geschwindigkeit besitzen, haben wir sie durch M5Stack 360° Motoren ersetzt. Sie stehen bei 75 und höher oder niedriger drehen sie vor- oder rückwärts.

So haben wir unser Programm dann so umgebaut, dass die Räder für Kurven nicht mehr aus- und angehen, sondern langsamer bzw. schneller werden.

Vor dem Mittag haben wir es noch mal mit dem Kartonkreis ausprobiert, aber es funktioniert gar nicht. Am Nachmittag ging es dann auch mit dem Rumprobieren weiter, aber die Kurven funktionierten nicht so wie wir es wollen.

So sind wir dann auf Herr Strubs Vorschlag auf einen anderen Weg gekommen: Das Auto einer Wand entlang fahren zu lassen. Mit  diesem Programm sollte das Fahrzeug von der Wand weg, wenn der Abstand zu klein wird, und auf die Wand zu, wenn der Abstand zu gross wird. Das funktionierte, bis das kleine Rad vorne sich verdrehte und die Richtung abänderte. So haben wir dann das Auto quasi „umgedreht“, sodass das kleine Rad hinten ist und somit nicht mehr stört. Aber dann fuhr unser Auto gar nicht mehr. Dieses Problem werden wir morgen lösen müssen. 

Gruppe 4: Tag 2 (20.4.21)

Zusätzlich ein neues Ziel:

Wir wollen unser Auto nun auch durch ein Labyrinth fahren lassen, in dem es selbstständig abbiegen soll.

Was wir heute getan haben:

Als erstes haben wir uns mit einem Halter für die beiden Rädermotoren beschäftigt. Dazu hat uns Herr Weiss erklärt und gezeigt, wie man so einen Halter für den 3D-Drucker konstruiert und dann druckfertig abschickt. Diesen haben wir dann in doppelter Ausführung drucken lassen.

Die Motoren passten gut in die Halterungen, aber leider stimmten der Abstand der beiden Löcher nicht mit dem Legoabstand überein und da die zweite Halterung eine exakte Kopie der ersten ist, ist sie spiegelverkehrt.

Fazit: Wir müssen die Halterung ein paar Millimeter breiter machen und die zweite Halterung zu spiegeln. So haben wir dann den zweiten Druckauftrag optimiert.

Danach haben wir den Entschluss gefasst, dass unser Auto nun auch ein Labyrinth durchfahren soll. Dafür haben wir zwei weitere Ultraschallsensoren angebracht, um auch rechts und links zu „sehen“, und unser Programm dementsprechend verändert. Das war eine Knobelei beim Programmieren sowie ein Kabelsalat beim umstecken, sodass wir nach kürzeren Kabeln gesucht haben.

Beim Testen hatten wir dann die Probleme, dass das Auto aufgrund der fixen Vorderräder keine Kurven fahren konnte. Mit etwas Ausprobieren haben wir dann ein drehbares Konstrukt von einem doppelten Rad gebaut. Dafür mussten wir die beiden neuen Sensoren aber ab- und danach wieder aufmontieren, da die Kabel im Weg waren.

Danach haben wir dann als Test einen Mini-Parcours aufgebaut, in dem das Auto ganz simpel rings um eine Kartonschachtel fahren sollte, begrenzt von Kartonwänden ringsum. Da klappte es ein paar wenige Male, wenn auch nur die erste Kurve. Jedoch hatte das rechte Rad einen Wackelkontakt und das Kabel zwischen Laptop und Auto war auch im Weg, und auch nach mehreren Programmverbesserungen hatte das Auto scheinbar ein Eigenleben und funktionierte auf gut Glück. Als dann die Verbindung zum Laptop gar nicht mehr funktionierte, nicht einmal das Stoppen, brachen wir ab und setzten uns daran, das Programm wieder funktionstüchtig zu machen.

Als Vergleich dazu ein Video von gestern:

 

Gruppe 4: Tag 1 (19.4.21)

Kurzzusammenfassung Projekt:

Wir arbeiten mit der Gruppe 5 zusammen. Unser Ziel ist es, ein Auto so zu bauen und zu programmieren, dass es einem vorgeschriebenen Parcours folgt. Dieser führt über die Bahngleise einer Modelleisenbahn, sodass das Auto vor der geschlossenen Bahnschranke (von Gruppe 5) halten muss und erst wenn sich diese wieder öffnet losfährt.

Was wir heute getan haben:

Als erstes haben wir uns damit beschäftigt, den richtigen Motor zum Fahren zu finden. Als erstes haben wir den Elektromotor von Motraxx ausprobiert (rechts, grau). Den konnten wir jedoch nicht mit einem Programm an- und ausschalten, weshalb wir uns dann für den Servomotor MG90S von Tower Pro entschieden haben (links, schwarz/violett). MG90S Servo-Motor / Burgthann Motor Dessen Räder sitzen jedoch nicht 100%-ig sicher, was noch zum Problem werden könnte.

Dann haben wir mit unserem Programm angefangen. Mit PWM haben wir unsere beiden Motoren und deren Räder angesprochen und an- bzw. abgemacht. Die Schwierigkeit war, dass die beiden Motoren bei der selben duty-Zahl nicht gleich schnell drehten und wir erst mal die beiden Zahlen in der gewünschten Geschwindigkeit finden mussten. Somit konnte die Konstruktion fahren.

Da unser Auto aber erkennen sollte, ob die Bahnschranke zu oder offen bzw im Weg steht, damit es falls zu anhält, haben wir dann einen Ultraschallsensor angehängt. 

Dann haben wir das Programm dann mit sensor.distance so erweitert, dass der Abstand vor dem Sensor alle 10 ms ausgegeben wird und dass die Räder bei über 5 cm Abstand drehen und das Auto fährt und bei weniger als 5 cm Abstand die Räder nicht mehr drehen und das Auto stehenbleibt. Der Sensor ist manchmal ungenau (geht sogar ins minus), funktioniert aber recht gut.

Dann haben wir uns daran gemacht, den Kabel/Verbraucher-Salat in ein Auto umzuwandeln. Dafür haben wir Legoteile vom Mindstorm-Set verwendet und auch noch zwei weitere Räder ohne Motor hinzugefügt, sowie grössere Räder an die motorisierten Räder gehängt. Die Motoren haben wir noch mit Gummibändern gesichert, sie sind jedoch eher wackelig.