Skip to Content

Dispositivi di input per Arduino e altri MCU – Una panoramica completa

Dispositivi di input per Arduino e altri MCU – Una panoramica completa

I dispositivi di input permettono ad Arduino e ad altri microprocessori di interagire con il mondo esterno. Senza di essi, un Arduino eseguirebbe semplicemente il suo programma senza alcun modo di rispondere all’ambiente esterno o ai comandi dell’utente.

Qui forniamo una panoramica di tutti i diversi tipi di dispositivi di input che possono essere collegati a un Arduino o a microprocessori simili. Discutiamo i loro principi di funzionamento e cosa tenere in considerazione.

I termini Input e Sensori si sovrappongono in parte. Qui useremo Input per riferirci agli ingressi derivanti dall’interazione umana o meccanica con il sistema. Per esempio, tramite pulsanti, interruttori, display touch o potenziometri. I sensori, invece, sono usati per rilevare o misurare parametri ambientali, come temperatura, luce, distanza o campi magnetici.

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Dispositivi di input

Di seguito esaminiamo tutti i diversi tipi di input, generati dall’interazione umana, che un Arduino o microprocessore simile può ricevere. Più frequentemente si tratta di pulsanti e interruttori, ma ce ne sono anche altri.

Pulsanti

I pulsanti esistono in tutte le forme, dimensioni e colori. Qui sotto c’è l’immagine di un tipico pulsante a pressione che chiude il collegamento elettrico tra i suoi due poli quando premuto e rimane aperto altrimenti.

Push button input device

Interruttore a pulsante momentaneo, 1A 250VAC SPST Mini Pushbutton Switch normalmente aperto ( NO ). 

Quando si sceglie un pulsante come dispositivo di input, ci sono diversi aspetti da considerare. Innanzitutto, ovviamente, la dimensione e correlata a questa è la tensione e la corrente nominale del pulsante. Per controllare l’ingresso digitale di una scheda Arduino, pulsanti piccoli che possono commutare fino a 12 Volt e 0,1 Ampere sono sufficienti. Sono molto economici ed è utile avere una selezione di vari tipi per diverse applicazioni. Mi piace il set qui sotto.

Different push button types

TWTADE 260 pezzi Micro Momentary Tact Switch Tactile Push Button Switch 26 Valori Kit assortimento 4 pin/3 pin/2 pin QC-26V.

Modalità di funzionamento ON-OFF
Corrente nominale 0,1 Ampere
Tensione di esercizio 12 Volt

Se vuoi commutare carichi tipici, come piccoli elettromotori o l’alimentazione a batteria per il tuo Arduino, un interruttore con una valutazione di 12V e 1-3A andrà bene. Nota che commutare apparecchi collegati alla rete elettrica (110V – 220V) è pericoloso! Devi scegliere un interruttore valutato per 110V o 220V (a seconda del tuo paese) e 5A o più (a seconda del carico).

Normalmente aperto o chiuso

La maggior parte dei pulsanti è normalmente aperta quando non premuta (contrassegnata come NO). Ciò significa che la corrente elettrica non scorre quando il pulsante non è premuto. Questo è il tipo che usiamo comunemente. Ma ci sono anche pulsanti normalmente chiusi (NC), quando non premuti.

Pulsanti momentanei vs mantenuti

Anche la maggior parte dei pulsanti sono momentanei, cioè ritornano alla loro posizione predefinita quando rilasciati. Un pulsante mantenuto, invece, rimane nella posizione premuta e deve essere premuto di nuovo per tornare alla normalità. Usiamo i pulsanti mantenuti soprattutto per accendere o spegnere l’alimentazione elettrica. Nota che alcuni pulsanti hanno anche tre stati come ON – NONE – OFF o simili.

Numero di poli

Infine, la maggior parte dei pulsanti ha due contatti (detti anche due poli) usati per fare il collegamento elettrico. Tuttavia, ci sono pulsanti con più poli e diverse configurazioni di commutazione. Ne parleremo nella sezione Interruttori più avanti.

