Sommario:

Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina: 8 passaggi
Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina: 8 passaggi

Video: Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina: 8 passaggi

Video: Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina: 8 passaggi
Video: You're Whole Life Spent With Your Automated Family, Now It's Time to Escape- Mother's Favorite DEMO 2024, Luglio
Anonim
Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina
Save My Child: il seggiolino intelligente che invia messaggi di testo se dimentichi il bambino in macchina

Si installa nelle auto, e grazie ad un rilevatore posto sul seggiolino, ci avverte – tramite SMS o telefonata – se ci allontaniamo senza portare con noi il bambino

Passaggio 1: introduzione

introduzione
introduzione

Tra gli incidenti più tristi (e comunque poco frequenti) delle cronache, ci sono quelli di genitori che – per sbrigatività, problemi di salute o disattenzione – scendono dall'auto e “dimenticano” i propri figli sul seggiolino, in un ambiente caldo o freddo. Certamente, incidenti del genere avrebbero potuto essere evitati se qualcuno o qualcosa avesse ricordato all'autista che ha lasciato il bambino in macchina; indubbiamente la tecnologia può aiutare e offrire soluzioni, da implementare nel veicolo dal costruttore o di tipo “retrofit”, come il progetto qui descritto. Si tratta di un dispositivo basato su un telefono cellulare GSM che rileva alcuni parametri, in base ai quali viene valutato il comportamento del conducente e vengono eseguite le azioni necessarie: in particolare, viene inviato un SMS al telefono del conducente che sta partendo dall'auto. Il dispositivo è installato nell'auto ed è alimentato dall'impianto elettrico di quest'ultima; verifica che il bambino sia sul seggiolino (mediante un sensore composto da alcuni pulsanti a basso profilo, montati su una breadboard da posizionare sotto il rivestimento del seggiolino): se risulta che i pulsanti sono premuti (quindi il bambino è seduto), il circuito verificherà anche che il veicolo si sia fermato (tramite un accelerometro triassiale), in caso affermativo e una volta trascorso il tempo impostato, invierà un SMS di allarme al telefono del conducente e emetterà un suono di cicalino.

Inoltre effettua una chiamata allo stesso numero di telefono ed eventualmente ad altri, in modo che genitori, amici e altre persone possano chiamare l'autista per verificare cosa sta succedendo. Anche se l'applicazione prescelta è la suddetta, il progetto è stato creato nel nostro laboratorio come una piattaforma che può essere adattata per gli altri due scopi. Il primo è un differenziale per anziani e persone fragili, mentre il secondo è un teleallarme, funzionante in caso di black out (ed utile allo scopo di evitare che il freezer si sbrina e che il cibo in esso contenuto diventi pericoloso).

Passaggio 2: salva il diagramma del circuito di mio figlio

Salva il diagramma del circuito di mio figlio
Salva il diagramma del circuito di mio figlio

Vediamo quindi di cosa si tratta, ed analizziamo lo schema elettrico del circuito, la cui gestione è stata affidata ad un microcontrollore PIC18F46K20-I/PT di Microchip, che è stato programmato tramite il nostro firmware MF1361, in modo che legga lo stato di gli ingressi (a cui sono collegati il sensore di peso del seggiolino, ed un eventuale dispositivo di rilevamento), e acquisisce i segnali forniti dall'accelerometro (U5), e dialoga con la (U4) EEPROM esterna (contenente le impostazioni per il funzionamento del sistema) e interfaccia un eventuale ricevitore radio (U6), e gestisce un modulo cellulare (GSM).

