DM Board ICS, la piattaforma di sviluppo per applicazioni di controllo

DM Board controllo vocale

La diffusione degli smartphone sta portando ad una crescita esponenziale di sistemi che possano essere controllati a distanza. Con questi dispositivi mobili è possibile, ad esempio, controllare l’accensione della nostra caldaia, oppure controllare l’apertura del nostro cancello automatico o ancora ricevere messaggi di allarme dal nostro antifurto, ecc. Normalmente questi sistemi, oltre ad essere abbastanza costosi, utilizzano hardware e software proprietari e possono svolgere solo una determinata funzione. Anche se questi dispositivi li troviamo ormai ampiamente diffusi nelle nostre case, risulta difficile per gli amatori dell’elettronica riuscire a realizzare degli oggetti in grado di dialogare con i più moderni sistemi di comunicazione, in quanto vengono richieste competenze molto elevate sia dal punto di vista della progettazione hardware che software. Oggi vogliamo presentarvi DM Board, un progetto che permette anche ai non professionisti di realizzare un qualsiasi dispositivo in grado di essere comandato a distanza. L’idea si basa sulla realizzazione di una scheda (DM Board ICS) dotata di una serie di periferiche, programmabili semplicemente unendo una serie di blocchi software che gestiscono le singole funzioni della scheda. La programmazione viene supportata attraverso un ambiente di sviluppo integrato che permette la creazione del software e la programmazione della scheda. E’ possibile inoltre scaricare da uno store (DM Store), accessibile direttamente da DM Design, dei programmi già realizzati in formato sorgente da poter modificare e/o inserire direttamente nella DM Board ICS. In pratica per la completa gestione di DM Board ICS non serve scrivere nemmeno una riga di codice in quanto, semplicemente seguendo delle procedure guidate, DM Design è in grado di generare automaticamente il codice da scaricare nella scheda. Il progetto si divide quindi in 2 parti: una scheda elettonica (DM Board ICS) e un programma di gestione dell’hardware (DM Design). In questa breve guida vogliamo analizzare l’hardware della DM Board ICS e l’utilizzo di DM Design, per andare quindi a realizzare un sistema di controllo vocale di una lampada attraverso uno smartphone android.

DM Board ICS - Hardware

DM Board ICS IO

Figura 1 - DM Board ICS IO

DM Board ICS (figura 1) è progettata per essere alimentata a 12Vdc attraverso una batteria ma può tranquillamente funzionare anche a tensioni inferiori. E’ dotata di 5 ingressi e 5 uscite. Sia gli ingressi che le uscite possono funzionare a 3.3V o 12Vdc a seconda del punto di connessione. Le uscite sono realizzate attraverso degli stati open drain in grado di pilotare direttamente dei relay. Possono essere emessi dei suoni attraverso il buzzer saldato direttamente sulla scheda. Sono presenti inoltre 2 pulsanti e 1 LED gestibili direttamente dal firmware caricato nella scheda. Il controllo a distanza della scheda è affidato ad un modulo GSM con microfono per l’ascolto ambientale e uscita audio per le chiamate. Per la comunicazione verso il mondo esterno esiste una porta USB 2.0 (funzione device),1 porta I2C e 2 uart condivise con il modulo GSM e con la porta USB. Infine, DM Board ICS contiene al suo interno un circuito per la rilevazione della tensione di alimentazione per controllare la carica di una batteria che alimenti tutta la scheda. L’hardware è stato progettato per funzionare a basso consumo (circa 15uA), rimanendo comunque in ascolto di eventuali interrupt. Tutte le periferiche prevedono dei componenti per la protezione contro le scariche elettrostatiche. Iniziamo ora ad analizzare nel dettaglio le singole parti del circuito elettronico.

Alimentazione

Lo stadio di alimentazione (figura 2) è stato realizzato con un regolatore Microchip a basso consumo (corrente di quiescenza di circa 2uA) che è in grado di erogare una corrente di 250mA a 3.3V.

Alimentazione DM Board ICS

Figura 2 - Alimentazione DM Board ICS

La tensione in uscita dal regolatore è utilizzata per alimentare il microcontrollore e la porta USB. DM Board ICS è dotata anche di un secondo regolatore di tensione (figura 3) per l’alimentazione del modulo GSM.

Alimentazione GSM

Figura 3 - Alimentazione GSM