Alcuni pulsanti sono anche illuminati e hanno contatti aggiuntivi per fornire alimentazione alla luce integrata. Non confonderli!

Considerazioni chiave

Valutazione

Il fattore più importante da considerare nella scelta di un pulsante è la corretta valutazione. Il pulsante deve poter gestire la tensione e la corrente del circuito che controlla. Assicurati anche di usare la tensione e la polarità corrette per i pulsanti illuminati.

Debounce

I contatti all’interno del pulsante sono fatti di metallo, che ha una certa elasticità. Questo causa che i contatti bounce per un breve periodo (alcuni millisecondi) quando il pulsante viene premuto, invece di stabilire un contatto stabile immediatamente. Non otteniamo una transizione da aperto a chiuso con un andamento netto, ma una transizione instabile. Vedi l’effetto rimbalzo qui sotto:

Quando si legge lo stato di un pulsante con un microcontrollore, questo può causare la lettura di più pressioni del pulsante invece di una sola. Tipicamente sarà necessario scrivere un code for debouncing specifico per il pulsante o aggiungere un debouncing circuit, usando un resistore e un condensatore. Abbiamo un esempio su how to connect a push button to an Arduino.

Resistori pull-up

Quando un pulsante è aperto (non premuto), il pin a cui è collegato può fluttuare tra stati alti e bassi perché non è connesso a una tensione definita. Questo stato “fluttuante” può portare a letture imprevedibili, poiché il pin funziona essenzialmente come un’antenna che cattura onde elettromagnetiche dall’ambiente.

Possiamo usare pull-up resistors per collegare il pin all’alimentazione (di solito 5V o 3,3V). Questo assicura che sia in uno stato definito (HIGH) quando il pulsante non è premuto. Molte schede Arduino hanno resistori pull-up integrati che possono essere attivati via software usando pinMode(pin, INPUT_PULLUP).

Tuttavia, è sempre una buona idea essere prudenti e aggiungere un resistore pull-up. In questo modo puoi usare il tuo circuito con schede diverse o su pin diversi (che potrebbero non avere resistori pull-up interni).

Resistori limitatori di corrente

Anche se non sempre necessari quando si usano resistori pull-up o pull-down, a volte è consigliabile includere un current limiting resistor in serie con un pulsante, specialmente se collegato direttamente a alimentazione e massa. Questo aiuta a prevenire flussi di corrente eccessivi quando il pulsante è premuto.

Livelli logici

Infine, dobbiamo fare attenzione ai different logic levels dell’Arduino (di solito 5V) e di altri MCU comuni, come l’ESP32, che funziona a 3,3V. Per esempio, collegare 5V a un ingresso da 3,3V su un ESP32 può danneggiare il chip. Allo stesso modo, usare più di 5V come ingresso Arduino può causare danni. I resistori limitatori di corrente menzionati possono offrire una certa protezione.

Interruttori

Simili ai pulsanti, gli interruttori esistono in molte forme e dimensioni. Qui sotto un tipico piccolo interruttore che può essere usato per commutare ingressi logici o piccoli carichi:

A simple switch as input device

Chanzon SPDT Mini Micro Slide Switch 2 Posizioni.

Nota : Scegli quelli con un passo pin di 2,54 mm (0,1″) per essere compatibili con breadboard.

Interruttori momentanei vs mantenuti/auto-bloccanti

Gli interruttori sono essenzialmente gli stessi dispositivi di input dei pulsanti – e a volte i pulsanti sono chiamati interruttori. Ma mentre i pulsanti più usati sono momentanei, gli interruttori sono tipicamente di tipo mantenuto o auto-bloccante.

Tuttavia, si trovano anche interruttori momentanei. Un tipo momentaneo che uso spesso è questo micro-interruttore che richiede poca forza per essere azionato ed è ottimo per rilevare collisioni (per robot) o l’apertura/chiusura di porte:

A micro switch

Cylewet 25 pezzi AC 1A 125V 3Pin SPDT Limit Micro Switch Leva a cerniera lunga.

