Corso base su arduino Prima parte Che cos è arduino? Si tratta di una piccola scheda con un microcontrollore, ideata ad Ivrea per consentire a designer e creativi di realizzare prototipi di progetti in breve tempo (prototipazione veloce). Quali sono i vantaggi nell uso in ambito didattico? Principalmente : - Economicità A differenza di altri sistemi di sviluppo, l ambiente di programmazione è gratuito. Il costo di una scheda arduino Uno originale è di circa 20 euro, ma esistono cloni che si possono acquistare per una decina di euro (Amazon) o anche meno (ebay, Ali express, ecc ). Sempre su Amazon, si possono acquistare 5 schede arduino Nano per 15 euro. - Multi piattaforma L ambiente di sviluppo (IDE=Integrated Development Environment) può essere installato su PC dotati di sistemi operativi Windows, Mac OS, Linux, senza grandi differenze prestazionali. - Sistema aperto Oltre a tutti i sorgenti della IDE e delle librerie, sono liberamente disponibili gli schemi elettrici e il disegno dei circuiti stampati di tutte le schede arduino. - Enorme quantità di software e documentazione disponibili In rete si trovano librerie che consentono di interfacciare dispositivi di tutti i tipi, dai sensori ai display, agli attuatori, ecc, esempi, tutorial ed un ottimo forum dove persone tecnicamente preparate sono disponibili a fornire aiuto in caso di difficoltà. - Semplicità d uso e rapidità di apprendimento Per programmarla è sufficiente collegarla tramite un cavo USB al PC e trasferire il codice oggetto tramite l IDE. Le istruzioni sono semplici, si basano sul linguaggio C/C++ ampliato con funzioni che ne semplificano la programmazione (non è necessario conoscere la struttura interna del microcontrollore e il nome dei singoli registri interni). E gli svantaggi? - Mancanza di un sistema di debugging maturo e completo Non è possibile l esecuzione in single step del programma. Non si può esaminare il contenuto delle variabili. L unico strumento disponibile è la stampa dei valori su un terminale di testo inserito nella IDE. - Difficoltà di comprendere l interazione fra le diverse librerie Ciò può portare a risultati inattesi e difficilmente comprensibili dall utente normale. Esempio: voglio usare una libreria che riceve i codici di un telecomando ad infrarossi per comandare dei piccoli motori in continua. Le due funzionalità (infrarossi e motori) utilizzano i timer interni del microcontrollore e possono generare conflitti, ma non ce ne accorgiamo a meno che non andiamo ad analizzare il codice stesso delle librerie (di difficile comprensione). 1
- Difficoltà nella transizione dalla programmazione con la IDE alla programmazione vera, che utilizza i registri interni e le caratteristiche hardware del microcontrollore. L ambiente di arduino è ottimo per introdurre la programmazione dei microcontrollori agli studenti, ma il passo successivo dovrebbe riguardare lo studio dettagliato dello hardware dei microc. della famiglia AVR e la loro programmazione con la IDE ufficiale AVR Studio. Le difficoltà aumentano notevolmente perché si passa ad un tipo di programmazione che coinvolge i registri delle periferiche interne del microcontrollore (porte, ADC, Timer, seriale, i2c, SPI, interrupt, risparmio energetico, ecc...), un po come si fa con i micro della famiglia PIC e gli studenti, abituati alla programmazione semplice di arduino, sono MOLTO restii a compiere questo salto. Del resto, ammettiamolo, è difficile anche per i docenti imparare a gestire una nuova famiglia di microcontrollori, andarsi a studiare un datasheet di 660 pagine e sperimentare. Senza contare il fatto che viene meno la possibilità di usare le comode librerie che ci permettevano di interfacciare miriadi di dispositivi. Cito la mia personale esperienza didattica. Classe terza di informatica e telecomunicazioni, articolazione telecomunicazioni, materia Tecnologie e progettazione di sistemi informatici e di telecomunicazioni, 28 alunni, 3 ore settimanali di insegnamento di cui una di laboratorio. Dal secondo quadrimestre, dopo che gli studenti avevano imparato i rudimenti di elettronica e di programmazione in C nelle altre discipline, ho introdotto arduino e alla fine dell anno quasi tutti erano in grado di utilizzarlo per applicazioni semplici. La stessa classe, l anno successivo, 20 allievi (alcuni non erano stati ammessi, altri avevano cambiato indirizzo). Affronto lo studio dettagliato dei micro AVR, introduco la programmazione vera in C, per gradi, partendo dall accensione di un LED. In tutto l anno scolastico sono riuscito ad affrontare pochi argomenti, rispiegati più volte, e solo 5 studenti sono riusciti a raggiungere un livello di competenze più che sufficienti. Gli altri hanno imparato a memoria, solo per poter superare le verifiche. Più e più volte gli studenti mi chiedevano: Quando torniamo a programmare con arduino? Le schede arduino Ci sono molti tipi di schede arduino in commercio, alcune originali prodotte in Italia, altre legalmente prodotte altrove (Cina, USA). Riporto solo quelle più diffuse. La più utilizzata e copiata è senza dubbio arduino Uno, dotata di microcontrollore ATMega 328 con 32KB di memoria flash (per contenere i programmi), 2KB di RAM (per le variabili), 1KB di EEPROM (per i dati che devono essere mantenuti anche in assenza di alimentazione), frequenza di clock 16 Mhz (1 istruzione in linguaggio macchina ogni 62,5 ns), ADC a 10 bit con 6 canali, contenitore 28 piedini dual in line e svariate periferiche. La scheda dispone di 14 piedini di ingresso uscita digitali, 6 ingressi analogici che all occorrenza possono essere utilizzati come ingressi uscite digitali, interfaccia USB per l alimentazione ed il trasferimento dei programmi, connettore per alimentazione esterna da 7 a circa 12 V. Inoltre sono presenti un pulsante di reset, 4 LED che segnalano: presenza di alimentazione (ON), traffico dati sulla porta seriale (TX e RX) ed un LED (L) collegato al piedino 13. I piedini 0 e 1 sono anche ingresso e uscita della porta seriale e non sono utilizzabili durante il trasferimento dei programmi. I piedini contrassegnati con ~ sono utilizzabili come uscite in PWM, come descritto più avanti. Sui piedini POWER sono disponibili le tensioni di 5V (max 200 ma) e 3,3V (max 50 ma), che si possono usare per alimentare dispositivi esterni. Il Francobollo nero vicino alla porta USB è un altro microcontrollore (ATMega 16U2) che si incarica della conversione da USB a seriale e viene utilizzato per il trasferimento dei programmi. Tutti i piedini digitali lavorano a livelli logici TTL (0 e 5V), mentre gli ingressi analogici accettano tensioni da 0 a 5V che convertono in un 2
valore da 0 a 1023 (10 bit). Mai alimentare la scheda contemporaneamente da USB e dal connettore esterno, pena la distruzione della stessa. Qui di seguito viene riportato uno schema che evidenzia le funzioni assegnate ai vari piedini. In giallo sono evidenziati i bit delle porte del microcontrollore. 3
La corrente massima erogabile, sia a livello alto che a livello basso, da ciascun piedino digitale è di 40 ma (è consigliabile non superare 20 ma), ma in totale non si devono superare i 200 ma. Talvolta il numero di piedini risulta insufficiente per le applicazioni più complesse; in tal caso è disponibile la scheda arduino Mega 2560. L inconveniente è che il microcontrollore ha un contenitore SMD, se si brucia non conviene sostituirlo ma buttare la scheda. I cloni cinesi sono venduti a 13 15 euro (Amazon). Vi sono ben 54 ingressi uscite digitali, 16 ingressi analogici e 4 porte seriali. La memoria flash è di 256KB e aumenta anche la RAM (8KB) e la EEPROM (4KB). Per applicazioni che richiedono spazi ridotti, una valida alternativa è costituita dalla scheda arduino Nano. Il processore è sempre un ATMega 328, ma in versione SMD ed i segnali disponibili sono praticamente gli stessi di arduino Uno. Fanno eccezione gli ingressi analogici che salgono a 8. Il connettore USB è dipo MINI-USB, meno diffuso rispetto al MICRO-USB. I cloni di arduino Nano si possono reperire su Amazon (5 schede a 15 euro), ebay, Ali express, ecc... Sul lato inferiore della scheda si trova l integrato preposto alla comunicazione con il PC. Nelle schede originali è un FT232, in quelle cinesi è un CH340 o CH341 e richiede, sui sistemi operativi Windows, un driver particolare reperibile in rete. Il sistema operativo linux riconosce la scheda senza la necessità di scaricare alcunchè. 4
Sempre per esigenze progettuali con spazi ridotti, una valida alternativa è costituita dalla scheda arduino Micro Pro, dotata di processore ATMega 32U4. La particolarità di questa scheda è che il processore è già dotato di interfaccia USB nativa ed il connettore, questa volta, è MICRO-USB. Da notare che gli ingressi uscite digitali sono numerati in modo diverso, la porta seriale non viene più utilizzata per comunicare con il PC e dispone di soli 4 ingressi analogici (ma altri sono disponibili in condivisione con i piedini digitali). Il successore di arduino Uno è arduino Leonardo, riportato nella figura seguente: 5
Anche in questo caso il microcontrollore è un ATMega 32U4, ma il formato della scheda è uguale a quello di arduino Uno. Non è comunque riuscita a scalzare il successo di arduino Uno. In commercio esistono molte altre schede arduino, alcune dotate di connessione WiFi, con processori ARM a 32 bit, inseribili nei capi di vestiario, ecc, ma quelle elencate sono, a mio avviso, le più interessanti per applicazioni didattiche. L ambiente di sviluppo (IDE) L ambiente di sviluppo (d ora in poi denominato IDE) è scritto in Java e pertanto, multi piattaforma. La programmazione avviene tramite linguaggio C/C++ ampliato con funzioni specificatamente scritte per le schede arduino. Non sono utilizzabili le comuni istruzioni di input output su terminale (printf, scanf, cin, cout), com è ovvio quando si lavora con i microcontrollori. Vediamo ora quali sono i comandi principali della IDE, riferendoci alla figura che segue. Icone in alto a sinistra (sotto i menù): la prima effettua la verifica della sintassi del programma, in pratica, la compilazione. Eventuali errori vengono riportati nell area nera presente sul lato inferiore della finestra (area di stato). La seconda icona (con la freccia verso destra) serve per trasferire il codice compilato alla scheda arduino. Nel caso in cui il programma fosse stato modificato, prima di trasferire il codice oggetto effettua la compilazione. Prima di premere questo pulsante è importante effettuare alcune operazioni: controllare di avere collegato una scheda arduino tramite cavo USB al PC, andare sul 6
menù Strumenti Scheda e verificare di avere selezionato la scheda arduino corretta, sempre dal menù Strumenti Porta, verificare di avere scelto la porta corretta (in Windows è una porta COMx con x diverso da 1). Il tipo di scheda e la porta sono riportate anche nell angolo inferiore destro della finestra. La terza icona serve per creare un nuovo file sorgente in C/C++. I programmi vengono denominati sketch (schizzo) e l estensione dei file sorgenti è.ino. La quarta icona (freccia rivolta verso l alto) serve per aprire un file sorgente già presente nel PC. La quinta icona(freccia rivolta verso il basso) serve per salvare il file sorgente. L icona con la lente sul lato superiore destro apre la finestra del terminale, denominato serial monitor, che comunica con la porta seriale del microcontrollore (vedremo in seguito la sua utilità). Effettuato il trasferimento del programma compilato alla scheda arduino, in caso di successo, sull area di stato vengono riportate informazioni relative alla quantità di memoria occupata e disponibile nel microcontrollore. La IDE comprende una serie di programmi esemplificativi e di librerie di base, accessibili dal menù File Esempi; ulteriori librerie possono essere scaricate dal menù Sketch #include libreria Gestione librerie (è necessario essere connessi a internet). Ogni libreria, a sua volta, contiene una serie di esempi di utilizzo che possono essere modificati e inclusi nei nostri programmi. Qualora si volesse utilizzare una libreria scaricata da internet e che non viene elencata tramite Gestione librerie, è possibile utilizzare la voce del menù Sketch #include libreria aggiungi libreria da file zip (ovviamente dovrà essere un file compresso.zip). La IDE comprende molte altre funzionalità, come la numerazione delle righe, ecc ma per iniziare possono bastare le precedenti informazioni. I microcontrollori delle schede arduino contengono un piccolo programma, il Bootloader, situato in un area protetta della memoria flash. Tale segmento di codice si occupa della comunicazione tra scheda e PC e, nell arduino Uno occupa 512 Byte. Struttura di un programma per arduino Ogni programma per arduino deve contenere obbligatoriamente almeno due funzioni: setup() e loop(). La funzione setup() non ritorna alcun valore (void) e viene eseguita una sola volta, in genere all inizio del programma. In questa funzione si inseriscono le istruzioni di inizializzazione, ad esempio se un dato piedino deve essere d ingresso o d uscita. Anche la funzione loop() non ritorna alcun valore (void) ma le istruzioni al suo interno vengono eseguite ciclicamente come se fossero all interno di un ciclo infinito for(; ;) o while (1). Ciò rispecchia il modo tipico di programmare i microcontrollori: dopo una fase di inizializzazione si passa ad un ciclo infinito che viene interrotto solo dall assenza di alimentazione. Nota per i più smaliziati: sì, arduino gestisce anche gli interrupt (attenti alle variabili dichiarate volatile). Riassumendo, la tipica struttura di un programma per arduino può essere la seguente: - commento che spiega cosa fa il programma, quando è stato scritto, come lo fa, chi ne è l autore - eventuale inclusione di librerie esterne - dichiarazione / inizializzazione delle costanti - prototipi delle eventuali proprie funzioni - dichiarazione / inizializzazione delle variabili globali - void setup() { - istruzioni di inizializzazione (porte di ingresso / uscita, ecc ) - 7
- void loop() { - istruzioni da eseguire ciclicamente - - definizione delle eventuali proprie funzioni Tipi di dati Arduino riconosce quasi tutti i tipi di dati del linguaggio C, ma ne aggiunge alcuni e altri li tratta in maniera particolare. Teniamo presente che stiamo lavorando con un microcontrollore a 8 bit che ha una quantità di memoria (in particolare, RAM) esigua se paragonata ad un PC. E opportuno fare allora una raccomandazione: usiamo le grandezze in virgola mobile (float) solo se indispensabili; infatti, la gestione dei float richiede una libreria, caricata automaticamente, che occupa qualche kilobyte di memoria flash e rallenta notevolmente l esecuzione del programma (millisecondi, invece di microsecondi). E chiaro tuttavia, che se ho bisogno di visualizzare la temperatura rilevata da un sensore con una risoluzione di un decimo di grado centigrado, non posso esimermi dall utilizzare i float, a meno di contorsioni logiche che riducono la leggibilità del mio programma. Arduino riconosce, tra gli altri, i seguenti tipi di dati: boolean 1 byte true / false es: boolean sceriffo = false; char 1 byte (da -128 a + 127) es: char c1= A ; char c2= 65; // A byte 1 byte (da 0 a 255) equivale a unsigned char int 2 byte (da -32768 a 32767) unsigned int 2 byte (da 0 a 65535) long 4 byte (da -2,1 miliardi a +2,1 miliardi, circa) unsigned long 4 byte (da 0 a circa 4,2 miliardi) float 4 byte (da ±3,4x10-38 a ±3,4x1038) double esattamente come float, occupa 4 byte ed ha lo stesso campo di valori, in pratica non viene riconosciuto come double i vettori usano la stessa sintassi del C. Oltre alle normali stringhe del C (vettori di caratteri terminanti con \0), arduino ha un proprio tipo denominato String con tutta una serie di funzioni che ne facilitano il trattamento (concatenazione, lunghezza, ricerca di una sotto stringa, ecc ) ma ritengo sia un argomento avanzato che non tratterò in questa sede. Per gli esperti: String è una classe C++ contenente diversi metodi, oltre al costruttore. Una nota particolare riguarda i sistemi di numerazione riconosciuti da arduino. Oltre al sistema decimale, viene accettato quello esadecimale del C (esempio: 0x12f4) ed anche quello binario. Una costante binaria deve essere preceduta dalla lettera B (es: int binario_triste = B0111001;). Il primo programma per arduino Normalmente, il primo programma che si scrive in un nuovo linguaggio di programmazione è il classico hello world!, che visualizza tale stringa su un terminale. Invece, chi usa i micro, sa che il primo programma fa lampeggiare un LED, non disponendo spesso di un terminale e delle funzioni per gestirlo. Tra l altro, viene anche usato per vedere se una scheda è bruciata o ancora integra (almeno in parte). 8
Ecco allora il primo programma che si propone di far lampeggiare il LED L (che ha già in serie la resistenza di limitazione) presente sulla scheda arduino Uno con un periodo di 2 secondi (1 secondo acceso e 1 secondo spento): /* Fa lampeggiare il LED L con periodo di 2 secondi. Il LED è collegato al piedino 13 di arduino Uno. */ #define LED 13 // definizione della costante LED void setup() { //viene eseguita una sola volta all inizio pinmode(led, OUTPUT); // definisco il piedino 13 come uscita // digitale void loop(){ //Per sempre finché non stacchi la corrente digitalwrite(led, HIGH); // Manda un livello alto (5V) al LED delay(1000); // attendi 1000 millisecondi digitalwrite(led, LOW); // Manda un livello basso (0V) al LED delay(1000); // attendi 1000 millisecondi Si noti la presenza di 3 funzioni particolari predefinite: pinmode, digitalwrite, delay. La funzione pinmode necessita di due parametri: il primo identifica il numero del piedino della scheda a cui si riferisce (può essere una costante o una variabile), il secondo è una costante predefinita che può essere solo INPUT o OUTPUT e stabilisce se quel piedino deve essere d ingresso o d uscita. Bisogna sempre definire se i piedini che si vogliono usare devono essere ingressi o uscite. Nota: in realtà, all accensione tutti i piedini digitali sono predefiniti come ingressi. La funzione digitalwrite manda una tensione a livello alto (5V) o basso (0V) al piedino specificato come uscita. Anch essa prevede due parametri: il primo identifica il numero del piedino della scheda a cui si riferisce (può essere una costante o una variabile), il secondo è una costante predefinita che può essere solo HIGH (alto) o LOW (basso). La funzione delay genera un ritardo specificato in millisecondi (costante o variabile). Il micro rimane in attesa per il numero di millisecondi indicato. Inserito il programma, bisogna verificarne la sintassi (icona col segno di spunta) e trasferirlo (icona con freccia verso destra) alla scheda precedentemente collegata al PC mediante cavo USB. Godersi lo spettacolo e manifestare ampia soddisfazione. Nel secondo esempio, buono per le prossime feste natalizie, vengono collegati 9 LED con le relative resistenze in serie (330 o 390 o 470 ohm) ai piedini indicati nel programma seguente (dal 5 al 13). I catodi dei LED vanno collegati alla massa (terminale GND) di arduino, gli anodi, ciascuno in serie con la propria resistenza, ai piedini di arduino. 9
int led[9]={5,6,7,8,9,10,11,12,13; void setup() { for (int i = 0; i < 9; i++) pinmode(led[i], OUTPUT); void loop() { for (int i = 0; i < 9; i++) { digitalwrite(led[i], HIGH); digitalwrite(led[i], LOW); for (int i = 0; i < 7; i++) { digitalwrite(led[7-i], HIGH); digitalwrite(led[7-i], LOW); for (int i = 0; i < 9; i++) { digitalwrite(led[i], HIGH); 10
for (int i = 0; i < 9; i++) { digitalwrite(led[i], LOW); for (int i = 0; i < 9; i++) { digitalwrite(led[8-i], HIGH); for (int i = 0; i < 9; i++) { digitalwrite(led[8-i], LOW); for (int i = 0; i < 5; i++) { digitalwrite(led[i], HIGH); digitalwrite(led[8-i], HIGH); digitalwrite(led[i], LOW); digitalwrite(led[8-i], LOW); for (int i = 0; i < 5; i++) { digitalwrite(led[i+4], HIGH); digitalwrite(led[4-i], HIGH); digitalwrite(led[i+4], LOW); digitalwrite(led[4-i], LOW); Sempre per i più esigenti: come faccio a comandare più uscite con una sola istruzione? Usando le vere istruzioni del micro in C, che si possono inserire anche nella IDE di arduino. Lo ATMega328 dispone di 3 porte: la porta B (6 bit), la porta C (7 bit, ma il 7 è il reset, lasciatelo stare per carità) e la porta D (8 bit, i bit 0 e 1 sono associati alla seriale). Ciascuna porta ha due registri: un registro di direzione DDRx (x=b,c,d) e un registro dati PORTx (x=b,c,d). Per porre un bit di una porta in ingresso bisogna settare a 0 il bit corrispondente nel registro DDR. Per porre un bit di una porta in uscita bisogna settare a 1 il bit corrispondente nel registro DDR.Esempio: con l istruzione DDRB = B111111; imposto i 6 bit come uscite; poi con l istruzione PORTB = B010101; mando in uscita sui 6 bit la configurazione 010101. Posso usare gli operatori sui bit (&,, ^, ~, >>, <<) per manipolare uno o più bit alla volta (ad esempio, per mascherarne alcuni). Perchè non c è la porta A? Per compatibilità con il resto della famiglia dei microcontrollori AVR ATMega. Gli esempi svolti in classe e le esperienze di laboratorio proposte agli studenti Dopo aver illustrato hardware e software di arduino Uno e dopo aver visto come inserire, compilare e provare il programma che fa lampeggiare un LED, solitamente propongo agli studenti di realizzare in laboratorio un gioco di luci, come quello trattato in precedenza. Questo serve per familiarizzarsi con le uscite digitali e ripassare un po di linguaggio C (cicli, vettori e funzioni). Poi, in classe, spiego come funzionano i display a 7 segmenti (anodo e catodo comune) e propongo di realizzare un programma che visualizza il conteggio da 0 a 9, ciclicamente. Le soluzioni degli studenti prevedono un numero enorme di digitalwrite per accendere e spegnere i segmenti del 11
display allo scopo di visualizzare le diverse cifre. Allora mostro una possibile soluzione più elegante e la spiego nei dettagli. /* Contatore ciclico da 0 a 9 su display a 7 segmenti a catodo comune. I segmenti sono collegati come segue: a al pin 2 di arduino, b al pin 3, c al pin 4, d al pin 5, e al pin 6, f al pin 7, g al pin 8, catodo a gnd. Inserire in serie a ciascun segmento un resistore da 330 o 470 ohm. */ void disp_7seg(byte valore); //prototipo della funzione che visualizza //una cifra (valore) sul display byte segmento[]={2,3,4,5,6,7,8; //a=pin2, b=pin3, c=pin4,... byte numero[]={b0111111,b0000110,b1011011,b1001111,b1100110,b1101101, B1111101,B0000111,B1111111,B1101111; //vettore contenente le //cifre da 0 a 9.Per ciascuna cifra: 1 = segmento acceso, //0=segmento spento. Bit meno significativo=segmento a. //Esempio: B0111111 rappresenta la cifra 0 void setup(){ for (int i=0;i<7;i++) pinmode(segmento[i], OUTPUT); //pin dal 2 all 8 come uscite void loop(){ for (int i=0;i<10;i++){ //per tutte le cifre da 0 a 9 disp_7seg(i); //visualizza la cifra sul display delay(1000); //attendi un secondo void disp_7seg(int valore) { byte temp; //variabile temporanea locale temp=numero[valore]; // in temp la sequenza binaria della cifra for (int j=0;j<7;j++) { //per tutti i segmenti della sequenza bin if ((temp & 1) == 1) //se il bit meno significativo è 1 digitalwrite(segmento[j],high); //accendi segmento else digitalwrite(segmento[j],low); //spegni segmento temp = temp >> 1; //shift a destra di una posizione La funzione disp_7seg risulta di difficile comprensione ma permette di ridurre di molto il numero di istruzioni. In laboratorio, chiedo ai ragazzi di modificare il programma in modo da visualizzare il conteggio all indietro e poi, di realizzare un programma che simuli il funzionamento di un singolo semaforo dotato di contatore dei secondi rimanenti. Il semaforo dovrà partire, ad esempio, dalla luce rossa e sul display dovrà iniziare il conteggio da 9 a 0 (10 secondi in totale); poi dovrà accendersi il verde e conteggiare altri 10 secondi, quindi il giallo per 5 secondi, poi nuovamente il rosso per 10 secondi. Il tutto dovrà ripetersi ciclicamente. 12
Materiale extra Arduino su breadboard o standalone Abbiamo visto come arduino rappresenti una valida piattaforma per la prototipazione veloce; ma una volta testato il prototipo, come si fa a realizzare il circuito finale? In effetti, una volta programmato il microcontrollore, la porta USB non ci serve più e con essa anche il micro che si occupa della conversione seriale TTL USB. In commercio esistono degli ATMega-328P-PU già programmati con il bootloader (costo: circa 5 euro); è sufficiente uno di questi, un quarzo da 16 Mhz, un paio di condensatori da 22 pf e una resistenza da 10 K per realizzare un arduino su breadboard. Basterà allora, programmare il microcontrollore inserendolo nello zoccolo di una scheda arduino Uno, toglierlo e spostarlo nel progetto finale. Con qualche complicazione in più si può anche evitare lo scambio di integrati e programmare direttamente il microcontrollore target attraverso il bus SPI usando come programmatore una scheda arduino Uno. In rete si trovano tutorial che spiegano come fare. Ma dal punto di vista economico, ha senso una tale operazione quando si possono acquistare 5 arduino Nano per 15 euro, perciò con un costo unitario di 3 euro? Direi di no. Volendo comunque intraprendere questa strada, occorre tenere presente la corrispondenza tra la piedinatura delle schede arduino e quella del microcontrollore ATMega-328P-PU che riporto nella figura seguente. 13
Il circuito per utilizzare il micro su breadboard o su circuito stampato è il seguente: Il pulsante per il reset è facoltativo, così come il condensatore elettrolitico da 10 µf sull alimentazione, ma conviene metterlo per minimizzare i disturbi. Sitografia www.arduino.cc Il sito del progetto arduino, in inglese, contiene una moltitudine di tutorial, progetti, il riferimento per il linguaggio di programmazione, esempi di interfacciamento con i più disparati tipi di trasduttori, ecc forum.arduino.cc Il forum ufficiale di arduino; la parte più corposa è in lingua inglese, ma esistono sezioni in molte altre lingue, compreso l italiano. www.arduino.cc/en/main/software sito dove si effettua il download della IDE per i diversi sistemi operativi. 14
fritzing.org/home/ Permette di scaricare un utile ed intuitivo programma gratuito (Fritzing) con cui disegnare gli schemi di cablaggio, come quello riportato a pag.10. Per i componenti mancanti, cercare nel forum apposito di Fritzing http://forum.fritzing.org/c/parts-submit oppure con Google, digitandone il nome in inglese. http://www.maffucci.it/area-studenti/arduino/ In italiano, contiene una serie di articoli, un corso in forma di slide su arduino indirizzato ai docenti (anche a digiuno di elettronica e di programmazione in C) e molta bibliografia. www.mauroalfieri.it In italiano, sito di un collega che contiene corsi online a diversi livelli di difficoltà e moltissime informazioni e progetti utili. http://www.atmel.com/products/microcontrollers/avr/megaavr.aspx Il sito del produttore dei microcontrollori utilizzati nelle schede arduino. Per chi vuole approfondire la programmazione con l ambiente di sviluppo ufficiale (Atmel Studio). www.instructables.com/ Qui si trovano molti progetti realizzati dagli utenti della rete, spiegati in modo semplice, passo dopo passo. Poi, su YouTube, si trovano moltissimi video tutorial, anche in italiano, ma fate attenzione perché ci sono anche esempi errati. 15