di Girolamo D’Orio
In questo articolo ci occuperemo della realizzazione di un dispositivo di allarme il cui combinatore telefonico utilizza un cellulare Nokia. Arduino ha il compito di rilevare le intrusioni e avviare due telefonate per darne avviso. Risponde alle chiamate esterne solo ad allarme avvenuto, permettendo di ascoltare i rumori ambientali. Tastiera e LCD permettono di inserire i codici di blocco/ sblocco e i numeri da chiamare in caso di allarme. Sirena inclusa.
Questo progetto è nato con lo scopo di realizzare un comune sistema di allarme, completo di combinatore telefonico, utilizzando solamente materiali di recupero. Chi tra voi non ha in qualche cassetto un vecchio cellulare “type”?
L’arrivo degli Smartphone ci ha costretto ormai a pensionare i cellulari a tastiera, anche se funzionanti; sono certo che tutti ne abbiamo almeno uno in disuso. Se vorremo, Arduino potrà dargli nuova vita e una diversa funzionalità!
Gli effetti collaterali di un allarme, soprattutto in un condominio, penso che siano noti a tutti: Le sirene assordanti che suonano per periodi interminabili e i falsi allarmi, soprattutto nei modelli in cui la centrale dialoga con i sensori via radio.
Siamo sinceri: molte persone, sentendo suonare un antifurto, difficilmente controllano l’appartamento relativo: la paura d’imbattersi in un malvivente le scoraggia… oppure si giustificano dicendo che… “tanto sarà un falso allarme dovuto ad un’anomalia della centrale” …
Ormai questi apparati sono sempre più disturbati dalle trasmissioni radio, che in qualche modo interferiscono facendo venir meno la costanza della comunicazione con i sensori, cosicché le centrali vanno in allarme. Un altro problema è che in reale caso di furto – almeno cosi mi è stato raccontato – i sistemi di allarme possono essere disinseriti dai “professionisti della sottrazione” con notevole facilità. Su questo aspetto si può aprire una discussione molto lunga, ma le risposte non possono essere certe, quindi sarà opportuno lasciar cadere l’argomento! Detto ciò, potete essere certi che la posa in opera di questo sistema antifurto “home-made” spiazzerà l’intruso in quanto, imbattendosi in un modello mai visto, verrà colto di sorpresa. La centrale che andremo a realizzare è stata progettata con questi criteri:
- Dopo l’attivazione di un sensore, un cicalino segnala con un “beep” la condizione di preallarme: da quel momento sono concessi dieci secondi per inserire il codice di sicurezza (quello da voi impostato alla prima accensione) tramite il tastierino. Al terzo tentativo errato, o a tempo scaduto, scatta l’allarme.
- Un cavo collega LCD e tastiera alla centrale: quest’ultima sarà posizionata in un luogo non facilmente accessibile, allo scopo di evitare una sua eventuale manomissione distruttiva.
- Al momento in cui la centrale va in allarme vengono effettuate le chiamate telefoniche verso i due numeri inseriti dall’utente alla prima accensione.
- Dopo l’invio delle chiamate, viene attivata la sirena, allo scopo di sorprendere gli intrusi e scoraggiare il furto. Il periodo di attivazione è di un solo minuto, per non disturbare eccessivamente il vicinato.
- Ricevuta la chiamata, è possibile chiamare il cellulare collegato alla centrale. Questa scelta ha complicato la realizzazione, ma è stata fatta proprio perché, vista la condizione di allarme, era importante consentire l’ascolto dei rumori ambientali per verificare l’esistenza di situazioni anomale. Tutto questo prima di procedere, eventualmente, a far intervenire le Forze dell’Ordine.
- La centrale risponde alle chiamate solamente se è andata in allarme, quindi è stata eliminata la possibilità che chiunque, anche involontariamente, possa fare ascolto ambientale a sproposito.
Tanto per fare un esempio, quest’ultima funzione ci protegge dai classici venditori di call-center, che riescono sempre e comunque a reperire “magicamente” i nostri numeri privati. La risposta viene attivata solo se è scattato l’allarme. Il dispositivo non risponde alle chiamate se non c’è stato allarme e/o quando viene disinserito tramite codice di sicurezza.
Figura 1: Schema Elettrico del Circuito Antifurto
Nello schema non ho disegnato di proposito i collegamenti dei transistor da Q1 a Q9, in quanto va adattato al telefono che riuscirete a recuperare. Chiaramente, per la replica di tale progetto le spiegazioni sono d’obbligo.
Da Q5 a Q7 l’emettitore del PNP và collegato alle colonne della matrice, nel mio caso al cerchio esterno di rame sotto i pulsanti 1,2,3.
Da Q1 a Q4 l’emettitore del NPN và collegato alla righe della matrice, nel mio caso al cerchio interno di rame sotto i pulsanti 3,6,9,#.
Q8 e Q9 devono essere collegati in parallelo al tasto che raffigura cornetta verde per rispondere e al tasto di cornetta rossa per chiudere la chiamata. L’emettitore sul disco centrale sotto il tasto.
Descrizione Del Circuito
Nel circuito non è presente un alimentatore, si presuppone che venga alimentato da una batteria o da un alimentatore esterno (consiglio comunque la presenza della batteria, in quanto l’alimentazione di casa può essere facilmente sezionata). Come si può notare dallo schema, ci sono due regolatori lineari in cascata. U1 ha il compito di alimentare il microcontrollore ATmega328, LCD, cicalino etc. etc. Per U5 ho optato per un 7812, anche se l’impiego del medesimo è realmente necessario soltanto nei casi in cui si desideri alimentare il circuito con tensioni superiori ai classici 12V (da 14,5 a 30V DC). Utilizzando alimentatori stabilizzati a 12V, sarà possibile omettere tale regolatore ed andare a collegarsi direttamente a C5-C9. La batteria tampone invece dovrà avere un proprio circuito di ricarica (tipicamente a 13,8V) e andrà collegata, sempre tramite D1, all’ingresso di U1. Gli assorbimenti sono minimi, dell’ordine di qualche centinaia di mA per alcuni secondi in caso di allarme; per questo ho deciso di non installare alette di raffreddamento a bordo dei regolatori.
Passiamo a parlare della centrale, per comodità la dividerei virtualmente in tre parti principali:
- Controllo e rilevamento:
Come si è scritto in precedenza, il tastierino e LCD sono esterni al PCB principale. In fase progettuale ho cercato di risparmiare più connessioni possibile, ma allo stesso tempo ho fatto delle scelte per permettere di replicare il progetto anche disponendo di un tastierino numerico diverso da quello utilizzato in questo articolo. La comunicazione verso la seconda scheda LCD con U6 avviene in I2C: quindi con 4 connessioni, compresa alimentazione, ho risolto il problema. Per il tastierino ho lasciato le 7 linee di connessione: non sono poche ma con un semplice cavo di rete, reperibile ovunque, il gioco è fatto. Con questa scelta, se utilizzerete un tastierino dotato di una matrice diversa, sarà sufficiente modificare la dichiarazione dei pin nello Sketch per risolvere il problema.
- Sensori:
Dato che sul mercato è presente un’ampia gamma di rilevatori, ho cercato di dare al circuito la massima versatilità di impiego. La condizione limite è che l’uscita dei sensori, al momento in cui rilevano movimento e/o apertura, riporti un livello logico basso sul pin 11 del microcontrollore, dato che R2 è configurata in pull-up. Osservando il PCB, nella morsettiera virtuale nominata “sensori” il pin a sinistra rappresenta l’ingresso, quello centrale il +5V mentre a destra troviamo il collegamento GND. I sensori non rimangono sempre alimentati, lo sono soltanto quando viene attivato il circuito: considero inutile farli lavorare quando non c’è necessità; inoltre, più lavorano più facilmente si possono guastare. Q11, pilotato tramite R16 collegata al micro, attiva l’alimentazione eventuale ai sensori solo quando viene inserito il codice di sicurezza per attivare l’allarme.
- Comunicazione con il cellulare:
Volendo confermare la filosofia di versatilità del progetto, si doveva garantire la possibilità di installazione di qualsiasi tipo di cellulare. La comunicazione software sarebbe la scelta più semplice, ma non tutti i cellulari hanno protocolli simili e comunque non sarebbe stata una strada accessibile ai meno esperti. Ho preferito cercare una sorta di standard su una cosa che questo tipo di cellulari hanno in comune: il caro, vecchio tastierino numerico. Smontando il cellulare e rimuovendo i tasti, non vi sarà difficile capire, osservando il PCB, che vi trovate al cospetto di una matrice molto simile a quella della tastiera che installerete nella centrale. In estrema sintesi, immaginate che al microcontrollore arrivi una coppia di coordinate che gli consenta di determinare quale tasto è stato premuto. Tali coordinate x e y non sono altro che le righe e le colonne della tastiera, quindi per farla breve deve essere un gioco di scambi tra la V+ e GND. La faccenda si complica dato che elettronicamente dobbiamo simulare la pressione di un tasto su un sistema che non lo prevedeva. Verificando con il tester per sbrogliare la matrice e stabilirne la polarità – cosa che dovrete fare se non userete un Nokia 5130 come quello utilizzato nel progetto – mi sono ritrovato a interfacciarmi con due matrici.
Ho usato transistor NPN e PNP in modalità Switch e, per risolvere il problema del numero di pin liberi con il micro, ho deciso di interfacciarli con U3 e U4 che sfruttando la comunicazione I2C hanno permesso di incrementare le linee a disposizione. Q1-Q3 NPN gestiranno le colonne e Q4-Q7 PNP le righe del tastierino e comprenderanno i numeri da 0-9 più i caratteri * e #. Nel mio caso, per gestire i tasti che raffigurano la “Cornetta Rossa” e la “Cornetta Verde” (Apertura e Chiusura della chiamata vocale) ho dovuto usare altri due transistor Q8-Q9 NPN collegati ad U4, in quanto questi due indispensabili tasti fanno parte di una matrice differente all’interno della tastiera del telefono.
Per rilevare l’arrivo di una chiamata e trasferire l’evento anche al microcontrollore, ho utilizzato una caratteristica che hanno tutti i cellulari: alla risposta attivano i led sul tastierino e lo schermo. Potevo interfacciarmi con il comando dei led a bordo, ma per facilitare l’installazione a tutti ho deciso di installare una fotoresistenza che rileva fisicamente l’accensione del cellulare. Sembra la più facile, ma occorre fare delle discriminazioni software, in quanto ogni tasto con cui simuliamo la pressione comporta l’accensione dei led di retro-illuminazione, quindi per semplificare lo schema dei collegamenti al cellulare, ho dovuto complicare la stesura del software.
Figura 2: I due PCB dell’Allarme con Arduino, di 160×100 mm e 85×137 mm
Figura 3: Layout di Montaggio delle Schede
Elenco componenti | |
R20 | 470 Ω ¼ W |
R14 | 1 KΩ ¼ W |
R1-R4,R17-R18 | 10 KΩ ¼ W |
R5-R13 | 2,2 KΩ ¼ W |
C7 | 1000 uF 24V elettrolitico |
C9 | 100 uF 16V elettrolitico |
C1, C2 | 22 pF poliestere |
C3,C4,C5,C8-C10 | 100 nF poliestere |
U1 | 7805 |
U2 | ATmega328p-pu |
U5 | 7812 |
U3-U4,U6 | PCF8574N |
D1 | 1N4148 |
Q5-Q7,Q12 | BC557 PNP |
Q1-Q4,Q8-Q11 | BC547NPN |
XTAL | 16 Mhz |
P1 trimmer orizzontale | 470 Ω |
LDR1 | FOTORESISTENZA |
BUZ1 | BUZZER |
KEYPAD | 4X3 |
LCD | hd44780 |
Descrizione del software per Arduino
Le librerie necessarie sono di facile reperibilità, nelle ultime versioni dell’Ide sono già comprese:
la libreria Keypad per gestire il tastierino numerico
La libreria Wire per la comunicazione I2C
La libreria LiquidCrystal_I2C per la gestione di LCD in I2C
La libreria Eeprom per salvare codice di sicurezza e numeri di telefono sull’Atmega.
Nel void loop che esegue il micro troverete poche righe, andrò a richiamare semplici sub-routine all’esigenza proprio per snellire il lavoro al microcontrollore:
void loop(){
intruso();
memoriagiro0();
delay(500);
memoriacel1();
memoriacel2();
inserirecode();
delay(500);
if ((codv1!=255 && codv2!=255 && codv3!=255 && codv4!=255)&&(codice==1)) {
verificagiro();
}
if (allarme==0){
lcd.setCursor(0,0);
lcd.print(” ALLARME OFF “);
}
}//end loop
Non potendo pubblicare tutto il sorgente per ovvi motivi di spazio (dato che sono circa un migliaio di righe) pubblico un saggio di come vengono inviati i comandi in modo semplice al cellulare, uno dei passaggi particolari di questa realizzazione.
Anche il concetto più banale in elettronica può risultare non facile: se chiediamo ad una persona di premere un pulsante, si danno per scontate tanto la pressione del pulsante quanto il rilascio. Con il PCF8574A non è proprio così: occorre la fornitura di un insieme completo di istruzioni, per premere il pulsante e per rilasciarlo. Di seguito sono messe in evidenza le righe dei comandi che commutano lo stato dei transistor per simulare la pressione (per esempio del pulsante zero) del tastierino del cellulare:
Wire.write((byte)0b000111010);//premo pulsante numero 0
Wire.endTransmission();
delay(250);
Wire.beginTransmission(0x39);
Wire.write((byte)0b001111000);//rilascio pulsante numero 0
Sembra facile, vero? Ma trovare la giusta combinazione, come vedrete, non è stato immediato. Ho usato il codice binario in quanto lo visualizzavo facilmente, facendo la considerazione che per pilotare due tipologie di transistor NPN e PNP occorre ragionare con logiche inverse, come lo fa anche il PCF8574 se non si aggiungono le resistenze di pull-up (come ho fatto per risparmiare spazio…), insomma: un simpatico rompicapo!
Funzioni del Software
Come accennavo precedentemente, i dati relativi al codice di sicurezza e ai numeri dei cellulari da chiamare in caso di allarme sono salvati nella Eeprom del microcontrollore. In caso di errore di digitazione (e/o cambio dati), per registrarli occorre preparare la Eeprom, scrivendo un valore (espresso in byte) che deve essere 255. Tra gli esempi esplicativi nella sezione Eeprom, sull’Ide di Arduino, vi è uno Sketch da lanciare per scrivere questo valore. Dopo aver proceduto, il software sarà pronto a ricevere i nuovi codici. Dopo averli inseriti, sul display LCD comparirà permanentemente lo stato di allarme, ON o Off. Se digitate il codice di sicurezza quando l’allarme è disinserito verrà visualizzato un conto alla rovescia di 15 secondi, per consentire agevolmente l’uscita dai locali. Il conteggio è accompagnato dal segnale acustico prodotto dal buzzer che scandisce i secondi. Al rientro, il segnale acustico si ripresenterà, questa volta con una frequenza doppia, per ricordarvi di inserire nuovamente il codice per la disattivazione. Si avranno a disposizione dieci secondi prima che inizi la sequenza di chiamata verso i cellulari e che venga attivata la sirena. Una volta intervenuto l’allarme, dopo circa un minuto viene disattivato proprio per limitare il disturbo dovuto alla sirena stessa. In questi casi, comunque, la centrale risponderà sempre alle vostre chiamate per consentirvi di ascoltare eventuali rumori ambientali. Il sistema si ripristinerà del tutto solamente quando verrà digitato nuovamente il codice di sicurezza. Ecco un video del sistema in funzione quando ancora era in test su breadboard. In questo caso, come sensore ho utilizzato un modulo rilevatore ostacoli a raggi infrarossi
Montaggio
Utilizzando il link che segue, trovate un video del sistema in funzione quando ancora era in test su breadboard. In quel caso come sensore avevo utilizzato un modulo rilevatore ostacoli a raggi infrarossi.
Il montaggio non presenta particolari difficoltà, fatta eccezione per le saldature per i collegamenti sullo stampato del cellulare. Prestate attenzione alla componentistica del PCB dove alloggiano tastierino numerico e LCD. I pochi componenti andranno saldati direttamente sul lato saldature, scelta obbligata dal fatto che diversamente occuperebbero lo spazio destinato all’LCD. Sinceratevi di fissare bene il cellulare sul PCB, di collegarlo al suo alimentatore e collocare la fotoresistenza nei pressi dei LED che illuminano la tastiera.