Arduino: GPIO, gestire gli Input e Output

In questo articolo introduciamo i pin GPIO che troviamo nelle board Arduino.

GPIO

Arduino, con la propria board, mette a disposizione diversi pin (piedini) che si differenziano in base alle loro funzionalità.
Gran parte di questi pin, chiamati GPIO, ovvero (General Propouse Input Output)  sono per l’appunto di uso generico e possono essere definiti di INPUT o di OUTPUT via software.

Input

I pin definiti come INPUT, possono essere usati per rilevare dei segnali, sia di natura analogica che digitale.

  • Analogica come ad esempio una tensione di una batteria o un segnale audio. Questi segnali vengono digitalizzati grazie al convertitore analogico digitale integrato.
esempio di ADC interfacciato ad un microcontrollore via i2c
esempio di ADC interfacciato ad un microcontrollore via i2c
  • Digitale come ad esempio un interruttore o un termostato (che può scattare ad una determinata temperatura), che può avere un valore booleano, ovvero: acceso (ON) oppure spento (OFF)

 

Queste informazioni raccolte dai pin, possono essere utili per fornire informazioni al microcontrollore che quindi può condizionare lo svolgimento del programma che avremo scritto.

Alcuni pin hanno delle proprietà/funzionalità specifiche molto utili. Ne citiamo alcune:

Resistore di Pull-up e Pull-down:

Il resistore di Pull-up nasce perchè i pin di input digitali dovrebbero avere degli stati ben definiti, o ON o OFF.
Un pin digitale di input non connesso, potrebbe prendere dei valori casuali dovuti a interferenze di diversa natura.
Per evitare queste situazioni di instabilità, gli input dovrebbbero essere collegati da un circuito chiuso con una resistenza tale da far decidere al microcontrollore se lo stato è ON oppure OFF.

Il microcontrolore che sta alla base di Arduino, permette di abilitare via software una debole resistenza interna che tiene il valore di un determinato pin impostato come input ad uno stato alto (ON).
La resistenza di pull-up (solitamente dell’ordine di 10KΩ) collega quindi il pin di input a VCC.

 

Resistenza di pull-up connessa ad Arduino
Resistenza di pull-up connessa ad Arduino

La resistenza di Pull-down invece non è prevista all’interno del microcontrollore, quindi non può essere abilitabile via software. La resistenza di Pull-down è facilmente implementabile, è sufficente infatti inserire un resistore tra l’input e la massa del circuito. Anche in questo caso il valore più comune per la resistenza è 10 KΩ

 

Resistenza di pull-down connessa ad Arduino
Resistenza di pull-down connessa ad Arduino

Interrupt (Interruzione)

Ad alcuni pin di input, è possibile abilitare via software la possibilità di interrompere l’esecuzione del programma in corso, per eseguire altre operazioni di priorità maggiore.

Un esempio molto frequente di interrupt nella vita quotidiana è  il telefonino. Salvo casi particolari, ogni volta che squilla il telefonino, si tende ad interrompere il lavoro che stiamo facendo per andare a rispondere. Terminata la chiamata riprendiamo il lavoro di prima.

Un’ altro esempio pratico potrebbe essere un sistema semaforico di sicurezza a protezione di una strada che deve essere chiusa in caso di frane e smottamenti. Il semaforo, in stato di normale operatività, potrebbe ciclicamente eseguire un programma che fa lampeggiare la luce gialla. Se però un giorno la frana si muove e fa scattare i sensori collegati al sistema semaforico, quest’ultimo deve interrompere immediatamente la routine di lampeggio del giallo e accendere la luce rossa, fermando cosi il traffico.

Output

I pin definiti come Output permettono al microcontrollore di interagire con l’ambiente modificandolo.
Tornando all’esempio del termostato, si potrebbe decidere di abilitare un pin di output della board Arduino, nel caso in cui si rilevi una temperatura troppo bassa. A questo pin di output potrebbe essere connesso un relè che accende la caldaia.

