Arduino Standalone ATmega328: come costruire un circuito con il solo microcontrollore di Arduino

Spesso e bene, al termine della protipazione dei nostri progetti, ci possiamo trovare nella spiacevole situazione in cui lo spazio é limitato, pertanto la nostra scheda Arduino completa di connettore USB, microprocessore e tutte le porte, risulta troppo ingombrante. Non c’é qualche modo per risolvere il problema in modo elegante? Fortunatamente, la risposta é sì: possiamo ricostruire il progetto usando soltanto il microprocessore ATmega328 e pochi altri componenti. Vediamo come.

In questa guida vedremo quindi come sostituire a tutta la scheda di Arduino opportunamente programmata ai fini del nostro progetto, con un set limitato di componenti – cioe’ il microcontrollore ATmega328 – il dispositivo elettronico che e’ in grado di gestire segnali di ingresso e di uscita e possiede al suo interno un’intelligenza programmata da noi. Questa procedura può essere seguita avendo una qualsiasi scheda Arduino, anche compatibile, con socket – cioè dotata del connettore a incastro che permette la sostituzione del microcontrollore in caso di guasto (vedi riquadro rosso nella figura di seguito).

ArduinoUno_R3

Arduino UNO con microcontrollore ATmega328p e socket

Quando carichiamo il nostro Sketch dall’Arduino IDE, stiamo a tutti gli effetti programmando il microprocessore, e questo non ha assolutamente bisogno di funzionare insieme all’intera scheda che lo circonda.
A cosa serve tutto il resto allora? A semplificarci la vita. Infatti se non ci fosse tutta la circuiteria non potremmo:

  • Lavorare con la seriale per fare debug.
  • Usare alimentazioni superiori ai 5V.
  • Caricare i nostri sketch.

Una volta però che il microcontrollore è stato programmato e il nostro progetto funziona, possiamo staccare il micro dalla scheda e usarlo in maniera indipendente assieme a pochi altri componenti necessari a farlo funzionare. Il primo passo è rimuoverlo usando un cacciavite a taglio o meglio ancora delle pinzette – facendo molta attenzione, visto che i piedini potrebbero storcersi.

Atmega328p sciolto

Microcontrollore ATmega328p

Per capire che piedino fa cosa, ecco uno schema, il cui verso puo’ essere indentificato dalla mezza fossetta posizionato in alto sul micro.

F2SFHSDH3Z3V3P4.MEDIUM

Mappa dei pin ATmega328p

Come abbiamo fatto notare prima, mancano ovviamente la Vin e la porta USB per comunicare. L’MCU si attiva a 5V (con massimo assorbimento 200mA come da datasheet). Se poi capita che il nostro circuito abbia bisogno di una tensione diversa da 5V (i.e. una tensione maggior per pilotare dei motori, ad esempio), dovremmo usare un componente aggiuntivo per generare dalla tensione piu’ alta anche i 5V necessari all’MCU per funzionare. Per questo esperimento specifico potrebbe non servire, ma é bene mettere per sicurezza anche l’oscillatore al quarzo.

Ora che abbiamo capito dove vogliamo arrivare, tuffiamoci nel progetto d’esempio per capire in quale modo sia possibile generare un circuito equivalente!

Progetto d’esempio

Vogliamo realizzare un circuito per controllare la velocità di rotazione di un motore tramite potenziometro. Il motore è alimentato DC a 12V e pilotato da un transistor MOSFET. Ecco il fritzing con la vista breadboard:

Circuito con la scheda di Arduino

Il codice è il seguente:

Testato il circuito e verificato la sua funzionalità, lo scopo è replicarlo usando solamente l’MCU. Osserviamo il risultato e poi commentiamo:
microservo_bb
Il connettore in alto a sinistra porta l’alimentazione a 12V. I 12V vengono usati direttamente per alimentare il motore DC tramite il MOSFET. Un regolatore di tensione (denominato nella figura come LM7805) riceve in ingresso i 12V e genera i 5V per il microprocessore all’uscita. Due condensatori elettrolitici sarebbero consigliati all’ingresso e all’uscita del regolatore per filtrare e pulire l’alimentazione: qui sono omessi per semplicità.

Veniamo alla configurazione del microprocessore. Oltre all’MCU vera e propria, ci serve un cristallo da 16MHz, che forma un risuonatore con i due condensatori arancioni da 22pF. Il cristallo e’ attaccato a cavallo dei pin 9 e 10. Il condensatore blu, invece, è collegato tra l’alimentazione dell’MCU (pin 7) e la massa (pin 8) e serve per filtrare l’alimentazione del microprocessore stesso (viene chiamato condensatore di bypass). Il pin 1 va collegato ai 5V tramite una resistenza di pull up da 10k per disabilitare il reset al microprocessore.

In sostanza, quando dobbiamo riportare uno schema da Arduino in maniera equivalente al solo microcontrollore, sono necessari i seguenti accorgimenti:

  • Se la fonte di alimentazione é unica (12V) ma ne servono diverse per il progetto (e.g. 12V per motore e 5V per MCU), bisogna adottare uno o più regolatori di tensione
  • Aggiungere un condensatore di bypass all’alimentazione del microcontrollore
  • Acquistare un cristallo da 16MHz e due capacita’ da 22pF e collegarle opportunamente
  • Guardare il datasheet del microcontrollore e collegare i pin relativi alla componentistica del progetto in maniera identica

Chiaramente, se avete sbagliato qualcosa nel codice, non essendoci modo di programmare da solo il vostro microcontrollore, dovrete reinserirlo nella vostra scheda di Arduino e rifare tutto il procedimento. Quindi testate al meglio il vostro programma con tutta la scheda Arduino prima di estrarre il microprocessore!