![09 Numerazione capitolo](09-num-capitolo.png) ## 09 - GIRANDOLA MOTORIZZATA **USA ARDUINO PER FAR RUOTARE UNA GIRANDOLA COLORATA UTILIZZANDO UN MOTORE** > **Scopri:** transistor, forti carichi di corrente e di tensione > > **Tempo:** 45 MINUTI > **Livello:** ■ ■ ■ □ □ > **Basato sui progetti:** 1, 2, 3, 4 **Per varie ragioni controllare motori con Arduino è molto più complicato che controllare i LED. Innanzitutto, i motori richiedono molta più corrente di quanta ne possano fornire i piedini d'uscita di Arduino e i motori possono generare corrente – attraverso un processo chiamato induzione – che può danneggiare il circuito. Comunque, i motori fanno muovere le cose, rendendo i progetti molto più interessanti. Ben vengano quindi le complicazioni!** ![Ingredienti](09-ingredienti.png) >**INGREDIENTI** >* MOSFET >* Pulsante >* Resistenza da 10 Kilo Ohm >* Diodo 1N4007 >* Motore >* Connettore per batteria 9V Muovere le cose richiede molta energia; molta di più di quanto possa fornire Arduino. Alcuni motori hanno bisogno anche di una tensione più alta. All'inizio del movimento, e quando si ha un carico pesante attaccato, il motore assorbe quanta più energia possibile. Arduino può fornire solo 40 milliampere (mA) dai suoi piedini digitali, molto meno di quanto la maggior parte dei motori ha bisogno per lavorare. ![Transistor](09-transistor.png) > **I transistor** sono componenti che permettono di controllare alti carichi di corrente e di tensione tramite la bassa corrente di uscita di un piedino di Arduino. Ce ne sono molti tipi diversi, ma tutti si basano sullo stesso principio. Puoi pensare a un transistor come a un interruttore digitale. Quando fornisci tensione a uno dei piedini del transistor, chiamato **gate** (porta), si chiude il circuito tra gli altri due piedini, chiamati **source** (sorgente) e **drain** (scarico). Così puoi accendere e spegnere un motore di elevata tensione o corrente con Arduino. ![Motore DC](09-motoreDC.png) > **I motori** sono dispositivi induttivi. L'induzione è un processo per cui una corrente elettrica variabile che scorre in un filo è in grado di generare un campo magnetico variabile. Quando si dà elettricità a un motore, una bobina di filo di rame avvolta strettamente all'interno del motore crea un campo magnetico. Questo campo fa girare l'asse, la parte che sporge dal motore. ### COSTRUISCI IL CIRCUITO È vero anche il contrario: un motore può generare elettricità quando l'albero motore viene fatto ruotare. Collega un LED ai due fili del motore, quindi fai girare l'albero con la mano. Se non succede niente, giralo dall'altra parte. Il LED si dovrebbe accendere. Hai appena realizzato un generatore con il tuo motore. Quando smetti di fornire energia elettrica al motore, questo continua a girare per inerzia. Girando, il motore genera una tensione nella direzione opposta alla corrente che hai fornito. Hai visto questo risultato quando il motore ha acceso il LED. Questa tensione inversa, a volte chiamata **controtensione**, può danneggiare il transistor. Per questa ragione, dovresti mettere un diodo in parallelo al motore, così la controtensione passa attraverso il diodo, che permette all'elettricità di scorrere in una direzione, proteggendo il resto del circuito. ![Schema del circuito e montaggio](09-immagine_circuito_girandola.png) 1. Collega alimentazione e massa alla breadboard attraverso Arduino. 2. Aggiungi alla scheda un pulsante, connettendo un lato all'alimentazione e l'altro lato al piedino digitale 2 di Arduino. Aggiungi una resistenza pull-down da 10 kilo ohm a massa sul piedino di uscita dell'interruttore. 3. Quando usi circuiti con tensioni differenti, devi collegare tra loro le masse per creare una massa comune. Collega il connettore per batteria 9V alla breadboard. Collega la massa della batteria alla massa di Arduino sulla breadboard con un ponticello come mostrato in Fig. 1. Poi attacca l'estremità libera del motore all'alimentazione 9V. 4. Metti il transistor sulla breadboard. Verifica che la linguetta di metallo sia dalla parte opposta a te. Collega il piedino digitale 9 al piedino di sinistra del transistor. Questo piedino è chiamato **gate** (porta). Una tensione sul gate crea un collegamento tra gli altri due piedini. Collega un'estremità del motore al piedino centrale del transistor. Questo piedino è chiamato **drain** (scarico). Quando Arduino attiva il transistor, fornendo tensione al gate, questo piedino si collega al terzo piedino, chiamato **source** (sorgente). Collega source a massa. 5. Poi, collega l'alimentatore del motore al motore e alla breadboard. L'ultimo componente da aggiungere è il diodo. Il diodo è un componente polarizzato: va inserito nel circuito solo in una specifica direzione. Nota che il diodo ha una striscia su una estremità: è il polo negativo, o catodo, del diodo. L'altro è il polo positivo o anodo. Collega l'anodo del diodo a massa del motore e il catodo del diodo all'alimentazione del motore. Guarda la Fig. 1. Sembra al rovescio, e infatti lo è. Il diodo ti aiuta a prevenire ogni controtensione generata dal motore che rientra nel circuito. Ricorda, la controtensione viene generata nella direzione opposta alla tensione che fornisci. ![Schema elettrico](09-schema_elettrico_girandola.png) ![Lente](lente.png) > *Anche i LED sono diodi, nel caso ti stupissi del fatto che anche le loro estremità si chiamano anodi e catodi. Ci sono molti tipi di diodi, ma hanno tutti in comune un elemento: permettono alla corrente di fluire dall'anodo al catodo, ma non il contrario.* ### IL CODICE #### Dai un nome alle costanti e alle variabili Il codice è molto simile a quello che hai usato la prima volta per accendere un LED. Prima di tutto, imposta le costanti per il pulsante e i piedini del motore e una variabile chiamata `switchState` per memorizzare il valore dello switch (pulsante). ```cpp const int switchPin = 2; const int motorPin = 9; int switchState = 0; ``` #### Dichiara la direzione dei piedini Nel `setup()`, dichiara il `pinMode()` dei piedini del motore (**OUTPUT**) e dell'interruttore (**INPUT**). ```cpp void setup() { pinMode(motorPin, OUTPUT); pinMode(switchPin, INPUT); } ``` #### Leggi l'ingresso, attiva l'uscita se viene premuto Il `loop()` è semplice. Controlla lo stato di `switchPin` con `digitalRead()`. Se è premuto l'interruttore, imposta il `motorPin` a **HIGH**. Se non è premuto, imposta il piedino a **LOW**. Quando è **HIGH**, il transistor si attiva, completando il circuito. Quando è **LOW**, il motore è spento. ```cpp void loop() { switchState = digitalRead(switchPin); if (switchState == HIGH) { digitalWrite(motorPin, HIGH); } else { digitalWrite(motorPin, LOW); } } ``` ![Lente](lente.png) > *I motori hanno una tensione di esercizio ottimale. Lavorano anche con meno del 50% della tensione nominale e fino al 50% in più rispetto a quel valore. Se si varia la tensione, è possibile modificare la velocità di rotazione del motore. Non variarla troppo, però, o si brucia il motore.* > > *I motori richiedono una particolare attenzione quando sono controllati da un microcontrollore; questo, infatti, non può fornire abbastanza corrente e/o tensione per alimentare un motore. Inoltre è bene utilizzare diodi per evitare di danneggiare il circuito.* ![Cervello](cervello.png) > *I transistor sono dispositivi a stato solido, non hanno parti in movimento. Per questo motivo, è possibile accenderli e spegnerli molto rapidamente. Prova a collegare un potenziometro a un ingresso analogico e usalo per modulare la larghezza di impulso (PWM) del piedino che controlla il transistor. Cosa pensi che succeda alla velocità del motore se si varia la tensione? Utilizzando vari motivi sul disco, si possono ottenere diversi effetti visivi?* ### USALA Assembla il mozzo per il CD come mostrato al punto 1 e attaccalo al motore come indicato al punto 2. Attacca al CD il cartoncino ritagliato come mostrato al punto 3. Incastra il CD al mozzo e assicuralo con un po' di colla. Fai una prova prima di procedere. Collega una pila da 9V al connettore per batteria. Alimenta Arduino con una USB. Quando premi l'interruttore sulla breadboard, il motore gira molto rapidamente. ![Forbici e colla](forbici-colla.png) > *Con il motore che gira così velocemente, puoi fare una girandola piuttosto grande. Fai attenzione a che non voli via e che non colpisca qualcuno negli occhi. Prova diversi motivi all'esterno per creare diversi effetti visivi. > Trovi il modello da ritagliare nel capitolo PAPERCRAFT, in fondo al testo.* ![Istruzioni di assemblaggio girandola](09-immagine_assemblaggio_girandola.png) *1. Incastra la parte C nella parte B, e quindi premi delicatamente la parte D su B e C.* *2. Premi delicatamente l'albero motore nel foro nella parte posteriore della parte B.* *3. Inserisci il disco di carta sul CD e fissalo con le linguette sul retro.* *4. Fissa il CD alla croce formata dalle parti B e D. Utilizza un po' di colla per evitare che esca il CD.* ### CODICE COMPLETO ```cpp /* Arduino Starter Kit example Project 9 - Motorized Pinwheel This sketch is written to accompany Project 9 in the Arduino Starter Kit Parts required: - 10 kilohm resistor - pushbutton - motor - 9V battery - IRF520 MOSFET - 1N4007 diode created 13 Sep 2012 by Scott Fitzgerald https://store.arduino.cc/genuino-starter-kit This example code is part of the public domain. */ // named constants for the switch and motor pins const int switchPin = 2; // the number of the switch pin const int motorPin = 9; // the number of the motor pin int switchState = 0; // variable for reading the switch's status void setup() { // initialize the motor pin as an output: pinMode(motorPin, OUTPUT); // initialize the switch pin as an input: pinMode(switchPin, INPUT); } void loop() { // read the state of the switch value: switchState = digitalRead(switchPin); // check if the switch is pressed. if (switchState == HIGH) { // turn motor on: digitalWrite(motorPin, HIGH); } else { // turn motor off: digitalWrite(motorPin, LOW); } } ```