Tag 4 (Letzter Tag)

Heute habe ich Schrumpfschläuche verwendet, um alle losen Drähte zu sichern und zu verhindern, dass irgendjemand 20 Volt durch seinen Körper jagen kann. Nach einem mühsamen Prozess habe ich alles angeschlossen und getestet. Der Laptop begann sich aufzuladen, nachdem ich in das Mikrofon „geschrien“ hatte, und erkannte sogar das Netzteil, obwohl meine Verkabelung ‚janky‘ war. Leider habe ich festgestellt, dass der Laptop nicht länger als 15 Sekunden laden kann, danach weigert er sich, zu laden. Ich vermute, dass der Laptop erkannt hat, dass die Ladung nicht „stabil“ ist und definitiv verändert wurde. Und damit war mein „Schrei-angetriebe Laptop-Ladegerät“ fertig. Zusammenfassend denke ich, dass dieses Projekt gut gelaufen ist und ich auf jeden Fall eine Menge Spass hatte. Ich habe auch viel über Schaltkreise und Verdrahtung und sogar Fähigkeiten gelernt, wie z. B. Löten und wie man Dinge wie eine Bombe aussehen lässt. Am Ende hat alles geklappt, und alle lebten glücklich und zufrieden bis an ihr Lebensende.

das fertige Produkt

Tag 4 – Can und Paul

Heute morgen lief alles wie geplant. Nachdem wir in unserer Freizeit weitergearbeitet haben, funktionierte unser Code wie erwünscht. Unser Auto konnte geradeaus fahren, bis der Ultraschallsensor eine Distanz von < 10 cm gemessen hat, dann hat es angehalten. Wir haben am Code gearbeitet, und ihn zu verändert, dass das Auto ein Rad dreht wenn etwas vor ihm ist (sich also um die eigene Achse dreht) und dann fährt es weiter. Das ganze geht mit einem Knopf an und aus. Zusätzlich haben wir einen OLED-Display eingebaut, welcher die Distanzen anzeigt und eine LED welcher leuchtet wenn das Auto geradeaus fährt. Zuletzt haben wir den Code noch im boot.py gespeichert, damit es ohne Verbindung zum Laptop läuft, denn wir haben jezt einen Akku, welcher für den Strom sorgt.

Tag 4

Heute haben wir die Powerpoint Präsentation für den Präsentationnachmittag erstellt und unsere 3D-Figur mit Heissleim an unser Auto geklebt.

Tag 3

4. Mai 2023: 

Matthias hat heute am Skript für das Snake-Spiel weitergearbeitet. Es kamen sehr viele Error-Meldungen und diese bremsten die Arbeit sehr ab. Jedoch hat Emile oft schnell eine Lösung im Internet gefunden und so kamen wir zusammen in einem guten Tempo voran. Wir entschieden uns den Joystick mit vier knöpfen zu wechseln (Links, Rechts, Hoch, Runter), sonst blieb alles gleich an unserer Konstellation. Schlussendlich kamen wir auf ein Skript, welches sehr gut funktionierte ausser das die Knöpfe nicht reagierten. Also haben viel Zeit nach der Lösung gesucht. Leider gibt es immer noch ein Problem damit, welches wir morgen lösen müssen.  

Tag 2

3. Mai 2023: 

Matthias hat sich mit Schach-Engines auseinandergesetzt. Sie sollten uns bei dem Programmieren des eigentlichen Spieles viel Arbeit ersparen. Emile hat weiter versucht den Bildschirm und die Joysticks besser kennen zu lernen. Nach ein bisschen Recherche zu den Sach-Engines ist uns aufgefallen, dass die einfache und gute Sach-Engines nur auf Python benutzbar waren und die für MicroPython sehr wenige waren und diese sehr kompliziert zu benutzen waren, da sie nicht vollständig sind und addiert werden müssen. Daher mussten wir ein neues Projekt finden. Emile ist schnell auf die Idee von Snake gekommen, und so ging die neue Reise los. Wir haben noch angefangen uns zu informieren und ein bisschen herumzuspielen, jedoch kamen wir heute nicht sehr weit mit dem Snake. 

Tag 1

2. Mai 2023: 

Unsere Idee war es Schach mit Hilfe des ESP32 auf einem Bildschirm spielen zu können. Es sollte alles mit zwei Joysticks gesteuert werden, eins jeweils für eine Person. Matthias war heute krank und hat teilweise von Zuhause gearbeitet. Herr Weiss hat vergessen ein grösseres Display für uns zu bestellen, also wollte ich 4 kleine Displays so zusammenstellen, dass es einen grossen gibt. Emile hat viel Zeit damit verbracht mit ChatGPT verschiedene Skripte zu schreiben. Dabei kam aber immer die gleiche Fehlermeldung. Er konnte nicht herausfinden, weshalb die Skripte nicht funktionierten. Um noch etwas zu schaffen, hat er mal nur ein Display verbunden und ein wenig Zeit damit verbracht, die Steuerung kennenzulernen. Nachher hat er beide Joysticks mit dem ESP32 verbunden. Emile hat die Grundfunktionen des Joysticks kennengelernt und ein Skript geschrieben, dass man die jeweiligen Koordinaten beider Joysticks sehen kann.  

Tag 4: Der letzte Schliff

