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
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:
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.
Notice
Digressione: la variazione che sono riuscito a rilevare sugli ingressi analogici è 0-255 e siccome sai che il convertitore di arduino è un 10 bit ( 0-1023 ) questo significa che siamo a 1/4 dei valori rilevabili.
Su una scala 0-5v ottieni 5v/1024 = 0,00488v => 4,88mV circa per ogni step del convertitore analogico digitale da cui puoi ricavare la variazione in millivolt rilevata da Arduino sui terminali analogici: 255 * 4,88 = 1244,4mV che in volt significa 1244,4 / 1000 = 1,24v forse è questo il motivo per cui collegando ai pin digitali le uscite del WiRC rilevi sempre 0, ossia LOW, non supera mai i 2,5 valore TTL di soglia.
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:
ed il secondo relativo all’uscita 4:
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:
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 !!!
13 commenti
Vai al modulo dei commenti
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.
Autore
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
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
Autore
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
ciao mauro grazie per il consiglio potresti dirmi per cortesia come si mette in modalità esperto l applicazione? grazie
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
Autore
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
Autore
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
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
Autore
Hi Helmar,
yes, i connect led directly to WiRc whitout resistor and Arduino just monitor the input.
Mauro
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
Autore
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
i did already, problem is they simply do not reply and the forum seems to be deserted too :/
thnx again
Helmar