Arduino Serial v2.0a

24 11 2010

Ciao a tutti, ieri sera sono finalmente riuscito a riprendere in mano un vecchio (fallimentare) progetto: Arduino Serial. Mesi fa, facendo degli acquisti su un noto negozio online di ciarpame elettronico, mi aggiudicai una scheda Arduino Serial PCB, ossia la schedina stampata per montare Arduino con la porta seriale.

Arduino Serial 2.0a PCB

Arduino Serial 2.0a PCB

Il simpatico portale di ecommerce, analizzando la mia scelta della schedina, mi propose automaticamente un chip ATMEGA328, dotato di bootloader Arduino precaricato: vedendo questa simpatica associazione, non mi posi minimamente il problema ed aggiunsi all’ordine il suddetto chip. Dopo pochi giorni il tutto pervenne a casa e cominciai il montaggio dei vari componenti (racimolati dalle scorte o acquistati in vari negozi di Torino), giunto però alla fase di test, mi resi conto che l’IDE Arduino non prevedeva la possibilità di gestire una scheda Arduino Serial con a bordo un ATMEGA328:

Selezione delle schede su Arduino

Selezione delle schede su Arduino

Documentandomi (in ritardo) scoprii che impiegare l’ATMEGA328 è possibile, ma è necessario scrivere un’apposita sezione nella configurazione dell’IDE; il punto è che non volevo essere vincolato a troppi tricks, dovendo sempre cambiare file a mano perdendomi le modifiche con l’update dell’IDE, così regalai il 328 ad un amico (che aveva un Arduino Diecimila dotato di ATMEGA168) e mi procurai dalla Polonia un ATMEGA8 vergine.

L'ATMEGA8 e la selva di componenti

L'ATMEGA8 e la selva di componenti

Il problema a questo punto è stato di trovare un modo per programmare l’ATMEGA8 in modo tale che potesse accettare i segnali giunti attraverso l’interfaccia seriale.

La DB9, l'alimentazione e il 7805

La DB9, l'alimentazione e il 7805

Cercando su internet, mi imbattei in un howto, scritto direttamente dai creatori di Arduino, che spiega dettagliatamente la procedura per la programmazione del chip tramite ICSP. Non essendo io un elettronico, spendere diverse decine di euro per un programmatore di microchip Atmel mi è sembrato inopportuno, quindi, sempre seguendo la succitata guida, ho optato per costruire un programmatore parallelo, come spiegato qui.
Lo schema di funzionamento è piuttosto semplice.

Schema del programmatore ICSP via Parallela

Schema del programmatore ICSP via Parallela

Utilizzando un cavo riciclato da un vecchio computer, si è trattato di fare sei sole saldature a stagno, una bella colata di colla a caldo per proteggere il tutto dai cortocircuiti e una scocca di plastica, per far apparire il tutto un po’ più professionale :-) .

La mia versione del programmatore ICSP

La mia versione del programmatore ICSP

Seguendo i passi descritti nei documenti di Arduino, ed utilizzando la comoda funzione di programmazione già pronta nell’IDE, l’intero procedimento è filato liscio. L’ultimo scoglio è stato quello di recuperare un cavo seriale adatto; Arduino Serial ha bisogno di un cavo DB9-DB9 dritto, non vanno quindi bene i cavi comunemente in dotazione ai modem (che in realtà sono cavi incrociati, chiamati null-modem). Scavando in vari scatoloni pieni di rottami sono riuscito a recuperare un cavo adatto e, mediante il tester, ho verificato che i piedini fossero connessi 1-1.

Seriale dritto DB9-DB9 femmina-femmina

Seriale dritto DB9-DB9 femmina-femmina

