WIRC: collega ad Arduino le uscite digitali

WiRC dispone di 4 uscite digitali e 4 ingressi digitali, i primi premendo i bottoni A,B,C e D si portano a livello logico 0 (GND) mentre i secondi

contenuro della confezione

accendono il triangolino rosso vicino ai pulsanti, facendolo diventare verde, quando sono corto-circuitati a massa (GND).

In questo modo puoi comandare dei led sul tuo rover o altri attrezzi di cui lo hai dotato. Il carico che puoi collegarvi è ridotto ed inoltre potrebbe esserti più utile rilevare la pressione di uno dei bottoni da parte di Arduino per interagire con lo sketch ed impartire comandi ad Arduino e non al modellino controllato.

Con questa idea in mente ho iniziato a fare degli esperimenti per rilevare la pressione dei pulsanti, dapprima collegando solo dei led come da schema WiRC:

schema collegamento wirc

poi aggiungendo anche il collegamento ad arduino.

Inizialmente avrei voluto collegare i 4 output digitali a 4 ingressi digitali aspettandomi come risultato il cambio di valore da HIGH a LOW alla pressione di ciascun bottone. Purtroppo non ci sono riuscito, ho scritto alla Dension, casa produttrice del WiRC, per chiedere informazioni in merito al tipo di segnale digitale in uscita, anche se output digitale per me significa 0 o 1, ad oggi non ho ricevuto risposta.

Ho collegato allora i 4 pin a 4 ingressi analogici di Arduino e … miracolo … vedo delle variazioni di segnale tra la pressione del bottone e il valore letto dall’ADC di Arduino.

Ho contattato la dension, produttore del WiRC, chiedendo loro se la mia considerazione fosse vera e i dati rilavati corretti.

Mi hanno risposto in questi giorni inviandomi due schemi relativi il primo alle uscite digitali 1,2 e 3:

WiRC digital out

ed il secondo relativo all’uscita 4:

WiRC digital out

entrambi gli schemi hanno in comune il voltaggio: 3,3v il che significa che i valori rilevati dal convertitore analogico di Arduino non sono completamente errati ma solo riferiti ad un voltaggio errato, per far lavorare il convertitore in modo corretto devi connettere il pin 3V3 di Arduino al pin AREF in modo che la tensione di riferimento dell’ADC sia 3,3v

La differenza tra le uscite 1,2,3 e 4 del WiRC è che l’ultima uscita presenta un partitore costituito da due resistenze da 10Kohm di cui dovrai tener conto quando progetterai il circuito di interfaccia, ad esempio un semplice led resterà lievemente accesso anche se l’uscita è disabilitata.

Lo schema di collegamento al WiRC

Il collegamento che ho utilizzato è il seguente:

collegamento WiRC arduino e led

come vedi ho connesso sia i led come da schema originale sia arduino. In questa configurazione potrai vedere sia i led accendersi sia rilevare il valore analogico sui pin A5,A4,A3 e A2 di arduino.

Lo sketch di controllo delle uscite digitali

L’esperimento non sarebbe completo senza lo sketch con cui puoi gestire la lettura dei valori, troverai all’interno anche le linee di codice del precedente articolo, che non commento perché puoi leggerle li:

int pinX = 7;
int pinY = 8;
int dInA = A5;
int dInB = A4;
int dInC = A3;
int dInD = A2;

unsigned long durationX;
unsigned long durationY;
int sInA = 0;
int sInB = 0;
int sInC = 0;
int sInD = 0;

void setup()
{
  Serial.begin( 9600 );
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  pinMode(dInA, INPUT);
  pinMode(dInB, INPUT);
  pinMode(dInC, INPUT);
  pinMode(dInD, INPUT);
}

void loop()
{
  durationX = pulseIn(pinX, HIGH);
  durationY = pulseIn(pinY, HIGH);
  sInA = analogRead( dInA );
  sInB = analogRead( dInB );
  sInC = analogRead( dInC );
  sInD = analogRead( dInD );

  Serial.print( "X: " );
  Serial.print( durationX );
  Serial.print( " Y: " );
  Serial.print( durationY );
  Serial.print( " dInA: " );
  Serial.print( sInA );
  Serial.print( " dInB: " );
  Serial.print( sInB );
  Serial.print( " dInC: " );
  Serial.print( sInC );
  Serial.print( " dInD: " );
  Serial.println( sInD );
  delay (500);
}

Inizia dalle linee 03-06: in cui definisci i pin analogici a cui hai collegato le 4 uscite digitali;

linee 10-13: definisci 4 variabili di tipo integer in ciascuna delle quali memorizzerai il valore analogico letto sul pin corrispondente;

linee 20-23: imposta i pin analogici definiti alle linee 03-06 in modalità INPUT;

linee 30-33: per ciascun pin analogico leggi il valore con il comando analogRead() e memorizzalo nella variabile corrispondente;

linee 39-46: scrivi sul monitor seriale i valori letti per ciascuna uscita digitale.

Il Video dimostrativo del WiRC

come per gli altri articoli ho realizzato un video in cui puoi vedere la demo dello sketch e i valori del WiRC che ho rilevato con Arduino, oltre all’accensione dei 4 led:

nel video è abbastanza chiaro che la pressione di un qualsiasi dei 4 bottoni porta a 0 il valore analogico letto da Arduino, mentre ripremendo i bottoni i valori letti tornano a 255.

Se guardi attentamente noterai che uno dei 4 segnali è sempre a 0, il segnale connesso all’uscita 4 o D questo comportamento è dovuto al partitore formato dalla due resistenze da 10KΩ, il led connesso a questa uscita resta sempre leggermente acceso, anche se varia notevolmente la sua luminosità alla pressione del bottone.

Ho in mente di utilizzare degli optoisolatori connessi a queste uscite per commutare l’accensione del led in un contatto digitale rilevabile da Arduino.

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/wirc-collega-arduino-uscite-digitali.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.