La piattaforma Arduino sta diventando sempre più diffusa e amata da tutti. Il motivo? Semplicità e potenzialità in una scheda di piccole dimensioni e dal prezzo accessibile a tutti sono caratteristiche che possiedono veramente in pochi, tra i vari sistemi di sviluppo.
Sinceramente ero abituato a sviluppare applicazioni con Microchip, scegliendo un PIC con le caratteristiche utili al mio progetto, montando una scheda, magari dopo un primo test su breadboard. Il vantaggio principale di Arduino a mio avviso è la praticità: si scarta la confezione, si collega tramite usb al computer ed è subito pronto per i primi test senza necessità di saldature. La diffusione di questo prodotto nel mondo e la filosofia open-source permette di trovare in rete un’infinita collezione di esempi più disparati, per qualsiasi applicazione.
Interfacce Web Con Arduino - l'applicazione
Un’interessante applicazione che ho voluto approfondire in questa review è l’interazione di Arduino con il pc, in particolare il controllo attraverso una semplice interfaccia Web.
Questa tecnica può rivelarsi piuttosto utile in molti sistemi, dai test in “laboratorio”, alla gestione semi-automatica (o semplice controllo a distanza) di apparecchiature elettroniche, fino all’automazione domestica.
Dopo una lunga ricerca di diversi script che permettono la gestione di una porta seriale attraverso la pagina web, sono arrivato alla conclusione che il JavaScript sembra essere il linguaggio più adeguato. L’applet necessario per questa applicazione è JSSerial, di cui potete trovare tutte le informazioni al seguente link:
http://www.walking-productions.com/jsserial/new/JSSerial.html
Innanzitutto preciso che questo sistema permette di controllare esclusivamente la porta seriale del computer dal quale si visualizza la pagina web, a patto che questo computer sia configurato opportunamente. Per questo motivo non sono possibili applicazioni di controllo remoto, purtroppo.
Prima di tutto è necessario scaricare la libreria RXTX
http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip
ed installarla nel proprio computer, seguendo queste istruzioni:
(Windows) Copiare rxtxParallel.dll in C:\Programmi\Java\jreX.XX\bin\ Copiare rxtxSerial.dll in C:\Programmi\Java\jreX.XX\bin\ Copiare RXTXcomm.jar in C:\Programmi\Java\jreX.XX\lib\ext\ (Mac OSX) Copiare i file RXTXcomm.jar e librxtxSerial.jnilib in /System/Library/Java/Extensions/ Eseguire i seguenti comandi da terminale: sudo mkdir /var/lock sudo chmod 777 /var/lock
Una volta eseguita questa procedura, sarà possibile verificare il funzionamento dell’applet nella pagina di test http://www.walking-productions.com/jsserial/new/JSSerial.html, nella sezione “Testing it out”. Cliccando sul tasto “List Ports” appariranno tutte le porte seriali presenti sulla propria macchina. Trascrivere l’etichetta della porta relativa ad Arduino (nel mio caso /dev/tty.usbserial-A700flI0), che sarà utile in seguito.
A questo punto dobbiamo scaricare e copiare i seguenti file nella stessa cartella dove metteremo la nostra pagina web:
http://www.walking-productions.com/jsserial/new/JSSerial.jar http://www.walking-productions.com/jsserial/new/jsserial-applet.jnlp http://www.walking-productions.com/jsserial/new/JSSerial.java
Ora passiamo alla creazione della pagina web, che andrà strutturata così:
Nota: per attivare/disattivare le uscite digitali di Arduino e per richiedere la lettura di un ingresso analogico ho usato come convenzione dei byte “significativi”:
100 per disattivare l’uscita 0, 101 per abilitarla, 110 e 111 per l’uscita 1, 120 e 121 per la 2, eccetera. Invece 201,202,203 sono le “richieste” per la trasmissione del valore letto dagli ingressi analogici 1,2,3, eccetera.
Il programma scritto sulla piattaforma Arduino è molto semplice:
int analogValue0 = 0; // ingresso analogico 0 int inByte = 0; // dato seriale in ingresso void setup() { Serial.begin(9600); //inizializzazione seriale a 9600baud pinMode(13, OUTPUT); //configurazione pin di uscita } void loop() { if (Serial.available() > 0) { inByte = Serial.read(); //lettura seriale if(inByte==100) //100=uscita disattivata digitalWrite(13, LOW); if(inByte==101) //101=uscita attivata digitalWrite(13, HIGH); if(inByte==200){ //200=richiesta dato analogValue0 = analogRead(0); //lettura ingresso analogico 0 Serial.print(analogValue0); //trasmissione dato } } }
Si possono ovviamente aggiungere altri canali in uscita e in ingresso (in base a quelli disponibili su Arduino). Come uscita è stato utilizzato il pin 13, in quanto ha già collegato un led su scheda, quindi è pratico per i primi test. L’espansione di questo sistema è limitata solo dalla propria fantasia, ad esempio si possono usare altri javascript per fare il plot dei dati registrati ad intervalli regolari.
In caso di datalogging, per evitare di far funzionare la pagina web come “motore” del sistema (lasciandola sempre aperta), si potrebbe dotare la scheda Arduino di una memoria SD e quindi programmarla per registrare i dati ad intervalli regolari. A questo punto l’interfaccia web può eseguire un’interrogazione della memoria, richiedendo i dati in un intervallo definito dall’utente e visualizzandoli sotto forma di tabella o grafico.

