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: Redesign des Hauptboards

Ziele des heutigen Tages:

  • Hauptboard neu strukturieren
  • Gehäuse für das Hauptboard basteln
  • Code für das Zusammenspiel der Komponenten anpassen

Redesign

Wir haben die Komponenten (ESP32, NFC-Leser, Lautsprecher, Buzzer, LED, ) vom grossen Breadboard auf ein viel kleineres übertragen, damit wir ein kleineres Gehäuse basteln können. Hier ein voerher-nachher Vergleich. Natürlich mussten wir dann auch die neu zugeteilten Pins im Code anpassen.

Gehäuse für das grössere Board

Wir haben aus Karton eine Box gebaut und verschiedene Löcher und eine grosse Vertiefung gemacht. So haben alle sichtbaren Komponentenn ihren Platz.

Code

Wir haben alles zu laufen gebracht. Also funtkioniert die Alarmanlage und wenn der Laser unterbrochen wird, gibt es einen fünfsekündigen Alarm. Wenn man den registrierten NFC-Chip daranhält, hat man fünf Sekunden, um hindurchzugehen.

Tag 2: NFC-Leser und 3D-Druck

Ziele des heutigen Tages:

  • Erste Hülle ausdrucken
  • NFC-Leser (hoffentlich) zum Laufen bringen.
  • Alle Codes zusammenführen

Drucken und Ergebnis

Um den Laser zum Leuchten zu bringen, haben wir einen kurzen Code in die boot.py Datei gemacht, der den Laser einschaltet:

from machine import Pin
laser_pin = Pin(14, Pin.OUT)
laser_pin.on()  # Laser einschalten

Da uns ein Fehler beim Ausmessen unterlaufen ist, mussten wir das Loch für den Laser vergrössern. Ausserdem haben wir einen zweiten Deckel für die Box in schwarz ausgedruckt, der besser passt.

Das zweite Gehäuse für den grösseren Teil der Anlage konnten wir noch nicht beginnen, da wir eventuell noch Änderungen vornehmen werden. Ausserdem fehlt ein kleineres Breadboard und die Drucker waren belegt.

NFC-Leser: Die (Er-)Lösung

Nach sehr langen Ausprobieren und Suche nach Fehlern, hat sich mit Hilfe von Herr Weiss herausgestellt, dass der Fehler nicht in unserem Programm oder der importierten Biblothek liegt. Tatsächlich waren es die mangelhaft gelöteten Pins auf dem Lesegerät.

Wir haben angfangen den Code des NFC-Lesers mit unserem Alarmprogramm zu verbinden. Dies wird auch das Programm für den morgigen Tag sein.

Aktueller Stand: Der Alarm kann durch einen bestimmten Chip ausgeschaltet werden, geht jedoch nicht nach einer definierten Dauer wieder an. Weitere Versuche (z. B mit Laser) stehen aus.

Tag 1: Erste Schritte

Setup des Mikrokontrollers

Zuerst haben wir unser Material zusammengsucht und den Laser, den LDR-Sensor und den NFC-Leser auf dem Mikrokonroller zu installiert. Zunächst wollten wir den Laser und den Empfänger auf dem selben Mikrokontroller anschliessen und mit Hilfe eines Spiegels den Laserstrahl zurück zum Sensor leiten. Jedoch gab es bei dieser Methode einige Probleme:

  • Durch den Spiegel wurde das Licht gestreut, daher konnte kein Signal vom Senor gelesen werden.
    • Wir haben verschiedene Arten vom Spiegeln wie Hohl- oder Wölbspielgel ausprobiert. Da sich das Licht aber nur am Brennpunkt bündelt, hat uns das auf eine sehr kurze Distanz limitiert.
    • Das Licht haben wir auch versucht mit einer Linse zu bündeln, aber das war ein grosser Aufwand und sehr unpraktisch für das fertige Projekt.

Schlussendlich haben wir uns entschieden, den Laser an einen Mirkrocontroller und an einem zweiten den LDR-Sensor und den NFC-Leser zu installieren. So sind wir nicht an eine bestimmte Distanz zwischen Sender und Empfänger gebunden und bekommen ein stabiles Signal, ohne zusätzliche Objekte wie Linsen oder Spiegel.

Installation Bibliothek auf ESP-32 für NFC-Leser

Wir haben versucht, den NFC-Leser mit Micropython zu verbinden, jedoch gab es Probleme mit der Bibliothek. Daher werden wir dies an Tag 2 weiterführen.

Design Hülle ESP32 Laser

Wir haben mit Fusion360 eine Box mit zwei Öffnungen für Laser und Kabel designt und werden diese mit dem 3D-Drucker ausdrucken. So haben wir eine ästhetisch ansprechende und vor allem schützende Hülle für den Mikrokontoller mit dem Laser.

3D-Modell für das Gehäuse des Lasers

LaserGuard: Lichtschranke mit Alarmfunktion und NFC-Deaktivierung

In diesem Projekt geht es darum, ein Sicherheitssystem zu entwickeln, das auf einer Lichtschranke basiert. Wir nutzen dafür einen ESP32 Mikrocontroller, der einen Laserstrahl aussendet. Wenn der Laser unterbrochen wird, soll ein Piepalarm ausgelöst werden. Um das System auszuschalten, wird eine NFC-Chipkarte verwendet. In diesem Blog werden wir den Entwicklungsprozess dokumentieren und unsere Erfahrungen teilen.