Si prega di notare che il circuito considera elementi che possono essere montati o meno, poiché lo abbiamo concepito come una piattaforma di sviluppo espandibile, per chi desiderasse creare la propria applicazione, partendo dal firmware di base. Iniziamo descrivendo il microcontrollore, che – dopo il power-on-reset – inizializza le linee RB1 e RB2 come ingressi provvisti di una resistenza di pull-up interna, che servirà per leggere alcuni contatti normalmente aperti che sono collegati a IN1 e IN2; i diodi D2 e D3 proteggono il microcontrollore nel caso in cui agli ingressi venga applicata erroneamente una tensione superiore a quella del generatore PIC. Attualmente IN1 è utilizzato per il sensore di peso del seggiolino, mentre IN2 è disponibile per ulteriori eventuali controlli: potremmo utilizzarlo, ad esempio, per il rilevamento dell'apertura e chiusura delle porte, tramite la lettura della tensione sulle luci di cortesia; a tal proposito si tenga presente che in alcune auto moderne le plafoniere sono gestite (in PWM) da una scatola di derivazione (in modo da garantire un'accensione e uno spegnimento graduale), mentre basta leggere lo stato delle luci accese istantaneamente e spento (altrimenti la lettura sarà anomala); successivamente dovremo filtrare il PWM tramite un condensatore posto tra l'ingresso del microcontrollore e la massa (dopo il diodo). Un altro ingresso è RB3, sempre provvisto di una resistenza di pull-up interna, necessaria per leggere il pulsante P1 (che serve per accendere forzatamente il modulo cellulare, che normalmente è spento). Sempre durante l'inizializzazione degli I/O, RB4 viene posto come ingresso allo scopo di leggere – tramite i divisori di tensione R1 e R2 – l'avviamento del circuito, effettuato dal doppio deviatore SW1b; il partitore di tensione è necessario in quanto il microcontrollore tollera una tensione inferiore a quella di ingresso che si trova sul connettore di alimentazione. La funzione dell'RB4 è stata riservata a sviluppi futuri, si spiega considerando che il circuito può essere alimentato sia da un alimentatore di rete tramite presa USB sia tramite una batteria al litio che va collegata all'uscita del regolatore di carica dedicato.

Passaggio 3: schema elettrico

Schema elettrico
Schema elettrico

Quando SW1 viene spostato sui contatti che nello schema elettrico sono contrassegnati con una croce, il resto del circuito viene isolato dalla batteria e quindi spento; se all'ingresso del generatore (USB) viene applicata una tensione di 5 volt, sarà in funzione solo lo stadio di carica (è alimentato tramite il diodo D1, che lo protegge dalle inversioni di polarità). Spostando SW1 in posizione acceso, SW1b porta la tensione di ingresso alla linea RB4 e SW1a alimenta il microcontrollore e quant'altro, tramite la tensione ai capi della batteria (circa 4V a piena carica) oltre all'accensione il convertitore step-up a commutazione siglato U3, che genera i 5V necessari al resto del circuito.

Per quanto riguarda il funzionamento del circuito alimentato via USB, SWb porta la tensione di ingresso all'RB4, che – implementandone la lettura nel firmware – permette di capire se si trova la fonte di alimentazione della rete; tale funzione è utile allo scopo di creare l'allarme anti blackout. Durante il funzionamento a batteria, invece, RB4 consente al microcontrollore di saperlo e di attuare eventuali strategie per diminuire il consumo di energia (ad esempio riducendo gli intervalli di accensione del cellulare). La linea RB4 è l'unico modo in cui il firmware deve capire quando il circuito funziona a batteria, poiché se U1 riceve alimentazione anche se RB4 è a zero volt, significa che il circuito funziona a batteria, mentre se è presente un'altra fonte di alimentazione, funzionerà grazie alla tensione prelevata dalla USB. Torniamo ora all'inizializzazione degli I/O e vediamo che le linee RC0, RE1, RE2 e RA7 sono inizializzate come ingressi, che sono state dotate di una resistenza di pull-up esterna, dato che non possiamo attivarla internamente per tali linee; serviranno per leggere i canali del ricevitore ibrido, che è comunque un accessorio, riservato a sviluppi futuri. Tale ricevitore potrebbe rivelarsi utile per l'uso domestico come teleallarme, per coloro che sono ostacolati nei loro movimenti o costretti a letto; rilevando la variazione alle uscite della radio RX, effettuerà una telefonata per chiedere aiuto oppure invierà un analogo SMS. Questa è una possibile applicazione, ma ce ne sono altre; comunque deve essere implementato nel firmware. RC3, RC4, RB0 e RD4 sono le linee che sono state assegnate all'accelerometro U4, che più precisamente è una breakout board basata sull'accelerometro triassiale MMA8452 di NXP: RC3 è un'uscita ed è necessaria per inviare un segnale di clock, RC4 è un I/O bidirezionale e pilota l'SDA, mentre gli altri due pin sono ingressi riservati alla lettura degli interrupt INT1 e INT2, che vengono generati dall'accelerometro al verificarsi di determinati eventi. Le linee RA1, RA2 e RA0 sono ancora ingressi, ma sono state multiplexate sul convertitore A/D e servono per leggere l'accelerometro triassiale U5, che è anche sulla breakout board e che è basato sul modulo accelerometro MMA7361; tale componente è inteso in alternativa all'U4 (cioè quello attualmente previsto dal nostro firmware) e fornisce informazioni relative alle accelerazioni rilevate sugli assi X, Y, Z tramite tensioni analogiche in uscita dalle linee corrispondenti. In questo caso il firmware è semplificato, poiché la routine di gestione dell'MMA8452 non è necessaria (richiede la lettura dei registri, l'implementazione del protocollo I²C-Bus, e così via). Sempre in tema di ADC, la linea An0 viene utilizzata per leggere il livello di tensione, che viene fornito dalla batteria al litio, che alimenta il microcontrollore e il resto del circuito (ad eccezione del ricevitore radio); se il firmware lo considera, abilita la possibilità di spegnere il tutto quando la batteria si sta esaurendo, oppure quando è al di sotto di una certa soglia di tensione. La linea RC2 viene inizializzata come uscita e genera una serie di impulsi digitali quando il buzzer piezoelettrico BUZ1 deve emettere la nota acustica di avviso che è stata segnalata dal firmware; altre due uscite sono RD6 e RD7, a cui è stato affidato il compito di accendere i led LD1 e LD2.

Passaggio 4: schema del circuito PCB

Schema del circuito PCB
Schema del circuito PCB

Completiamo l'analisi degli I/O con RD0, RD2, RD3, RC5, che insieme agli RX e TX della UART dall'interfaccia verso il modulo cellulare SIM800C di SIMCom; nel circuito quest'ultimo è montato su una scheda dedicata da inserire nell'apposito connettore presente sul circuito stampato. Il modulo scambia i dati relativi ai messaggi inviati (quelli di allarme) e quelli ricevuti (quelli di configurazione) con il microcontrollore, tramite la UART del PIC, che serve anche per i comandi per le impostazioni del telefono cellulare; il resto delle righe riguarda alcuni segnali di stato: RD2 legge l'uscita per il LED “segnale” che viene ripetuto da LD4, mentre RD3 legge il Ring Indicator, cioè il contatto del cellulare che fornisce il livello logico alto quando un si riceve la telefonata. La linea RD0 abilita il reset del modulo e RC5 si occupa dell'accensione e spegnimento; reset e ON/OFF sono implementati dalla circuiteria sulla scheda su cui è montato il SIM800C.

La scheda, il cui schema circuitale è stato mostrato – insieme al pinout del connettore di inserzione – in Fig. 1, contiene il telefono cellulare SIM800C, un connettore per antenna MMX 90° e una pin-strip 2×10 maschio da 2mm su cui sorgente, la linea di controllo dell'accensione (PWR), tutti i segnali e le linee di comunicazione seriale da e verso il modulo GSM, come mostrato in Fig. 1.

Passaggio 5: schema del circuito PCB

Schema del circuito PCB
Schema del circuito PCB

Poiché gli I/O del microcontrollore sono stati definiti, possiamo dare un'occhiata alle due sezioni coinvolte nell'alimentazione del circuito: il caricabatterie e il convertitore step-up DC/DC.

Il caricabatterie è basato sul circuito integrato MCP73831T (U2), prodotto da Microchip; come ingresso accetta tipicamente 5V (il range tollerabile è compreso tra 3,75V e 6V), proveniente in questo circuito dal connettore USB; fornisce – in uscita – la corrente necessaria per caricare elementi agli ioni di litio o ai polimeri di litio (Li-Po), e fornendo fino a 550mA. Una batteria (da collegare ai contatti +/- BAT) può avere una capacità teoricamente illimitata, poiché al massimo si caricherebbe in un tempo molto lungo, tuttavia si tenga presente che per mezzo di una corrente di 550mA, un elemento da 550 mAh viene addebitato in un'ora; poiché abbiamo scelto una cella da 500 mAh, verrà caricata in meno di un'ora. Il circuito integrato opera nella configurazione tipica, in cui il diodo luminoso LD3 è pilotato dall'uscita STAT, che viene portata a livello logico basso durante la carica, mentre rimane a livello logico alto quando termina la carica; lo stesso viene portato ad alta impedenza (aperto) quando l'MCP73831T viene spento o quando si scopre che nessuna batteria è collegata all'uscita VB. VB (pin 3) è l'uscita utilizzata per la batteria al litio. Il circuito integrato effettua la carica con corrente e tensione costanti. La corrente di carica (Ireg) viene impostata tramite un resistore collegato al pin 5 (nel nostro caso è R6); il suo valore è legato alla resistenza dalla seguente relazione:

Ireg = 1, 000/R

in cui il valore di R è espresso in ohm se la corrente Ireg è espressa in A. Ad esempio, con 4,7 kohm si ottiene una limitazione di 212 mA, mentre con R essendo 2,2 kohm la corrente vale circa 454 mA. se viene aperto il pin 5, l'integrato viene portato allo stato di riposo e assorbe solo 2 µA (spegnimento); il pin può quindi essere utilizzato come abilitazione. Completiamo la descrizione dello schema elettrico con il convertitore step-up, che preleva 5 volt stabilizzati dalla tensione di batteria; lo stadio è basato sul circuito integrato MCP1640BT-I/CHY, ovvero un regolatore boost sincrono. Al suo interno è presente un generatore PWM, che pilota un transistor il cui collettore chiude periodicamente a massa la bobina L1, tramite il pin SW, la carica e gli fa rilasciare l'energia accumulata durante le pause – tramite il pin 5 – a i condensatori di filtro C2, C3, C4, C7 e C9. Il diodo clamp che protegge il transistor interno è anche interno, riducendo così al minimo indispensabile i componenti esterni necessari: ci sono infatti i condensatori di filtro tra Vout e massa, l'induttore L1 e il partitore resistivo tra Vout e FB che si occupa con la riattivazione del generatore PWM tramite l'amplificatore di errore interno, stabilizzando la tensione di uscita al valore desiderato. Modificando il rapporto tra R7 e R8 è quindi possibile modificare la tensione fornita dal pin Vout, ma non è nel nostro interesse farlo.

Passaggio 6: impostazioni e comandi per Save My Child

Impostazioni e comandi per Save My Child
Impostazioni e comandi per Save My Child
Impostazioni e comandi per Save My Child
Impostazioni e comandi per Save My Child

Una volta completata l'installazione, sarà necessario configurare l'unità; tale operazione viene effettuata tramite SMS, quindi inserire una SIM funzionante nell'apposito porta SIM del modulo 7100-FT1308M, e prendere nota del numero di telefono corrispondente. Successivamente, impartisci tutti i comandi richiesti tramite un telefono cellulare: sono tutti mostrati nella Tabella 1.

Tra le prime cose da fare c'è la configurazione dei numeri di telefono nell'elenco di quelli che il sistema chiamerà o ai quali verranno inviati gli SMS di allarme, nel caso di un bambino sul seggiolino che sia stato eventualmente” dimenticato abbandonato”. Per facilitare la procedura, essendo il sistema protetto da password come per questa operazione, è stata progettata una modalità Easy Setup: al primo avvio il sistema salverà il primo numero di telefono che lo chiama, e lo considera come il primo numero nell'elenco. Questo numero potrà effettuare modifiche, anche senza password; comunque i comandi possono essere inviati da qualsiasi telefono, purché l'SMS corrispondente contenga la password, e anche se – per velocizzare alcuni comandi – abbiamo consentito che quelli inviati dai numeri di telefono in elenco possano essere dati senza bisogno di Le password. Per quanto riguarda i comandi riguardanti l'aggiunta e la cancellazione di numeri telefonici dalla lista, la richiesta di una password fa in modo che la lista sia gestita solo da una persona abilitata a farlo. Passiamo ora alla descrizione dei comandi e alla relativa sintassi, con la premessa che il circuito accetta anche messaggi SMS contenenti più di un comando; in tal caso i comandi devono essere separati da quello successivo, mediante una virgola. Il primo comando esaminato è quello che modifica la password, consiste in un SMS del tipo PWDxxxxx;pwd, in cui al posto di xxxxx va scritta la nuova password (composta da cinque numeri), mentre pwd indica la password corrente. La password predefinita è 12345.

La memorizzazione di uno degli otto numeri abilitati all'invio dei comandi di configurazione avviene tramite l'invio di un SMS, il cui testo contiene il testo NUMx+nnnnnnnnnnnn;pwd, in cui si deve scrivere la posizione (quale numero si sta memorizzando) al posto di la x, il numero di telefono va al posto della ns, mentre pwd è la password corrente. Tutto deve essere scritto senza spazi. Sono ammessi numeri di 19 cifre, mentre il + sostituisce 00 come prefisso internazionale, sui telefoni cellulari. Ad esempio, per aggiungere il numero di telefono 00398911512 nella terza posizione, dovrai inviare un comando come questo: NUM3+398911512;pwd. La password è necessaria solo quando si tenta di salvare un numero di telefono in una posizione già occupata da un altro; se invece devi aggiungere un numero in una posizione vuota, ti basterà inviare un SMS con il seguente testo: NUMx+nnnnnnnnnnnnnn. La cancellazione di un numero viene eseguita tramite un SMS contenente il testo NUMx;pwd; al posto della x dovrai scrivere la posizione del numero di telefono da cancellare, mentre pwd è la solita password. Ad esempio, per cancellare il quarto numero telefonico dalla lista memorizzata è necessario un messaggio contenente il testo NUM4;pwd. Per richiedere l'elenco dei numeri telefonici memorizzati nel circuito, sarà necessario inviare un SMS contenente il seguente testo: NUM?;pwd. La lavagna risponde al numero di telefono da cui proviene l'interrogatorio. E' possibile conoscere la qualità del segnale GSM inviando il QUAL? comando; il sistema risponderà con un SMS contenente la situazione attuale. Il messaggio verrà inviato al telefono che ha inviato il comando. Passiamo ora allo stato degli ingressi e ai messaggi di configurazione: LIV? permette di conoscere lo stato degli ingressi; IN2 può funzionare sia a livello di tensione (si imposta tramite LIV2:b, che fa scattare l'allarme quando l'ingresso è aperto) sia a livello di variazione (si imposta tramite LIV:v). Per quanto riguarda gli ingressi è possibile impostare un tempo di inibizione, tramite il comando INI1:mm (i minuti di interdizione vanno al posto di mm) per IN1 e tramite INI2:mm per IN2; l'inibizione è necessaria per evitare l'invio di segnalazioni continue se l'ingresso – in modalità livello – rimane aperto. Per definire quali numeri in elenco devono ricevere chiamate telefoniche, è necessario inviare il messaggio VOCxxxxxxxx:ON;pwd, con le stesse regole utilizzate per la gestione dei numeri telefonici a cui inviare gli SMS. Il messaggio di risposta è molto simile: "Numero memorizzato: Posx V+nnnnnnnnnnnn, Posy V+nnnnnnnnnnnn". La S di SMS è stata sostituita dalla V di voce. Anche in questo caso esistono due diversi comandi per la disattivazione: SMSxxxxxxxx:OFF;pwd disattiva l'invio dei messaggi e VOCxxxxxxxx:OFF;pwd disabilita la possibilità di effettuare telefonate. Le x rappresentano le posizioni dei numeri che non devono ricevere le segnalazioni di allarme. Occorre fare una precisazione riguardo al comando per l'impostazione dei numeri di telefono da chiamare o a cui inviare gli SMS di allarme: come da impostazioni di default del firmware e dopo ogni reset totale, il sistema indirizzerà sia le chiamate che gli SMS messaggi, a tutti i numeri memorizzati. Di conseguenza, per ometterne alcuni, è necessario inviare i comandi di disattivazione: SMSxxxxxxxx:OFF;pwd o VOCxxxxxxxx:OFF;pwd, e indicare le posizioni da escludere. Il sistema invia un SMS al numero di telefono che occupa il primo posto della lista, ogni volta che viene rialimentato. Tale funzione può essere disabilitata/abilitata tramite i comandi AVV0 (disattiva) e AVV1 (attiva); il testo predefinito è SYSTEM STARTUP. Passiamo ora ai comandi che consentono la memorizzazione o la sovrascrittura dei messaggi SMS da inviare: la sintassi è come quella di TINn:xxxxxxxxx, dove n è il numero dell'ingresso a cui si riferisce il messaggio, mentre la xs corrispondono al messaggio di testo, che non deve superare la lunghezza di 100 caratteri. Un'impostazione essenziale è quella relativa al tempo di osservazione IN1, che si effettua tramite il comando OSS1:ss, in cui il tempo (compreso tra 0 e 59 secondi) va al posto di ss: indica al circuito per quanto tempo i pulsanti devono rimanere premuti dal momento in cui è stato rilevato l'arresto della vettura e prima della generazione dell'allarme. Il ritardo è dell'essenziale, per evitare che si verifichi un falso allarme quando ci si ferma per un breve periodo. Sotto questo punto di vista il firmware, all'accensione del circuito (all'accensione del cruscotto), attende un tempo che è il doppio di quello impostato, per consentire al guidatore di effettuare operazioni come la chiusura della porta del garage o allacciamento delle cinture di sicurezza, ecc. Un tempo di osservazione per IN2 può essere definito, con le stesse modalità, anche dando il comando OSS2:ss; è inoltre possibile richiedere gli orari attualmente impostati tramite SMS (comando OSS?). Completiamo questa panoramica sui comandi con quello che restituisce le impostazioni di default: ovvero RES;pwd. Il messaggio di risposta è "Ripristina". Il resto dei comandi è stato descritto nella Tabella 1.

Passaggio 7: elenco dei componenti

C1, C8, C10: condensatore ceramico da 1 µF (0805)

C2, C6, C7, C9: condensatore ceramico da 100 nF (0805)

C3, C4: condensatore al tantalio da 470 µF 6,3 VL (D)

C5: condensatore al tantalio da 4, 7 µF 6,3 VL (A)

R1, R2, R4: 10 kohm (0805)

R3, R12: 1 kohm (0805)

R5: 470 ohm (0805) R6: 3,3 kohm (0805)

R7: 470 kohm (0805) 1%

R8: 150 kohm (0805) 1%

R9÷R11: 470 ohm (0805)

R13÷R16: 10 kohm (0805)

R17: –

U1: PIC18F46K20-I/PT (MF1361)

U2: MCP73831T

U3: MCP1640BT-I/CHY

U4: Tabellone cod. 2846-MMA8452

U5: Tabellone cod. 7300-MMA7361 (non utilizzato)

P1: Microinterruttore 90°

P2: –

LD1: LED giallo da 3 mm

LD2, LD4: LED verdi da 3 mm

LD5: – LD3: LED rosso da 3 mm

D1÷D3: MBRA140T3G

D4: MMSD4148

DZ1: diodo Zener da 2,7 V 500 mW

L1: induttore a filo avvolto da 4,7 µH 770 mA

BUZ1: Buzzer senza elettronica

Spezzastrisce femmina a 8 vie

Spezzastrisce femmina a 9 vie

Spezzastrisce maschio a 6 vie

Connettore femmina 2×10 passo 2 mm

Terminale a 2 vie passo 2,54 (3 pz.)

Connettore JST a 2 vie con passo 2 mm per PCB

Batteria LiPo da 500 mA con connettore JST da 2 mm

Circuito stampato S1361 (85×51 mm)

Passaggio 8: conclusione

Conclusione
Conclusione

Il progetto qui proposto è una piattaforma aperta; è possibile utilizzarlo per creare tantissime applicazioni, tra le quali ci sono: l'antifurto per non dimenticare i bambini in macchina, il sistema di teleassistenza e il teleallarme di cui parlavamo prima. Più in generale, si tratta di un sistema in grado di generare avvisi e notifiche via telefono, quando si verificano determinati eventi, che non sono necessariamente emergenze, e quindi servono anche per il monitoraggio remoto.

Consigliato: