Inversione di polarità tramite pulsante (Tinkercad)
Obiettivo: Invertire la polarità di un motore tramite pulsante (e relè DPDT)
Componenti elettronici:
Arduino
Relè DPDT
Pulsante
Motore DC 5V
Teoria: Uno dei problemi frequenti che si incontra quando si prova a pilotare un motore elettrico è quello di invertigli il senso di marcia. In commercio esistono molte tipologie di schede che permettono facilmente di controllare il senso di rotazione e la velocità di un motore a corrente continua. La maggior parte di esse monta uno o più relè DPDT, il cui funzionamento è illustrato in figura:
Una volta eccitata la bobina, il relè apre il contatto NC tra i pin 6-7 e 3-2 e apre quelli NA 5-7 e 4-2. I contatti 7 e 2 sono i COMUNI.
Nell’esempio trattato in questo articolo, un pulsante controlla l’impulso dato alla bobina e, una volta cliccato, la eccita commutando il relè.
Collegamento Circuitale:
Codice:
A seguire viene riportato il codice utilizzato:
Osservazioni:
Nel codice il pulsante è stato collegato al pin2 dichiarato come INPUT_PULLUP. Questa istruzione attiva sul pin la resistenza interna necessaria al funzionamento del pulsante.
Quello che succede è che, una volta premuto il pulsante, i collegamenti in viola al motore cambiano la polarità: il collegamento disposto più in alto passa da negativo a positivo, mentre quello in basso passa da positivo a negativo.
Campanella Scolastica Azionata Mediante Relè e Pulsante
Obiettivo: Comando di una campanella scolastica mediante un relè ed un pulsante.
Componenti elettronici:
Arduino
Campana Scolastica (4.5V e 150mA)
Relè
Pulsante
Resistenza per pulsante (1kOhm)
Teoria: Uno dei problemi principali di Arduino è legato alla impossibilità apparente di comandare dispositivi che richiedono tensione e/o correnti elevate. Infatti, è importante considerare che Arduino, attraverso le sue istruzioni di digitalWrite può generare su uno specifico pin in uscita una tensione massima di 5 Volt con una corrente pari a 70 milliAmpere. Nel caso specifico della campana scolastica, la corrente richiesta per il corretto funzionamento del dispositivo è pari a 125mA. Pertanto la possibilità di azionare mediante Arduino la campanella è vincolata dall’utilizzo di un componente elettromeccanico aggiuntivo denominato relè (in inglese relay). Il relè infatti può essere utilizzato come un interruttore (ad alta tensione) comandato elettronicamente (mediante digitalWrite). Da un punto di vista fisico, il relè è costituto da un elettromagnete (costituito da una bobina di filo conduttore elettrico, tipicamente rame, avvolto intorno ad un nucleo di materiale ferromagnetico). Al passaggio di corrente elettrica nella bobina, l’elettromagnete modificherà la posizione di un contatto mobile aprendo o chiudendo il circuito ad esso collegato. Il contatto aperto quando la bobina non è alimentata prende il nome di normalmente aperto (NO); mentre, l’altro contatto, quello chiuso prende il nome di normalmente chiuso (NC).
Da un punto di vista elettronico, utilizzare un relè per comandare la Campanella scolastica mediante Arduino è una procedura particolarmente semplice. Il primo passo è quello di collegare, mediante il contatto normalmente aperto del relè, la campanella ad una sorgente di alimentazione esterna (come ad esempio il pin a 5Volt di Arduino il quale permette di erogare una corrente massima di circa 500mA). In seguito la bobina del relè viene collegata al pin digitale di Arduino impiegato per il controllo della campanella. Questo ci permette di modificare la posizione del contatto mobile del relè attraverso l’istruzione di digitalWrite con la quale la bobina può essere o non essere eccitata. In questo modo è possibile comandare la campana mediante una semplice istruzione.
Nel caso specifico, l’impiego di un pulsante permette di controllare l’attivazione della bobina e quindi il controllo della campanella. A seguire viene riportato lo schema elettrico ed il codice utilizzato per il comando della lampada mediante relè.
Collegamento Circuitale:
Codice:
A seguire viene riportato il codice utilizzato:
Personalizzazioni:
E’ possibile introdurre un RTC per programmare l’orario della campanella.
Comando di una Lampada Mediante Relè – (Tinkercad)
Obiettivo: Comando di una Lampada mediante un relè. Simulazione bastata sull’utilizzo del software Tinkercad.
Componenti elettronici:
Non servono componenti elettronici hardware, basta il tuo PC ed una connessione ad internet.
Teoria: Uno dei problemi principali di Arduino è legato alla impossibilità apparente di comandare dispositivi che richiedono tensione e/o correnti elevate. Infatti, è importante considerare che Arduino, attraverso le sue istruzioni di digitalWrite può generare su uno specifico pin in uscita una tensione massima di 5 Volt con una corrente pari a 70 milliAmpere. Molti utilizzatori si chiedono pertanto come sia possibile comandare dispositivi più complessi rispetto a quelli presenti nei tradizionali kit base Arduino, come lampade, ventole, o stripline led. La risposta a questa domanda è legata ad un semplice dispositivo elettromeccanico denominato relè (in inglese relay): il quale può essere utilizzato come un interruttore (ad alta tensione) comandato elettronicamente. Da un punto di vista fisico, il relè è costituto da un elettromagnete (costituito da una bobina di filo conduttore elettrico, tipicamente rame, avvolto intorno ad un nucleo di materiale ferromagnetico). Al passaggio di corrente elettrica nella bobina, l’elettromagnete modificherà la posizione di un contatto mobile aprendo o chiudendo il circuito ad esso collegato. Il contatto aperto quando la bobina non è alimentata prende il nome di normalmente aperto (NO); mentre, l’altro contatto, quello chiuso prende il nome di normalmente chiuso (NC).
Da un punto di vista elettronico, utilizzare un relè per comandare una lampada a 230volts mediante Arduino è una procedura particolarmente semplice. Il primo passo è quello di collegare, mediante il contatto normalmente aperto del relè, la lampada ad una sorgente di alimentazione esterna (come ad esempio la rete elettrica di casa). In seguito la bobina del relè viene collegata al pin digitale di Arduino impiegato per il controllo della lampada. Questo ci permette di modificare la posizione del contatto mobile del relè attraverso l’istruzione di digitalWrite con la quale la bobina può essere o non essere eccitata. In questo modo è possibile comandare una lampada a 220Volts mediante una semplice tensione a 5Volts.
Nel caso specifico, l’impiego di un pulsante permette di controllare l’attivazione della bobina e quindi il controllo della lampada. L’applicazione proposta è stata simulata mediante l’utilizzo del software di simulazione tinkercard. Tensioni elevate possono essere pericolose per la salute personale, pertanto l’impiego almeno in una fase iniziale di un simulatore rende questa operazione sicuramente più sicura. A seguire viene riportato lo schema elettrico ed il codice utilizzato per il comando della lampada mediante relè.
Collegamento Circuitale:
Codice:
A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.
Personalizzazioni:
E’ possibile modificare il circuito utilizzando il pulsante come interruttore: la lampada deve rimanere accesa fino a quando il pulsante non viene premuto una seconda volta (Attenzione possibili problematiche di rimbalzo).
Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead
Obiettivo: Imparare ad utilizzare le principali funzioni di Arduino
Teoria:
Le principali funzioni utilizzate da Arduino per comunicare con il mondo esterno sono quattro e si dividono in base alla tipologia di azione:
Lettura: utilizzate per acquisire i dati dai differenti sensori (luminosità, temperatura, umidità, etc)
Scrittura: utilizzate per comandare i differenti attuatori (motori, buzzer, display, etc)
ed in base alla tipologia di segnale trattato:
Digitale: utilizzate per trattare segnali digitali che possono assumere solamente valori logici (i.e., LOW e HIGH)
Analogico: utilizzate per trattare segnali analogici con valori compresi tra 0 e 5V.
Nello specifico queste quattro funzioni sono così definite:
Codice:
digitalWrite: Funzione utilizzata per comandare attuatori mediante una logica LOW/HIGH come ad esempio motori, led o buzzer. Questa funzione prevede l’impiego di due parametri di input: il PIN (0-13) ed il VALORE (LOW/HIGH)
digitalWrite(pin, valore);
analogWrite: Funzione utilizzata per comandare attuatori mediante una logica analogica (valori compresi tra 0V e 5V) come ad esempio motori o led. Questa funzione prevede l’impiego di due parametri di input: il PIN (0-13) ed il VALORE (0-255). Nel caso specifico il valore 0 corrisponde a 0V mentre 255 a 5V. Per tutti gli altri VALORI si può attuare la proporzione lineare. (Ad esempio volendo generare un riferimento di tensione pari a 3Volt il VALORE di input può essere così calcolato: (3/5)*255. E’ importante considerare che i valori di tensione non sono “realmente” analogici ma generati attraverso la tecnica PWM. Inoltre, l’istruzione analogWrite può essere utilizzata solamente su alcuni pin digitali di output: i pin PWM (3,5,6,9,10,11).
analogWrite(pin, valore);
digitalRead: Funzione utilizzata per leggere dati da sensori basati su una logica LOW/HIGH come ad esempio i pulsanti. Questa funzione prevede l’impiego di un parametro di input: il PIN (0-13) ed un parametro di output: il VALORE (LOW/HIGH) che viene restituito dalla funzione.
valore= digitalRead(pin);
analogRead: Funzione utilizzata per leggere dati da sensori di tipo analogico (valori compresi tra 0V e 5V) come ad esempio fotoresistenze, sensori di temperatura, umidità etc. Questa funzione prevede l’impiego di un parametro di input: il PIN (A0-A5) ed un parametro di output: il VALORE (0-1023). Nel caso specifico il valore 0 corrisponde a 0V mentre 1023 a 5V. Per tutti gli altri VALORI si può attuare la proporzione lineare. (Ad esempio se viene letto il VALORE 512, la tensione di riferimento può essere così calcolata: (512/1023)*5.
Teoria: Da un punto di vista pratico mantenere una luce accesa tenendo premuto il pulsante (vedi lezione pre-requisiti) non è proprio il massimo della vita. Se da un punto di vista elettronico il componente tipicamente utilizzato per gestire lo stato ON/OFF di una lampada è l’interruttore, attraverso una corretta gestione del software di controllo è possibile “trasformare un pulsante in interruttore”. Per questo motivo, agendo direttamente sul software e lasciando invariato l’hardware proposto nell’esperienza LED e Pulsante, è possibile trasformare il sistema in questione in un controllo ON/OFF dove il pulsante è utilizzato come interruttore.
Anche se in questa esperienza il pulsante viene utilizzato come interruttore è importante ribadire che l’impiego di resistenze di Pull-up o Pull-down sono necessarie per un corretto funzionamento del circuito.Maggiori informazioni sulle resistenze di Pull-up o Pull-down possono essere trovate qui.
Collegamento Circuitale:
Codice: Il codice utilizzato per trasformare il pulsante in interruttore si basa sull’impiego di due differenti variabili globali (create fuori dalle funzioni loop e setup, pertanto visibili in tutto il codice). Queste variabili sono:
valButtonOld: Memorizza la lettura precedente effettuata sul pulsante. Attraverso questa variabile è possibile evitare letture multiple. E’ importante considerare che essendo il clock di Arduino più elevato del tempo di reazione umano, premendo il pulsante anche per un istante brevissimo il controllore eseguirà più letture con stato del pulsante HIGH eseguendo in seguito il codice corrispondente. Per questo motivo si preferisce leggere lo stato di transizione da basso ad alto piuttosto che lo stato alto di un pulsante.
ledState: Memorizza lo stato del led (se acceso o spento). Premuto il pulsante, nel caso in cui il led sia acceso questo viene spento viceversa nel caso in cui il led sia spento questo viene acceso. Per questo motivo è indispensabile utilizzare una variabile per controllare lo stato del pulsante.
Personalizzazioni:
L’impiego della variabile valButtonOld, utilizzata per evitare letture multiple, può essere evitato aggiungendo un delay dopo la lettura del pulsante. Si provi ad implementare il circuito ed il relativo codice.
LED e Pulsante
Obiettivo: Accensione di un LED mediante un pulsante.
Componenti elettronici:
Arduino UNO
Breadboard
1 Led
1 Pulsante
1 Resistenza (100 Ohm)
1 Resistenza (1kOhm)
Teoria: Il pulsante è un dispositivo elettronico a due stati (ON, OFF) con una sola posizione monostabile. Nel caso specifico i pulsanti permettono di aprire o chiudere un circuito e pertanto collegare a GND (0V) o a VCC (5V) una specifica uscita. A seguire, viene riportato lo schema circuitale di un pulsante tipicamente impiegato in applicazioni realizzate mediante Arduino.
L’utilizzo di una resistenza è indispensabile al fine di collegare correttamente il pulsante ad Arduino evitando cortocircuiti. A seconda del collegamento realizzato, la resistenza prende il nome di:
Resistenza di Pull Up: la resistenza viene collegata direttamente all’alimentazione.
Resistenza di Pull Down: la resistenza viene collegata a massa.
Il comportamento del circuito e la tensione letta dal microcontrollore dipende dalla tipologia di collegamento circuitale utilizzato. In particolare:
Resistenza di Pull Up:
se il pulsante viene premuto la tensione in ingresso ad Arduino è pari a 0.
se il pulsante non viene premuto la tensione in ingresso ad Arduino è pari a Vcc (5V)
Resistenza di Pull Down:
se il pulsante viene premuto la tensione in ingresso ad Arduino è pari a Vcc (5V).
se il pulsante non viene premuto la tensione in ingresso ad Arduino è pari a 0.
Attraverso l’utilizzo del comando digitalRead è possibile leggere la tensione su uno specifico pin digitale (0-13) di Arduino. La funzione digitalRead restituisce un valore (i.e., LOW o HIGH) a seconda della tensione letta dal microcontrollore. Tale valore può essere facilmente utilizzato per controllare un led mediante l’istruzione condizionale IF.
A seguire viene riportato lo schema elettrico ed il codice utilizzato per l’accensione di un pulsante sfruttando una resistenza di Pull Down.
Collegamento Circuitale:
Codice:
A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.
Personalizzazioni:
E’ possibile modificare il circuito aggiungendo pulsanti e led. E’ inoltre possibile modificare il codice al fine di realizzare una lampada che rimanga acceso fino a quando il pulsante non venga premuto una seconda volta (Attenzione possibili problematiche di rimbalzo).
Caratteristiche Hardware
Obiettivo: Conoscere le principali caratteristiche Hardware di Arduino
Teoria:
Arduino UNO è una piattaforma HW dotata di Microcontrollore ATMega328P
MCU Microcontrollore ATmega328P. È un microcontrollore a 8 bit, in formato PDIP a 28 pin. L’MCU è dotata di 3 differenti tipologie di memoria: FLASH 32 KB (che includono anche il bootloader e la memoria programma), SRAM 2 KB (usata per memorizzare le variabili e le costanti del software) ed EEPROM 1KB (utilizzata per memorizzare le configurazioni)
Un totale di 14 pin di input/output digitali programmabili, di cui 6 utilizzabili per fornire in uscita segnali modulati PWM. I pin PWM sono identificabili grazie al carattere tilde presente vicino al pin (3,5,6,9,10,11).
Un totale di 6 pin di input analogici
Oscillatore a frequenza 16 MHz
Jack per alimentazione esterna (5b: Regolatore di tensione)
Connettore ICSP (In Circuit Serial Programmer) per effettuare la programmazione diretta del microcontrollore.
Pulsante di Reset
Connettore USB utilizzabile sia per alimentare la scheda che per programmare il microcontrollore
Dispositivo per la comunicazione 16U2: si occupa della conversione dei dati provenienti dall’USB in dati seriali (e viceversa) adatti per il microcontrollore.
Modalità di alimentazione:
Alimentazione da pc con cavo usb (corrente max500mA): Se oltre al cavo usb alimentiamo Arduino anche tramite un connettore o dal pin Vin, verrà bypassata automaticamente l’alimentazione da usb e verrà utilizzata quella esterna.
Connettore di alimentazione(corrente max800mA): La tensione nel rangetra 7 e 12 volte viene stabilizzata dall’integrato NCP1117
Collegamento diretto al PIN Vin: Anche in questo caso la tensione è stabilizzata. Non è presente però il diodo di protezione non invertire la polarità.
Collegamento diretto al PIN 5V: Tensione non stabilizzata. PERICOLO!!!