Cerca

modulo attività

modulo tecnica

Login Form

Arduino Uno: digital pin

La scheda Arduino Uno è dotata di 14 pin di input/output digitali che vengono utilizzati

- per "scrivere" segnali logici alto/basso in uscita per pilotare apparecchiature e componenti o

- per "leggere" segnali logici alto/basso in ingresso, con o senza resisore di pullup, da usare per trattare i valori di tensione presenti sui sensori on/off posti all'esterno della scheda.

 

Schema equivalente dei pin di input/ouput digitali.

arduino digital pin2

In quanto digitali significa che questi pin possono trattare (scrivere o leggere) segnali di due soli valori:

- un valore alto o hightrue o on con tensione quasi uguale a quella di alimentazione (nota 1)

- un valore basso o low  o false o off con tensione quasi uguale a zero o ground

valori prossimi alla metà del valore di alimentazione sono di lettura/scrittura incerta e vanno evitati pena un funzionamento non prevedibile se non pericoloso (nota 2).

Uno schema accettabile per comprendere il funzionamento di ciascuno dei pin digitali è quello a destra (nota 3):

si notano

- un apparato di uscita riconducibile a due interruttori  Tu e Td posti uno sopra l'altro; la manovra dei due interruttori permette di imporre il valore della tensione Vpin in base a quanto previsto dal software; i due interruttori sono comandati dalla circuiteria interna che impedisce che entrambi siano chiusi contemporaneamente per non provocare un cortocircuito tra alimentazione e ground e distruggere il componente;

- un apparato di ingresso, rappresentato dal triangolo sulla sinistra, rileva la tensione presente sul pin e la inserisce nella logica interna per essere trattata dal software; la resistenza di 200MΩ rappresenta bene il valore altissimo dell'impedenza di ingresso; con tale valore è possibile collegare componenti senza che questi debbano essere messi in grado di erogare correnti percettibilil e disturbare così il proprio funzionamento;

- un resistenza di pullup Rpu, del valore di 20kΩ inseribile con comando software, che consente di imporre un valore di tensione al pin ad un valore "alto" in assenza di circuiteria di ingresso ed è utilizzabile per connettere sensori di tipo on/off connessi verso ground.

 

 

Uscita digitale

La modalità di uscita digitale si deve impostare via software con il comando

pinMode(pin, OUTPUT);

o qualcosa di analogo se si usano programmi diversi da quello dell'IDE di Arduino.

Nota bene: il punto e virgola fa parte dell'istruzione.

Con il suddetto comando si rendono attivi i due interruttori ed il pin si pone in una delle due condizioni cosiddette di bassa impedenza che consentono l'alimentazone di componenti connessi al pin stesso potendo erogare o assorbire correnti fino a 40mA: la somma delle correnti di tutti i pin non deve superare 200mA (per una trattazione esauriente vedi qui).

Sono state anche realizzate alcune misurazioni per vedere in pratica cosa accade alla tensione sul pin quando la corrente diventa elevata: vai qui.

Valgono i due casi

 

1) Tu aperto e Td chiuso: il pin è connesso a ground e la tensione Vpin è quasi zero (sink mode).

Arduino low2

 

La condizione corrispondente è impostata con l'istruzione

digitalWrite(pin, LOW);

o qualcosa di analogo in altri software

LOW sta per "basso" stando a rappresentare il valore "zero" logico che deve assumere l'uscita.

La corrente nel pin è entrante, si dice che funziona da "lavello" o "pozzo raccoglitore" ed infatti la corrente corrispondente, in inglese, si chiama sink current e per convenzione è indicata come negativa (trattandosi di una uscita il senso convenzionale sarebbe uscente ma dato che la corrente effettivamente entra, ecco che si deve indicare come negativa).

  

 

 

 

2) Tu chiuso e Td aperto: il pin è connesso a a VG e la tensione Vpin è quasi quella di alimentazione (5V) (source mode).

Arduino high2

 

La condizione corrispondente è impostata con l'istruzione

digitalWrite(pin, HIGH);

o qualcosa di analogo in altri software

HIGH sta per alto stando a rappresentare il valore "uno" logico o massimo che deve assumere l'uscita.

La corrente nel pin è uscente, si dice che funziona da "sorgente" ed infatti la corrente corrispondente, in inglese, si chiama source current e per convenzione è indicata come positiva.

