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 !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

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

13 comments

Skip to comment form

    • Roberto on 28 gennaio 2013 at 15:06
    • Reply

    Salve Mauro,volevo chiederti qualche info riguardante il Wirc della dension,ho letto i tuoi articoli molto interessanti dove mostri le sue funzioni e lo trovato un prodotto azzeccato per realizzare un robot per videosorveglianza ma dalle specifiche non capisco sè posso inserire un ip statico e comandarlo da internet tramite app android,ho letto sul sito del costruttore che le funzionalità audio non sono ancora disponibili le hai provate?
    Grazie Roberto.

    1. Ciao Roberto,
      ho spostato il tuo commento in un articolo appropriato sul WiRC in modo che altri interessati possano beneficiare dei nostri interessanti scambi di idee su questo prodotto.
      Il WiRC con IP fisso non l’ho provato, tuttavia penso sia possibile riservarlo attraverso il mac address se il tuo router/access point lo supporta, in quanto il WiRC consente la connessione ad una WiFi già esistente.

      Sulla parte Audio non l’ho sperimentata in quanto ho anche io letto che il produttore dichiara di non averla ancora implementata, ho scritto in diverse occasioni alla Dension chiedendo info e devo dire che mi hanno sempre risposto fornendomi le delucidazioni richieste.

      Mauro

    • Pasquale on 4 settembre 2013 at 22:25
    • Reply

    Ciao Mauro ho comprato anche io il wirc. Volevo chiederti come faccio a comandare tramite il wirc un uscita di arduino per comandare un relè? Grazie

    1. Ciao Pasquale,
      puoi collegare una delle uscite digitali del WiRC ad un ingresso digitale arduino.
      Dallo sketch leggi lo stato del pin a cui hai connesso il WiRC e controlli il relè collegato ad un altro pin digitale.

      In ogni caso ti suggerisco di evitare il passaggio da arduino per controllare un relé dal WiRC, puoi collegare il relé direttamente all’uscita digitale del WiRC ed è tutto più semplice.

      Mauro

        • pasquale on 5 settembre 2013 at 20:35
        • Reply

        ciao mauro grazie per il consiglio potresti dirmi per cortesia come si mette in modalità esperto l applicazione? grazie

          • pasquale on 5 settembre 2013 at 23:12
          • Reply

          ciao mauro volevo anche chiederti io ho collegato il wirc come l hai collegato te ma non riesco a fare accendere i led devo eseguire qualche programmazione nel applicazione ti ringrazio per il momento

          1. Ciao Pasquale,
            l’unica impostazione che devi inserire é quella necessaria a visualizzare i pulsanti sullo schermo del tablet o smartphone e dire all’app come i pulsanti sono connessi ai canali del WiRC

            Mauro

        1. Ciao Pasquale,
          é in uno dei menù dell’app, a memoria non lo ricordo ma so che sul manuale é descritto molto bene anche come impostare i controlli e assegnare le funzioni ai comandi.

          Mauro

    • Helmar on 10 gennaio 2014 at 11:07
    • Reply

    finally i found some useful information about the WiRC digital outputs
    thnx a lot !!!!

    im not sure if i read the diagram correctly. you are switching the LEDs directly with the WiRC without any LED-resistor and the arduino is just monitoring the input. is this correct ?!

    thnx
    Helmar

    1. Hi Helmar,
      yes, i connect led directly to WiRc whitout resistor and Arduino just monitor the input.

      Mauro

        • Helmar on 10 gennaio 2014 at 11:55
        • Reply

        oki, than the current for each LED is limited to 100mA, right ?!

        how would you go about connecting an other transistor to it, for switching LEDs with a little more
        power consumption?
        i was thinking of this:
        http://www.mikrocontroller.net/wikifiles/4/4a/T_a_s_oc.png

        or do you think it could be driven directly too ?
        http://www.mikrocontroller.net/wikifiles/6/65/T_a_s.png

        thnx
        Helmar

        1. Hi Helmar,
          you should write to the WIRC to ask if you can do it, because I do not know how it is done internally WIRC and you could damage it.

          Mauro

            • Helmar on 10 gennaio 2014 at 17:46

            i did already, problem is they simply do not reply and the forum seems to be deserted too :/

            thnx again
            Helmar

Lascia un commento

Your email address will not be published.