Progetto di un sistema di sicurezza con l’ESP32-CAM

In questo articolo andremo a descrivere come creare un sistema per il rilevamento dei movimenti tramite il modulo ESP32-CAM. Il sistema è in grado di rilevare i movimenti all'interno del campo visivo della sua camera, attivando una segnalazione automatica mediante l'invio di una e-mail al proprietario. Nel blog di Elettronica Open Source un progetto simile è già stato presentato. A differenza del precedente progetto, però, quello attuale offre alcuni vantaggi quali un minor numero di componenti, basso costo e la maggiore semplicità realizzativa. Questo articolo quindi è rivolto a coloro che volessero realizzare un sistema di allarme semplice, a basso costo e di facile implementazione, rinunciando però alle maggiori funzionalità offerte dall'implementazione con il precedente approccio.

Introduzione

I componenti hardware necessari per la realizzazione del progetto sono:

  1. un modulo ESP32-CAM, nel nostro caso particolare si è trattato della scheda AI-Thinker dotata di camera OV2640
  2. un programmatore FT232RL FTDI per il caricamento del firmware nel modulo
  3. cavetti jumper femmina-femmina

Per la programmazione dell'ESP32, invece, l'IDE Arduino offre tutto il necessario. Come è possibile notare, a differenza del progetto precedente, in quello attuale il numero dei componenti è davvero ridotto. Tuttavia, sono ridotte anche le funzionalità supportate. Ad esempio, non è presente nessun tipo di segnalazione acustica ma solo l'invio di un messaggio alla casella di posta elettronica indicata. L'aspetto più interessante resta comunque l'assenza del sensore PIR per la rilevazione dei movimenti. Per riuscire a rilevare i movimenti senza la necessità di un sensore abbiamo preso in prestito uno sketch dal blog di Eloquent Arduino, e lo abbiamo modificato affinché inviasse un messaggio di posta elettronica di avvertimento nel momento della rilevazione di un movimento nel campo visivo della camera.

Lo sketch di Eloquent Arduino presenta dei vantaggi che andiamo ad elencare:

  • non utilizza un approccio al problema con l'utilizzo del Machine Learning, ma attraverso una semplice elaborazione dei frame. Questo approccio risulta più snello ed adatto per applicazioni real time;
  • inoltre, non utilizza un sensore ad infrarossi passivo PIR, e ciò rappresenta un componente in meno e un costo inferiore. Questi sensori sono molto usati come rilevatori di movimento poiché rilevano la radiazione infrarossa (IR) irradiata dagli oggetti nel loro campo visivo.

Questo approccio ha comunque delle controindicazioni. La principale è la robustezza. Infatti, se volessimo usare il dispositivo per rilevare la presenza di ladri nella nostra casa, potremmo incorrere in dei falsi positivi, poiché anche una mosca che si avvicini troppo all'obiettivo potrebbe far scattare l'allarme, nonostante un'impostazione elevata delle soglie di allarme.

Configurazione hardware e software

In Figura 1 vengono riportati i collegamenti da realizzare tra i componenti necessari per l'applicazione in esame.

Figura 1: Configurazione dei collegamenti tra la scheda AI-Thinker e il programmatore FDTI

Il modulo ESP32-CAM AI-Thinker è una scheda di sviluppo basata sull'ESP32 con una fotocamera OV2640 e diversi GPIO per collegare le periferiche. Tuttavia, non ha un programmatore integrato. Si rende necessario un programmatore FTDI per collegarlo al computer e caricare il codice. Molti programmatori FTDI hanno un ponticello che consente di selezionare 3.3V o 5V. Meglio assicurarsi che il ponticello sia nella posizione giusta per selezionare 5V. Nella Tabella 1 vengono descritti nel dettaglio i collegamenti tra i pin dei diversi dispositivi e il colore del cavo associato.

Tabella 1: Descrizione dei collegamenti tra i pin del modulo ESP32-CAM e i pin del programmatore
ESP32-CAM Programmatore FTDI Colore cavo
5V VCC (5V) rosso
GND GND nero
U0R TX verde
U0T RX blu

Inoltre, occorre tener presente che in fase di caricamento del firmware, il GPIO0 dell'ESP32-CAM deve essere collegato a GND. Questo GPIO è collegato internamente a un resistore di pull-up da 10 kΩ. Quando GPIO0 è collegato a GND, l'ESP32 entra in modalità flash ed è possibile caricare il codice sulla scheda. Per far funzionare l'ESP32 "normalmente", basta disconnettere il GPIO0 da GND e premere il tasto di reset sulla scheda. Prima di cominciare con la descrizione dell'applicazione occorre configurare l'IDE Arduino per operare con il modulo ESP32. Occorre scaricare un componente aggiuntivo per l'IDE Arduino che consente di programmare l'ESP32 usando l'IDE Arduino e il suo linguaggio di programmazione. Per installare la scheda ESP32 nell'IDE Arduino, basta seguire le seguenti istruzioni:

  1. Nell'IDE Arduino, andare su "File" -> "Impostazioni"
  2. Inserire https://dl.espressif.com/dl/package_esp32_index.json nel campo "URL aggiuntive per il Gestore schede" e premere il tasto "Ok"
  3. Aprire il "Gestore schede.." andando su "Strumenti" -> "Schede" -> "Gestore schede.."
  4. Cercare ESP32 e premere il tasto di installazione per ESP32 by Espressif Systems

