In questo progetto abbiamo la possibilità di far ruotare due servo motor tramite un piccolo joystick.
A dipendenza della direzione di movimento del joystick (su, giù, sinistra, destra) il motore girerà.
Spostando il joystick lungo l'asse delle X faremo girare il primo servo motor.
Invece, muovendo il joystick lungo l'asse delle Y, girerà il secondo servo motor.
I motori gireranno in base all'entità dello spostamento del joystick di comando.
I due motori partono con un angolo di circa 90°.
Se il joystick viene inclinato verso sinistra, il primo servo motor girerà in senso orario da 90° a 0°
Se il joystick viene inclinato verso destra, il primo servo motor girerà in senso antiorario da 90° a 180°
Se il joystick viene inclinato verso l'alto, il secondo servo motor girerà in senso orario da 90° a 0°
Se il joystick viene inclinato verso il basso, il secondo servo motor girerà in senso antiorario da 90° a 180°
/* * Questo programma fa girare due Servo Motor in base allo movimento di un joystick sull'asse delle x e delle y * @Author: Mattia Lazzaroni * @Version: 27.12.2017 */ #include <Servo.h> const int GROUND = A3; //il pin del meno del joystick sarà collegato al pin A3 dell'Arduino const int VCC = A2; //il pin del più del joystick sarà collegato al pin A2 dell'Arduino const int X = A1; //la variabile "X" del joystick, collegata al pin A1, contiente il valore dello spostamento del joystick nell'asse delle x const int Y = A0; //la variabile "Y" del joystick, collegata al pin A0, contiente il valore dello spostamento del joystick nell'asse delle y Servo myservoX; //dichiaro il primo Servo Motor, quello che girerà in base allo spostamento del joystick nell'asse delle x Servo myservoY; //dichiaro il secondo Servo Motor, quello che girerà in base allo spostamento del joystick nell'asse delle y void setup() { Serial.begin(9600); pinMode(VCC, OUTPUT) ; //il pin A2 deve essere usato come output pinMode(GROUND, OUTPUT) ; //il pin A3 deve essere usato come output digitalWrite(VCC, HIGH) ; //setto il pin A2 su high (+5V) digitalWrite(GROUND,LOW) ; //setto il pin A3 su low (ground) myservoX.attach(9); //connetto il primo Servo Motor al pin 9 myservoY.attach(11); //connetto il secondo Servo Motor al pin 11 } void loop() { delay(200); int joystickXVal = analogRead(X) ; //leggo l'input del joystick nell'asse delle X dal pin A1 int joystickYVal = analogRead(Y) ; //leggo l'input del joystick nell'asse delle Y dal pin A0 int joystickXValMapped = map(joystickXVal, 0, 1023, 0, 180); //mappo il valore del joystick nell'asse delle X in una variabile "joystickXValMapped" int joystickYValMapped = map(joystickYVal, 0, 1023, 0, 180); //mappo il valore del joystick nell'asse delle Y in una variabile "joystickYValMapped" myservoX.write(joystickXValMapped); //scrivo il valore mappato di X sul primo Servo Motor, questo lo fa girare myservoY.write(joystickYValMapped); //scrivo il valore mappato di Y sul secondo Servo Motor, questo lo fa girare Serial.print(joystickXVal); //stampo il valore del pin A1 (spostamento del joystick nell'asse delle X) Serial.println(" = input dal joystick all'asse delle X"); //stampo " = input dal joystick all'asse delle X" di fianco al valore del pin A1 Serial.print(joystickXValMapped); //stampo il valore del primo Servo Motor Serial.println(" = output per il primo Servo Motor"); //stampo " = output per il primo Servo Motor" di fianco al valore del primo Servo Motor Serial.println(); Serial.print(joystickYVal); //stampo il valore del pin A0 (spostamento del joystick nell'asse delle Y) Serial.println(" = input dal joystick all'asse delle Y"); //stampo " = input dal joystick all'asse delle Y" di fianco al valore del pin A1 Serial.print(joystickYValMapped); //stampo il valore del secondo Servo Motor Serial.println(" = output per il secondo Servo Motor"); //stampo " = output per il secondo Servo Motor" di fianco al valore del secondo Servo Motor Serial.println() ; }
Scarica il codice
Inizialmente includo nel programma le librerie Servo. Successivamente dichiaro le 4 variabili del joystick; quella per la massa, quella per il VCC, quella per l'asse delle X e quella per l'asse delle Y. Di seguito ho dichiarato i due servo motor. Nel setup dico che il VCC e la massa devono essere usati come output, poi setto HIGH il VCC e LOW la massa. In un secondo tempo connetto i due servo motor ai corrispettivi pin 9 e 11. Nel loop dichiaro due variabili che contengono il valore dell'joystick, uno nell'asse delle X e l'altro nell'asse delle Y. Successivamente in due nuove variabili(una per le x e una per le y) mappo gli input del joystick indicando che che il valore del joystick che va da 0 a 1023 corrisponde a 0°-180°. Quindi il joystick nell'asse delle x in posizione 0 farà girare il servo motor delle x al grado 0, invece il joystick nell'asse delle y in posizione 1023 farà girare il servo motor delle y al grado 180 e così via. La posizione di default del joystick (quando è fermo e non viene inclinato) e di circa 512 che corrisponde ad un angolo di 90° per entrambi i motori.