Archivi categoria: Elettronica
Sensori GAS Grove
Arduino Yún
Arduino Yun, grazie a Michele per la segnalazione, è un nuovo prodotto che potrebbe essere molto interessente nel progetto LABijk.
Infatti integra tre microntroller con schede di rete e wireless al prezzo di circa 50 €.
In pratica sono due computer: il tradizionale Arduino con il bus IO che lo caratterizza ed un Atheros AR9331 a 400MHz con Linux Linino direttamente mutuato dal grande progetto DD-WRT, ovvero distribuzione Linux per sostituire il firmware dei più diffusi router con un sistema operativo Linux.
DD-WRT è un progetto fondamentale che permette di migliorare nettamente la conoscenza sui router che usualmente si utilizzano. Infatti questi dispositivi non vengono più visti come indipendenti dalla realtà usuale, ma come computer con un loro os, in genere proprietario, che può essere sostituito con Linux. Questo nuovo punto di vista permette, tra i molti aspetti, di comparare dispositivi diversi.
L’integrazione con LABijk è in termini di nodi connessi al padre con ethernet. Infatti Arduino è molto debole sotto il profilo dello shield ethernet. Yun coniuga l’ottimo Arduino tradizionale con l’elettronica tipica di un brillante router moderno e un sistema operativo innovativo per router.
L’effetto è di poter costruire nodi con rete, wireless ed micro compact flash concorrenti e con le usuali caratteristiche, nel senso che la scheda di rete vista attraverso la libreria Arduiono è piuttosto debole, ma una cCPU da router con dd-wrt invece realizza un dispositivo eccellente. ARM board potrebbero competere: maggior potenza allo stesso prezzo, ma
- dimensioni non da frutto d’impianto elettrico
- instabilità date dalla SD
- carenza di un bus IO fortemente diffuso verso l’elettronica come quello di Arduino
- riscaldamenti inopportuni quali quelli di RPI in certe condizioni d’esercizio
sono punti a favore di Yun.
Bus a confronto: RS 485, CAN, I2C e SPI
Ringrazio Marco M. che riapre il diabattito proponendo CAN bus come alternativa al bus RS485.
CAN è il bus utilizzato nelle automobili moderne, negli apparecchi elettromedicali e nell’industria.
Sicuramente alza di molto il profilo e quindi va provato.
Ma il grande problema è nei costi alti, per esempio, la sicuramente ottima scheda della SparkFun CAN-BUS Shield DEV-10039 sarebbe un’eccellente scelta ma costa più del doppio della scheda microcontroller.
Un po’ di tempo fa volevo avviare dei test soprattutto verso il bus dell’automobile.
E’ interessante il post tratto dalla pagina del prodotto Sparkfun:
“If you are using this board to actually create a CAN bus system (as I am for a robotic drone vehicle) then the skpang (designer of this board) code is not that helpful and a bit of a mess. It is well and good to be able to read things from your vehicle and log them, but that’s not helpful when you are trying to create an actual bus.Also, I really find it difficult when sample code does every conceivable thing all at once, forcing you to piece out the parts/understanding you need.
To create a network of senders and receivers, I tried a few different libraries. I recommend using the CANDUINO one http://code.google.com/p/canduino). Although the boards are not exactly the same, it will work, and you can see a sender and receiver working. Other libraries I tried, such as the one from saeed studios, didn’t work for me, even though their boards are pin compatible. Might have something to do with their library using a CAN interrupt which, for me, was not reliable. Receiver would get only a single CAN message and then the interrupt would never fire again. Who knows why. Spent a number of hours on this.
So just want to save other folks some time if they are looking to build an actual bus system, and not just read data from their vehicles.”
La scheda utilizza il componente elettronico MCP2515 che si collega verso Arduino mediante SPI.
La porta SPI, che è una seriale molto veloce adatta per esempio per collegare CAM SPI, ma apre alcune problematiche spinose con Arduino: non rientra nel contesto usuale gestire più di una SPI, che viene utilizzata in modo esclusivo da atre periferiche quali lettore SD oppure (aut) dalla scheda ethernet. E’ noto che chi ha utilizzato l’ethernet shield, il programma che inserisce non può aprire contemporaneamente la scheda rete e un file in SD.
La gestione SPI su Arduino è piuttosto complessa.
L’alternativa è usare I2C o wire, bus molto più lento, creato dalla Philips come seriale veloce per interconnettere componenti elettronici, per esempio la scheda madre con i suoi sensori. Ma si aprono molte problematiche: le tensioni in gioco sono i 3.3 o i 5V e sono piuttosto delicate, è delicato convertire il segnale tra tensioni, il cavo non può superare grossomodo il metro e mezzo, un componente instabile sul bus può compromettere la comunicazione, …
Molti invece sono i motivi a favore del I2C: è il più diffuso bus tra componenti elettronici, quindi ci si apre alla comunicazione con l’elettronica, la libreria I2C per Arduino è abbastanza stabile, Grove ha un HUB per I2C per Arduino, ….
Arduino gestisce in origine la seriale usata per comunicare verso USB, PIN 2 e 3, con il secondo microcontroller a board (il vecchio chip FTDI è superato).
La libreria seriale poi è stata affiancata da una libreria migliore che permette di gestire più coppie di pin in contemporanea, quindi avere più seriali TTL. Il chip MAX485 incanala la coppia di PIN al bus RS485.
Il segnale è bilanciato, collaudatissimo, può arrivare a 1200 metri, richiede due resistenze di terminazione. Le velocità sono quelle della seriale. Il protocollo è da perfezionare.
LABijk: bus di comunicazione.
Il progetto LABijk, per la complessità strutturale che lo caratterizza, richiede un’attenta riflessione sulle sue scelte di fondo: il microserver, l’architettura di questo, i microcontroller, lo standard verso attuatori e sensori, i bus di comunicazione, i protocolli di sicurezza, e molto altro.
In uno sviluppo aperto andremo a classificare in modo ordinato ogni punto citato ed altri ritenuti indispensabili.
Continuiamo il nostro dibattito soffermandoci a riflettere sul/i bus di comunicazione da adottare tra il microserver e i dispositivi i al primo livello .
E’ ovvio pensare ad ethernet, ma pesano le seguenti argomentazioni
- impegnativo in termini infrastrutturali, switch POE, cablaggi strutturati, …
- in termini di microcontroller comporta costi ed elettronica non trascurabili
- Arduino in relazione alle porte ethernet e POE non è così interessante, anche per costi
- il codice TCPIP per Arduino è piuttosto debole
- i dispositivi del primo livello dovrebbero quindi essere schede ARM quali RaspberryPI
- RPI scalda, richiedono risorse memoria enormemente superiori di Arduino, quindi usa tecnologie fragili come SD
Quindi ethernet è solo per usi specifici e vedrebbe Arduino fuori gioco, precludendo tutta la gestione dell’elettronica in stile Arduino.
I vecchi bus seriali tipo RS232 sono lenti soprattutto se il dispositivo centrale, in questo caso il micorserver, fa pooling tra i periferici. Ricordiamo che una gestione ad eventi che parta dalle periferiche è esclusa perchè si perde il controllo delle periferiche stesse.
Consideriamo il bus USB:
- è stabilissimo, robustezza derivata dall’enorme impiego
- tutti lo usano a tutti i livelli
- è uno standard: chiunque sa quale sia un cavo USB
- Arduino con il suo primo microcontroller a bordo implementa la comunicazione USB in modo eccellente
- i costi sono praticamente abbattuti
- test di pooling per mesi da microserver verso Arduino via USB alla velocità massima hanno visto una precisione assoluta
- il microserver, centro stella, può non avere seriali, ma le macchine attuali abbondano di porte USB
- il cavo USB porta anche l’alimentazione, sufficiente per un Arduino Uno SMD con un po’ di elettronica, quindi abbiamo gratuitamente l’equivalente della POE
- la massima lunghezza del cavo USB è di circa 5 metri, ma si possono usare estensori USB via cavo tipo rete per lunghezze pari a 50 metri. Il costo di un’estensione è di circa una decina di euro e di cavo standard rete con RJ45, che è molto meno di uno splitter POE
Linux permette il controllo preciso delle porte USB, test verso Arduino, attraverso USB, mediante programma compilato C++ in pooling mostrano il funzionamento ininterrotto in mesi.
Un aspetto delicato da capire per bene è l’adozione, da parte del gruppo di progettazione Arduino, del reset in caso di perdita di connessione del BUS USB. Aspetto che si rivela invece estremamente utile per il recupero eventuale di una periferica fuori controllo: basta chiudere e riaprire la porta USB.
I microcontroller i di primo livello, connessi al microserver centrale tipicamente mediante USB, devono comunicare con gli altri ij del secondo livello.
Le seguenti osservazioni portano alla migliore scelta per queste tratte:
- serve un bus estremamente robusto
- che utilizzi cavi comuni, per dire quelli utilizzati dell’impiatistica per i sistemi di allarme, trasportando anche l’alimentazione
- che permetta tratte fino a 1200 metri
- che sia preciso, simmetrico
- che permetta di collegare allo stesso bus di pochi fili molte periferiche
- che apaprtenga ad uno standard ampiamente utilizzato.
Quindi la scelta è il bus RS485.
Le ultime considerazioni sono relativa all’ultima tratta ovvero dai dispositivi ij a quelli ijk, che sono sensori, attuatori ed elettronica varia:
- le schede prototipali sono da escludere, possono essere tollerate in particolari utilizzi
- rafforzando il punto precedente: le attività di saldatura di componenti, soprattutto se superficiali, sono, tranne in specifici casi, da escludere
- serve uno standard che porti i pin delle schede Arduino, tipicamente Uno SMD, ad insiemi di connettori, tra le molte proposte nel mercato, la forse più ricca è lo standard Grove
- Grove implementa bus a 4 fili: due alimentazioni e due pin di segnali
- il bus Grove è facilmente utilizzabile o mediante cavi patch già pronti oppure estendendo la connessione con cavo tipo quelli adottati nel sistema di sicurezza, ovvero lo stesso che abbiamo indicato per la connessione dei dispositivi i di primo livello i con i dispositivi ij di secondo livello.
Perchè Arduino SMD ai livelli “ij” nel progetto LABijk
Il progetto LABijk è ambizioso, ma fattibile. Le applicazioni nel mondo elettrico e non solo, per esempio nel condizionamento di ambienti, sono molteplici.
Il livello i è costituito dai microcontroller direttamente connessi al microserver.
Le connessioni previste sono USB od ethernet.
Una ARM board sarebbe nettamente migliore, ma
- scalda un po’ e se chiusa in una piccola scatola di policarbonato ci possono essere grandi problemi
- i costi che, escluso il caso ethernet, vede Arduino vincente; Raspberry PI sarebbe vincente, ma il filesystem su micro SD lo rende fragile; quindi le board ARM candidabili andrebbero sopra i 60€ a pezzo contro i 20€ circa di Uno SMD
- nel caso di collegamento USB è da preferirsi, per ora, Arduino UNO SMD per i costi e per la robustezza già testata in pooling su USB; in tecnologia SMD per lo stato dell’arte
- nel caso di ethernet è meglio un ARM non solo per i costi che diventano equivalenti, ma per la gestione ethernet molto debole su Arduino: poche connessioni e senza threading/forking controllabile
- in futuro è prevedibile, si veda Arduino Due, la convergenza ad ARM
Mel caso di livello j allora non vi è dubbio che l’Arduino SMD sia l’unica soluzione:
- 12 MHz garantiscono che non scalda anche se inscatolato
- è robustissimo, prodotto su tiratura mondiale in enormi quantità
- è Elettronica Aperta
- la comunità da sviluppatori ad adepti è enorme
- la documentazione, raggiungibile via internet, è la più vasta in assoluto
- si apre perfettamente ad ogni elettronica, si pensi che al tempo dell’esplosione di Fukushima entro pochi giorni erano già pronti shield Arduino per contatori Geiger anche reperibili dal mercato giapponese
- è perfetto per un centro stella seriale RS485
- permette l’utilizzo dei shield Groove creando uno standard imponente verso l’elettronica e l’elettricità, basti pensare che non serve più il saldatore, ci si muove con plug e senza crimpare
- il costo, sui venti euro, lo rendono imbattibile
- ultimo ma non ultimo il progetto è italiano e viene venduto in grandi numeri anche in Germania, Stati Uniti, Cina e Giappone.
Progetto automazione LABijk. Revisione 1.
Il progetto intende promuovere tecnologie open source ed open electronics.
Si supponga di voler gestire sensori ed attuatori.
Poniamo al centro un microserver, con sistema operativo Linux Server, eventualmente connesso ad internet ed a reti locali.
Questa macchina archivia un resoconto di tutto quello che viene fatto e comunica con tablet, telefoni ed altri sistemi anche attraverso internet. Abbiamo già dato alcune indicazioni sulle possibili scelte in articoli precedenti.
Distinguiamo tre livelli, per l’appunto i, j e k di aggregazione dispositivi.
Alla radice poniamo il microserver.
I primi nodi, di livello i, siano microcontroller Arduino SMD Uno o Ethernet, connessi al microserver via USB o ethernet. Le schede Arduino siano dotate dispositivi adattatori seriali RS485.
Il secondo livello, detto j, è costituito da dispositivi Arduino SMD UNO con shield Grove e connessi al padre mediante seriale.
Al terzo livello, detto k, poniamo attuatori e sensori connessi ai padre mediante cavi Grove, oppure cavi multipolari a 4 capi, schermati o non, telefonici o di rete. Lo standard Grove può essere convertito da adattatori nel formato RJ13 per cavi telefonici o RJ45 per usuali cavi ethernet.
Ogni dispositivo è individuato da coordinate i.0.0 oppure i.j.0 oppure i.j.k
I comandi sono del tipo i.j.k:<comando:valore,…>
Il microserver è dotato di servizio che interroga costantemente in pool i dispositivi di livello i, mediante USB. Un secondo servizio che è simile al precedente ma per i dispostivi connessi mediante rete.
I dispostivi Arduino di coordinate i sono in ascolto verso il microserver, quindi USB o socket, ed anche interrogano il pool dei figli connessi mediante seriale.
I dispositvi di livello j sono in ascolto verso i dispositivi padri ed eseguono l’interrogazione in pool dei sensori, o meglio le entrate, oppure cambiano lo stato delle uscite.
Nel microserver esiste un database “automazione” con le tabelle
- “comandi”, contenente record corrispondente a comandi da eseguire
- “stati” che contiene lo stato attuale di ogni dispositivo
- “cambio_stati” che contiene cambiamenti di stati eventualmente da elaborare
- “pianificazioni” che contiene operazioni pianificate
Il microserver esegue un servizio che interroga in pool i dispositivi di livello i e riporta comandi e cambiamenti di stato nelle tabelle corrispondenti.
Un secondo servizio legge i cambiamenti di stato, consulta le tabelle di correlazione e scrive i comandi da eseguire nella tabella comandi.
Un terzo legge la tabella comandi e instrada il comando nel ramo corretto.
Tutto è riportato in tabelle e viene a costituire in sistema three-tier architecture, con pilastri di appoggio quali PostgreSQL, Apache, OpenSSH, Postfix, …
Precisiamo che
- i cambiamenti di stato sono riportati nella tabella “cambio_stati”
- i comandi con destinazione di coordinate valide sono instradati verso i destinatari
- le risposte ritornano al microserver che chiude il comando ed aggiunge eventuali cambio stati.
Consideriamo un semplice esempio.
Supponiamo di avere un sistema di dimensione 5.3.5 ovvero al microserver sono connessi 5 dispositivi con il ruolo di HUB RS485, ad ognuno di questi sono connessi al più 3 dispositivi di livello j con HUB Grove, ad ognuno di questi al più 5 sensori o attuatori.
I dispositivi di livello j sono dotati di firmware che permette di sapere e gestire perfettamente i sensori od attuatori ad essi connessi. Inoltre questi dispositivi sono in pool rispetto i sensori ed attuatori.
Consideriamo il dispositivo di livello j di coordinate 3.2.
Supponiamo che abbia 2 attuatori ed un sensore di coordinate 3.2.3.
Il sensore sia un interrutore bistabile (entrata a due stati).
Ora se l’interrutore viene azionato e cambia stato, il dispositvo 3.2.0 costruisce il cambio stato 3.2.3:on (ma meglio introdurre la notazione definitiva 3.2.1:1 ) ed instrada il cambio stato al padre, il quale lo riporta al microserver che lo scrive nella tabella cambio stato.
Il servizio predisposto, nel microserver, rielabora secondo tabelle di correlazione il cambio stato, che viene elaborato, ovvero chiuso e crea gli opportuni comandi.
Mel nostro esempio il comando è 3.2.1:on ma meglio 3.2.1:1
Quindi il servizio legge il comando e lo instada al dispositivo 3.0.0 che lo gira a 3.2.0
A questo punto il dispositivo 3.2.0 elabora il comando alzando il livello all’uscita corrispondente.
Il progetto infine prevede la creazione di una GUI che gestisce le tabelle nel RDBMS del microserver.
La GUI permette di descrivere l’intero impianto mediante griglie di correlazione.
Quindi il programma prevede l’opzione di creare al volo ed in modo completamente automatico il firmware per ogni Arduino ed aggiornarlo via USB.
Perciò ogni Arduino deve venire correttamente etichettato mediante le coordinate i.j.k e connesso mediante USB al computer con la GUI di gestione per il travaso del firmware. L’operazione precedente deve essere rifatta nel caso che cambino i figli.
Il progetto si conclude con la realizzazione di App per Ubuntu Phone e Tablet, Android e iPhone di gestione ordinaria. L’obiettivo più ambizioso vorrebbe creare piante dei sistemi SVG e sovrapporre dei widgets dinamici visuali che rendano visuale il comportamento del sistema.
L’applicazione più importante sarà il controllo del CED quindi di una stanza con molti server. L’obiettivo è di controllare la linea di rete, le temperature, i tasti di accensione, reset di ogni server strategico. Le App mostreranno visualmente lo stato di ogni server e permetteranno operazioni quali spegnimento ed accesione “fisica”. Verranno gestiti i tempi di sostegno degli UPS e lo stato dei gateway verso l’esterno.
Ekoore: innovativa azienda italiana che allestisce tablet
Segnaliamo l’azienda italiana Ekoore, che allestisce tablet, e non solo, con Linux e realizza il boot da sistemi operativi diversi: Linux, Android e Windows 8.
L’azienda compare nelle recensioni internazionali di riviste on line quale PCWorld.
Concludiamo con il curioso prodotto Elija S2, della fascia autoradio Android, che prevede l’interfaccia ODB2 direttamente verso il bus CAN dell’automobile, ovvero usando applicazioni come Torque si possono leggere direttamente i dati della centralina dell’automobile in uso.
Progetto ARM
Come già anticipato in altri articoli, l’anno corrente ed il prossimo vedranno un vero cambiamento tecnologico che potremmo dire di portata storica.
Le avvisaglie sono già comparse per esempio con il progetto Raspberry PI.
Presentiamo il Progetto ARM esplicitamente per seguire questo cambiamento epocale.
In breve possiamo dire che l’attuale parco computer sta per diventare completamente obsoleto e per essere sostituito da macchine piccole, a basso consumo, potenti, a basso costo e senza problemi di riscaldamento od usura di batterie.
Questo è permesso, per esempio, dai nuovi processori che rispetto ai parametri appena elencati, permettono una differenza anche dell’ordine.
Tra le famiglie dei nuovi processori forse la principale è quella del consorzio ARM.
All’inizio del 2014 compariranno i processori ARM A53 e A57 a 64 bit, che porteranno al totale superamento delle tecnologie oggi in uso. AMD sta convertendo l’attuale produzione di CPU i386 ed amd64 in ARM64. SI pensi che perfino l’Opteron, CPU per server, sarà ARM64.
Il nuovo ambiente vedrà l’utilizzo conveniente e massiccio di Linux e strumenti Open Source.
Anche in Italia esiste una innovativa realtà industriale che, sembra, costruirà CPU ARM.
Le conseguenze saranno innumerevoli, ma forse di portata quasi bilblica, infatti quanti cittadini dell’India possono permettersi di acquistare un telefono da 500$ ?
Ma quanti acquisteranno un computer vero e proprio della nuova generazione per 50$ ?
La risposta è, in stime fatte da aziende quali Samsung ed Asus, sull’ordine di centinaia di milioni di pezzi (da zero!).
Ma non finirà con i cittadini dell’India, si pensi a quelli della Cina.
Si potrà dire che si apriranno nuovi mercati vastissimi per l’alta tecnologia.
Linux e l’open source rischiano di essere il fulcro del cambiamento.
Progetto Misure d’inquinamento
Il progetto nasce con la finalità di allestire una stazione per cominciare a fare misure di inquinamento.
La prima versione utilizza una scheda Arduino Uno SMD con interfaccia Grove e sensori per misurare:
1. presenza di gas
2. presenza di polveri inquinanti
3. fumi
3. presenza di vapori d’alcool
3. rumore
4. elettrosmog
A complemento integreremo le misure con temperatura ed umidità
In questa fase invitiamo a valutare i collegamenti proposti.
Progetto Geiger
Inauguriamo le nuove categorie “progetti” che propongono e seguono delle idee che possono diventare veri e propri progetti.
Proponiamo la costruzione e l’utilizzo concreto di un contatore geiger per ora basato su Arduino.
Il progetto nasce per poter avviare un monitoraggio del tasso di radioattività indipendente al minor costo possibile.
Cominciamo proponendo il riferimento: Geiger Counter.
Arduino con Seeedstudio Grove
Stiamo valutando le possibili modalità di espansione della piattaforma Arduino.
In breve ci sono due versanti: a monte, ovvero un host di appoggio, ed a valle, ovvero sensori ed attuatori.
Il secondo aspetto, quello verso i sensori ed attuatori, porta alla grande questione di non poter sempre saldare ogni componente: serve uno shield che dia uno standard minimo verso l’elettronica finale.
Abbiamo deciso di valutare la proposta Grove della http://www.seeedstudio.com, dinamica azienda cinese, per integrarla nella progettualità futura. Forse la proposta più ampia.
I test sono orientati soprattutto alle esigenze di installatori ed integratori anche di piccole dimensioni. Imprese che non possono fare enormi investimenti in risorse economiche ed umane per attività di sviluppo su microcontroller ed altra elettronica, ma possono creare spazi virtuosi componendo tasselli di varie provenienze.