Ziele für heute:

  • Optimierung des Codes
  • Finale Tests

Code

Wir haben im Code die Sensitivität des LDR-Sensors verändert, damit der Laser immer erkannt wird, wenn er darufscheint. Gleichzeitig kann er nicht von normalem Zimmerlicht ausgelöst werden.

Werbevideo

Wir haben ein lustiges Werbevideo für unser Alarmsystem gefilmt und geschnitten:

Gesamter Code

from machine import Pin, SoftSPI, ADC, PWM, sleep 
from mfrc522 import MFRC522
import time

led_onboard = Pin(2, Pin.OUT)
led_onboard.value(False)
ldr_pin = ADC(Pin(25))
buzzer_pin = PWM(Pin(17))
speaker_pin = PWM(Pin(27))
led_pin = Pin(2, Pin.OUT)

# Funktion zum Abspielen des Jingles
def play_jingle():
    for freq in [500, 1000, 1500, 2000]:
        speaker_pin.freq(freq)
        speaker_pin.duty(700)
        time.sleep(0.2)
    speaker_pin.duty(0)
    
allowed_uids = ['122-191-52-22-231', '8-151-131-176-172', '136-5-138-254-249']


spi = SoftSPI(baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
mfrc = MFRC522(sck=18, mosi=23, miso=19, rst=4, cs=5)

while True:
    # Warten auf Karte
    (stat, tag_type) = mfrc.request(mfrc.REQIDL)
    
    if stat == mfrc.OK:
        # Karte gefunden, UID lesen
        (stat, raw_uid) = mfrc.anticoll()
        
        if stat == mfrc.OK:
            # UID erfolgreich gelesen, formatieren und ausgeben
            uid = '-'.join([str(i) for i in raw_uid])
            print('UID: {}'.format(uid))
            
            if uid in allowed_uids:
                # UID ist unser Schlüssel, Alarm deaktivieren
                print('Schlüssel erkannt, Alarm deaktiviert')
                buzzer_pin.duty(0)  # Buzzer ausschalten
                led_pin.on()  # LED ausschalten
                speaker_pin.duty(0)  # Lautsprecher ausschalten
                play_jingle()  # Jingle abspielen
                sleep(5000)
                led_pin.off()
            else:
                # UID ist unbekannt, Alarm aktivieren
                print('Unbekannte UID, Alarm aktiviert')
                buzzer_pin.duty(700)  # Buzzer einschalten
                led_pin.on()  # LED einschalten
                led_pin.off()
                led_pin.on()
                led_pin.off()
                for i in range(20):  # Alarm auslösen
                    for freq in range(1000, 3000, 100):  # Sireneneffekt
                        speaker_pin.freq(freq)
                        speaker_pin.duty(700)
                        time.sleep(0.01)
                    for freq in range(3000, 1000, -100):
                        speaker_pin.freq(freq)
                        speaker_pin.duty(700)
                        time.sleep(0.01)
                speaker_pin.duty(0)  # Lautsprecher ausschalten

    ldr_value = ldr_pin.read()
    if ldr_value > 2500:  # Wenn LDR ein Lichtsignal erfasst
        buzzer_pin.duty(700)  # Buzzer einschalten
        led_pin.off()  # LED einschalten
        for i in range(20):  # Alarm auslösen
            for freq in range(1000, 3000, 100):  # Sireneneffekt
                speaker_pin.freq(freq)
                speaker_pin.duty(700)
                time.sleep(0.01)
            for freq in range(3000, 1000, -100):
                speaker_pin.freq(freq)
                
    else:
        speaker_pin.duty(0)
        buzzer_pin.duty(0)
        led_pin.off()

Wir haben den Code so angepasst das der Alarm nur bei unseren UID deaktiviert wird. Dies ging mit einer kleinen Codeänderung. Dabei wird ein Alarm ausgelöst wenn man eine falsche UID an den NFC -Leser hinhält.

Wir haben unsere LED blinken lassen damit man das Ende des sleep visuell sehen kann.

Wie man in unserem Werbevideo schon sehen kann haben wir auch um unseren ESP32 eine Box gebaut. Diese haben wir wegen der Effizienz aus Karton gemacht. Dabei haben wir an dem NFC-Leser einen dünneren Karton verwendet damit es keine Probleme mit dem lesen gibt. Ebenso haben wir noch ein NFC Symbol darauf gemalt, damit es klar ist wo man den NFC hinlegen muss.

Tag 3: Improvisierung

  • Heute haben wir uns mit dem Freenove Car Kit beschäftigt und versucht, es in Bewegung zu bringen.
  • Wir haben versucht, ein Infrarotsignal von einem Sender an einen Empfänger zu senden, um das Auto zu steuern.
  • Leider haben wir Schwierigkeiten bei der Signalübertragung und der Steuerung des Autos erfahren.
  • Daher haben wir uns entschlossen, eine Alternative zu finden und haben uns für den Bau einer Flipbox entschieden.
  • Die Flipbox besteht aus zwei Motoren, die über einen ESP32 und Joysticks gesteuert werden können.
  • Wir glauben, dass die Flipbox ein aufregendes und herausforderndes Projekt sein wird, das uns die Möglichkeit gibt, unsere Fähigkeiten in Elektronik und Programmierung zu verbessern.