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

TeoriaUno 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:

Schema elettrico di un relè DPDT

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:

  1. 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.
  2. 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)

TeoriaUno 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).

Esempio di funzionamento di un relèa

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.

Datasheet del Relè LU-5-R presente in Tinkecad

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.
  • http://tinkercad.com/

TeoriaUno 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).

Esempio di funzionamento di un relèa

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.

Datasheet del Relè LU-5-R presente in Tinkecad

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:

Schema Circuitale

Codice:

A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.

Flowchart



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



Arduino Porte (Input, Output, Digitali, Analogici)

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.

valore = analogRead(pin);



Quiz


.wq-quiz-1080 { --wq-question-width: 100%; --wq-question-color: #009cff; --wq-question-height: auto; --wq-bar-color: #00c479; --wq-font-color: #444; --wq-background-color: #f2f2f2; }

A che valore di tensione corrisponde l'intero 818 letto attraverso la funzione analogRead

Correct! Wrong!

(818/1023)*4 = 1V

A che valore di tensione corrisponde l'intero 204 letto attraverso la funzione analogRead

Correct! Wrong!

(204/1023)*5 = 1V

A che valore di tensione corrisponde l'intero 511 letto attraverso la funzione analogRead

Correct! Wrong!

(511/1023)*5 = 2.5V

A che valore di tensione corrisponde l'intero 255 generato utilizzando la funzione analogWrite

Correct! Wrong!

(255/255)*5 = 5V

A che valore di tensione corrisponde l'intero 100 generato utilizzando la funzione analogWrite

Correct! Wrong!

(100/255)*5 = 1.96V

La funzione Valore = digitalWrite(11) è corretta?

Correct! Wrong!

La funzione digitalWrite non ha tipi di ritorno

La funzione digitalWrite(11,HIGH) è corretta?

Correct! Wrong!

La funzione analogWrite(11,1023) è corretta?

Correct! Wrong!

Il valore massimo di tensione per la funzione digitalWrite è pari a 255







Pulsante come Interruttore

Obiettivo: Utilizzo di un pulsante come interruttore per l’accensione di un led (stato ON/OFF)



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Led
  • 1 Pulsante
  • 1 Resistenza (100 Ohm)
  • 1 Resistenza (1kOhm)

Pre-Requisiti


LED e Pulsante


TeoriaDa 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.

Datasheet Pulsante

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:

Collegamento Circuitale

CodiceIl 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.
Esempio di lettura multipla
  • 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)

TeoriaIl 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.

Datasheet Pulsante

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.
Resistenze di Pull Up e di Pull Down

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:

Collegamento Circuitale

Codice:

A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.

Flowchart



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

Principali Componenti Hardware

Teoria:

Arduino UNO è una piattaforma HW dotata di Microcontrollore ATMega328P

  1. 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)
  2. 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).
  3. Un totale di 6 pin di input analogici 
  4. Oscillatore a frequenza 16 MHz
  5. Jack per alimentazione esterna (5b: Regolatore di tensione)
  6. Connettore ICSP (In Circuit Serial Programmer) per effettuare la programmazione diretta del microcontrollore. 
  7. Pulsante di Reset
  8. Connettore USB utilizzabile sia per alimentare la scheda che per programmare il microcontrollore 
  9. 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!!!