Archivi categoria: Arduino

QuadraSpace: aggiornamento


In attesa di avere un po’ di tempo per descrivere le caratteristiche piu’ importanti del protocollo QuadraSpace, ecco qualche aggiornamento sul progetto:

That’s all, per ora.

Libro: HCI Fondamenti e Prospettive


È appena stato pubblicato il libro "Human Computer Interaction – Fondamenti e Prospettive", curato da Alessandro Soro e edito dalla casa editrice Polimetrica. Il testo affronta una tematica estremamente interessante e contiene i contributi di numerosi esperti italiani della materia. Dalla pagina del sito dell’editore:

Quest’opera accompagna il lettore alla scoperta della disciplina dell’interazione uomo-macchina grazie ai contributi di alcuni fra i più affermati docenti, ricercatori e professionisti del settore. Partendo dalle necessarie basi di ergonomia, psicologia, e scienza dell’informazione, attraverso le più attuali problematiche legate all’accessibilità universale, all’ingegneria dell’usabilità, alla valutazione analitica e empirica della qualità dell’interazione, arriva a esaminare concretamente le sfide e le opportunità delle nuove tecnologie nei campi del mobile computing, delle interfacce utente multi-dispositivi, della realtà virtuale e dell’interazione tangibile…

hci_fondamenti_prospettive_320.jpg

Ho avuto il grande onore di partecipare alla stesura di quest’opera (credo la prima in italiano su questo argomento), curando il capitolo sul Mobile Computing, in particolare sulla problematiche di navigazione tra le viste delle interfacce grafiche dei terminali mobili e l’evoluzione delle applicazioni grazie all’uso dei sensori e all’interfacciamento con sistemi di pervasive e capillary computing.

Complimenti, Alessandro, per questo ottimo lavoro! Ti auguro che raggiunga il successo che merita e che la Scuola Estiva da cui è scaturito diventi un evento di riferimento in Italia.

Arduino Ethernet Shield: finalmente!


Dopo tante estensioni ufficiali e non, arriva finalmente l’Ethernet-Shield per Arduino, che consente di collegare Arduino Diecimila o Duemilanove ad una rete Ethernet, con possibilità di lavorare in modalità client o server. L’accesso alle funzionalità di rete è fornito dalla libreria Ethernet, raggiungibile all’indirizzo http://arduino.cc/en/Reference/Ethernet.

ethernetshield.jpg

L’Ethernet-Shield è disponibile presso il sito Smart Projects (e costa davvero poco, se paragonato a soluzioni analoghe basate su XPort).

Gateway Bluetooth-XBee


Da circa un anno sto "giocando" con i moduli MaxStream (ora DiGi) XBee, radiomodem economici operananti in banda ISM (i soliti 2.4GHz di WiFi e Bluetooth) particolarmente efficaci per comunicazioni a corto raggio e a basso consumo.

xbee.jpeg

I moduli XBee sono ben noti a chi utilizza Arduino, grazie all’XBee Shield che consente di dotare Arduino Diecimila di questa comoda interfaccia wireless.

xbee_shield.png

Uno dei vantaggi principali di questi moduli è che essi permettono la comunicazione punto-punto o punto-multipunto (cosa non fattibile con i moduli Bluetooth in circolazione) in maniera estremamente rapida, avendo tempi di discovery e di join molti brevi. Alcune versioni inoltre, se equipaggiate con antenne opportune, consentono di coprire oltre 1km in spazio aperto. Apposite interfacce XBee-USB consentono di collegare gli XBee ad un PC e la comunicazione si gestisce attraverso una comune connessione seriale (standard o USB-Serial).

Lavorando con Arduino è facile prendere familiarità con gli XBee e mettere su una piccola rete in grado di connettere tanti dispositivi in modo estremamente rapido. Sembra, però, che ad oggi non esista alcun cellulare che disponga di un modulo simile (o compatibile) a bordo, dunque vien meno la possibilità di avere accesso diretto a questo tipo di rete direttamente da device mobile.

Poiché sia per Bluetooth che per XBee si tratta di connessioni seriali, è facile predisporre un piccolo circuito che svolga le funzioni di gateway tra le due reti: un modulo XBee "standard" e un modulo Bluetooth server (seriale) e le rispettive connessioni seriali incrociate tra loro, un piccolo regolatore di tensione che fornisca l’alimentazione necessaria a far funzionare i due moduli.

bt-xbee_gateway_small.png

Il primo prototipo è estremamente semplice. Il modulo XBee è montato su un adattatore XBee Simple Board sviluppato dall’italiana Droids, che fornisce un regolatore di tensione a 3.3V e un layout dei PIN compatibile con le breadboard (2.54mm). Il modulo può essere alimentato con una tensione massima di 12V e la tensione di 3.3V in uscita dal regolatore di tensione (con cui è alimentato il modulo XBee) è disponibile per eventuali device esterni, con un assorbimento massimo di circa 300mA (che si riducono a 100mA se si utilizzano moduli XBee Pro). Utilizzando questa tensione, si alimenta un modulo Bluetooth Sena Parani ESD200, ai cui terminali RX-TX sono connessi i terminali TX-RX del modulo XBee.

