WIRC: collegalo ad Arduino

Continuo con la serie di articoli sul WiRC che ti porteranno a costruire un rover che puoi guidare con il tuo smatphone ( iPhone, Android o iPad)

WiRC

I rover che solitamente costruisco e ti presento su questo blog fanno uso di Arduino come microcontrollore e di controlli motore di tipo a ponte-H, diversamente da quelli per cui il WiRC è stato progettato.

La dension realizza degli automodelli pilotabili con il loro prodotto, questi automodelli sono di tipo modellistico ed utilizzano dei controlli motore dedicati, io voglio provare a fare la medesima cosa con Arduino.

Qual’è il vantaggio di complicarsi la vita?

  • primo che divertimento ci trovi a comprare una serie di pezzi già fatti per funzionare assieme ed assemblarli;
  • secondo punto che me ne faccio di arduino, lo voglio usare;
  • terzo posso anche pensare di integrare dei controlli sensori che impediscano al mio rover di danneggiarsi quando non è alla mia portata visiva;
  • quarto che makers sarei se non sperimentassi sempre nuove opportunità 🙂

Premesso questo passiamo all’esperimento che puoi replicare con il tuo WiRC ed Arduino.

Componenti

Partiamo sempre dalla lista di cosa ti occorre per replicare l’esperimento:

  • n.1 kit WiRC della dension
  • n.1 arduino ( 2009, uno, mega, mini, ecc… )
  • n.1 breadboard
  • un po’ di cavetti per breadboard
  • uno smartphone o simili ( iPhone, iPad, Andriod )
  • l’app della Dension liberamente scaricabile dal sito
  • un pizzico di buona volontà 🙂

Lo schema di collegamento tra arduino e il WiRC

realizza lo schema in cui i servo motori sono connessi sia alla centrale del WiRC sia ad Arduino così in fase di test vedrai sia i valori rilevati sul monitor seriale sia muoversi i servo a conferma dei comandi impartiti.

wirc arduino

i due servo sono collegati contemporaneamente ai pin 7 ed 8 di arduino ed hai canali 1 e 2 del WiRC, l-alimentazione del WiRc avviene con una batteria esterna da 6 a 16v mentre sia Arduino sia i servo sono alimentati da 4 batterie di tipo AA da 1,5v.

Se utilizzi alimentazioni differenti per arduino ed i servo ricordati di connettere assieme i poli negativi ( GND ) perché il circuito funzioni;

Configurazione del WiRC

Come hai visto nell’articolo introduttivo l’interfaccia di gestione del WiRC deve essere configurata, per cui seleziona l’icona a forma di chiave inglese, clicca su Controls e quindi su Mode 1 a questo punto la schermata che vedrai è simile alla seguente:

imposta i canali

cliccando sulle singole linee Channel 1,2,3 … potrei impostare per ogni canale che tipo di controllo desideri, impostali come in figura.

Vai a controllare la configurazione dei due canali: Channel 1 e 2 nel menu: chiave inglese -> Channels -> Channel 1 la schermata che vedrai è simile alla seguente:

wirc channel

mi interessa farti notare i valori di impostazione per ciascun canale:

il valore minimo è impostato a -140% ( riferimento interno del wirc ) e 800µs questo valore è molto importante in quanto indica il tempo del duty-cycle, se non sai cos’è ti invito a leggere questo mio articolo: Programmare con Arduino – Pin Digitali e Analogici in cui trovi una semplice spiegazione di come funziona e a cosa serve;

il valore massimo del duty-cicle è impostato a 2200µs vedrai che questi valori saranno più chiari dopo che avrai visto lo sketch e i valori letti sul monitor seriale;

il valore di Trimming, in posizione 0, è 1500µs;

Lo sketch da caricare su Arduino

lo sketch che ti presento è molto semplice, si fonda essenzialmente sul comando pulseIn( pin, valore, timeout ) è un comando di cui trovi la reference qui.

A cosa serve pulseIn()? la sua utilità è indicata quando ti occorre leggere un segnale il cui valore varia da LOW ad HIGH e viceversa in un dato intervallo di tempo, im pratica legge segnali tipo PWM il cui duty-cycle è costante in un dato intervallo.

Da quanto puoi leggere nel referenze del sito ufficiale il primo parametro indica il pin da cui leggere il segnale pulsante il secondo parametro indica il valore che il segnale deve raggiungere per essere valido ed il terzo parametro indica il timeout oltre il quale non è necesario verificare il valore di pulsazione.

So che quello che ho scritto può sembrare arabo, facciamo un esempio: se imposto il valore ad HIGH il comendo pulse legge il segnale sul pin definito e mi restituisce il tempo in millisecondi trascorso tra una variazione del tipo HIGH-LOW-HIGH in pratica una pulsazione.

Quindi il valore restituito da pulseIn è il tempo di pulsazione o durata del ciclo in un duty-cycle.

ecco quindi lo sketch:

int pinX = 7;
int pinY = 8;

unsigned long durationX;
unsigned long durationY;

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

void loop()
{
  durationX = pulseIn(pinX, HIGH);
  durationY = pulseIn(pinY, HIGH);

  Serial.print( "X: " );
  Serial.print( durationX );
  Serial.print( " Y: " );
  Serial.println( durationY );
  delay (500);
}

ha poche righe in quanto il suo scopo è leggere i valori sui pin 7 ed 8 e restituire il tempo letto visualizzandolo sul monitor seriale dell’IDE Arduino, analizza lo sketch linea per linea:

linee 01-02: definisci due variabili di tipo integer a cui assegni i pin a cui hai collegato i due servo, io le ho chiamate pinX e pinY immaginando di posizionare un servo lungo un ipotetico asse X ed uno sull’ipotetico asse Y;

