from mfrc522 import MFRC522
import time
from machine import Pin, PWM
# Inizializza il lettore RFID con i pin specificati
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
# Inizializza i LED
led_verde = Pin(14, Pin.OUT) # LED Verde su GP15
led_rosso = Pin(15, Pin.OUT) # LED Rosso su GP14
# Inizializza il Servomotore
servo_pin = PWM(Pin(16)) # Servomotore su GP16
servo_pin.freq(50) # Freq = 50Hz per servo
# Definisci l'UID autorizzato (sostituisci con il tuo UID ottenuto)
UID_AUTORIZZATO = # sostituisci con il tuo UID reale
# Definizione di funzione per pilotare l'angolo del servo
def set_servo_angle(angle):
# Converte l'angolo in duty ciclo (da 0° a 180°)
duty = int(1800 + 6000 * angle / 180)
servo.duty_u16(duty)
# Metti il servo in posizione iniziale (0°) all'avvio
set_servo_angle(0)
time.sleep(1) # Attende 1 secondo per stabilizzare
print("Sistema di Controllo Accessi + Servo Inizializzato.")
print("Avvicina il TAG RFID...")
while True:
reader.init() # Inizializza il lettore RFID
(stat, tag_type) = reader.request(reader.REQIDL) # Richiedi la presenza di un tag
if stat == reader.OK:
# Se un tag è presente, leggiamo il suo UID
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
# Converte la lista di byte in un intero
card = int.from_bytes(bytes(uid), "little", False)
print("UID Letto:", card)
if card == UID_AUTORIZZATO:
# Accesso Consentito
print("Accesso Consentito!")
led_verde.value(1) # Accende LED Verde
led_rosso.value(0) # Spegne LED Rosso
# Muove il servo (simulazione apertura porta)
set_servo_angle(0) # Angolo di partenza (0°)
time.sleep(0.5) # Breve pausa
set_servo_angle(90) # Apertura a 90°
time.sleep(1) # Mantiene la posizione 1s
set_servo_angle(0) # Ritorna alla posizione iniziale
else:
# Accesso Negato
print("Accesso Negato!")
led_verde.value(0) # Spegne LED Verde
led_rosso.value(1) # Accende LED Rosso
# Il servo non si muove
# Attende 2 secondi prima della prossima lettura
time.sleep(2)
# Spegne entrambi i LED
led_verde.value(0)
led_rosso.value(0)
else:
# Nessun tag, spegne i LED
led_verde.value(0)
led_rosso.value(0)
# Breve pausa per stabilità del loop
time.sleep_ms(200)