gateway_prototype1.jpg

Una batteria a 9V e una piccola breadboard completano il circuito, costituito da 4 fili e un connettore di alimentazione.

La modalità di utilizzo è inevitabilmente monodirezionale: il terminale mobile, dotato di client Bluetooth, si connette al modulo Bluetooth del gateway; quest’ultimo, attivata la connessione, dirige il traffico della seriale RFCOMM verso il modulo XBee, che a sua volta lo inoltra sulla rete wireless. Analogamente, i dati ricevuti dal modulo XBee sono inoltrati al modulo Bluetooth che a sua volta li passerà al telefono cellulare. Non è possibile iniziare la comunicazione in direzione opposta, a meno che non si utilizzi un modulo Bluetooth che implementi un client SDP e un software sul device XBee che supporti il protocollo di configurazione dello stesso modulo Bluetooth.

La presenza del modulo Bluetooth è del tutto trasparente per il modulo XBee: sarà dunque possibile configurarlo direttamente dal terminale mobile (che ovviamente dovra’ implementare il protocollo di comunicazione definito da MaxStream).

Il modulo Parani ESD200 prevede quattro modalità operative, che stabiliscono la procedura di connessione e lo stato di visibilità sulla piconet. L’impostazione di default prevede che il modulo non sia discoverable, per cui occorre impostare il MODE3 affinchè il cellulare possa trovarlo e connettersi. Per la configurazione si può sfruttare il gateway così com’è: è sufficiente utilizzare un secondo modulo XBee connesso via USB al PC e impostare il programma di configurazione del Parani affinchè "punti" alla porta seriale virtuale associata all’XBee. Questa possibilità, però rappresenta anche una importante falla di sicurezza di questo progettino: così come il modulo Bluetooth è trasparente per quello XBee, così quest’ultimo lo è per il primo. Un nodo malevolo, dunque, potrebbe mandare al gateway comandi per modificare la configurazione del modulo Bluetooth e renderlo inutilizzabile. Per ovviare a questo problema si potrebbe mettere tra i due moduli un microcontrollore dotato di due porte seriali buffered (ad esempio, un Atmel ATmega162), che filtri il flusso dal modulo XBee a quello Bluetooth, impedendo che a questo giungano comandi di configurazione (se necessaria, la configurazione sarà fatta aprendo una connessione seriale fisica a falle di tale microcontrollore).

JARD: primo contatto!


Il progetto è ancora a livello troppo embrionale perché possa essere pubblicato, però comincia a prendere forma. Si chiama JARD, "Java ME controller for Arduino Bluetooth", una MIDlet che consente il controllo di Arduino Bluetooth attraverso un cellulare.

jard_pre1_1.png

L’idea è di realizzare una doppia interfaccia verso Arduino: una generica, che consenta di controllare separatamente gli I/O analogici e digitali (realizzando così una specie di telecomando), ed una specializzata, verticalizzata per applicazioni, ad esempio, il controllo di un display LCD o di un motore. L’obiettivo è incoraggiare l’utilizzo del telefono cellulare nelle applicazioni basate su Arduino, senza che sia necessario avere competenze specifiche di programmazione Java ME (o Python S60, o C++ o quello che si vuole).

jard_pre1_5.png

Il video che segue mostra l’uso di JARD per il controllo di un display tramite Arduino Bluetooth. Un esempio di applicazione, opprtunamente ingegnerizzata, potrebbe essere quella di un Post-It digitale da attaccare ad un mobile o ad un elettrodomestico e sul quale lasciare un appunto che chiunque potrà leggere (anche senza cellulare). Dal display LCD ai sistemi di textlight o di visualizzazione su grandi superfici il passo è breve…

LCDLibrary per Arduino

I display basati sul chip Hitachi HD44780 sono molto economici e semplici da pilotare, motivi per i quali sono largamente utilizzati nella realizzazione di prodotti industriali e di taglio più hobbistico.

Questi oggetti sono largamente adottati anche dalla comunità degli utilizzatori di Arduino (compreso il sottoscritto!).

lcdlibrary_sample1_small.jpg

