Come promesso, nell’articolo di qualche giorno fa (Serratura Smart RFID – creiamola con Raspberry Pi Pico) ecco la versione semplificata della serratura smart NFC.
Cosa cambia rispetto alla Serratuta Smart RDIF?
Come detto, questa è una versione semplificata, di seguito una tabella che mostra i componenti in uso divisi per categoria:
Standard | Semplificata | |
Raspberry Pi Pico | Si | Si |
Indicatore acustico | Si (Buzzer attivo) | No |
Indicatore visivo | Neopixel Ring 24 RGB | Led Rosso + Led Verde |
Lettore RFID | Si (RC522) | Si (RC522) |
Servo per serratura | Si (SG-90 o simili) | Si (SG-90 o simili) |
Wiring scheme RFID
Il codice
#https://www.tomshardware.com/how-to/raspberry-pi-pico-powered-rfid-lighting
####################################################
# IMPORT LIBRERIE
####################################################
from libs.mfrc522 import MFRC522 #libreria RFID
from random import randint
import utime
from machine import Pin, PWM
from utime import sleep
from libs.servodegree import servo
led_rosso = Pin(15, Pin.OUT)
led_verde = Pin(14, Pin.OUT)
####################################################
# COLLEGAMENTI
####################################################
#Definisco lettore RFID
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
####################################################
# CONFIGURAZIONE CARTE ABILITATE
####################################################
#Metto in array gli id delle carte che hanno accesso
accessi = [2127566297, 1274987924, 825572532]
#Imposto lo stato della serratura iniziale (0 = Chiuso / 1 = Aperto)
stato = 0
####################################################
# FUNZIONI PER I LED
####################################################
def spegniled():
led_rosso.value(0)
led_verde.value(0)
def lucerossa(time = 0):
led_rosso.value(1)
led_verde.value(0)
if(time != 0):
led_rosso(1)
for i in range(time):
led_rosso.toggle()
utime.sleep_ms(100)
led_rosso(1)
def luceverde():
led_rosso.value(0)
led_verde.value(1)
#####################################################
# INIZIO CODICE SERVO
#####################################################
def apri():
servo(20)
print("Serratura aperta")
def chiudi():
servo(70)
print("Serratura chiusa")
def toggle():
global stato
#Se lo stato è uno, chiudo la serratura e imposto la luce su rosso
if stato == 1:
stato = 0
chiudi()
lucerossa()
utime.sleep_ms(1000)
#Se lo stato è zero, apro la serratura e imposto la luce su verde
elif stato == 0:
stato = 1
apri()
luceverde()
utime.sleep_ms(1000)
else:
red_blynk(5)
##############################################
# INIZIO CODICE ##############################
##############################################
print("Avvio in corso..")
chiudi()
spegniled()
utime.sleep_ms(500)
utime.sleep_ms(1000)
lucerossa()
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
card = int.from_bytes(bytes(uid),"little",False)
print(card)
if card in accessi:
print("Accesso OK")
toggle()
else:
print("Accesso negato")
chiudi()
lucerossa(5)
else:
print("Reader KO")
lucerossa(10)
pass
utime.sleep_ms(50)
Per i dettagli sul codice, puoi consultare l’articolo con la spiegazione passo passo della versione standard.
Mostra commenti