Quando ho saputo di essermi aggiudicato la coppia di CPUStick in cambio di una recensione delle stesse, smaltito l’immediato entusiasmo, mi sono subito documentato per capire nel dettaglio come fossero fatti questi dispositivi e le loro reali potenzialità.
Naturalmente il primo passo è stato visitare il sito CPUstick scoprendo con sorpresa, seguita da un pizzico di preoccupazione, che in fondo i contenuti del sito non erano molto più ricchi di cosa già era stato scritto nelle pagine di Elettronica Open Source. Il sito, non molto curato nell’aspetto grafico, si presenta in una forma semplice, lineare e diretta, fornisce subito una panoramica globale dei moduli CPUStick e dello StickOS, l’ambiente di sviluppo con il quale vengono programmati tali dispositivi. Finalmente, raggiunta l’area download del sito, ecco trovato ciò che stavo cercando:
Il manuale del modulo CPUStick con relativo schema elettrico.
http://www.cpustick.com/cpustick.htm
Il manuale del sistema operativo
http://www.cpustick.com/stickos.htm
Scaricati entrambi e ricevuti i moduli inizia la mia avventura con i CPUStick.
CPUStick – Recensione
Analisi della board
Il CPUStick si presenta come un modulo dalle dimensioni contenute (10 x 2,5 cm), al centro è evidente la presenza del MCU, si tratta di un coldfire MCF52252 della Freescale, che sostanzialmente gestisce tutte le funzioni del modulo.
Il secondo componente che salta all’occhio è l’MC13201 un ricetrasmettitore radio che viene utilizzato per lo scambio di dati con altri CPUStick utilizzando il protocollo zigbee. A parte la sezione di alimentazione, il connettore usb, i connettori di input-output, uno switch e due led, sul resto della board trova posto solo qualche altro componente passivo e l’antenna, stampata sulla scheda stessa.
In effetti, considerata l’esiguità dei componenti presenti, il tutto poteva essere realizzato in uno spazio ancora più contenuto, ciò che è stato determinante per le dimensioni finali la scelta di utilizzare quattro gruppi di 12 pins (passo 0,1”) per connettere la CPUStick con il mondo esterno. Questa scelta, se da un lato costringe ad aumentare un po’ le dimensioni globali del modulo, dall’altro viene incontro all’utilizzatore, soprattutto l’hobbysta, che può facilmente effettuare tutti i collegamenti necessari senza rischiare intoppi causati da cortocircuiti tra pins troppo vicini o l’uso di connettori particolarmente complessi e di difficile reperimento.
Iniziamo
Leggendo i due manuali precedentemente indicati e dando un’occhiata agli esempi applicativi presenti sul sito, la prima cosa che mi ha lasciato sorpreso è l’estrema semplicità con cui si dice si possa operare con tali moduli. Senza dilungarmi ulteriormente nello studio del circuito elettrico decido di iniziare a provare questi moduli ed il relativo ambiente di sviluppo. Mi procuro un cavo mini usb (come al solito quando servono non si trovano mai!!!) e collego la CPUStick ad un PC, Windows XP rileva immediatamente una nuova periferica ed installa in automatico i driver necessari creando una porta com virtuale a cui assegna il riferimento di COM3. Avviato hyper terminal e creata una connessione sulla COM3 (115000-8-N-1), un click sul pulsante di chiamata e viene immediatamente instaurata la connessione senza alcun problema, mi basta infine premere il tasto INVIO per ricevere il messaggio di benvenuto così come indicato nel manuale.
Finora è andato tutto liscio senza il minimo intoppo, proseguiamo.
Volendo fare le cose per gradi, prima di partire con un progetto “tutto mio”, decido di implementare uno degli esempi presentati sul sito. Avendo in passato avuto a che fare con apparati zigbee che, nonostante le caratteristiche millantate, presentavano una evidente instabilità della connessione sono molto incuriosito da questo aspetto del CPUStick e quindi opto per il terzo tra gli esempi descritti sul sito.
Test1
In questo esempio vengono usati due CPUStick che comunicano tra loro attraverso il ricetrasmettitore zigbee, in pratica la luminosità di un led connesso ad uno dei due moduli viene comandato da un potenziometro connesso all’altro modulo. Per velocità di implementazione ho ulteriormente semplificato il circuito sostituendo il potenziometro con un pulsante e quindi comandando il led in modalità on-off.
Di seguito le istruzioni utilizzate:
DEVICE 1 10 dim led as remote on nodeid 1 20 dim pulsante as pin dtin0 for digital input 30 while 1 do 40 let led = pulsante 50 endwhile
DEVICE 2 10 dim led as pin dtin0 for digital output 20 while 1 do 30 endwhile
ATTENZIONE
Affinché quanto sopra funzioni correttamente, ed anche l’esempio riportato sul manuale, prima di scrivere le righe di programma, è necessario assegnare ad ogni modulo il proprio ID, e ciò si fa con l’istruzione nodeid.
Con estrema soddisfazione, eseguiti i programmi nei due device, funziona tutto come previsto. Mi ha molto colpito il modo “semplice” con cui vengono scambiate le informazioni tra due o più CPUStick. Per esempio, se dal DEVICE 1 voglio conoscere il valore di un dato presente sul DEVICE 2 non devo far altro che dichiarare una variabile locale sul DEVICE 2 che contiene il dato (come è classico) e dichiarare una seconda variabile locale sul DEVICE 1 come puntatore alla variabile dato presente sul DEVICE 2. Una gestione davvero semplificata ed intuitiva anche per chi è alle prime armi con la programmazione di dispositivi elettronici.
Test 2
Ancora più incuriosito di scoprire i limiti di questo link zigbee, decido di effettuare un test sulla portata del sistema (distanza entro cui i due dispositivi dialogano). Per fare ciò decido di fare questo semplice test: programmo il DEVICE 1 affinché faccia lampeggiare con frequenza di 1 Hz un led presente sul DEVICE 2. Lascio il DEVICE 1 connesso al PC attraverso il cavo USB e, alimentando il DEVICE 2 attraverso un alimentatore esterno, lo porto in giro per casa verificando fino a che distanza il led continua a lampeggiare e quando invece perde il collegamento con il DEVICE 1 (smette di lampeggiare).
Queste le istruzioni utilizzate:
DEVICE 1 10 dim led as remote on nodeid 1 20 while 1 do 30 let led = !led 40 sleep 500 ms 50 endwhile
DEVICE 2 10 dim led as pin dtin0 for digital output 20 while 1 do 30 endwhile
Ecco i risultati.
Ho piazzato il Device 1 collegandolo al pc in un angolo dell’appartamento ed ho spostato il secondo device prima all’interno della stessa stanza, poi nella stanza adiacente ed infine in tutte le altre stanze dell’appartamento. In tutte le situazioni la connessione si è mantenuta attiva (il led continuava a lampeggiare) inoltre spegnendo ed accendendo il modulo questo si riconnetteva in pochi istanti.
Ci tengo a precisare che tutti i test di cui sopra sono stati effettuati all’interno di una comune abitazione domestica in cui sono presenti una rete wifi, elettrodomestici, un paio di cellulari in giro per casa e tutte le altre fonti di disturbo che normalmente si trovano in ogni abitazione.
Recensione CPUstick - Conclusioni
Che dire, personalmente sono abbastanza soddisfatto delle caratteristiche rilevate, come dicevo ho avuto esperienze (purtroppo negative) con altri moduli zigbee, risultava difficile stabilire la connessione tra i moduli e bastava un niente perché si disconnettessero.
I moduli sono ben studiati ed è facile sia utilizzarli stand alone che connetterli ad una board esterna attraverso i pins di interfacciamento. Azzeccata anche la scelta della sezione di alimentazione, attraverso 2 semplici jumper si può facilmente selezionare la modalità di alimentazione preferita. Ciò, soprattutto in fase di prototipazione e test, permette di operare in modo estremamente rapido.
Riguardo lo StickOS purtroppo non ho avuto il tempo di sbizzarrirmi troppo con la programmazione testandone a fondo le caratteristiche.
E’ intuitivo ed apparentemente abbastanza robusto, inoltre, il fatto di essere un sistema embedded semplifica di molto la programmazione e ne permette l’utilizzo su qualsiasi piattaforma. Concludendo lo reputo un ottimo prodotto per la prototipazione e la produzione in piccole serie. Vista la presenza del ricetrasmettitore zigbee si presta molto per lo sviluppo di soluzioni domotiche ed in generale per dispositivi che necessitano di un link wireless operante in alcune decine di metri.
L’unico dubbio che mi rimane è il seguente: il protocollo zigbee prevede che i device possano fungere contemporaneamente da terminali e da router, questa caratteristica permette di creare una “vera” rete di dispositivi consentendo di aumentare la superficie di copertura. Non so se i moduli CPUStick prevedono tale funzionalità, nella documentazione non è ben specificato e purtroppo con soli due moduli non è possibile scoprirlo.
Errata Corrige
Nella documentazione tecnica scaricata dal sito segnalo un errore nel documento “CPUStick™ User's Guide v2.02”, nella figura a pag. 3 sono invertite le etichette dei connettori J6 e J7, le indicazioni corrette sono quelle riportate dalla serigrafia presente sulla board.
La mia idea
Acquisita un minimo di dimestichezza con i CPUStick e valutate meglio le caratteristiche posso finalmente dare forma a quella che era la mia idea originale che mi aveva permesso di partecipare a questo concorso. Per chi non lo ricorda, il mio progetto prevedeva di realizzare un “monitor” per un pannello solare termico in uso per la produzione di acqua calda sanitaria. Lo scopo è quello di monitorare l’attività dell’impianto, evidenziando problemi di funzionamento (superficie pannello sporca, temperatura boiler troppo elevata, ecc..), ed eseguire un’attività di raccolta dati sui parametri operativi dell’impianto stesso.
In tale progetto vengono impiegati due moduli CPUStick, uno locale, collegato al pannello tramite alcuni sensori, ed uno remoto, che riceve i dati tramite il link zigbee e li invia ad un pc a cui viene connesso tramite la porta seriale. Purtroppo non ho ancora avuto il tempo per analizzare il modulo solare da vicino, ed in questo periodo il clima non è di certo dei più favorevoli, perciò non ho ancora definito quali sensori utilizzerò nel progetto.
L’ipotesi è di utilizzare due sonde pt100 per rilevare la temperatura dell’acqua in ingresso ed internamente al boiler, un sensore integrato per la temperatura ambientale (tipo LM335). Per l’irraggiamento solare pensavo di utilizzare un piccolo pannello fotovoltaico che, abbinato ad un regolatore di carica e ad un pacco batterie potrebbe anche garantire l’alimentazione di tutto il sistema.
Questo uno schema a blocchi.
Tutti i dati vengono inviati al secondo CPUStick che li visualizza su un display e li trasferisce attraverso il collegamento seriale ad un pc con la funzione di server di archiviazione. Su questo pc sarà in esecuzione un servizio web che permetterà di visualizzare i dati ed effetuare le query desiderate sull’intero archivio. Il servizio, accessibile dalla rete locale, attraverso un router ed una connessione internet sarà disponibile su tutto il web.
Di seguito lo schema funzionale di questa seconda parte del sistema.
Recensione ben scritta e anche l’idea di progetto è interessante! Complimenti!!
Pur non essendo un professionista delle recensioni di elettronica, hai fatto un bell’articolo chiaro e conciso, molto più user-friendly di tanti articoli.
ho trovato una cosa particolarmente interessante è il fatto che il linguaggio di programmazione è stato usato il BASIC
Essendo un linguaggio semplice e ancora molto utilizzato le scuole in tecniche e professionali.
ho trovato una cosa particolarmente interessante è il fatto che il linguaggio di programmazione è stato usato il BASIC
Essendo un linguaggio semplice e ancora molto utilizzato le scuole in tecniche e professionali.
Articolo e anche il progetto non e male
Recensione piacevole.
Ci hai dato il piacere di condividere la tua esperienza nell’uso di questi moduli.
Ottimo progetto… Utile in ambito scolatico!
gaetech45
Si puo utilizzare questo disposito vo per prendere dimestichezza con pic e dispositivi programmabili. Bella e molto dettagliata recensione!!!
Da provare di sicuro
bhè, oddio, tra CPUstick che utilizza un microcontrollore della Freescale e i PIC della Microchip c’è una bella differenza. Poi non so se hai notato che la programmazione è in linguaggio basic, interpretato direttamente dal microcontrollore che governa le due schede. Questo significa che non hai bisogno di compilatori aggiuntivi e non si programma in C/Assembly, ma semplicemente in basic tramite, ad esempio, hyperterminal di Windows. Quindi è un sistema tutto sommato facile e veloce da apprendere e da programmare, molto vicino a chi non si è mai affacciato prima d’ora al mondo dei microcontrollori e quundi si, potrebbe rappresentare un inizio, ma non una generalizzazione verso tutte le altre famiglie di micro!! 😉
questo chiaramente implementando basic, serve soprattutto a scopo educativo,
questo non lo potrai usare maiin qualsiasi progetto di ordine commerciale,
anche semplicemente per la protezione del codice sorgente.
Effettivamente CPUStik si presta bene per progetti di uso amatoriale/hobbistico, per chi in pochissimo tempo vuole venire in contro all’esigenza di sviluppare applicazioni il cui firmware è aggiornabile o modificabile in maniera wireless senza un contatto fisico tra PC e harware. Questo rappresenta la vera novità di CPuStick, ma non essendoci implementati sistemi di mascheramento del firmware non può essere garantita la riservatezza in termini di proprietà intellettuale, ergo non può essere utilizzato in applicazioni commerciali.
ho constatato che hanno tutti ampie basi di elettronica, un possibile aiuto per realizzare il progetto
Propone alte possibilità di applicazione…è un ottimo kit di sviluppo.
Interessante, è un dispositivo molto particolare, ma non ho capito bene cosa sia: una piattaforma di prototipazione elettronica (tipo Arduino) che possa comunicare con un’altra piattaforma di prototipazione elettronica tramite segnali radio?
Anche se non ho afferrato bene le funzionalità del KIT, la possibilità di comunicare tramite radio da distanze lontane e con questa facilità mi sembra veramente ottima!
Ma ora la domanda sorge spontanea: è possibile abbinarlo ad Arduino per unirne le possibilità???
Mi piace lidea della programmazione in BASIC e della comunicazione zigbee
ora mi chiedevo se sarà possibile scrivere un porgramma BASIC o ASSEMBLER autonomo che giri su PC e che poi comunichi con la CPUStik oppure si dovrà sempre fare uso di hyper terminal ?
Io sono rimasto indietro al QBASIC del DOS e all’ASSEMBLER 486
Mi piace e forse riprendo a progrmmare e trovare svariate applicazioni che già mi frullano per la mente..
Ciao Vittorio,
CPUSTICK ha due modalità operative che si settano abilitando o meno l’autorun.
Program e Run.
In Program puoi realizzare il tuo programma con Hperteminal (in BASIC) e poi trasferirlo a Cpustick tramite connessione USB.
In Run puoi far girare il programma creato con Hyperterminal in CPUstick. Quindi Cpustick sarà una scheda autonoma. Ovviamente se alimentata esternamente. Oppure, se nel programma è previsto puoi comunicare con il PC tramite USB o la seriale RS232, quest’ultima però non compresa nella scheda.
Tornando alla tua domanda quindi:
si, puoi creare un programma su PC autonomo che comunica con la CPUstick, puoi farlo sia tramite USB che tramite RS232, ovviamente devi aver programmato CPUstick per farlo con relativo programma scritto precedentemente e quindi trasferito nella stessa.
Grazie mille per le info ..
Sono disponibili sul nostro store
http://store.emcelettronica.com/node/20