linee 04-05: definisci due variabili durationX e durationY di tipo unsigned long in cui memorizzerai i valori restituiti dal comando parseIn();

linea 09: imposta la comunicazione seriale;

linee 10-11: configura i pin pinX e pinY in modalità INPUT abilitandoli per ricevere segnali;

linee 16-17: sono il cuore dello sketch, ciascuna linea legge il valore restituito dal comando parseIn( pin, value, timeout ) e lo memorizza nel rispettivo valore durationX o Y. Il comendo parseIn() accetta 3 parametri, visti sopra, ma puoi omettere l’ultimo in quanto il timeout, se non specificato, è di un secondo al termine del quale se non ha ricevuto alcun segnale di start restituisce il timeout;

linee 19-22: scrivi sul monitor seriale i valori di durata dell’impulso letti sull’asse X e sull’asse Y;

linea 23: attendi un tempo di 500 millisecondi (1/2 secondo) prima di rieseguire il loop. In fase di produzione di uno sketch per il tuo progetto questo tempo è inutile e dannoso, in questo esempio ti permette di leggere con facilità i valori scritti sul monitor seriale, rallentando l’esecuzione dello sketch.

Monitor Seriale

Ora che conosci il significato di ogni riga di codice dello sketch ti mostro cosa ho letto sul monitor seriale dopo aver caricato lo sketch su arduino:

WiRC PWM Arduino

con la linea rossa ho evidenziato i valori letti quando i joystick sull’iPad erano in posizione massima;

con la linea gialla ho evidenziato i valori letti quando i joystick sull’iPad erano in posizione neutra o a zero del trim;

con la linea verde ho evidenziato i valori letti quando i joystick sull’iPad erano in posizione minima.

Avrai già notato lo relazione tra questi valori letti e la schermata di configurazione del canale, la riporto per averla sott’occhio:

wirc channel

e si i valori di durata dell’impulso sono proprio quelli impostati, considera che non saranno mai identici ma avrai sempre un piccolo scarto dovuto sia ai collegamenti ed alla resistenza dei cavi sia all’approssimazione che il comando pulseIn() fa, in fondo si è ricavato da solo il valore ed in tempo quasi reale, ti puoi accontentare del risultato.

Quando scriverai lo sketch dovrai tener conto di un certo scarto dei valori di ±15/20µs sul neutro

1500-1484 = 16µs

di ±105/110µs sul valore massimo

2200-2094=106µs

di ±50µs sil valore di minimo rilevato

843-800 = 43µs     800-793=7µs

Il video dei controlli da WiRC

come per il precedente articolo sul WiRC ho realizzato un video in cui mostro i valori letti sul monitor seriale al variare della posizione dei joystick:

Buon divertimento !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/wirc-collegalo-ad-arduino.html

8 commenti

3 ping

Vai al modulo dei commenti

    • Connecting led to wirc il 22 Maggio 2014 alle 19:31
    • Rispondi

    Hello, i would like to know if you still wotk with Wirc and if you could help me with my problem. I managed to succesfully connect wirc to all servos, but i am experiencing problem when i try to connect led lights into digital channels. When i connect it to cannel, the triangle indicator starts glowing green, but nothing happens. I tried several times with different settings, exchanging led with small ventilator, but nothing works. If anyne could help me, probably send me working scheme how to connect LED light, i would be very gratefull.

    1. Hello Zadrazil,
      you find a circuit datasheet in this post: https://www.mauroalfieri.it/elettronica/wirc-collega-arduino-uscite-digitali.html
      If you need more help you can write at http://www.dension.com

    • Marco il 28 Novembre 2014 alle 16:54
    • Rispondi

    Ciao ho acquistato l’altro ieri il kit e ho provato a fare il circuito spiegato in questo tutorial, il modulo si accende e si connette al mio smartphone tramite l’applicazione visualizzo l’immagine sulla videocamera, però quando muovo le levette dal programma il valore visualizzato dalla funzione pulseIn rimane inchiodato a 1500 e non varia. L’unico modo per farlo variare è andare a modificare direttamente il trimming. Quale può essere il mio problema? A differenza del circuito postato in questo tutorial io ho collegato Arduino all’USB del PC e prelevato la tensione per far accendere il modulo dal pin Vcc di Arduino.

    1. Ciao Marco,
      il WiRC ha bisogno della doppia alimentazione.
      Controlla nel manuale che hai ricevuto con il kit.

    • Marco il 29 Novembre 2014 alle 12:40
    • Rispondi

    Niente ho risolto, non premevo il pulsante play per avviare la comunicazione, per quello non funzionava..

    1. Bravo Marco 🙂
      Controlla anche la parte relativa all’alimentazione.

    • luisella il 3 Luglio 2017 alle 14:07
    • Rispondi

    sono approdata su questa pagina, perché mi interesserebbe sapere se con questa tecnologia si riesce a trasmettere dei video,
    grazie

    1. Ciao Luisella,
      con WIRC si puoi inviare dei video dalla webcam come leggi nell’articolo.
      Se vuoi maggiori info sulle risoluzioni e refresh rate consulta il sito del produttore.

  1. […] 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 […]

  2. […] pinY di arduino, se vuoi conoscere meglio il suo funzionamento puoi leggere il mio articolo WIRC: collegalo ad Arduino o far riferimento alla guida ufficiale sul sito […]

  3. […] regolatore interno di Arduino per alimentare i sensori SHARP GP2D120X Se hai letto gli articoli: WIRC: collegalo ad Arduino e Tutorial: WiRC e Arduino Leonardo hai già chiaro come collegare il WiRC ad Arduino Leonardo e […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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