Sia la "sink current" che la "source current" possono arrivare a 40mA senza danni per singolo pin; è quindi possibile alimentare piccoli componenti che non necessitano di correnti superiori come i LED di segnalazione.

La circuiteria interna impedisce che i due interruttori siano entrambi chiusi nello steso momento evitando così un cortocircuito dannoso.

 

Vedi esempi di applicazione con i LED, che si traducono facilmente con uso di altri componenti a input digitale.

 

Ingresso digitale

arduino input2

 

La modalità di ingresso digitale si deve impostare via software con il comando

pinMode(pin, INPUT);

o qualcosa di analogo se si usano programmi diversi da quello dell'IDE.

Con il suddetto comando si rendono inattivi i due interruttori, che vengono tenuti entrambi aperti.

Il pin è isolato sia dall'alimentazione che dal ground e si dice che si trova in uno stato di alta impedenza; la tensione in uscita è indeterminata e non è possibile alimentare componenti data la bassissima corrente disponibile.

E' anche noto il valore da considerare per l'impedenza di ingresso: da 100 MΩ a 200 MΩ. 

Questa alta impedenza di ingresso serve a rendere minimo il disturbo sul funzionamento della circuiteria connessa al pin (nota 4).

Data l'alta impedenza si possono costruire semplici sensori a contatto.

Ovviamente, trattandosi di ingresso digitale, sono utilizzabili due valori di tensione Vpin:

- "zero" logico o "false" quando Vpin è prossimo a ground

- "uno" logico o "true" quando Vpin è prossimo a VG

 

Valori di Vpin prossimi alla metà di VG danno risultati logici incerti e devono essere scongiurati dalla circuiteria elettronica.

Come ingresso si usano di solito contatti ed interruttori che hanno proprio la caratteristica di avere solo due stati aperto/chiuso che li rendono adatti a fornire ingressi digitali (per sapere di più vai qui).

 

Ingresso digitale con pullup resistor

arduino pullup

Il valore dell'impedenza di ingresso è talmente alto da rendere la tensione di ingresso del pin suscettibile di essere influenzata da potenziali dovuti a campi elettromagnetici posti nelle vicinanze o accoppiamenti capacitivi parassiti; il semplice contatto del pin con le mani può modificare il valore del segnale letto in ingresso e produrre conseguenze imprevedibili se non impedito dal software. 

Occorre, in questo caso, fissare il potenziale dell'ingresso ad un valore noto ed a bassa impedenza così da non avere tensioni fluttuanti (floating) in caso di assenza di circuiti collegati all'ingresso: si usa il resitore pullup interno che viene attivato con l'istruzione

pinMode(pin, INPUT_PULLUP); 

In questo caso si può collegare tra il pin e ground un sensore ohmico che è un componete che modifica la propria resistenza in base a qualche parametro fisico che si vuole controllare.

 

 

 

 

 

Approfondimenti

link1 Una serie di articoli  di "Tips & Tricks" che è bene conoscere per districarsi tra i problemi hardware.

 

note

nota 1:" quasi" significa che il valore è molto vicino ma resistenze interne e potenziali di giunzione ne impediscono l'uguaglianza. I  transistor, o meglio i MOSFET, con cui sono fatti i componenti del circuito di uscita non sono esattamente degli interruttori; valori maggiori di 0,6*Vcc sono considerati "high", valori inferiori a 0,3*Vcc sono considerati "low"

nota 2: all'avvio del programma, dopo avere alimentato il circuito, di sicuro ci sono momenti di incertezza dei valori di tensione dovuti al fatto che i vari componenti, Arduino compreso, devono raggiungere valori di regime; in attesa che tutti i compponenti siano a regime, è bene che l'hardware ed il software ne tengano conto per non consentire funzionamenti pericolosi inizializzando ogni componente ai valori giusti per la sicurezza prima di diventare operativi.

nota 3: gli "interruttori" in uscita sono realizzati con MOSFET che per loro proprietà non ammettono correnti inverse. All'interno del contollore il pin digitale ha due diodi verso ground e verso Vcc in polarizzazione inversa per ammettere correnti opposte al verso consentito da MOSFET.

nota 4: quando si usa un ingresso digitale si vuole sapere qualcosa dell'ambiente, insomma Arduino è usato come strumento di misura e come tutti gli strumenti di misura, la sua inserzione non deve modificare il funzionamento del circuito che si vuole testare.

Tu non hai i permessi necessari per i commenti! Devi registrarti.