Recensione davvero interessante, quanto è interessante il progetto che hai proposto. Interfacciare Arduino al PC non è una cosa complicatissima adoperando Processing, ma lo diventa un tantino in più se, come hai fatto tu, si adottano altre soluzioni di interfacciamento come il web browser e il Javascript. Non sono assolutamente un mostro nella programmazione Javascript, anzi tutt’altro…tu hai fatto davvero un buon lavoro! Complimenti!
semplicemente… non vedo l’ora di avere tra le mani questo gioiello 🙂 sto iniziando a farmi una certa cultura riguardo questo tipo di programmazione, diciamo… per ora visto che lo conosco mi sembra più semlplice il C…molto interessante questo articolo che mette in evidenza ancora una volta la praticità e la versatilità di Arduino.
Finora ho visto progetti molto interessanti e non vedo l’ora anche io di avere una scheda Arduino e di poter realizzarne qualcuno.
Da provare assolutamente!! Anche se non conosco avascript ma la possibilità che offre questa recensione e questo tools sono davvero allettante. Davvero molto interessante!
Ormai Arduino sta prendendo sempre più piede e si sta diffondendo dall’ambito “giocattolo” a quelle “scolastico” a quello “semiserio”.
Per quanto mi riguarda mi diverto ancora a fare i progettini del manuale. Ma sono sicuro che appena ho un pò di tempo comincierò a usarlo anche via wireless che deve essere molto molto più divertente =)
Davvero interessante la possibilità di poter utilizzare un’interfaccia Javascript con arduino! Non sapevo nemmeno che si potesse avere accesso all’hardware come le porte seriali da JS.
Ho qualche dubbio però. Il sistema di comunicazione, stando al sito si chiama “JavaScript Serial sarInterface”, ma a me pare che si tratti di qualche tipo di applet Java.
Un’altra cosa da affrontare un pò delicatamente è l’uso della memoria SD, io so che un pò di tempo fa Arduino non supportava appieno l’uso dello slot per la sd card che sta sopra l’ethernet shield per il fatto che sia la scheda di rete che la sd utilizzavano in comune il bus spi, e bisognava cautelarsi. Altro problema (su questo sono poco sicuro) è che se non ricordo male nelle librerie ufficiali di Arduino manca una libreria in grado di gestire autonomamente le sd e le mmc, e qualcuna che sappia gestire qualche filesystem.
Francamente non so come sono evolute le cose, ma in fin dei conti non credo sia troppo difficile gestire il codice in modo da evitare conflitti… Probabilmente è possibile usare la SD in maniera “grezza” andando a scrivere i dati direttamente in formato binario nella memoria, ma sarebbe molto più comodo registrare i dati in una maniera almeno un pò strutturata, il meglio sarebbe poterli leggere col computer come dei file normali. Una volta ho realizzato un oggetto simile. In teoria doveva funzionare, ma aveva il difetto che essendo fatto a mano, i contatti sulle piazzole della scheda non funzionavano praticamente mai. Posso comunque dire che funzionava perchè in tanti tentativi, qualche volta la scrittura è andata a buon fine
Questo progetto lo trovo abbastanza carino e ben fatto soprattutto l’idea di pensare di usare come linguaggio il JAVA, ma rimango dell’idea che l’ideale comunque sia sia usare una scheda a Arduino con annesso un Ethernet shield , così risolvere alcuni problemi abbastanza importanti ad esempio prima di tutto lo spreco energetico in questo caso non è necessario lasciare il computer acceso 24 ore su 24 ma la scheda basta alimentarlo con un trasformatori da pochi Watt , un’altra cosa che mi viene mento era stabilita che sicuramente è molto più ampia su una scheda dedicata visto che deve fare esclusivamente la funzione di Web server senza necessitare di altri funzioni è questa cosa la rende ancora più sicura al livello della pirateria visto che essendo programma dedicato è più difficile da pirata.
Questo progetto l’ho provato con la scheda che ho ricevuto all’ultimo concorso Febbruino e funziona molto bene anche se necessita dui DLL in più, è necessario provarle per il mio computer visto che un’architettura x64 e quelle date non sono compatibili,
Non ho provato nella scrittura su una scheda SD ma per interfacciata o usato shield fatta in casa ,
molto facilmente usando le specifiche messe a disposizione sul sito di Arduino.cc ,
Arduino gestiscetranquillamente filesystem e usa come tutti i sistemi di basso complessità il FAT32 ,
comunque funziona a meraviglia ho fatto un sensore che ogni minuto scrive in un file text il valore.
interessante il log su sd!! sarà sicuramente una cosa che sperimenterò a breve…poi ho visto che le librerie di Arduino per lettura e scrittura su sd sono così semplici da usare!!
Hai ragione, Fabrizio, la cosa migliore sarebbe rendere l’Arduino indipendente, collegandolo direttamente in rete. Chissà se con uno shield ethernet e qualche riga di codice si riesce anche a far generare una pagina web, facendo funzionare Arduino direttamente da web server…sarebbe fantastico!
Certamente che si può fare questa cosa ,
Già negli esempi dello studio di sviluppo di Arduino sono presenti alcuni esempi in questo senso è solo necessario comprare la scheda di espansione per la rete
http://www.emartee.com/product/41999/Arduino%20ENC28J60%20Network%20Shield
http://wiki.joanillo.org/index.php/Arduino
Esisterebbe anche un’alternativa in PHP.
Semplicemente uno script compatibile con Mac, Linux e PC e facile da installare, che sfrutterebbe la connessione seriale via fopen() (PHP) oppure chiamate allo script di comunicazione seriale arduino-serial qui scaricabile: http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/ .
Comunque anche la soluzione presentata nell’articolo è molto efficace.
Una volta avevo scritto anche io del codice C per interfacciarmi con arduino. Con php sarebbe un pò da verificare se fopen funziona … cioè dovrebbe funzionare, ma con dei limiti. O si lascia una istanza dello script perennemente aperta, e usare un altro script che comunica col primo per realizzare l’interfaccia web, oppure si può usare solo comunicando tramite domanda e risposta, tutto in un solo script. Con un semplice script non mi pare sia possibile prendere un eventuale contenuto inviato da arduino e stoccato in un buffer.
In generale comunque posso dire che non è molto difficile riuscire a comunicare con arduino almeno in ambito linux, infatti basta leggere e scrivere su /dev/ttyUSBx come se fosse un semplice file