Se guardi da vicino, vedi le marcature C (Contatto), NO (Normalmente Aperto) e NC (Normalmente Chiuso) per i pin. Questo è un interruttore SPST (Single Pole, Single Throw) e ne parleremo di più nella sezione successiva.

Terminologia dei contatti

Un’altra differenza tra interruttori e pulsanti è che gli interruttori tendono ad avere molte più variazioni nella configurazione di Poli e Throw.

I Poli si riferiscono al numero di circuiti separati che l’interruttore può controllare. È essenzialmente il numero di ingressi indipendenti che un interruttore ha. I Throw, invece, si riferiscono al numero di percorsi disponibili per ogni polo. Descrivono a quanti collegamenti di uscita ogni polo può essere connesso o “commutato”.

La configurazione più comune, un interruttore semplice, ha configurazione SPST (Single Pole, Single Throw).

Un interruttore con due Poli e un Throw si chiama DPST (Dual Pole, Single Throw).

Un interruttore DPST che ho usato in molti miei progetti è il seguente. Pur essendo piccolo, può commutare carichi considerevoli ed è sicuramente sufficiente per commutare l’alimentazione a batteria, per esempio. Nota che questo non può essere inserito in una breadboard.

A DPDT switch as input device

RuoFeng DPDT Toggle Switch AC 125V 6A ON/ON 6 Terminali 2 Posizioni

Configurazioni comuni

Qui sotto trovi una lista delle configurazioni comuni di Poli e Throw per interruttori. A seconda dell’applicazione devi scegliere quello giusto, ma i più usati sono probabilmente gli interruttori SPST e DPST.

Abbreviazione Nome Descrizione
SPST Single Pole Single Throw Un semplice interruttore on-off
SPDT Single Pole Double Throw Un interruttore che può deviare la corrente da un percorso all’altro
DPST Double Pole Single Throw Due interruttori on/off controllati da un unico meccanismo
DPDT Double Pole Double Throw Controlla due circuiti e ha due percorsi per ciascuno
3PST Triple Pole Single Throw Tre interruttori on/off controllati da un unico meccanismo
3PDT Triple Pole Double Throw Controlla tre circuiti, ciascuno con due percorsi
4PST Quadruple Pole Single Throw Quattro interruttori on/off controllati da un unico meccanismo
4PDT Quadruple Pole Double Throw Controlla quattro circuiti, ciascuno con due percorsi

Considerazioni chiave

Le considerazioni chiave per gli interruttori sono le stesse dei pulsanti. Assicurati che l’interruttore abbia la valutazione appropriata per il carico collegato. Se l’interruttore è usato per commutare ingressi logici, sono consigliati debounce, resistori pull-up e potenzialmente resistori limitatori di corrente. Fai anche attenzione ai livelli logici corretti (3,3V vs 5V) per gli ingressi.

Pulsanti touch

I pulsanti touch sono dispositivi di input progettati per rilevare il tocco umano. Il tipo più comune misura la capacità, che cambia quando l’elemento sensore viene toccato da un dito (o da un oggetto metallico). Il ESP32 has touch sensor pins e non richiede circuiti aggiuntivi per rilevare il tocco. Per Arduino e altri MCU che non hanno supporto diretto per sensori touch, sono disponibili moduli sensore touch. Qui sotto un esempio di modulo sensore touch comune:

A touch sensor as input device

BAEASU TTP223 TTP223B Capacitive Touch Sensor Switch Module, Self-Lock Switch Button Module

Sono easy to connect and to use. Rispetto ai pulsanti e interruttori meccanici hanno il vantaggio di poter essere incapsulati all’interno di un involucro, essendo completamente protetti da polvere o acqua. La maggior parte dei tipi permette anche di configurare un comportamento di tipo latching o momentaneo, cioè il segnale di uscita rimane alto dopo un tocco o no.

Considerazioni chiave

