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)