La rilevazione del movimento

Lo sketch originale viene descritto in inglese sulla pagina ufficiale del blog. Noi cercheremo di descrivere brevemente l'idea di base. Lo sketch non si concentra su un oggetto particolare per poi seguirne il movimento. Invece rileva solo se una porzione considerevole (quanto considerevole può essere scelto) dell'immagine è cambiata da un fotogramma all'altro. In pratica, confrontando un fotogramma con il precedente, il cambiamento di molti pixel starà ad indicare un possibile movimento. Dal punto di vista tecnico, per evitare un'elevata sensibilità al rumore e quindi mitigare i falsi positivi, l'idea è stata quella di lavorare con dei blocchi di pixel, invece che con dei singoli pixel. Un blocco è semplicemente un quadrato N x N, il cui valore è la media dei pixel che contiene. In questo modo un'immagine di dimensione 320x240 pixel può essere sotto campionata e ridimensionata anche di 10 volte portandola a diventare 32x24 pixel. Con tutti i vantaggi che conseguono nel lavorare con meno pixel. In Figura 2 viene illustrato un esempio di sotto campionamento con blocchi di dimensione 3x3.

Figura 2: Esempio di sotto campionamento con blocchi 3x3. La somma dei valori presenti nel quadrato di sinistra viene divisa per il numero delle celle. Il risultato di questa media è 2. Tutti i valori del blocco vengono sostituiti con il valore 2

Il fattore di scala del ridimensionamento deve essere scelto in base all'applicazione. Un fattore di scala troppo alto rende il rilevamento poco sensibile, viceversa operando con l'immagine originale potrebbe risultare in molti falsi positivi. Poiché la semplice differenza tra due blocchi potrebbe ancora risultare troppo sensibile al rumore, in quanto anche un solo pixel di differenza renderebbe due blocchi differenti, l'autore ha scelto invece di definire una soglia percentuale al di sopra della quale è possibile affermare che il blocco è effettivamente cambiato. Un buon punto di partenza potrebbe essere una soglia pari al 10 o al 20 percento del totale. Quindi se il 10 o il 20 percento del totale dei pixel in un blocco cambia, vuol dire che il blocco è cambiato. Maggiore è la soglia, meno sensibile sarà l'algoritmo. Per decidere se l'immagine è cambiata da un frame all'altro, occorre decidere quanti blocchi devono risultare diversi. Torniamo all'esempio dell'immagine di dimensioni 320x240. Con un blocco 10x10, il numero di blocchi per frame sarà pari a 768. Ponendo come soglia 20 blocchi differenti, su 768 blocchi sono solo il 2,5% di cambiamento, che è appena percettibile. Per aumentare la robustezza, la soglia non deve essere impostata su un valore troppo basso. I parametri su cui è possibile operare sono quindi: la dimensione dei blocchi, la soglia blocchi e la soglia frame.

La notifica per posta elettronica

Passiamo adesso alla descrizione di come inviare un messaggio di posta elettronica utilizzando un server SMTP. Per far funzionare questo progetto, ESP32-CAM deve poter avere accesso a Internet tramite un router connettendosi alla rete locale domestica. Sebbene l'implementazione del progetto sia avvenuta utilizzando la scheda AI-Thinker, è possibile utilizzare qualsiasi altra scheda dotata di ESP32 e fotocamera OV2640. Occorre solo assicurarsi di utilizzare la corretta assegnazione dei pin per la scheda che si sta utilizzando. Per inviare e-mail con ESP32-CAM, utilizzeremo la libreria ESP32 MailClient. Questa libreria consente a ESP32 di inviare e ricevere e-mail con o senza allegati tramite server SMTP e IMAP. In questo progetto, utilizzeremo SMTP per inviare un'e-mail. SMTP significa Simple Mail Transfer Protocol ed è uno standard Internet per la trasmissione della posta elettronica. Per inviare e-mail tramite il codice, occorre conoscere i dettagli del server SMTP. Ogni provider di posta elettronica ha un server SMTP diverso.

Per prima cosa, è necessario installare la libreria ESP32 MailClient. Questa libreria può essere installata tramite il Library Manager nell'IDE Arduino. Basta andare nell'IDE Arduino su "Sketch" > "Includi libreria" > "Gestisci librerie...". Dovrebbe aprirsi il Gestore della libreria. Cercando ESP32 Mail Client di Mobizt e installando la libreria, il gioco è fatto. Si rende opportuno creare un nuovo account e-mail per inviare le segnalazioni al proprio indirizzo di posta elettronica personale principale. La creazione di un nuovo account è utile per non utilizzare la propria e-mail personale per inviare le segnalazioni tramite ESP32. Infatti, se qualcosa dovesse andare storto nel codice o se per errore il dispositivo facesse troppe richieste di segnalazione, il provider potrebbe bannare o disabilitare temporaneamente l'account. Nel nostro caso abbiamo utilizzato un account fornito da Gmail.com appena creato per inviare le e-mail, ma è possibile utilizzare qualsiasi altro provider di posta elettronica. L'account di posta elettronica del destinatario, invece, può essere tranquillamente il proprio account personale. Occorre consentire alle app meno sicure di accedere al nuovo account Gmail creato, in modo da poter inviare le segnalazioni. Per farlo basta aprire questo Link per accedere al menu in questione e portare l'interruttore su ON come mostrato in Figura 3.

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2558 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Send this to a friend