In questo caso ci troviamo di fronte ad un regolatore con uscita variabile. La tensione di uscita è legata alle resistenze R1 ed R2 dalla seguente relazione:

R1=R2*((Vout/1,240)-1)

Volendo una tensione di uscita di circa 4.5V e impostando R2 a 39KΩ avremo:

R1=39000*((4,5/1,240)-1)=102532

Scegliamo quindi R1 pari a 100KΩ. R60 ha invece lo scopo di garantire un carico anche con il GSM spento per meglio stabilizzare l’uscita del regolatore anche in caso di basse correnti richieste in uscita. Per ridurre i consumi, è possibile spegnere il regolatore quando non viene utilizzato il modulo GSM.

Microcontrollore

DM Board ICS è dotata di un microcontrollore (figura 4) microchip 18F26K22 con tecnologia XLP (eXtreme Low Power) che permette alla scheda di funzionare in basso consumo (circa 15uA), mantenendo tutti i registri attivi (così come per la memoria), e rimanendo in ascolto di eventuali interrupt.

Microcontrollore

Figura 4 - Microcontrollore

Al microcontrollore sono connessi direttamente gli ingressi e le uscite a bassa tensione 3.3V, il LED ed il buzzer. Nella porta I2C del microcontrollore si può notare come siano collegati una serie di diodi TVS (Transient Voltage Suppressor) per la protezione della porta contro le scariche elettrostatiche. Questi diodi sono simili agli zener ovvero diventano conduttivi nel momento in cui la tensione ai loro capi supera una certa soglia. A differenza degli zener, i TVS hanno però tempi di intervento molto più veloci e quindi risultano adatti ad essere utilizzati per proteggere i circuiti dalle scariche elettrostatiche.

Ingressi a 12V

Il connettore degli ingressi presente nella DM Board ICS (figura 5) consente la connessione di 5 segnali di comando.

Ingressi DM Board ICS

Figura 5 - Ingressi DM Board ICS

Ogni stadio d’ingresso è formato da un partitore resistivo che consente di rendere compatibili gli ingressi a 12V con i pin del microcontrollore che accettano una tensione massima di 3.3V. Grazie ai valori scelti, applicando la regola del partitore resistivo, una tensione d’ingresso di 12Vdc viene ridotta all’uscita del partitore a Vout=((12*2200)/(2200+10000))=~2,2V. Lo stadio d’ingresso grazie al partitore di tensione pone implicitamente a 0V l’ingresso del microcontrollore. La tensione positiva da fornire all’ingresso può essere prelevata dal morsetto P_IN-7. Si può notare che esiste un altro morsetto al quale è connesso il segnale VBATT_CONTR. Tale segnale è controllabile via software dal microcontrollore ed è utile in caso si voglia realizzare un programma a basso consumo. Anche in questo circuito sono presenti i TVS per la protezione contro le scariche elettrostatiche. Gli ingressi possono essere utilizzati indifferentemente come digitali o analogici.

Uscite di potenza

Lo stadio di uscita (figura 6) è realizzato attraverso dei mosfet in configurazione open collector.

Uscite DM Board ICS

Figura 6 - Uscite DM Board ICS

Nel circuito sono già stati inseriti i diodi di protezione dei transistori per i carichi induttivi. Tutti i diodi hanno un capo in comune che è stato portato nel morsetto di uscita in modo che i transistori possano funzionare anche a tensioni di uscita diverse da quella di alimentazione. 

Porta USB

DM Board ICS dispone di una porta USB 2.0 che viene utilizzata per la programmazione ma che può essere utilizzata anche per il trasferimento di dati dalla scheda al PC e viceversa.

USB Controller

Figura 7 - USB Controller

Come si vede dalla figura 7 il cuore del circuito è rappresentato dall’integrato di Microchip MCP2200 che è in grado di convertire una comunicazione USB in una seriale RS232. Questo integrato ha un consumo in modalità attiva di circa 10mA ma, essendo DM Board ICS una scheda a basso consumo, si è deciso di accendere lo stadio USB solo se viene connesso un PC alla DM Board ICS. Per fare questo sono stati inseriti i 2 transistori Q9 e Q10 che si attivano solo se è presente una tensione di 5V (valore tipico di alimentazione di una porta USB) ai capi del connettore USB. I 5V della porta USB attraverso D22 vengono riportati in ingresso per poter alimentare la scheda anche in assenza di un’alimentazione a 12V. I LED montati in questo stadio segnalano l’accensione della porta USB (USBON), una trasmissione (USBTX) o una ricezione (USBRX) in atto. Anche in questo stadio sono stati inseriti dei TVS per la protezione contro le scariche elettrostatiche.

