Come costruire la propria Robot Car con Arduino

La community Ardulab si prepara all’Arduino Day 2017 che si terrà quest’anno il 1 Aprile 2017 presso il TalentLab di Padova. Puoi trovare tutti i dettagli qui per partecipare!
Quest’anno, oltre ai mitici Talk mattutini, esposizioni e workshop pomeridiani, abbiamo lanciato la prima edizione del “Robot Car Contest”, una gara di macchine radiocomandate con Arduino.
Con queste premesse, ci è sembrato fondamentale dare la possibilità a chiunque di potersi costruire la propria Robot Car in vista dell’evento.
Nel caso vogliate venire ai nostri due incontri gratuiti per montare assieme la Robot Car, tutte le informazioni sono qui.

Partiamo con il nostro progetto!
Materiale necessario:

Tipicamente le Robot Car che si trovano in rete sono molto simili tra loro. Nel video qui sotto ne prendiamo in esame una con due motori e un pattino.

 

Dopo aver costruito la Robot Car, passiamo al circuito:

Circuito Robot Car con Bluetooth

I due transistor serviranno per pilotare i motori DC tramite Arduino. I transistor permettono di usare le piccoli correnti di Arduino per pilotare correnti molto grandi. Immaginiamo infatti il transistor come un rubinetto. Noi con la nostra mano possiamo alzare sempre di più la manopola e l’acqua comincia a scorrere sempre di più.

E’ molto importante collegare ai transistor i pin di Arduino con la tilde. Questi possono generare segnali analogici tramite la tecnica del PWM. Per sapere cosa significa, ecco un video!
Per sapere come funziona la breadboard nel dettaglio, clicca qui.

Nota 1: Se i motori girano in versi opposti, basterà prendere un singolo motore e invertire la polarità, cioè scambiare i collegamenti del cavo nero e rosso.

Nota 2: il connettore del vano batterie va collegato direttamente all’Arduino. Questo permette al pin Vin di Arduino di avere la corrente necessaria per far funzionare i motori della Robot Car!

Un esempio di connettore per Arduino

Colleghiamo l’Arduino con il cavo USB al portatile e avviamo l’Arduino IDE.
Copiamo e incolliamo il seguente sketch:

Controllare sempre che la Porta della scheda sia selezionata correttamente su Strumenti -> Porta. Dopodichè premere il pulsante “Carica” per caricare lo sketch in Arduino.

E’ quasi tutto pronto, non vi resta che prendere il vostro Smartphone Android e aprire ArduinoRC.
Importante! Attivate il Bluetooth prima di avviare l’applicazione.
La prima cosa da fare è premere su “Proceed” e selezionare il vostro modulo Bluetooth HC-05. Il pin di default è in genere 1234.

Schermata di selezione Modulo Bluetooth

Se tutto è andato a buon fine, dovremmo trovarci nella seguente schermata. Questi sono le possibili interfacce grafiche per poter inviare dei comandi al nostro Arduino tramite il Bluetooth. prendiamo ad esempio il Controller Mode.

Interfacce grafiche di ArduinoRC

E’ possibile assegnare a ciascuno tasto, un carattere da inviare. Nel nostro programma abbiamo configurato i seguenti comandi:

  • Carattere “f” : avanti
  • Carattere “l” : sinistra
  • Carattere “r” : destra
  • In tutti gli altri, fermo.

Dunque, andare nelle impostazioni e premere su “Set Commands”.
Assegnare alle varie frecce, le direzioni con i caratteri, quindi ad esempio, la freccia su avrà il carattere “f”, il tasto destro il carattere “r” e così via…

Impostare i caratteri da inviare

Non ci resta che provare la nostra Robot Car.
Scollegate il vostro arduino dal computer e collegate il vano batterie.
Siete pronti per la gara!

Come pilotare un motore passo-passo con Arduino

I motori sono senza dubbio delle macchine interessanti, perché permettono di muovere oggetti inizialmente fermi e non più utili di un ferma porta.
Proviamo a pensare un’automobile telecomandata, al cancello automatico di casa, alle nostre bellissime stampanti 3D, ai piccoli robot e così via.
E’ davvero un mondo affascinante ma… Davvero molto ampio!

Nei nostri corsi base, trattiamo per lo più i motori Servo, perchè questi si prestano ad essere molto versatili come utilizzo hobbistico.
Arduino IDE offre già una libreria per gestirli ed é comodo pilotarli. Il loro limite sono purtroppo la velocità non regolabile, il posizionamento troppo impreciso e una coppia troppo bassa per poter sollevare ad esempio una gamba d’acciaio.

Per risolvere queste rogne, una valida alternativa sono i motori passo-passo.

I motori passo-passo (o Stepper Motor) sono i motori più usati nell’automazione industriale. Sono ottimi per il posizionamento e per decidere una velocità non troppo elevata.
C’è molta confusione in merito alle varie tipologie disponibili e in questa guida vorrei riassumerli in maniera semplice ma esaustiva.