Quando si usano moduli sensore touch, alcuni aspetti sono da considerare. Innanzitutto sono meno adatti per applicazioni a basso consumo, poiché consumano energia. Sono anche più vulnerabili alle interferenze elettromagnetiche e generalmente a attivazioni accidentali. Infine, non offrono feedback tattile, ma la maggior parte dei moduli ha un LED integrato che segnala lo stato dell’interruttore.

Tastiere

Le tastiere o keypad sono essenzialmente disposizioni rettangolari di più pulsanti. Comunemente, i pulsanti sono di tipo meccanico o capacitivo. Qui sotto una foto di un tipico keypad 4×4 che usa interruttori a membrana meccanici:

A  4x4 keypad as input device

DEVMO 2PCS 4 x 4 Matrix Array 16 Key Membrane Switch Keypad Keyboard

Poiché il numero di tasti è spesso maggiore del numero di ingressi disponibili su un Arduino, non sono indirizzati singolarmente. Invece si usa uno schema di indirizzamento a matrice. Organizza i tasti in colonne (C1…C4) e righe (R1…R4):

A keypad address matrix

Per un keypad 4×4 con 16 tasti questo riduce il numero di ingressi GPIO necessari da 16 a 8. We have a tutorial on how to connect a keypad to an Arduino.

Considerazioni chiave

I keypad, specialmente quelli più grandi, tendono a occupare molti pin GPIO preziosi. Tuttavia, usando I2C communication e un modulo di espansione IO adatto, si può eliminare questo problema. Un modulo di espansione, come quello sotto, necessita solo dei due pin del bus I2C (SCL & SDA) per controllare 8 canali I/O.

An IO expansion board

HiLetgo 2pcs PCF8574 PCF8574T IO Expansion Board I/O Expander I2C Evaluation Develop Module

Il I2C Keypad library offre il software pronto per collegare un keypad 4×4, 5×3, 6×2, 8×1 o più piccolo a un modulo di espansione basato su PCF8574. Non solo Arduino ma anche il ESP32 e molti altri MCU supportano il bus I2C.

Touchscreen

Un’alternativa a un keypad come dispositivo di input è un touchscreen. I touchscreen sono solitamente display TFT, con sensori touch resistivi o capacitivi. I tipi resistivi richiedono pressione sullo schermo per rilevare il tocco. Un display touch resistivo comunemente usato è il seguente di ELEGOO:

A touchscreen display as input device

ELEGOO UNO R3 2.8 Pollici TFT Touch Screen con Slot per scheda SD

Controllare un touchscreen da un Arduino è ovviamente più complesso che controllare un semplice keypad. Tuttavia, abbiamo un tutorial su how to interface an Arduino with a touchscreen display.

Considerazioni chiave

A parte la maggiore complessità, i touchscreen sono generalmente molto meno robusti dei keypad e si graffiano facilmente. Consumano anche energia attivamente mentre i keypad sono dispositivi di input passivi. Infine, il carico computazionale per gestire un display touchscreen è molto più alto di quello di un keypad. Ciò significa anche che un touchscreen generalmente non è reattivo come un keypad.

Encoder rotativi

Gli encoder rotativi sono dispositivi di input che convertono una rotazione in codici digitali. Tipicamente emettono due segnali digitali o impulsi, spesso chiamati ‘DT’ e ‘CLK’ (o ‘A’ e ‘B’). Questi impulsi sono solitamente sfasati di 90°. Monitorando questi due segnali, possiamo determinare la quantità e la direzione della rotazione.

Qui sotto un comune modulo encoder rotativo adatto per Arduino con 20 impulsi per rotazione completa e un pulsante aggiuntivo.

A rotary encoder as input device

HiLetgo 5pcs 360 Gradi Rotary Encoder Module

Gli usi comuni degli encoder rotativi sono il controllo digitale del volume, la selezione di funzioni (menu) e il monitoraggio della velocità, posizione e direzione di un motore. Sono facili da usare e abbiamo un tutorial su come how to interface a rotary encoder with an Arduino.

Considerazioni chiave