Modulo GSM

La connessione alla rete GSM è affidata al modulo SIMCOM SIM900 (Figura 8).

Modulo GSM

Figura 8 - Modulo GSM

DM Board ICS consente l’utilizzo del modulo SIMCOM SIM900B gestito nativamente dal software DM Design. Il modulo GSM viene acceso dal microcontrollore attraverso il transistore ed è in grado di gestire autonomamente il microfono (già amplificato) a lui collegato e lo speaker (non amplificato). In figura 8 notiamo anche per il connettore della SIM la protezione per le scariche elettrostatiche.

Rilevazione livello batteria

DM Board ICS è, come già espresso precedentemente, una scheda che può essere utilizzata per applicazioni a basso consumo e quindi per sistemi alimentati a batterie. Risulta quindi fondamentale monitorare il livello di carica della batteria di alimentazione. Per fare ciò si è deciso di realizzare un circuito per la lettura della tensione d’ingresso della scheda (figura 9).

Livello batteria

Figura 9 - Livello batteria

La tensione di alimentazione è naturalmente troppo elevata per essere letta direttamente dai convertitori ADC del microcontrollore e quindi deve essere ridotta. Per fare questo si è utilizzato un partitore come quello utilizzato per gli ingressi. Se il partitore fosse costantemente connesso all’alimentazione avremmo un consumo continuo di circa 1mA, valore troppo elevato per la realizzazione di sistemi a batterie. Sono stati inseriti quindi i 2 transistori Q1 e Q2 per consentire l’accensione del circuito di rilevazione della carica della batteria solo quando richiesto. Il diodo D1 è stato inserito per evitare dei conflitti in quanto la linea VAL_BATT viene condivisa anche con il buzzer.

Connessioni esterne alla DM Board ICS per la realizzazione dell’allarme

Ora che abbiamo analizzato il funzionamento dell’hardware della DM Board ICS, possiamo illustrare le connessioni necessarie per realizzare il nostro sistema di controllo vocale.

Connessiono Bluetooth

Figura 10 - Connessione Bluetooth

Come si può vedere dallo schema di collegamento di figura 10, abbiamo connesso un relay all’uscita 1 per comandare la lampada; come illustrato in precedenza il relay può essere connesso direttamente alla scheda in quanto il diodo di protezione è già previsto internamente. Per controllare la DM Board ICS dallo smartphone abbiamo pensato di utilizzare un modulo bluetooth 4.0 (RN4677) di Microchip. La connessione del modulo alla DM Board ICS è molto semplice; basta connettere i 2 fili di alimentazione e i 2 fili per la comunicazione seriale. Per poter funzionare, il modulo bluetooth ha bisogno però di cortocircuitare alcuni pin come mostrato nella figura 11. Come si può notare è stato riportato un condensatore da 10uF 6.3V che deve essere connesso il più vicino possibile al modulo. Se viene omesso questo condensatore, o viene connesso lontano dal modulo, il sistema non funzionerà correttamente.

DM Board ICS - Firmware

Per semplificare al massimo la gestione dell’hardware della DM Board ICS e rendere semplice la sua programmazione, si è deciso di inserire all'interno della scheda stessa una macchina virtuale chiamata “DM Virtual Machine“. Su questa macchina virtuale, viene caricato il programma utente che viene da essa interpretato e convertito in codice macchina per essere quindi eseguito dal microcontrollore. La DM Virtual Machine accetta quindi un numero finito di istruzioni che servono a gestire tutte le funzioni della DM Board ICS. La DM Virtual Machine è aggiornabile attraverso un boot loader precaricato nella DM Board ICS, e permette attraverso una semplice procedura di caricare la nuova macchina virtuale che potrebbe, ad esempio, mettere a disposizione nuove istruzioni. Possiamo quindi riassumere le fasi di programmazione della DM Board ICS nei seguenti blocchi di figura 11.

DMBoard SW Layers

Figura 11 - DMBoard SW Layers

