Tag 1: Planung von Team LIF

Heute haben wir mit unserem Projekt, einen Desinfektionsroboter zu bauen, begonnen. Angefangen haben wir, indem wir uns über die verschiedenen Technischen Elemente informiert haben und sie, also Motoren und Ultraschallsensoren, ausprobiert haben. Wir haben dann begonnen unseren Roboter zu planen und eine Idee bekommen, was wir ungefähr machen wollen. Dann am Nachmittag haben wir eine Skizze gemacht und dann einen Roboter, aus mitgebrachtem Lego, zu bauen begonnen.

Unsere erste Skizze:

Unser Fahrzeug- Grundgerüst sieht so aus:

Dann haben wir uns noch der ersten Technik des Fahrzeuginnenlebens gewidmet und können nun entspannt und mit dem guten Gefühl einiges erreicht zu haben, nach hause gehen.

Tag 2: Konstruieren von Team LIF

Heute haben wir das Programm unseres Roboters geschrieben und uns mit den Fehlern beschäftigt. Wir haben die Geschwindigkeit der Räder so verändert, dass beide jetzt fast gleich schnell drehen, wir haben die Technik provisorisch auf dem Roboter befestigt und die ersten Testversuche gemacht.

Unser Roboter sah nach dem ersten Bau so aus:

Am Ende kamen wir zum Fazit, dass der Roboter zu ungenau, mit den zwei hinteren Schallsensoren funktioniert, denn damit bekommen wir eine Drehung nur ungenau und schwierig hin. Deshalb werden wir beim nächsten mal einen Gyrosensor verwenden oder dem Roboter direkt den Befehl geben sich zu drehen, also indem wir nur einen Reifen drehen lassen.

Tag 3: Kosmetik und Programm von Team LIF

Heute haben wir gestartet, indem wir Informationen über den Gyrosensor besorgt haben. Nach einiger Zeit mussten wir aber feststellen, dass man im Internet keine Skripte von unserem Modell dieses Sensors im Zusammenhang mit Python findet, deshalb mussten wir die Idee mit dem Gyrosensor verwerfen.

Man sieht auf diesem Bild unten links den Gyrosensor:

Deshalb haben wir alle Technik mal wieder von unserem Roboter entfernt und ein neues Programm geschrieben. Mit diesem macht der Roboter einfach 180° Kurven abwechselnd, nach links und nach rechts. Dann haben wir noch angefangen ein Bestandteil unseres Roboters mit dem 3D-Drucker zu drucken und später haben wir noch mit LEGO unseren Roboter verschönert und praktischer gemacht.

Jetzt sieht unser Roboter so aus:

Wir haben auch noch unsere ursprüngliche Idee mit einem Schwamm unter dem Hinterteil des Roboters verworfen und haben uns jetzt für einen Lappen entschieden, den wir mit einem Motor bewegen.

 

Tag 4: Feinheiten von Team LIF

Heute haben wir nicht mehr so viel gemacht, wie an den vorherigen Tagen. Wir haben noch die Kabel des Roboters fixiert, den Roboter ein wenig schöner gemacht und eine neues Teil montiert. Dieses teil ist eine andere Art Motor und wir benutzen ihn um mit einem dünnen Tuch den Tisch abzuwischen.

Zudem haben wir noch das Programm vollendet, wir haben dafür gesorgt, dass der Roboter jetzt, mehr oder weniger, gerade fährt und die Kurven ungefähr 180° betragen, was durch den zusätzlichen Motor nicht einfacher wird.

Hier ist ein Bild unseres fertigen Roboters:

Alles in allem sind wir sehr zufrieden mit unserem Roboter, auch wenn wir nicht alles so umsetzen konnten, wie wir es wollten und der Roboter deswegen nicht ganz perfekt ist, aber immerhin er erfüllt seinen Zweck, Tische abzuwischen.

Hier sieht man noch ein Video unseres fahrenden Roboters:

Tag 5 und Abschluss des Projekts

Am Morgen hatten wir ein Problem. Anfangs wollte unser Roboter einfach nicht losfahren. Als es dann später wieder ging, wich der Roboter teilweise von der Linie ab. Doch zu unserem Glück funktionierte der Roboter später ohne Änderungen wieder einwandfrei. Die Hardware, die wir benutzen ist einfach zu schlecht, um das volle Potential unserer Software hervorzubringen. Auf jeden Fall funktioniert der Roboter manchmal und manchmal gar nicht, wir sind uns aber sicher, dass er mit besserer Hardware perfekt laufen würde. Es gibt Einiges, was man an unserem Roboter noch ändern könnte:

  • Infrarotsensoren, welche nicht nur 5mm über dem Boden funktionieren 
  • Leistungsstärkere Motoren ohne verschiedene Dutys

Die Infrarotsensoren am Boden bringen den Roboter dazu, dass er auf unserer Teststrecke manchmal in den Papierrillen hängen bleibt und unsere Motoren verlängern das Programm durch verschiedene Dutys unnötig.

Alles in allem hat das Projekt viel Spass gemacht und war mal eine Abwechslung zum normalen Schulalltag. Wir haben gute praktische Erfahrungen gemacht und werden durch dieses Projekt sicher einiges mitnehmen können.

Hier noch ein Video unseres fertigen Roboters:

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)

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.

Gruppe 1: Zusammenfassung und Fazit

Wir wollten von Beginn an einen Linefollow-Roboter machen. Am Anfang wollten wir das Gerüst mit Lego bauen, bis wir gemerkt haben, dass es viel ästhetischer und einfacher ist wenn wir es mit dem 3D-Drucker machen. Wir haben angefangen mit einem Infrarotsensor zu arbeiten welchen wir von unsere Lehrperson bekommen haben. Dieser Sensor hatte 3 Lichtquellen. Wir haben dann gemerkt, dass es besser wäre, wenn wir 3 einzelne Sensoren benutzen. Wir haben diese drei Sensoren relativ schnell in de Griff bekommen, sodass wir uns auf das optimieren des Programms konzentrieren konnten.

Fazit

Schrittmotoren sind zu langsam, für nächstes Mal nehmen wir Schrittmotoren mit Zahnrädern oder Servomotoren. Die  Woche hat uns im grossen und ganzen gut gefallen und wir hatten Spass. Wir bedanken uns noch bei den zwei zuständigen Lehrpersonen für die Hilfe.

Gruppe 5: Tag 5

Heute haben wir unser ganzes Projekt abgebaut und im Physikraum wiederaufgebaut. Nachdem wir alles aufgebaut haben, haben wir alles wieder durch kontrolliert und abgespielt. Zu unserer Freude funktionierte alles. Für das fertige Projekt haben wir noch einen PowerPoint Präsentation gestaltet und die Präsentation geübt. Vor der Mittagspause haben wir, also jede Gruppe gegenseitig ihre Projekte präsentiert und am Nachmittag haben wir unsere Projekte den MINT-Label Vertretern präsentiert und die benutzten Räume und das Material aufgeräumt.

 

Jetzt mit Python-Code

Sie können mit WordPress auch Python-Code direkt auf der Seite einfügen. Dazu müssen Sie einfach auf das +  klicken um einen Beitrag hinzuzufügen und dann als Beitragstyp code block  auswählen.

import python