La maggior parte degli encoder rotativi è meccanicamente simile agli interruttori. Di conseguenza, dobbiamo considerare gli stessi potenziali problemi degli interruttori, come debounce, resistori pull-up e livello logico (3,3V vs 5V). Inoltre, se usiamo il polling per monitorare gli impulsi, Arduino/codice deve essere abbastanza veloce da non perdere impulsi. Infine, gli encoder rotativi variano nella loro risoluzione (cioè impulsi per rotazione). Dobbiamo scegliere un encoder con risoluzione sufficiente per la nostra applicazione.

Potenziometri

Finora tutti i dispositivi di input presentati erano dispositivi di input digitali. Generano segnali digitali (HIGH, LOW) e sono collegati ai pin GPIO digitali. I potenziometri, invece, sono dispositivi di input analogici. Ecco il nostro tutorial su how to control an LED with a potentiometer.

Internamente, un potenziometro è un resistore a tre terminali con un contatto scorrevole o rotante che forma un partitore di tensione regolabile. I valori di resistenza tipici per i potenziometri sono 10K Ω o 100K Ω . Qui sotto un esempio di un potenziometro da 10K comunemente usato:

A Potentiometer as input device

HiLetgo 20 pezzi WH148 Potenziometro a singolo giunto 10K B10K resistori variabili

Considerazioni chiave

Assicurati di collegare il potenziometro a un pin GPIO analogico (A0, …) e usa analogRead() per leggere il valore di input. Poiché la resistenza del potenziometro può variare con la temperatura, noterai che il valore di input cambia quando il potenziometro si riscalda o si raffredda. Vedrai anche fluttuazioni nel valore di input dovute al rumore elettromagnetico captato dai fili. Infine, la risoluzione è limitata dal convertitore analogico-digitale (ADC) del microcontrollore.

Joystick

Un joystick è composto da due potenziometri disposti su assi perpendicolari (X, Y) controllati da una leva o manopola centrale. Qui sotto un comune modulo joystick usato per Arduino:

Joystick as input device

WWZMDiB 6 pezzi Modulo Joystick a doppio asse con pulsante

Un joystick tipico fornisce input sulla sua posizione lungo gli assi, solitamente X (orizzontale) e Y (verticale) come valori di input analogici. Molti hanno anche un pulsante aggiuntivo (fire button), che genera un input digitale. Vedi il nostro tutorial su how to use a joystick with an Arduino.

Considerazioni chiave

Nota che esistono joystick semplificati che non usano potenziometri ma interruttori per indicare la direzione. Sono di natura digitale. D’altra parte, ci sono anche joystick con più di due assi. Per esempio, per controllare le direzioni X, Y e Z. Quando colleghi un modulo joystick al tuo microprocessore assicurati che i livelli logici corrispondano (3,3V vs 5V). Le uscite analogiche devono essere collegate agli ingressi analogici (A0, A1) e lette tramite analogRead(), mentre il pulsante dovrebbe essere collegato a un ingresso digitale e letto tramite digitalRead().

Mouse USB

Non puoi collegare direttamente un mouse USB a un Arduino e usarlo come dispositivo di input. Avresti bisogno di uno shield USB, come quello sotto (specifico per la scheda Arduino che stai usando):

USB shield

ARCELI USB Host Shield per Arduino UNO MEGA 2560

Ecco un tutorial su how to connect a mouse to an Arduino using a USB shield.

Considerazioni chiave

Generalmente, è meglio collegare un joystick a un Arduino, invece di cercare di collegare un mouse USB tramite uno shield USB. Puoi costruire il tuo mouse usando due encoder rotativi o leggere direttamente gli encoder rotativi all’interno di un mouse meccanico (vecchio).

Riepilogo

Qui ti abbiamo fornito una panoramica di tutti i diversi tipi di dispositivi di input comunemente usati con Arduino e microcontrollori simili. Per maggiori dettagli su come collegare questi vari dispositivi dai un’occhiata al nostro Articles on inputs and sensors e ai link nel post. Abbiamo anche un overview article on all the different types of sensors you can connect to an Arduino.