Il programma utente che viene passato alla DM Virtual Machine consta in uno stream di byte che deriva da un linguaggio assembler evoluto (DM Assembler). Anche se il DM Assembler risulta essere abbastanza semplice e ad alto livello, pensare di utilizzare un linguaggio simile per la programmazione della DM Board ICS non avrebbe portato a nessun vantaggio rispetto ad un linguaggio convenzionale come il C. E’ stato creato quindi un terzo linguaggio chiamato DM State che è un linguaggio a stati ovvero formato da un insieme di blocchi ognuno dei quali svolge una particolare funzione del programma totale. Questo linguaggio è stato infine convertito in un linguaggio grafico per poter meglio essere gestito dall’utente che lo utilizza. Tutti questi linguaggi vengono gestiti dall’IDE DM Design. La compilazione viene invece demandata al tool DM Programmer che viene lanciato direttamente da DM Design e che si occupa anche della programmazione della DM Board ICS. Il programma utente oltre ad essere generato attraverso DM Design, può essere scaricato direttamente dal DM Store che è uno spazio web che raccoglie una serie di interessanti applicazioni create dagli sviluppatori della DM Board ICS e dalla comunity.

Lo schema di figura 12 riassume come avviene la fase di compilazione/programmazione.

DMBoard SW Flow

Figura 12 - DMBoard SW Flow

Vediamo ora quali siano i principi base per l’utilizzo del linguaggio DM State. Come già detto in precedenza, DMstate è un linguaggio a stati ovvero, formato da un insieme di blocchi ognuno dei quali svolge una particolare funzione del programma totale. Ogni stato (quindi ogni blocco) ha una particolarità: le uscite devono rimanere costanti. Gli stati sono collegati tra loro attraverso dei salti tra un blocco e l'altro che dipendono dai valori degli ingressi o dai valori di alcune variabili. Ogni programma, una volta strutturato, diventerà una semplice macchina a stati. Per chi non avesse mai creato una macchina a stati riportiamo di seguito una piccola guida su come convertire il nostro sistema di controllo vocale in una semplice macchina a stati.

Come strutturare una macchina a stati

Prima di tutto dobbiamo stendere una lista di operazioni che la scheda deve svolgere, possibilmente in ordine cronologico senza preoccuparsi dell’ingresso che scatena l’operazione. Per controllare vocalmente la DM Board ICS ci serviamo di una comunicazione bluetooth, demandando la gestione del controllo vocale allo smartphone; il programma dovrà quindi ricevere le stringhe via bluetooth e abilitare le relative uscite. Il modulo bluetooth comunica con la DM Board ICS attraverso una porta seriale TTL RS232. Riportiamo quindi di seguito le operazioni da svolgere:

  1. Abilita comunicazione seriale
  2. Ricevi stringhe
  3. Accendi lampada
  4. Spegni lampada

A questo punto è importante pensare a tutti gli eventi possibili che possano scatenare un comando (le operazioni da svolgere) e raggruppare i comandi sopra descritti per ogni evento (tabella 1).

Numero evento Evento Comandi da eseguire
1 Accensione Abilita comunicazione seriale
2 Accensione avvenuta Ricevi stringhe
3 Stringa di accensione Accendi lampada
4 Stringa di spegnimento Spegni lampada

Tabella 1: Eventi e comandi da eseguire

Abbiamo quindi automaticamente individuato il numero di stati del programma che nel nostro caso corrisponderà a 4 stati + uno stato creato di default chiamato global (lo scopo di quest’ultimo stato verrà analizzato successivamente). Lo stato diventa quindi un insieme di comandi che devono essere eseguiti a seguito di un evento. Prima di passare alla vera e propria implementazione del programma su DM Design, dobbiamo aggiornare la nostra tabella 1 con due nuove colonne: una che indichi in che stato dobbiamo saltare dopo aver eseguito una serie di comandi e la seconda che indichi se deve essere rispettato un tempo di permanenza in un determinato stato prima di passare al successivo (tabella 2).

Numero stato Evento Comandi da eseguire Stato in cui saltare Tempo minimo di permanenza
1 Accensione Abilita comunicazione seriale 2 0 sec
2 Accensione avvenuta Ricevi stringhe 3, 4 0 sec
3 Stringa di accensione Accendi lampada 2 0 sec
4 Stringa di spegnimento Spegni lampada 2 0 sec

Tabella 2: Eventi, comandi da eseguire, salti e tempi minimi di permanenza

Inseriamo successivamente su ogni riga della colonna “stato in cui saltare” l’evento che scatena il salto (Tabella 3).

Numero stato Evento Comandi da eseguire Stato in cui saltare Evento che genera il salto Tempo minimo di permanenza
1 Accensione Abilita comunicazione seriale 2 Sempre 0 sec
2 Accensione avvenuta Ricevi stringhe 3

 

4

Ricevuta stringa accensione

Ricevuta stringa spegnimento

0 sec
3 Stringa di accensione Accendi lampada 2 Sempre 0 sec
4 Stringa di spegnimento Spegni lampada 2 Sempre 0 sec

Tabella 3: Aggiornamento della tabella 2 con l'evento che scatena il salto

Possiamo infine eliminare la colonna Evento in quanto risulta una ripetizione e stabilire come stato principale (ovvero il primo stato da eseguire) lo stato numero 1 (tabella 4).

Numero stato Comandi da eseguire Stato in cui saltare Evento che genera il salto Tempo minimo di permanenza
1 * Abilita comunicazione seriale 2 Sempre 0 sec
2 Ricevi stringhe 3

 

4

Ricevuta stringa accensione

Ricevuta stringa spegnimento

0 sec
3 Accendi lampada 2 Sempre 0 sec
4 Spegni lampada 2 Sempre 0 sec

Tabell 4: Aggiornamento della tabella 3 senza la colonna "Evento" (* Stato principale)

Come si evince dalla tabella, alla fine dell’esecuzione di una serie di comandi contenuti in uno stato, è possibile saltare in un nuovo stato solo se si scatena l’evento che permette di accedere a quello stato; ad esempio nello stato 2 sono presenti 2 stati a cui saltare in quanto, a seconda dell’evento che viene scatenato alla fine dell’esecuzione della serie di comandi, si può saltare nello stato 3 (nel caso di ricezione della stringa di accensione della lampada) o nello stato 4 (nel caso di ricezione della stringa di spegnimento della lampada). In questo programma non è stato utilizzato il tempo di permanenza che in altri casi può essere utile per forzare l’esecuzione del programma ad aspettare a gestire nuovi eventi o a saltare a stati successivi. Prima di andare a vedere come tradurre la tabella 4 in DM Design, vediamo come quest’ultimo organizza gli stati.

Organizzazione degli stati

In DM Design, ogni stato è diviso in 3 blocchi:

  • Variables: in questo blocco vengono definite le variabili numeriche (o numeriche e alfanumeriche per lo stato global).
  • Outputs: in questo blocco viene definito il funzionamento dello stato assegnando i valori delle uscite o delle variabili, inserendo eventuali ritardi, inviando messaggi, inviando chiamate, ecc.
  • Jumps: questo blocco collega tra di loro gli stati attraverso il valore degli ingressi o delle variabili definite precedentemente.

All'interno del blocco Variables, possono essere definite delle variabili numeriche (chiamate registri), ovvero un valore numerico identificato da un nome che può variare all'interno dello stato. Queste variabili definite all'interno dello stato valgono solo per quello stato. Per poter definire una variabile che venga vista all'interno di tutti gli stati del programma, dovremo servirci di uno stato particolare chiamato global che viene creato di default su tutti i programmi, e definire all'interno di questo stato la variabile che ci interessa.

Questo particolare stato chiamato global ha anche altre funzioni che elenchiamo di seguito:

  1. definire le variabili che dovranno essere condivise (e quindi viste) in tutti gli stati;
  2. inizializzare la scheda ovvero definire come dovranno essere le uscite;
  3. definire quale sia lo stato principale.

Oltre alle variabili numeriche, esistono anche le variabili alfanumeriche. Mentre le variabili numeriche, a seconda di dove vengono definite, assumono un valore locale o globale, le variabili alfanumeriche possono essere definite solo nello stato global e quindi sono globali. Tra le variabili numeriche e alfanumeriche, esiste anche un'altra distinzione; le prime, una volta definite vengono salvate in RAM (una memoria volatile che se viene tolta alimentazione alla scheda perde il suo valore), mentre le seconde (quelle alfanumeriche) vengono salvate direttamente in FLASH (una memoria non volatile che se viene a mancare l'alimentazione mantiene il valore contenuto al suo interno). DM Board ICS esegue sequenzialmente le istruzioni riportate nel blocco di Outputs e successivamente esegue le istruzioni riportate nel blocco Jumps, con la differenza che se in quest’ultimo blocco non incontra un’istruzione di salto, esegue all’infinito questo blocco; questo modo di procedere fa sì che non si esca da uno stato fino a che non si verifichi un evento riportato nel blocco di Jumps. Proseguiamo quindi ad implementare il programma in DM Design per realizzare una lampada a controllo vocale da scaricare poi nella DM Board ICS.