motore_passopasso

Dentro il nostro motore passo-passo troviamo 2 bobine (polo positivo e negativo), cioé delle spire di metallo che assorbono corrente come delle grosse resistenze che generano un campo elettromagnetico; queste formano il cosiddetto statore (la parte ferma) e l’albero al centro é il rotore (la parte che ruota).
In base a come vengono alimentate le bobine, il motore effettua una rotazione di tot gradi definiti, chiamata passo; da qui il nome del motore.
E’ facile comprendere che, un passo forma tot gradi e per effettuare un giro completo avrò bisogno di un certo numero di passi!
Ma quanti sono questi passi? E quant’è un passo in gradi? Dipende dal motore che avete acquistato! 😀

A loro volta, i motori passo-passo si dividono in due famiglie: unipolari e bipolari.

Gli unipolari hanno una massa comune e un numero di cavi dispari. Semplicemente basterà dare corrente in maniera alternata, anche per quanto riguarda il verso di rotazione.

I bipolari richiedono che ogni bobina sia alimentata per conto proprio, hanno bisogno di integrati in grado di invertire la corrente per il verso di rotazione (chiamati H-Bridge).

Entrambi i tipi hanno vantaggi e svantaggi. I più utilizzati sono i bipolari, soprattutto per le stampanti 3D.

Esistono motori passo-passo con un numero di cavi superiori a 5, ma la logica é sempre la stessa e la differenza é il poter percorrere passi molto più piccoli.
Per riassumere:

  • I motori passo-passo compiono passi, i quali determinato una rotazione in gradi
  • Sono ottimi per posizionare e anche per la velocità se non andiamo troppo veloci
  • Per compiere un passo bisogna alimentare in maniera alternata e ordinata le bobine
  • Si dividono in unipolari e bipolari
  • Unipolari hanno massa comune e sono facili da pilotare, costano tanto e richiedono quindi una programmazione manuale
  • Bipolari hanno le bobine separate e bisogna alimentarle una alla volta. Per invertire il verso di rotazione serve un integrato chiamato H-Bridge
  • In genere le bobine sono 2

I passi del motore vengono suddivisi in Microstepping (passo molto piccolo), Half-Step (mezzo passo), Full Step in una fase (passo normale), Full Step in due fasi (quindi un passo normale più veloce). Per saperne di più, in questo link trovate delle spiegazioni più esaustive.

La libreria Stepper di Arduino, ci aiuta a comandare all’incirca tutti motori passo-passo. Nei kit si trova spesso questo tipo di motore:

Kit del motore passo-passo per Arduino

Kit del motore passo-passo per Arduino

Si tratta del motore bipolare 28BYJ-48. Montiamo subito il nostro circuito.

Circuito Motore passo-passo 28BYJ-48

Circuito Motore passo-passo
28BYJ-48

Il codice lo prendiamo dal nostro Arduino IDE su File->Esempi->Stepper->Stepper_oneStepAtTime.
Nota: i pin sono configurati esattamente come in figura.

Invito a leggere la documentazione riguardo la libreria Stepper ufficiale.
Nel caso di un Motore Unipolare la faccenda si complica un po’. Serve obbligatoriamente un integrato chiamato ULN2003 (o ULN2004) e il circuito é questo:

Motore passo-passo Unipolare generico

Motore passo-passo Unipolare generico

Ho preferito utilizzare un’alimentazione esterna per non complicare troppo il circuito.
La buona notizia é che il codice non cambia rispetto a prima! Fantastico! 🙂
Per oggi é tutto, ci sentiamo alla prossima!

S4A – Incontro di Scratch For Arduino

Il 23 Settembre 2016 ci siamo trovati con la Community Ardulab per imparare e sperimentare alcuni semplici progetti con Arduino, ma in maniera differente dal solito.
Infatti non abbiamo usato il solito Arduino IDE, bensì il famoso programma visuale Scratch (S4A).
Scratch é un linguaggio di programmazione per la didattica che si basa sulla teoria dell’apprendimento chiamata costruzionismo.

In poche parole, si tratta di un linguaggio completamente logico e rigido nella sintassi perché puramente grafico con Drag & Drop (prendi e trascina col mouse), così da poter accantonare quell’aspetto orribile e snervante del compilatore, dove se sbagli un punto e virgola o una parentesi, il nostro programma non potrebbe mai funzionare.

Scratch 4 Arduino immagine

Primo esempio di S4A

 

S4A (Scratch For Arduino) é una versione alternativa di Scratch, dedicata ad Arduino, ma mantiene esattamente la stessa filosofia semplice, divertente e veloce!
S4A esiste per tutti i sistemi operativi é facile da installare e provare fin da subito.

La pagina ufficiale é la seguente : http://s4a.cat/
Il link per la presentazione vista all’incontro: https://goo.gl/IHK3nM

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!