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.