Purtroppo la mia mania di smanettamento mi ha fatto tralasciare un importante particolare: il cavo a mia disposizione è un femmina-femmina. Da una parte va bene perché le porte seriali (quelle che DOS\Windows chiama COM) sono di tipo maschio (quelle con i piedini, per intenderci), ma sull’Arduino saldai un connettore DB9 femmina! :-( Fortunatamente in un cassetto dell’ufficio ho scovato un gender changer DB9; se vi doveste trovare nella stessa situazione, fate attenzione a non utilizzare un changer null modem, altrimenti la scheda e il computer saranno incapaci di comunicare.

DB9 Gender Changer

DB9 Gender Changer

Naturalmente tutti questi pasticci potevano essere evitati facendo un’oculata scelta dei componenti prima di mettersi al saldatore, ma, si sa, smanettone è sinonimo di pasticcione :-D . Comunque, ecco come appare il cavo alla fine.

Cavo seriale dritto DB9-DB9 maschi-femmina

Cavo seriale dritto DB9-DB9 maschi-femmina

Per finire un’indicazione importante: Arduino Serial non resetta la connessione via software, questo si traduce nel fatto che se volete uploadare il vostro codice dall’IDE alla schedina (mentre questa è accesa) dovete operare, manualmente, un piccolo trucco:

  1. Compilate il vostro codice sull’IDE e verificate che tutto sia a posto
  2. Controllate che Arduino Serial sia connesso, alimentato e che l’IDE selezioni la scheda corretta (Arduino NG or older w/ ATmega8)
  3. Tenete premuto il tasto reset sulla scheda Arduino
  4. Avviate la compilazione e l’upload del codice
  5. Quando l’IDE vi restituirà, nella finestra di output/debug, il messaggio: Binary sketch size: #### bytes (of a #### byte maximum)
    rilasciate il tasto reset.

Se eseguirete tale procedura correttamente, la scheda Arduino effettuerà il reboot, il bootloader per qualche secondo ascolterà la porta RS323 in attesa di un nuovo codice, l’IDE spedirà correttamente il binario e tutto funzionerà perfettamente. Nelle nuove versioni di Arduino tutto questo pasticcio non esiste perché quando l’IDE vuole spedire il codice, chiede alla schedina di ripartire e il bootloader dell’ATMEGA si troverà il nuovo firmware in attesa di essere caricato.

Per concludere alcune piccole considerazioni (personali):

  • Arduino Serial, soprattutto utilizzando un ATMEGA8, è molto più limitato e macchinoso da utilizzare di una più recente versione USB.
  • Non costa molto di meno rispetto ad un Arduino USB bello e fatto, quindi se si vuole risparmiare questa è sicuramente la strada sbagliata.
  • Sebbene la piedinatura del Serial sia compatibile con le nuove schede e, di conseguenza, anche con gli shield, il fatto che si vadano ad utilizzare componenti discreti rende lo spazio sopra la board inutilizzabile, meglio mettere eventuali espansioni sotto.
  • Essendo la porta seriale non alimentata, Arduino Serial necessita di un’alimentazione esterna per funzionare (questo vale anche per la fase di programmazione).

Detto questo, se vi chiedete perché, avendo a disposizione dei comodi Arduino 2009 o (recentemente) l’Arduino UNO, mi sono lanciato in questa ennesima follia… beh:

  1. perché si poteva fare :-P
  2. perché voglio provare questo aggeggio su computer veramente vecchi, privi di porte USB :-)

Alla prossima folle autocostruzione.

Simone





OpenFocuser 0.1 – esperimenti

23 03 2010

Ultimamente mi sono parecchio infognato con Arduino e, visto che sto muovendo i primi titubanti passi verso le riprese digitali, mi sono accorto che un fuocheggiatore elettrico potrebbe tornare utile per mettere a fuoco il soggetto senza tenere il portatile in mano o ficcare qualche colpo di troppo al telescopio (puntato già con molta difficoltà). Cercando su internet ho trovato alcune cose già fatte (come il RoboFocus) ad un prezzo allucinante ma anche alcuni progetti homemade che però hanno il tragico difetto di essere dotati di software solo per Windows (e compreso nel prezzo anche sviluppatori rubacchioni, di software GPL, maldisposti a distribuire il codice o di darsi da fare per gli altri 2/3 del cielo…).
Dopo ponderata riflessione e parecchia ricerca ho deciso di provare a fare il mio fuocheggiatore OpenSource ed ecco OpenFocuser!!! Per ora sono ancora nella fase di sperimentazione, ma ho trovato questo interessantissimo documento che spiega come controllare un motore passo passo unipolare grazie ad un semplice Darlington Array l’ULN2004. Smandruppando un po’ le librerie di Arduino sugli stepper (che per altro sono rilasciate come public domain, e quindi legalmente modificabili e distribuibili) ho cominciato a scrivere un po’ di codice in Processing (il linguaggio con cui si programma l’Arduino) in modo da avere un motore passo passo con due pulsanti direzionali e un pulsante di switch della velocità: da fullstep a halfstep. Per ogni pressione il motore compie 1 step ogni 200ms.

Ecco alcune foto del circuito di prova realizzato su breadboard:

OpenFocuser Breadbord dall'alto

OpenFocuser Breadbord dall'alto

Per connettere il motore e l’alimentazione esterna (una batteria piombogel 12V 6.5Ah) ho utilizzato delle morsettiere da PCB che facilmente si adattano ai fori della breadboard e che verranno riciclate per il progetto definitivo.

Prototipo di OpenFocuser su breadboard

Prototipo di OpenFocuser su breadboard

Naturalmente le foto sono un po’ difficili da interpretare, per questo motivo ho realizzato con Fritzing uno schema di realizzazione:

Fritzing OpenFocuser Breadboard Schema

Fritzing OpenFocuser Breadboard Schema

Per quanto riguarda il codice, per ora è ancora tutto in fase pre-alpha e può essere recuperato sul portale di sviluppo collaborativo BarberaWare.org all’indirizzo: http://openfocuser.barberaware.org/.
Tutto il codice relativo all’OpenFocuser è rilasciato sotto licenza GPLv3 e per questo motivo tutto il codice può essere utilizzato e modificato ma qualsiasi ulteriore rilascio deve ereditare la licenza succitata. L’utilizzo del codice, o di una parte di esso, senza il rilascio del relativo codice per scopi commerciali e no è espressamente vietato. Detto questo, chiunque si rispecchi in questa filosofia di sviluppo e abbia voglia di partecipare allo sviluppo è bene accetto. :-D

Simone








Iscriviti

Get every new post delivered to your Inbox.