In questa seconda e ultima parte del progetto dedicato all’antifurto con Raspberry Pi (pubblicata sulla rivista Elettronica In n. 289), il sistema viene completato e reso completamente autonomo, integrando avvio automatico, applicazione Android e modello di intelligenza artificiale locale.
Il cuore del sistema è uno script Python, my_alarm.py, configurato per avviarsi automaticamente all’accensione del Raspberry Pi tramite un servizio systemd. Il file my_alarm.service, opportunamente configurato, consente l’esecuzione dello script all’interno di una virtual environment dedicata, dopo la disponibilità della rete. L’integrazione con systemd permette inoltre la gestione centralizzata dei log tramite journalctl, semplificando test, debugging e manutenzione.
La configurazione iniziale del sistema operativo viene effettuata con Raspberry Pi Imager, impostando hostname, credenziali e parametri Wi-Fi. La gestione della rete è affidata a NetworkManager, con possibilità di modifica manuale del file preconfigured.nmconnection per aggiornare SSID e password. Per l’accesso alla casella Gmail viene utilizzata una password per le app di Google, distinta dalla password principale, così da garantire maggiore sicurezza e possibilità di revoca selettiva.
L’app Android, sviluppata in Kotlin con target SDK 36 e minSdk 21, rappresenta il ponte tra l’impianto antifurto tradizionale e il Raspberry Pi. Il pacchetto sorgente include i principali moduli: MainActivity, EmailListener, SmsReceiver, EmailSender, SettingsActivity e SoundsUtils.
La MainActivity gestisce l’interfaccia utente e l’invio dei comandi via email, tra cui REQUEST_PHOTO, START_SIREN, STOP_SIREN, SIREN_CYCLES, AUTONOMOUS e POLLING. L’SmsReceiver intercetta gli SMS provenienti dal sistema di allarme esistente, verificando le prime sei lettere del messaggio per riconoscere un evento valido e inviare automaticamente una richiesta di foto al Raspberry Pi. L’EmailListener monitora la casella Gmail via IMAP alla ricerca di email con subject ALERT, attivando una notifica sonora e visiva in caso di pericolo. L’EmailSender gestisce l’invio asincrono dei comandi tramite SMTP su porta 587.
Il sistema può operare in modalità autonoma: in presenza di un modello .tflite affidabile, il Raspberry Pi può attivare direttamente la sirena in caso di rilevamento di pericolo.
Il modello di intelligenza artificiale viene generato tramite lo script generate_alarm_model.py, che produce due file: my_balcony_alarm.h5 e my_balcony_alarm.tflite. Quest’ultimo, ottimizzato per sistemi embedded, viene trasferito sul Raspberry Pi per l’analisi locale delle immagini. Il dataset deve essere organizzato in cartelle train, validation e test, ciascuna con sottocartelle per le classi normale e pericolo. Vengono fornite indicazioni sul numero di immagini consigliato in base all’ambiente di installazione e sull’importanza degli hard negatives per ridurre i falsi positivi.
Dal punto di vista hardware, la sirena a 12 V è pilotata tramite il GPIO18 (pin 12) del Raspberry Pi, collegato al gate di un MOSFET attraverso una resistenza da 220 Ω. Il circuito include diodo 1N4007 in antiparallelo alla sirena, Zener da 3,6 V, resistenza da 10 kΩ e condensatori per filtraggio (100 nF e 47 µF). L’alimentazione è affidata a una batteria al piombo da 12 V 1,2 Ah, con raccomandazioni sulla separazione dei segnali logici dalla linea di potenza.
Il risultato è un sistema modulare e personalizzabile, che integra Raspberry Pi 5, fotocamera 8 MP Sony IMX219, alimentatore USB-C da 27 W e intelligenza artificiale locale, creando una piattaforma di sorveglianza evolutiva, flessibile e adatta sia a utenti esperti sia ad appassionati di elettronica.