Realizzazione del programma in DM Design

Andiamo ora ad implementare la tabella 4, assegnando un nome ad ogni stato (tabella 5).

Numero stato Nome stato Comandi da eseguire Stato in cui saltare Evento che genera il salto Tempo minimo di permanenza
0 global Abilita comunicazione seriale 1 Sempre 0 sec
1* Attesa comandi Ricevi stringhe 2

 

3

Ricevuta stringa accensione

Ricevuta stringa spegnimento

0 sec
2 Accendi uscita 1 Accendi lampada 1 Sempre 0 sec
3 Spegni uscita 1 Spegni lampada 1 Sempre 0 sec

Tabella 5: Definizione degli stati (* Stato principale)

Possiamo notare come l’abilitazione della comunicazione seriale sia stata inglobata nello stato “global” in quanto il salto non è condizionato da nessun evento. Lo stato principale, ovvero lo stato in cui saltare dopo l'esecuzione dello stato global, è diventato quindi "Attesa comandi". Ricordiamo che ogni stato in DM Design deve essere diviso in 3 blocchi: Variables, Outputs e Jumps.

Le Variables (ovvero le variabili) per ora non le analizzeremo in quanto conviene utilizzare DM Design per capire quante e quali siano necessarie per la realizzazione del programma.

Gli Outputs corrispondono ai comandi inseriti in tabella, mentre i Jumps corrispondono agli eventi riportati in tabella che servono per far saltare da uno stato ad un altro.

Andiamo quindi a dividere ogni stato in 3 blocchi e ad inserire per ogni blocco (tranne che per le variabili) le istruzioni da implementare (tabella 6).

  1. global
    Variables
    Outputs
    Abilita comunicazione seriale
    Jumps
    Stato principale = Attesa comandi
  2. Attesa comandi
    Variables
    Outputs
    Ricevi stringhe
    Jumps
    Se Stringa ricevuta=”A”, salta in Accendi uscita 1
    Se Stringa ricevuta=”B”, salta in Spegni uscita 1
    Salta in attesa comandi
  3. Accendi uscita 1
    Variables
    Outputs
    Accendi lampada
    Jumps
    Salta in Attesa comandi
  4. Spegni uscita 1
    Variables
    Outputs
    Spegni lampada
    Jumps
    Salta in Attesa comandi

Tabella 6: Suddivisione di stati ed istruzioni

Come si può notare, dopo aver diviso ogni stato in 3 diversi blocchi, abbiamo riportato in Outputs la colonna “Comandi da eseguire” ed in Jumps la colonna “Stato in cui saltare”, unita alla colonna “Evento che genera il salto”. Abbiamo aggiunto nello stato “Attesa comandi”, il salto non condizionato nello stesso stato; questo fa sì che se si riceve una stringa diversa da quella di accensione o di spegnimento, il programma ritorna a controllare le stringhe ricevute (notare che l’istruzione ricevi stringhe è bloccante ovvero si esce da questa istruzione solo nel caso in cui si riceve una stringa). Come stringa di accensione abbiamo scelto “A”, mentre come stringa di spegnimento abbiamo scelto “B”. Nello stato “global”, a differenza degli altri stati, il blocco Jumps, serve a definire quale sia lo stato principale. Abbiamo quindi strutturato completamente il programma che accende e spegne una lampada attraverso i comandi vocali via bluetooth. Ora dobbiamo semplicemente caricare la struttura sopra riportata in DM Design.

Implementazione del sistema di controllo via bluetooth in DM Design

In questo articolo non analizzeremo nel dettaglio come creare un nuovo progetto in DM Design. E’ possibile scaricare una guida on-line che illustra passo-passo come creare un semplice programma di lampeggio di un led per capire i comandi base di DM Design. Ricordiamo comunque che il modulo GSM e tutte le istruzioni di gestione degli ingressi/uscite sono gestite nativamente dalla scheda, e quindi con poche e semplici procedure guidate riusciremo a realizzare il nostro programma. Prima di andare a realizzare il nostro programma dovremmo andare ad impostare il modulo bluetooth per comunicare con la scheda DM Board ICS ad una velocità di 9600 bps. Per fare ciò è necessario inviare alcuni comandi al modulo bluetooth (sfruttando ad esempio la porta usb della DM Board  ICS) attraverso ad esempio un terminale come hyper terminal o putty. E' possibile trovare maggiori informazioni a pag. 2 della seguente guida. Vediamo invece come caricare la struttura sopra riportata. Per prima cosa dovremo creare i 3 stati di cui è formato il nostro programma.