Sfortunatamente, però, la libreria presente sul sito ufficiale di Arduino (http://www.arduino.cc/en/Tutorial/LCDLibrary) non compila con le ultime versioni dell’ambiente di sviluppo e non gestisce i display con 2 linee di testo. In attesa di avere un po’ di tempo per aggiungere qualche funzionalità alla libreria (ad esempio, la possibilità di definire in fase di inizializzazione il numero di righe o effettuare il controllo sul numero di colonne), ho modificato leggermente il sorgente di quella esistente affinchè fosse comaptibile con l’IDE attuale e supportasse display 2×40.

La libreria e’ disponibile all’indirizzo:

http://www.gerdavax.it/data/LCDLibrary_2x40.zip

Il file zip deve essere decompresso e la cartella LiquidCrystal in esso contenuta deve essere copiata nella directory hardware/libraries all’interno dell’installazione di Arduino.

Ho modificato il metodo per la stampa di una stringa di caratteri, rinominandolo println, analogo a quello per l’output sulla porta seriale. L’utilizzo è immediato:


#include  

LiquidCrystal lcd = LiquidCrystal(); 

void setup(void)
{
    lcd.init();
    lcd.clear();
}

void loop(void)
{
    lcd.commandWrite(128);
    lcd.println("www.gerdavax.it");
    lcd.commandWrite(168);
    lcd.println("Visit my blog!"); 
}

Per scrivere sulla prima riga è necessario inviare il comando 128, che colloca il cursore in posizione 0 oppure cancellare il display. La prima è considerata completa al quarantesimo carattere, dopodichè il display scrive nella seconda riga. Per posizionarsi sul questa (posizione &quot40", ovvero quaranta caratteri dopo l’inizio della prima riga) è sufficiente inviare il comando 168 (128 + 40);

Per il cablaggio del display ho fatto riferimento alla pagina riportata sul sito ufficiale di Arduino:

LCD Arduino
E (Enable) 2
DB0 3
DB1 4
DB2 5
DB3 6
DB4 7
DB5 8
DB6 9
DB7 10
RW (Read/Write) 11
RS (Register Select) 12

pi&uagrave; ovviamente l’alimentazione per il LED di retroilluminazione (nel mio esemplare indicato semplicemente come PIN 15 e PIN 16) e la tensione variabile prelevata dal potenziometro per la regolazione del contrasto (nel mio esemplare individuato dal PIN V0).

lcdlibrary_sample2_small.jpg

Arduino: interaction design e non solo


È un prodotto orgogliosamente MADE IN ITALY, eppure sembra che in Italia sia poco conosciuto (così dice Google…). Sto parlando di Arduino, una piattaforma (hardware + software) totalmente open source per la realizzazione di prototipi di Interaction Design.

arduino_on_mac_small.jpg

Arduino è stato ideato e realizzato da Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David A. Mellis. Progettato attorno ad un microcontrollore Atmel ATmega168, dispone di 14 porte I/O digitali, 6 ingressi analogici, una porta seriale a livello TTL ed è programmabile attraverso una porta USB che provvede anche ad alimentarne la scheda quando connessa al computer (senza la necessità, dunque, di disporre di un programmatore per MCU ATmega). Il software per il piccolo Arduino può contare su appena 16KB di Flash (anzi, 14 per la precisione) per i "programmi utente", 1KB di RAM e ben 512B (si cinquecentododici byte) di persistenza per i dati. Malgrado l’aspetto lillipuziano, Arduino è estremamente flessibile e la facilità di utilizzo lo rende lo strumento ideale per i laboratori di Interaction Design, in cui gli allievi non devono possedere specifiche competenze di programmazione o componentistica elettronica, ma sono totalmente orientati alla trasformazione di scenari di interazione in prototipi funzionanti. In tal senso, dunque, l’importante è avere uno strumento che traduca le idee in realtà! Arduino fa proprio al caso!

ardino_usb_small.jpg

Arduino deriva dai progetti Wiring e Processing, dai quali eredita rispettivamente parte del linguaggio di programmazione (simile al C) e l’ambiente di sviluppo.

Venduto a poche decine di euro, consente di realizzare in modulo facile ed economico prototipi di oggetti interattivi, in grado di acquisire dati attravero i più disparati sensori (accelerometri, fotoresistenze, sensori di temperatura, GPS, igrometri…) e comandare dispositivi quali motori (tradizionali, servo e step), display LCD o buzzer. La Rete è di esempi di applicazioni, sarebbe impossibile elencarli tutti qui! Apposite schede di espansione consentono l’interfacciamento ai moduli XBee Maxstream (ora Digi) per la rete ZigBee.

arduino_xbee_small.jpg

La variante Bluetooth sostituisce la porta USB basata sul driver FTDI con un modulo RFCOMM server che consente sia la programmazione remota che la connessione wireless alla scheda.

arduino_bluetooth_small.jpg

Quasi spontaneo pensare fare un paragone con i Sun SPOT, ma sarebbe totalmente fuori luogo.

arduino_sunspot_small.jpg

La complessità dei Sun SPOT li rende degli oggetti quasi insuperabili e adatti a qualsiasi contesto applicativo, anche computazionalmente complesso. Lo stesso dicasi per le capacità di interfacciamento con periferiche. D’altro canto, però Arduino è estremamente economico e consente sperimentazione a bassissimo costo (a patto, ovviamente, di non voler pretendere troppo dal suo kilobyte di RAM!).

Pù che guardarli sotto l’ottica della competizione, sarebbe interessante, invece, valutarne una possibile interoperabilità, utilizzando i Sun SPOT per i compiti più gravosi dal punto di vista della logica e dell’elaborazione dei dati rilevati dai sensori, delegando ad Arduino "il lavoro sporco di interfacciamento con questi ultimi", grazie anche al fatto che, essendo così economico, può essere utilizzato a cuor leggero anche laddove c’è il rischio di un crash hardware (se si rompesse un Sun SPOT… sarebbero dolori!).

Per chi volesse saperne di più:

http://www.arduino.cc