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