Attraverso il pulsante Bottone nuovo stato inserire i 3 stati come in figura 13.

DMDesign inserimento stati

Figura 13 - DMDesign inserimento stati

La prima cosa da fare sarà quella di entrare nello stato global, accendere la comunicazione seriale e settare lo stato principale. Per abilitare la comunicazione seriale, premiamo in sequenza dal menù di sinistra:

“Insert Output”, “USB/RS232 function”, “Turn USB/RS232 ON” ed inserire l’istruzione.

Per settare invece lo stato principale, dal menù di selezione dei comandi, tornare indietro alla schermata iniziale e premere in sequenza:

“Set main State”, “Jump to state” e selezionare lo stato “Attesa comandi” dal menù a tendina.

Lo stato global sarà quindi composto come rappresentato in figura 14.

DMDesign Dettaglio stato global

Figura 14 - DMDesign Dettaglio stato global

Entriamo nello stato “Attesa comandi” ed andiamo ad inserire ciò che abbiamo visto in precedenza (tabella 7).

  1. Attesa comandi
    Variables
    Outputs
    Ricevi stringhe
    Jumps
    Se Stringa ricevuta=”A”, salta in Accendi uscita 1
    Se Stringa ricevuta=”B”, salta in Spegni uscita 1
    Salta in attesa comandi

Tabella 7: Attesa comandi

Dovremo quindi aggiungere prima di tutto l’istruzione "Ricevi stringhe" nel blocco di Outputs premendo in sequenza dal menù di sinistra:

“Insert Output”, “USB/RS232 function”, “USB/232 receive data”.

A questo punto ci si troverà all’interno dell’istruzione di ricezione delle stringhe ricevute dalla porta seriale. Per poter inserire questa istruzione, DM Design richiede di scegliere una stringa dove salvare i caratteri ricevuti dalla seriale, una variabile dove salvare il time-out, una costante che segnala il numero di caratteri che si vogliono ricevere e infine una variabile che riporta il carattere di terminazione della stringa. Naturalmente il menù a tendina non permette di scegliere nessun registro in quanto non abbiamo definito nessuna variabile o stringa.

Per la nostra applicazione ci interessa semplicemente comunicare che attendiamo 1 carattere, non è previsto nessun time-out e nessun carattere di terminazione.

Creiamo quindi una stringa con il tasto Bottone stringa globale (“Add new global string variable”), inseriamo il nome della variabile, ad esempio “Valore ricevuto” e lasciamo vuoto il valore di default.

Per creare una nuova variabile numerica premere il tasto Bottone numero globale (“Add new numerical variable”), attraverso il quale è possibile, con una procedura guidata, inserire una variabile globale che chiameremo “Zero” ed inizializzeremo a 0.

A questo punto possiamo compilare l’istruzione come illustrato in figura 15 ed aggiungerla.

DMDesign RS232

Figura 15 - DMDesign RS232

E’ ora necessario aggiungere le istruzioni di salto. Per poter confrontare 2 stringhe e saltare in un nuovo stato è necessario inserire 2 istruzioni, 1 per il confronto e 1 per il salto. Procediamo con l’inserimento dell’istruzione di confronto: dal menù di selezione dei comandi, tornare indietro alla schermata iniziale e premere in sequenza:

“Insert Jump”, “String/Register function”, “Find String”.

