
Un simulatore di evacuazione è un sistema da installare in una scuola, in un ente pubblico, azienda o anche in una abitazione. Esso rimane silente e inerte per molti giorni. A un momento casuale e imprevisto, esso comincerà a emettere luci e segnalazioni d'allarme come se fosse successo qualche evento inatteso come, ad esempio, un incendio o un terremoto. Risulta, dunque, utile, in tutte quelle strutture nelle quali i fruitori sono stati addestrati a varie forme di evacuazione e devono metterle in pratica senza alcun preavviso.
Le prove di evacuazione
In molte scuole italiane, per legge, gli alunni devono svolgere le prove di evacuazione (o di esodo), come visibile in figura 1. Possibilmente a insaputa dei ragazzi e a un orario prestabilito, suona una campanella o un allarme e i responsabili mettono in atto le procedure di sicurezza da seguire. Si tratta di un processo estremamente importante che viene eseguito (o dovrebbe esserlo) in maniera abbastanza seria e puntigliosa, soprattutto nei Paesi soggetti a forti eventi sismici come, ad esempio, in Giappone.
Mio figlio di 10 anni, in effetti, mi ha confermato dell'adozione di tali misure di sicurezza nella sua scuola. La frequenza con cui esse vengono applicate è molto bassa, circa 1-2 volte l'anno, quando va bene. Molte volte tali prove si trasformano in un'attività abbastanza sterile e superflua. Gli insegnanti e i bambini conoscono già a priori esattamente l'orario dell'esodo e tutti quanti sono preparati alla prova che stanno per effettuare. Tutto questo toglie, in effetti, il vero spirito della simulazione, in quanto un soggetto già psicologicamente preparato all'accadimento imminente di un evento critico è portato ad affrontare le varie procedure in maniera alquanto rilassata e con una certa sufficienza.
Di cosa si tratta
Non vogliamo subentrare in tema legislativo ne', tanto meno, in quello scolastico e di sicurezza. Il nostro sistema, rappresentato dalla scheda ESPertino, ha il compito d'innescare lo stato virtuale d'emergenza. In altre parole il circuito, in una data e ora sconosciuta a tutti, anche agli addetti ai lavori, si attiverà automaticamente. Non si sa quando, ma le specifiche di programmazione agevolano la probabilità dell'evento a realizzarsi in un arco di tempo "relativamente" prevedibile. All'ora "X" di un giorno non previsto, dunque, suonerà l'allarme. Si accenderanno le luci, la sirena comincerà a emettere i suoi sibili e tutti gli occupanti della struttura metteranno in pratica, con molta calma e serenità, tutte le procedure di sicurezza studiate sino a quel momento.
Il fatto che il segnale per l'evacuazione sia emesso sul serio in maniera del tutto casuale e senza preavviso aumenta l'efficacia del metodo e l'allarme sembra davvero realistico. Gli insegnanti, o chi per essi infatti, con le procedure normali sono sempre al corrente di ciò che sta per succedere nella giornata prescelta dell'esodo. Con il sistema da noi proposto, invece, l'evento è del tutto inatteso e sconosciuto a tutti, anche al programmatore elettronico del dispositivo. L'emergenza simulata potrebbe accadere in qualsiasi momento, anche durante la ricreazione o proprio cinque minuti prima dell'uscita dalla scuola e la fine delle lezioni, ovviamente se il circuito è acceso e attivo. Questo perché tutto il funzionamento è regolato e gestito da eventi completamente casuali e aleatori e l'attivazione delle porte di uscita è effettuata da processi non prevedibili.
Le parti essenziali del sistema
Fondamentalmente il sistema è governato da ESPertino, che coordina tutte le operazioni di elaborazione e di decisione. La figura 2 mostra uno schema generale logico dei componenti che entrano in gioco. In pratica è lo stesso ESPertino a comandare i carichi previsti nel caso di un allarme di simulazione avvenuto. Essi possono essere i più vari e disparati come, ad esempio,
- Segnalatori luminosi:
- Lampade;
- Led;
- Lampeggianti;
- Segnalatori acustici:
- Sirena;
- Altoparlanti;
- Allarmi vari;
- Campanelli;
- Segnalatori vocali:
- Voci digitalizzate o sintetizzate che invitano ad allontanarsi;
- Estintori automatici;
- Relé esterni per attivare qualunque tipologia di carico;
- Combinatori telefonici;
- Ulteriori schede di controllo;
- E molti altri.
Naturalmente, in caso di utilizzo in una scuola o altra struttura formata da più piani, si può predisporre il sistema alla attivazione dell'allarme in diversi punti logistici. In questo modo il segnale audio può risultare udibile da più persone, contemporaneamente. Il tutto deve essere portato in loco attraverso collegamenti elettrici installati all'interno di opportune canaline a norma.
Il cablaggio elettrico
Per comunicare all'esterno dell'avvenuto innesco dell'allarme, ESPertino utilizza le seguenti porte:
- IO0;
- IO2;
- IO4;
- IO12;
- IO14.
Sono, infatti, inclusi nella segnalazione anche i due relé a bordo della scheda, ai quali possono venire collegati dei piccoli carichi. Alle restanti porte si può connettere, come detto prima, qualunque tipologia di attuatore. Nel caso siano richieste importanti potenze o correnti, è possibile utilizzare dei transistor o mosfet, con l'eventuale adozione di optoisolatori. La figura 3 mostra le porte di output coinvolte nel progetto. L'utilizzo di tali canali di comunicazione è completamente personalizzabile e il programmatore può decidere, secondo le proprie esigenze, quali porte di I/O adoperare. Potrebbe anche escludere l'utilizzo dei due relé oppure usare una sola uscita.
Lo sketch
Il funzionamento del sistema è imperniato sulla generazione dei numeri casuali per l'innesco dell'allarme simulato. In altre parole, lo sketch estrae un numero a caso, compreso in un determinato intervallo, argomentazione che sarà esaminata dopo. Se, nella estrazione, esce un numero prestabilito, si attiva l'allarme che causa l'accensione di tutte le porte di output di ESPertino. Lo stato di allerta dura 30 secondi ma tale tempo può essere liberamente modificato, regolando opportunamente la pausa d'attesa all'interno della condizione di allarme, nello sketch. Tale tempistica dovrebbe essere legata, soprattutto, all'azione sonora delle sirene utilizzate. Sarebbe alquanto fastidioso, infatti, essere obbligati ad ascoltare insistentemente, per 20 minuti, un noioso e rumoroso avvisatore acustico. Esso potrebbe arrecare, persino, fenomeni di paura e di panico tra gli alunni e i professori.
Ricordiamo che la funzione random(), usata all'interno dello sketch, genera dei numeri pseudo-casuali. La sua sintassi, molto semplice, è le seguente:
random(max);
random(min, max);
dove:
- min è il limite inferiore del valore casuale, incluso e opzionale;
- max è il limite superiore del valore casuale, escluso dalla generazione.
Per generare sequenze molto più imprevedibili si consiglia di usare anche la funzione randomSeed().
Le azioni cicliche sono eseguite a ogni secondo, all'interno della funzione loop(), pertanto tutti i calcoli probabilistici dell'evento si riferiscono proprio a tale unità di misura. La figura 4 mostra il diagramma di flusso dell'algoritmo utilizzato dal sistema.
//------------------------------- // Simulatore di evacuazione // di // Giovanni Di Maria //------------------------------- void setup() { Serial.begin(9600); pinMode(0,OUTPUT); pinMode(2,OUTPUT); pinMode(4,OUTPUT); pinMode(12,OUTPUT); // Porta per il Rele' pinMode(14,OUTPUT); // Porta per il Rele' } void loop() { //------Genera un numero casuale------- long caso=random(0, 100000); // lower bound: inclusive; upper bound: exclusive Serial.println(caso); // Scrive numero casuale su monitor seriale if(caso == 5) { //--------In caso di allarme simulato attiva tutti i carichi--------- digitalWrite(0,HIGH); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(12,HIGH); // Attiva il rele' digitalWrite(14,HIGH); // Attiva il rele' delay(30000); //-----------Si puo' modificare a piacere il tempo DURATA dell'allarme //------Dopo qualche tempo disattiva tutto----------- digitalWrite(0,LOW); digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(12,LOW); // Disattiva il rele' digitalWrite(14,LOW); // Disattiva il rele' } delay(1000); // Pausa di 1 secondo. Non modificare }
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2196 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.

