Tag 5: Zusammenfassung / Abschluss von Team LIF

Unsere Idee war es mehr oder weniger von Anfang an einen Roboter zu bauen, der Tische selber desinfizieren kann. Die Hauptaufgabe bestand also darin den Roboter auf dem Tisch um 180° drehen zu lassen. Als erstes wollten wir mithilfe eines Gyrosensors, welcher die Drehung messen kann, die Kurven am Ende des Tisches genau abmessen und danach weiter fahren. Dadurch hätte der Roboter direkt wissen können, wann er 180° erreicht hat. Jedoch hatten wir keinen zur Verfügung und wir mussten improvisieren.

Dann hatten wir die Idee mithilfe von 2 Ultraschallsensoren hinten am Roboter ungefähr 180° zu messen. Das war jedoch sehr unpraktisch, da wir die Ultraschallsensor so weit weg vom Roboter hätten bauen müssen, dass er bei einem normalen Schultisch nur 2 Drehungen geschafft hätte. Also mussten wir wieder improvisieren.

Wir erhielten dann den Gyrosensor, jedoch funktionierte der nicht mit Micropython, also entschieden wir, die Kurven einfach einzuprogrammieren. Dies hat zur Folge, dass falls der Tisch rutschiger oder klebriger ist, der Roboter keine 180° drehen kann. Dadurch wurde sehr viel sehr ungenau. Der Roboter fängt dann vielleicht an mit einer 180° Drehung, jedoch fährt er irgendwann einfach schräg auf dem Tisch.

Das Programm sieht so aus:

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


servoL = PWM(Pin(0), freq = 50, duty = 0)
servoR = PWM(Pin(2), freq = 50, duty = 0)

lappe = PWM(Pin(23), freq = 50)

sensor_vorne = HCSR04(trigger_pin = 12, echo_pin = 13)


kill_button = Pin(37, Pin.IN)

button = 0
counterD = 0

while True:
    while button == 0:
        time.sleep(0.1)
        
        servoL.duty(0)
        servoR.duty(0)
        if kill_button.value() == 0:
            
            if button == 0:
                button = 1
                
                print(button)
                time.sleep(0.5)
    while button == 1:     
        distanceV = sensor_vorne.distance_cm()
        print(distanceV)
        print(kill_button.value())
        lappe.duty(66)
        time.sleep(0.1)
        lappe.duty(60)
        time.sleep(0.1)
        servoL.duty(81)
        servoR.duty(69)
        print(counterD)
        time.sleep(0.1)
        
        if kill_button.value() == 0:
            button = 0
            print("stop")
            
        if distanceV > 30:
            print(distanceV)
            
            servoL.duty(0)
            servoR.duty(0)
            time.sleep(1)
            
            if counterD%2 == 0:
                
                if kill_button.value() == 0:
                    button = 0
                
                servoL.duty(69)
           
                servoR.duty(83)
                time.sleep(1.5)
                servoL.duty(83)
                servoR.duty(0)
                time.sleep(4.2)
                distanceV = sensor_vorne.distance_cm()
                counterD += 1
                print(counterD)
                print("links")
                
            elif counterD%2 == 1:
                
                if kill_button.value() == 0:
                    button = 0
                servoL.duty(69)
                servoR.duty(83)
                time.sleep(1.5)
                servoL.duty(0)
                servoR.duty(65)
                time.sleep(3.4)  
                servoL.duty(0)
                servoR.duty(0)
                time.sleep(0.1)
                print("rechts")
                counterD += 1
                

Das Programm ist eher simpel. Der Roboter soll so lange geradeaus fahren bis er eine Kante entdeckt dann dreht er sich um 180° nach Rechts, dann fährt er geradeaus bis zur nächsten Kante und dreht sich um 180° nach Links. Dieser Prozess wiederholt sich solange wie der Button aktiv ist. Ein Problem des Programmes ist ,dass der Button nur funktioniert wenn der Roboter nich im “Sleep Modus” ist. Ein weiteres Problem ist, dass die 180° Drehungen nicht exakt sind. Dies liegt aber eher an den Motoren als am Programm.

Fazit: Das Projekt hat uns nicht ganz zufriedengestellt. Es hat zwar Spass gemacht, aber das Ziel ist nicht genau das gewesen, was wir als Endresultat bekommen haben, da wir eigentlich die Strecke programmiert haben und nicht den Roboter auf alle Tische angepasst haben, mit einem automatischen Korrekturprogramm. Es wäre deshalb insgesamt angenehmer gewesen, wenn wir einen Gyrosensor gehabt hätten, welcher genau 180° messen kann. Dadurch könnte der Roboter auf jedem Tisch fahren und es wäre auch egal, wie viel Widerstand das Tuch hinten hat.