Tutorial: WiRC e Arduino Leonardo

Ho fatto qualche test con il dispositivo WiRC della Dension ed arduino per controllare i segnali provenienti dal WiRC e spostare due servo motori.

schema collegamento wirc

Lo schema mostra il collegamento tra arduino leonardo, i servo ed il controllo WiRC.

Perchè farlo

La prima domanda che ti sarai posto, e me la sono posta anche io, è perchè interfacciare arduino con il WiRC per controllare due servomotori?

La risposta è che in questo modo non solo puoi controllarne il movimento attraverso il tuo smartphone o tablet, ma puoi via codice arduino intervenire sul movimento qualora nel tuo progetto fosse necessario intervenire correggendo la rotazione del servo attraverso lo sketch.

In questo modo potresti non solo intervenire su dei servo ma, trattandosi di segnali PWM, intervenire in modo da utilizzare tali segnali per controllare i motori di un robot.

I servo sono dei dispositivi alquanto rapidi e per questo li puoi utilizzare come test per mettere a punto il tuo sketch prima di testare il tutto con altri dispositivi PWM quali i driver di controllo motori in cc.

Perchè arduino leonardo

ho eseguito alcuni test con altre schede arduino ( 2009, diecimila, mini e uno R3 ) rispontrando una lentezza di risposta tra l’invio del comando attraverso lo smartphone e l’effettivo movimento del servo, inoltre spesso il codice sembrava andare in sleep per un paio di secondi ed al risveglo porta il servo in posizione 90° ( default ).

Il motivo è probabilmente dovuto alla velocità di campionamento del microcontrollore Atmega328 più lenta rispetto all’Atmega32U4 montato sull’arduino leonardo.

Per questo motivo l’utilizzo dell’arduino leonardo si è rivelato più adatto al test ed ai progetti che vedono coinvolto il WiRC con Arduino.

Collegamento del WiRC ad Arduino leonardo

come mostrato nello schema:

schema collegamento wirc

i servo devi collegarli uno al pin 3 ed uno al pin 6, entrambi PWM, i segnali provenienti dal canale 1 e 2 del WiRC devi collegarli rispettivamente al pin 4 e 7.

L’alimentazione dei servo puoi prenderle da 4 batterie di tipo AA da 1,5v ricordandoti di connettere questa fonte di alimentazione anche ai pin + e – del WiRC in possimità del canale 8 e di connettere il polo negarivo ( – o Gnd ) ad Arduino.

Il WiRC ha una doppia alimentazione la prima questa di 6v max attraverso il collegamento appena visto, e la seconda può essere compresa tra 6v e 16v da collegare sull’ingresso Power del WiRC.

Lo sketch

ho realizzato un semplice sketch per eseguire il test, facendo uso del comando pulseIn di Arduino:

#include <Servo.h>

int pinX = 4;
int pinY = 7;
int servoPinX = 3;
int servoPinY = 6;

int gradX = 90;
int gradY = 90;
int minGrad = 0;
int maxGrad = 180;

Servo servoMotorX;
Servo servoMotorY;

unsigned long durationX;
unsigned long durationY;

void setup()
{
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  servoMotorX.attach(servoPinX);
  servoMotorY.attach(servoPinY);

  servoMotorX.write( gradX );
  servoMotorY.write( gradY );
}

void loop()
{
  durationX = pulseIn(pinX, HIGH);
  durationY = pulseIn(pinY, HIGH);
  gradX = map(durationX, 790, 2200, 0, 180 );
  gradY = map(durationY, 790, 2200, 0, 180 );

  gradX = ( gradX <= minGrad )? minGrad:gradX;
  gradX = ( gradX >= maxGrad )? maxGrad:gradX;
  gradY = ( gradY <= minGrad )? minGrad:gradY;
  gradY = ( gradY >= maxGrad )? maxGrad:gradY;

  servoMotorX.write( gradX );
  servoMotorY.write( gradY );

}

la libreria Servo.h ti permette di comandare i servo senza entrare in complesse architetture dei segnali, ma semplicemente impostando i gradi di rotazione.

Il comando pulseIn alle linee 32-33 raccolgono il valore inviato sui pinX e 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 arduino.cc.

Il valore inviato dal WiRC e letto attraverso il comando pulseIn() varia da circa 790 a circa 2200 in cui il valore dell’impulso quando il joystick virtuale si trova in posizione zero è circa 1490.

Sapendo questo puoi mappare i valori letti sui pin 4 e 7 con i gradi da inviare ai servo ( 0 – 180 ), per eseguire questa mappatura usa la funzione map( valore, minInput, maxInput, minOutput, maxOutput ) esegui questa operazione in modo separato per il canale X ed Y alle linee 34 e 35;

linee 37-40: ti garantiscono che i servo non ricevano un valore in gradi superiore a 180 o inferiore a 0 che potrebbe compromettere il corretto funzionamento del servo stesso.

Il video del WiRC in funzione

In questo video demo ho collegato il WiRC, i servo e l’arduino leonardo come nello schema sopra e utilizzando l’App per iPad ho eseguito il test dello sketch:

Buon divertimento !!!

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-wirc-e-arduino-leonardo.html

9 pings

Skip to comment form

  1. […] 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 el alimentazioni. I 9v per alimentare […]

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.