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.
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.
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.
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.
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.
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.
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.
Du muss angemeldet sein, um einen Kommentar zu veröffentlichen.