Prima di inserire le istruzioni dobbiamo anche in questo caso creare le variabili che ci servono. Dovremo prima di tutto creare la stringa che contiene il testo per l’accensione della lampada; ad esempio scegliamo di creare la variabile ON1 e di inizializzarla con la stringa “A”. Abbiamo inoltre bisogno di creare altre 2 variabili, che possono anche essere locali, per salvare l’esito della ricerca della stringa e la posizione della stringa trovata. Il secondo parametro (posizione della stringa trovata), in realtà non ci serve per la nostra applicazione quindi possiamo creare una variabile numerica chiamata ad esempio Temp. L’esito della ricerca lo salviamo invece in una variabile di nome “Esito confronto”. Nell’ultimo menù a tendina (Tipo confronto) è possibile selezionare indifferentemente le 2 tipologie di confronto. Possiamo a questo punto aggiungere l’istruzione. Nella variabile “Esito confronto” verrà memorizzato 0 se il carattere ricevuto via bluetooth è uguale a ON1 (nel nostro caso “A”) altrimenti 1. Inseriamo quindi una successiva istruzione di salto condizionato seguendo la sequenza:

“Insert Jump”, “Test function”, “Test if two Variables are equal “.

Selezioniamo dal 1° menù a tendina la variabile “Esito confronto”, dal secondo “Zero” (variabile già creata precedentemente, e dall’ultimo menù a tendina lo stato “Accendi uscita 1”. Dovremmo poi effettuare le stesse operazioni per l'istruzione di salto condizionato per il carattere ricevuto di spegnimento lampada, avendo cura di creare una nuova variabile che contenga il testo di spegnimento che potremo chiamare OFF1. Infine inseriremo un salto non condizionato verso lo stato “Attesa comandi” per i motivi precedentemente illustrati. Lo stato sarà quindi composto come mostrato in figura 16.

DMDesign dettaglio stati

Figura 16 - DMDesign dettaglio stati

Si può notare come nello stato sia stata aggiunta un’istruzione di beep comoda per capire quando la DM Board ICS riceve una stringa via bluetooth. Ora non ci resta che completare i 2 stati “Accendi uscita 1” e “Spegni uscita 1”. Nello stato di accensione, attraverso la sequenza:

“Insert Output”, “Input/Output functions”, “Set Output to '1'”

Selezionando l’uscita 1 dal menù a tendina, possiamo andare ad accendere la nostra lampada connessa a questa uscita, non appena riceviamo la stringa di accensione. Aggiungiamo poi un salto non condizionato verso lo stato “Attesa comandi”. Per lo stato “Spegni uscita 1”, dovremmo invece selezionare “Reset output to ‘0’” per poter spegnere l’uscita 1.

Gli stati diventeranno quindi composti come in figura 17 e 18:

DMDesign uscita ON

Figura 17 - DMDesign uscita ON

DMDesign uscita OFF

Figura 18 - DMDesign uscita OFF

Dalla schermata principale potremo vedere il diagramma a stati complessivo del programma (figura 19).

DMDesign grafico stati

Figura 19 - DMDesign grafico stati

A questo punto non ci resta che avviare la compilazione e la programmazione della DM Board ICS. Attraverso il tasto Bottone compilazione (“Compile code and program board”) è possibile avviare DM Programmer (figura 20).

DMProgrammer

Figura 20 - DMProgrammer

E attraverso il tasto Bottone programmazione (“Program Board”) programmare direttamente la scheda DM Board ICS con il programma appena scritto. Per maggiori dettagli riguardo la programmazione rimandiamo alla guida presente al link.  Il programma completo è scaricabile attraverso lo store di DM Design alla voce “Controllo DM Board ICS con bluetooth”.

DM Board ICS - APP Android

L'app per il controllo vocale della DM Board ICS è scaricabile direttamente dal play store. Attraverso l'applicazione è possibile in 3 semplici passaggi creare dei pulsanti che inviino attraverso il bluetooth delle stringhe (nel nostro caso "A" e "B"), e collegare a questi pulsanti una stringa vocale. Per prima cosa è necessario creare un collegamento alla DM Board ICS via bluetooth attraverso l'apposito menù (Figura 21).

Creazione scheda DM Board ICS

Figura 21 - Creazione scheda DM Board ICS

Successivamente creare il telecomando virtuale per il controllo della DM Board ICS (Figura 22).

Creazione telecomando

Figura 22 - Creazione telecomando DM Board ICS

Ed infine creare i 2 pulsanti di controllo visualizzati in figrua 23 e 24.

Creazione pulsante accensione DM Board ICS

Figura 23 - Creazione pulsante accensione DM Board ICS

Creazione pulsante spegnimento DM Board ICS

Figura 24 - Creazione pulsante spegnimento DM Board ICS

Per qualsiasi ulteriore informazione è possibile connettersi al sito DM Board.

 

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 24 febbraio 2016

Scrivi un commento

EOS-Academy