PWM

Un’altra funzionalità integrata nel microcontrollore del modulo Arduino è il PWM (Pulse-Width Modulation), che in inglese significa modulazione della larghezza di un impulso.

Il PWM permette di accendere e spegnere con un certo ritmo il pin di output designato.

Esempio di modulazione Pwm
Esempio di modulazione Pwm

Per capire come agisce il PWM, immaginiamo di divedere un’ unità temporale di un secondo in 1000 frammenti temporali, chiamiamo questo valore frequenza del PWM.
Ora immaginiamo che questo millesimo di secondo venga suddiviso ancora in 254 frammenti temporali, questa ulteriore suddivisione si chiama risoluzione del PWM.
La risoluzione dipende dal numero di bit supportati dal modulo PWM del microcontrollore.
Per una risoluzione di 8bit abbiamo 254 step (frammenti temporali), con 10 bit arriviamo a 1024 e con 12 bit arriviamo a 4096 frammenti temporali.
Ora immaginiamo che questi  elementi possano avere uno stato di ON o OFF.
Se teniamo tutti i 255 slot temporali attivi, la potenza di output sarà al 100%, se ne accendiamo solo i primi 128 slot, avremo un’intensità luminosa del 50%, se non abbiamo alcun slot attivo, l’intensità luminosa sarà pari a 0%.

Uno degli usi più comuni del modulo PWM è ad esempio il dimming delle luci ovvero la  possibilità di regolare la luminosità di una lampadina. E’ possibile inoltre regolare la velocità di un motore, o generare segnali analogici come un segnale audio.

I2C

E’ un sistema di comunicazione seriale composto da solo due fili (oltre alla massa comune GND e all’alimenazione dei chip.)

  • SDA, Serial data
  • SCL, serial clock

La comunicazione avviene tra due o più circuiti integrati che supportano l’i2c.
La situazione più comune prevede la comunicazione tra due gruppi di attori, un master e più slave.

  • Il master, detto “padrone”, gestisce il clock e la comunicazione, solitamente questo ruolo è ricoperto da Arduino
  • Gli slave, ovvero “gli schiavi” sono i circuiti integrati che vengono interrogati e che possono rispondere.

Esempi di dispositivi che utilizzano il protocollo I2C per comunicare sono i sensori di pressione bmp085 e bmp180 oppure i convertitori analogico digitale ADS1115

Esempio di sensore di pressione bmp180 con interfaccia I2C
Esempio di sensore di pressione bmp180 con interfaccia I2C

SPI

Un altro protocollo di comunicazione tra circuiti integrati è l’SPI. Anche in questo caso abbiamo un master e degli slave.
Nell’SPI la comunicazione può essere full-duplex, ovvero trasmissione e ricezione possono avvenire contemporaneamente.
L’SPI prevede 4 fili, oltre all’alimentazione e alla massa comune GND.

  • SCLK, Serial Clock
  • MISO, Serial Data Input, Master Input Slave Output (ingresso per il master ed uscita per lo slave)
  • MOSI, Serial Data Output, Master Output
  • CS, Chip Select

Ora che sappiamo quali funzionalità di input e output abbiamo a disposizione, possiamo sbizzarrirci con i più ingegnosi ed originali progetti per Arduino.

L’articolo è terminato, se lo avete trovato interessante, vi chiedo di condividerlo e di iscrivervi alla nostra newsletter per restare aggiornati con le novità del portale.

Riguardo Matteo Dalle Feste

Web Designer e Developer presso una nota testata giornalistica sul turismo. Appassionato di domotica, nel tempo libero, cura la realizzazione sia hardware che software di piccoli progetti domotici fai da te.

Guarda anche

Esp8266 montato su NodeMCU

Come programmare l’esp8266 con Arduino IDE

In questo tutorial vedremo come preparare un ambiente di sviluppo per l’esp8266 utilizzando il famoso …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *