10 cose da sapere prima di iniziare un progetto Arduino

Contributo di Editori nordamericani di DigiKey

Avete già visto quello che si può fare con le schede Arduino - sembra divertente no? Siete pronti a provarci anche voi? Avete ordinato una scheda Arduino, i fili per ponticelli, un alimentatore, alcuni LED e un kit completo di accessori. Ma per potervi veramente divertire, ci sono alcune cose da tenere in mente che vi faranno risparmiare tempo e frustrazione lungo la strada.

Tra di essi ne potreste trovare uno che vi eviterà, in un momento di rabbia, di gettare nella spazzatura tutto questo materiale nuovo!

1: Arduino è una soluzione notevole per la sperimentazione e l'apprendimento

Queste schede si prestano ottimamente per compiti piccoli e specifici. Sono una base di sperimentazione facile, un po' come aprire un rilevatore di fumo per vedere com'è fatto dentro. I microcontroller in questi tipi di applicazioni hanno una lista di compiti da svolgere relativamente corta. Non occorre che un termostato riesca a eseguire Linux o altri calcoli complessi. Se volete scrivere il codice per applicazioni eseguite in un SO, forse è il caso di prendere in considerazione un SBC come Raspberry Pi o BeagleBone Black.

Per coloro che intendono concentrarsi su progetti relativi ai dispositivi mobili o per l'Internet delle cose (IoT), tutte le schede Arduino sono idonee, ma alcune sono più adatte, ad esempio per l'ingombro più ridotto o per i consumi più contenuti. Adafruit Trinket, Gemma e Arduino Mini sono perfetti per questo tipo di progetti.

2: Scrivere uno sketch

La programmazione delle schede Arduino implica la scrittura di uno "sketch" nell'ambiente di sviluppo Arduino e il suo successivo caricamento nella scheda (Figura 1). Questi sketch vengono scritti in C, quindi usano le stesse strutture di controllo. Se non sapete nulla di ciò che è stato appena detto, non disperatevi. Non è altro che una buona notizia. Significa che se conoscete un po' di C o C++, la scrittura degli sketch vi sarà facile. E viceversa, significa che imparando a scrivere sketch, imparerete anche le basi del linguaggio C. Comunque sia ne trarrete profitto.

Immagine della schermata dell'ambiente di sviluppo Arduino

Figura 1: La programmazione in Arduino richiede la scrittura di sketch in C. Questa è l'immagine della schermata dell'ambiente di sviluppo. (Immagine per gentile concessione di DigiKey)

Nota sull'ambiente di sviluppo Arduino: non ha un debugger integrato. Se siete abituati a riparare il codice con i debugger incorporati in ambienti di sviluppo come Eclipse o MPLAB, dovrete semplicemente diventare più bravi. Per la ricerca degli errori e la correzione dovrete far ricorso a metodi più primitivi, come l'inserimento di una linea di codice per restituire un testo o attivare un LED quando viene raggiunta una sezione di codice. La mancanza di un debugger è probabilmente un aspetto positivo per sviluppare le vostre capacità di soluzione di problemi.

3: Usare shield e accessori riconosciuti

Se vi siete procurati un Arduino, probabilmente è perché avevate in mente un progetto o volevate imparare di più di elettronica. Imparare diventa più difficile se gli strumenti di apprendimento hanno una scarsa dotazione di documentazione e supporto. Dovreste concentrarvi sulle lezioni e i concetti, non sulle procedure di ricerca errori.

Ovviamente la ricerca e soluzione degli errori è una parte importante e inevitabile del processo, ma non dovete tarparvi le ali già in partenza.

Sparkfun, Adafruit e Seeed Studio sono ottimi fornitori di shield e accessori. Non solo offrono prodotti eccellenti, ma la loro popolarità è parte della loro stessa forza. Se state affrontando un problema, è molto probabile che qualcun altro lo abbia già sperimentato, risolto e pubblicato in qualche forum. Approfittatene.

4: Tenete accuratamente nota di ciò che state facendo mentre imparate e sviluppate

È una pratica particolarmente importante durante la sperimentazione con diverse iterazioni dello stesso programma. Può essere molto facile perdere di vista quale versione ha fatto cosa e perché. Potreste pensare che non avete bisogno di queste note di revisione, ma vi assicuro che non è così. Le modifiche e le iterazioni che potete mettere in atto in una settimana per portare a compimento il progetto potrebbero essere centinaia.

La mia formazione si basa su un intensivo uso del CAD, quindi disegno i miei circuiti in DraftSight. Un'altra opzione è offerta da Scheme-it® di DigiKey (Figura 2). Io uso DraftSight per una questione di abitudine, tuttavia uno strumento concepito appositamente come Scheme-it è una soluzione migliore e a dir la verità mi ci sto abituando.