Ottimo articolo, ho già realizzato qualcosa di molto simile in passato usando Arduino.
Sono un volontario di protezione civile, con cadenza annuale effettuiamo le prove di evacuazione nelle scuole; le scuole del mio territorio hanno diverse tipologie di segnalazione (il suono della sirena è interrotto a intervalli diversi, per intenderci “tipo” codice morse ) a seconda del tipo di evento (incendio, terremoto, rischio nube tossica ecc. ecc.). Nel mio caso l’allarme non viene lanciato casualmente (purtroppo è difficile far capire a docenti e presidi quanto sia importate simulare la condizione “quando meno te lo aspetti”) ma attraverso un display LCD e dei tasti per la navigazione si seleziona il tipo di evento, e la sua durata (nel eventi in cui sia prevista anche una segnalazione di cessato allarme).
Si può ulteriormente migliorare l’efficienza della generazione casuale dei numeri implementando qualche “disturbo” esterno. Ad esempio, combinando la funzione random() con la lettura della tensione di una fotoresistenza, il numero generato è ancora più casuale. Infatti la fotoresistenza fornirebbe dei valori aleatori indipendenti dall’uomo.
Ottimo articolo, spiega passo passo il sistema. Un’ottima idea per le scuole, che notoriamente hanno budget che non permettono di innovare anche il sistema di allarme; inoltre, come diceva Giuseppe, è difficile far capire a presidi ed insegnanti che, per essere più realistica possibile , l’emergenza deve essere inaspettata.
Pensavo che potrebbe essere addirittura realizzato dagli studenti come progetto, nelle scuole tecniche o nei licei scientifici!
Articolo ben fatto e corredato di dati e di analisi. Forse, come dice Giovanni, si potrebbe migliorare la funzione di generazione dei numeri casuali; se non sbaglio con la funzione “random()” i numeri sono pseudo-casuali giusto? O il modulo ESP ha all’interno un vero generatore di numeri casuali?
In informatica pura il “vero” generatore casuale non esiste. Si tratta di pseudo casuali. Proprio per questo occorre “disturbare” la generazione dei numeri pseudo-casuali con dei fatti esyerni non prevedibili dall’uomo.
E quindi si può perturbare loa generazione con una misurazione esterna ADC (es fotoresistenza, sensore di temperatura), oppure aggiungere qualche cifra con un RTC esterno, insomma qualcosa che “scombussoli” il normale flusso algoritmico in maniera più inaspettata possibile. Se siete interessati posso postare qualche semplicissimo esempio.
La ST fornisce alcuni micro con una periferica di generazione di numeri casuali a partire dal rumore: http://www.st.com/content/ccc/resource/training/technical/product_training/11/59/30/b4/17/f6/4e/b4/STM32L4_Security_RNG.pdf/files/STM32L4_Security_RNG.pdf/jcr:content/translations/en.STM32L4_Security_RNG.pdf
Bello!!!!!
Ciao Giovanni, io ho il seguente problema, riusciresti a darmi qualche dritta?
ho cercato di eseguire il seguente sketch:
//——————————-
// Simulatore di evacuazione
// di
// Giovanni Di Maria
//——————————-
void setup() {
Serial.begin(9600);
pinMode(0,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(12,OUTPUT); // Porta per il Rele’
pinMode(14,OUTPUT); // Porta per il Rele’
}
void loop() {
//——Genera un numero casuale——-
long caso=random(0, 100000); // lower bound: inclusive; upper bound: exclusive
Serial.println(caso); // Scrive numero casuale su monitor seriale
if(caso == 5) {
//——–In caso di allarme simulato attiva tutti i carichi———
digitalWrite(0,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(12,HIGH); // Attiva il rele’
digitalWrite(14,HIGH); // Attiva il rele’
delay(30000); //———–Si puo’ modificare a piacere il tempo DURATA dell’allarme
//——Dopo qualche tempo disattiva tutto———–
digitalWrite(0,LOW);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(12,LOW); // Disattiva il rele’
digitalWrite(14,LOW); // Disattiva il rele’
}
delay(1000); // Pausa di 1 secondo. Non modificare
}
dopo aver ricevuto questo errore
lo sketch usa 115707 byte (11%) dello spazio disponibile per i programmi. Il massimo è 1044464 byte.
Le variabili globali usano 9496 byte (3%) di memoria dinamica, lasciando altri 285416 byte liberi per le variabili locali. Il massimo è 294912 byte.
i led ld2 ed ld3 cominciano a lampeggiare ed ho quest’ultimo errore
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (‘x’)
Cosa accade? Come posso risolvere? Grazie.
Ciao a tutti, ho cercato di eseguire il seguente cketch:
//——————————-
// Simulatore di evacuazione
// di
// Giovanni Di Maria
//——————————-
void setup() {
Serial.begin(9600);
pinMode(0,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(12,OUTPUT); // Porta per il Rele’
pinMode(14,OUTPUT); // Porta per il Rele’
}
void loop() {
//——Genera un numero casuale——-
long caso=random(0, 100000); // lower bound: inclusive; upper bound: exclusive
Serial.println(caso); // Scrive numero casuale su monitor seriale
if(caso == 5) {
//——–In caso di allarme simulato attiva tutti i carichi———
digitalWrite(0,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(12,HIGH); // Attiva il rele’
digitalWrite(14,HIGH); // Attiva il rele’
delay(30000); //———–Si puo’ modificare a piacere il tempo DURATA dell’allarme
//——Dopo qualche tempo disattiva tutto———–
digitalWrite(0,LOW);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(12,LOW); // Disattiva il rele’
digitalWrite(14,LOW); // Disattiva il rele’
}
delay(1000); // Pausa di 1 secondo. Non modificare
}
dopo aver ricevuto questo errore
lo sketch usa 115707 byte (11%) dello spazio disponibile per i programmi. Il massimo è 1044464 byte.
Le variabili globali usano 9496 byte (3%) di memoria dinamica, lasciando altri 285416 byte liberi per le variabili locali. Il massimo è 294912 byte.
i led ld2 ed ld3 cominciano a lampeggiare ed ho quest’ultimo errore
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (‘x’)
Cosa accade? Come posso risolvere? Grazie.
Ciao, il primo, quello che lo “sketch usa tot memoria per le variabili” non è un errore.
L’errore è la connessione all’ESP32. Ti consiglio di leggere i vari thread riportati qui, nei quali si è riscontrato lo stesso errore:
https://it.emcelettronica.com/la-nuova-scheda-espertino-per-liot
E’ inutile riportarli in questo topic. Facci sapere.