Tag

, , , , , , , , , ,

Nello studio su Arduino e servo motore, che potete rileggere in questa pagina, ci siamo lasciati con la promessa di controllare il servo tramite Processing. Vediamo, allora, come approfondire la nostra conoscenza di Processing, e come creare lo sketch per controllare il servo motore.

Come già abbiamo visto in questo studio, Processing è un programma davvero potente. Se non lo avete ancora fatto, andate su questa pagina e scaricate l’ultima versione che trovate per il vostro sistema operativo. Al momento, è disponibile la versione 2.0!!

Logo Processing 2

Logo Processing 2

Funzionamento

Per controllare il servo tramite Processing, scriveremo un programma davvero semplice: una volta creata l’applicazione, il servo ruoterà in base al muoversi del nostro mouse sul monitor. Cominciamo a scrivere il codice.

Schema

Lo schema per collegare il servo ad Arduino è lo stesso dello studio precedente, e che è riportato qui sotto per comodità.

Arduino Servo Motor Schema

Arduino Servo Motor Schema

Processing

Le differenze tra un programma scritto per Processing e per Arduino sono davvero molto poche: l’unica cosa da ricordare è quella di utilizzare, al posto delle due funzioni setup() e loop(), le funzioni setup() e draw().

Per prima cosa, impostiamo le dimensioni della finestra nel setup(). Quindi, creiamo una variabile che servirà per monitorare la posizione orizzontale del mouse. Per semplificare il nostro codice, creiamo una finestra larga 360 pixel: per ottenere la rotazione del servo è così sufficiente dividere a metà il valore della posizione del mouse.

Stampiamo sulla finestra, al centro, il valore in gradi della rotazione. In pratica, creo una stringa di testo per memorizzare il valore in gradi, e lo stampo con la funzione text() al centro della finestra. Difficile? No!

void setup() {
  size(360,180); // dimensioni finestra
}

void draw() {
  int gradi = mouseX/2; // posizione del servo
  String valore = gradi+"°"; // stringa da stampare

  // Debug
  // println(mouseX); // verifica posizione mouse
  // println(gradi); // verifica conversione gradi
  // println(valore); // verifica stringa da stampare

  background(128); // colore di sfondo. IMPORTANTE!!!
  textSize(32); // dimensione del testo
  textAlign(CENTER); // allineamento del testo
  text(valore,360/2,180/2); // stampo il valore (rotazione in gradi) 
}

NB: aggiungere il colore di sfondo con il comando background(128) è molto importante, perché dobbiamo “cancellare” dalla finestra il vecchio valore, prima di scrivere il nuovo. Provate a non metterlo e capirete qual è il problema 🙂 Il valore 128 è scelto tra 0-255, e rappresenta un colore in scala di grigio (0=nero, 255=bianco).

Provate a lanciare il programma. Muovendo il mouse sopra la finestra, saprete di quanti gradi ruoterà il vostro servo!

Arduino

Per poter controllare il nostro servo con il codice Processing che abbiamo appena scritto, abbiamo bisogno di qualche piccolo preparativo. Come prima cosa, scarichiamo la libreria Arduino per Processing che troviamo in questa pagina.

Una volta scaricata la libreria, dobbiamo aggiungerla a Processing. Aprite il programma e cercate, nelle preferenze, la voce Sketchbook location. Dentro quella cartella (che in genere è: Documenti/Processing) dovete creare (se già non c’è) una cartella e chiamarla libraries. Chiudete Processing e copiate la cartella arduino – che avete appena scaricato – nella cartella libraries appena creata.

A questo punto possiamo riaprire il nostro file, e includere le tre librerie che ci serviranno per comunicare con Arduino: andate in Sketch > Import Library… e aggiungete sia serial che arduino (firmata), così avremo tutto quello che ci serve.

Con l’aiuto di queste librerie, adesso possiamo creare un oggetto Arduino, configurarlo, e indicargli la presenza di un servo sul pin prescelto. Una volta fatto questo, gli diremo che il servo deve ruotare in base alla posizione del mouse!

import org.firmata.*;
import cc.arduino.*;
import processing.serial.*; // Aggiungo librerie necessarie

Arduino arduino; // crea un oggetto Arduino
int servoPin = 9; // pin collegato al servo motore

void setup() {
  [...]
  println(arduino.list()); // elenco di porte
  arduino = new Arduino(this, Arduino.list()[0], 57600); // configuro Arduino
  arduino.pinMode(servoPin, Arduino.SERVO); // configuro pin servo su Arduino
}

void draw() {
  [...]
  arduino.servoWrite(servoPin, gradi); // muovo il servo
}

Per creare correttamente l’oggetto arduino, dobbiamo prima sapere su quale porta verrà utilizzato. Per farlo, uso la funzione println(arduino.list()) che mostra l’elenco delle porte e successivamente imposto la porta corretta alla riga seguente: Arduino.list()[n] dove n è la porta a cui collego Arduino. Ricordate che l’elenco parte da 0, non da 1.

A questo punto, grazie alla comunicazione seriale, a firmata e alla libreria arduino, posso far comunicare Processing e Arduino tra loro.

Ma aspettate, c’è un’ultima cosa da fare!

Firmata

Firmata è un protocollo generico per comunicare con i micro-controllori come Arduino, e in questo caso viene utilizzato per permettere a Processing di “parlare” con Arduino e ad Arduino di “ascoltare” le direttive di Processing.

Mettiamo allora Arduino in ascolto sul protocollo firmata, in modo che possa ricevere le istruzioni di Processing. Aprite il programma Arduino, andate in File > Esempi > Firmata > StandardFirmata – e caricate lo sketch su Arduino.

Bene. Adesso, è sufficiente lanciare l’applicazione che abbiamo appena scritto et voità! il nostro servo ruoterà in base alla posizione del mouse sul monitor del nostro computer!!

Approfondimento

Se volete approfondire l’argomento Arduino+Processing, potete dare un’occhiata ad un paio di link, in particolare questo e questo.

Download: Arduino_Servo_Processing.zip

Approfitto di questo nuovo post per augurare a tutti voi, e alle vostre famiglie, un Buon Natale, Buone Feste, e un felicissimo Anno Nuovo!!!

Annunci