Scheme-it ha il vantaggio di essere direttamente collegato con l'enorme inventario di componenti di DigiKey. Inoltre offre numerose opzioni per creare annotazioni. Potete immettere note sul foglio principale o associarle a componenti specifici. È anche basato su cloud, di conseguenza i vostri dati vengono sottoposti a backup e sono disponibili da qualsiasi postazione con una connessione Internet. Oppure, potete tenere note e disegni in un quaderno, ma io preferisco mantenere tutte le informazioni pertinenti in formato elettronico.

Immagine di un semplice circuito Arduino con Scheme-it di DigiKey

Figura 2: Un semplice circuito disegnato con Scheme-it di DigiKey. (Immagine per gentile concessione di DigiKey)

5: Non siate troppo severi con voi stessi

Anzitutto prendete dimestichezza con singole tecniche e concetti. Iniziate con il lampeggio di un LED usando l'esempio "Blink" incluso nell'IDE Arduino. Quindi fate lampeggiare un LED collegato a un'uscita. Scrivete poi uno sketch per far lampeggiare diversi LED insieme. Nel passo successivo, fate lampeggiare il LED quando premete un pulsante. Scrivete quindi uno sketch che effettua una lettura analogica da un potenziometro per controllare la velocità di lampeggio del LED.

Qualsiasi progetto abbiate in mente è riducibile a compiti più piccoli. Ad esempio, mettendo assieme piccoli compiti come il rilascio della pressione di un pulsante, l'invio di segnali a un LCD, la lettura di un sensore di temperatura e il lampeggio di un LED, si ottiene un interruttore controllato dalla temperatura.

Ogni concetto appreso è come un mattoncino, se il vostro progetto è un muro, costruitelo con tanti di questi mattoncini.

Come osservazione finale, prima che il LED lampeggiante vi stanchi, permettetemi di condividere ancora qualcosa. Sono un ingegnere elettrotecnico da oltre dieci anni e, qualsiasi sia la scheda o il microcontroller che ho tra le mani, la prima cosa che faccio è far lampeggiare un paio di LED. Queste lucine lampeggianti mi confermano che ho inizializzato il chip in modo abbastanza corretto e che ho iniziato a prendere il controllo dell'hardware.

6: Non sottovalutate il limite della velocità del clock

Arduino UNO ha un clock interno con una velocità di 16 MHz, cioè 16 milioni di tic al secondo. Detto così può sembrare un numero molto alto, ma occorre considerare che ogni istruzione o ogni controllo in uno sketch usa i tic del clock. Più sono le attività eseguite dallo sketch e più rapidamente vengono consumati quei tic che sembravano abbondare. Accade così che prima ancora di rendersene conto ad Arduino mancano segnali di ingresso sufficienti o esaurisce tutti gli impulsi di uscita. Letteralmente non ha tempo sufficiente per completare tutte le operazioni come ci si aspetta.

Per i compiti base raramente questa situazione diventa un problema, ma con il crescere della complessità dei progetti, questo collo di bottiglia è destinato a manifestarsi. Il limite della velocità del clock è un problema quando si inizia ad esempio a controllare motori passo-passo o quando si deve gestire il feedback di encoder da servomotori.

Se volete evitare di restare a secco di cicli di clock forse è il caso che prendiate in considerazione un Arduino Zero, che vanta un clock a 48 MHz.

Un altro approccio per risolvere il problema è quello di scaricare alcuni dei processi su uno shield. Trinamic Motion Control ha un valido shield di controllo di motori passo-passo, TOS-100 V1.1, studiato appositamente con questo obiettivo.

7: Imparate a utilizzare le librerie Arduino

Cosa pensereste se gran parte del codice di cui avete bisogno fosse già stato scritto e disponibile? Non potrebbe farvi risparmiare tempo nella realizzazione del progetto? In effetti il codice esiste ed è pronto per l'inserimento nei vostri sketch. Queste raccolte di codice sono chiamate librerie.

Per spiegare bene le librerie occorrerebbe molto più tempo e spazio di quello offerto in questo articolo, ma posso fare un'analogia per chiarirvi il concetto. Una libreria è come una cassetta degli attrezzi per una serie di compiti. Basta includere nel vostro progetto le "cassette" che contengono gli strumenti appropriati.

Ad esempio, nell'ambiente di sviluppo Arduino è inclusa la libreria "wire" (Figura 3). "Wire" è una raccolta di numerosi strumenti per le comunicazioni seriali I2C. Questi strumenti automatizzano la maggior parte delle attività relative alle comunicazioni I2C. Potreste scrivere voi stessi un codice per fare tutto ciò, e sicuramente sarebbe un'esperienza molto valida ai fini dell'apprendimento. Ma non sarà necessario se imparate a utilizzare in modo efficiente le librerie.

Immagine della libreria "wire" inclusa in uno sketch

Figura 3: Libreria "wire" inclusa in uno sketch. (Immagine per gentile concessione di DigiKey)

8: Imparate le porte base e fate attenzione alle comunicazioni parallele

Imparate le comunicazioni parallele ma in particolare quelle seriali. Scopriamo cosa significa l'acronimo UART (è un po' come un telefono seriale universale per un microcontroller). Vediamo SPI (Serial Peripheral Interface) e I2C. Atmel, l'azienda che ha fabbricato i chip alla base della maggior parte delle schede Arduino, mette a disposizione alcune note applicative veramente utili sulle comunicazioni SPI e I2C. La maggior parte dei sensori e di altri accessori che probabilmente userete comunicheranno con Arduino tramite connessione seriale SPI o I2C. Capire queste tecniche di comunicazione vi semplificherà molto l'utilizzo di questi accessori.

Per certi progetti, occorre fare attenzione al tipo di accessori, come i display, che richiedono comunicazioni parallele. Le porte COM parallele usano molti più pin rispetto a quelle seriali. Potreste addirittura scoprire che il vostro Arduino non ha neppure il numero di pin sufficiente a tale scopo e, se li ha, potreste doverli usare tutti senza lasciarne uno per altri scopi. Se volete imparare come controllare un LCD con comunicazione parallela il gioco vale la candela, ma dispositivi come questo possono essere troppo esigenti in fatto di I/O per progetti che implicano più dispositivi.

9: Non dimenticate i limiti di memoria

La maggior parte delle persone agli esordi inizia con una delle schede base come UNO o Trinket. Alla fine vi troverete ad aver esaurito la memoria e occupato tutta la RAM. Arrivare questo limite è un fatto positivo. Può suonare strano detto così, ma lasciatemi spiegare.

Inevitabilmente, tanto i neofiti quanto gli esperti di codice finiscono con il creare codice disorganizzato e che si espande in modo incontrollato, occupando molte più risorse del necessario. Esiste quasi sempre un modo per condensare il codice. L'obiettivo è quello di compattarlo al massimo e sfruttare il più possibile le risorse a disposizione. Fino a che non andate a sbattere contro un ostacolo, perché dovreste preoccuparvene? Sbattere contro i limiti di memoria vi obbliga a fare più attenzione. Vi spinge a riesaminare quanto avete già fatto e a cercare modi per migliorarlo. Optare semplicemente per una scheda con più memoria vi precluderà da un'opportunità di apprendimento, visto che aggirereste soltanto il problema.

Può darsi che alla fine dovrete passare per forza a una scheda con più memoria e più RAM, ma non abbiate fretta di farlo.

Ecco un piccolo consiglio per iniziare: se vi rendete conto che esaurirete la RAM, provate questo trucco per leggere le stringhe di testo direttamente dalla memoria del programma e non dalla RAM:

Serial.println(F("un testo a piacere"));

La macro F tra parentesi impedisce che il testo venga caricato in RAM all'avvio del programma. Quando necessario, la stringa viene letta direttamente dalla memoria flash.

10: Alcune schede Arduino non hanno capacità USB native

A prima vista ciò sembra non avere senso. Avete ragione a dire che programmate la scheda Arduino, che ha un connettore USB, inserendola nella porta USB del computer. Ma per alcune schede Arduino esistono trucchetti software molto intelligenti che fanno le acrobazie dietro le quinte. Le schede come Adafruit Trinket hanno un bootloader pre-installato che consente al microcontroller di funzionare come un dispositivo USB per caricare gli sketch. È un piccolo codice specializzato veramente intelligente.

La maggior parte dei microcontroller non gestisce le comunicazioni USB in modo nativo. Per aggirare il problema, in genere vi sono due modi, e uno meno comune usato da Trinket. La prima e più diffusa soluzione è quella di inserire un secondo chip sulla scheda per gestire le comunicazioni USB. Questo chip converte anche i dati dalla connessione USB in un formato comprensibile dall'UART del microcontroller principale. L'altro metodo comune è quello di utilizzare un componente hardware separato che si innesta nel microcontroller quando si desidera comunicare tramite USB.

In questo suggerimento mi riferisco nello specifico alla Trinket a seguito di una situazione che ho sperimentato io stesso nel mio lavoro, dove avevamo ordinato diverse schede Trinket da usare come interfaccia tra un PC che eseguiva LabVIEW e una scatola di comando sperimentale. Quando arrivarono le Trinket ci rendemmo conto che erano sprovviste di hardware di controllo USB su scheda.

Il problema fu risolto rapidamente. Ordinammo alcune Arduino UNO. Queste hanno un chip ATmega dedicato per la gestione delle comunicazioni USB. Si trattava di un problema secondario, ma che avremmo evitato se prima dell'ordine avessimo letto questo suggerimento.

In breve, se si desidera usare una porta USB su Arduino per collegare un computer, una videocamera o un'unità USB, accertatevi che la scheda acquistata integri un controller USB. In alternativa, si può aggiungere la capacità USB con uno shield host USB.

Conclusione

Arduino ha dimostrato di essere un ambiente di apprendimento eccezionale per chiunque - neofiti o ingegneri - voglia scrivere codice e implementare un sistema elettronico. È divertente e utile e con le giuste informazioni e il corretto approccio, può diventare un percorso di apprendimento davvero piacevole. Ma non dimenticate mai il consiglio numero 5, "Non siate troppo severi con voi stessi".

 
DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo editore

Editori nordamericani di DigiKey