Arduino

Arduino

Arduino e Processing

Dopo aver messo in comunicazione seriale Arduino e VB, ho visto che si può fare lo stesso con Processing, un sofware che ha una IDE simile a quella di Arduino ed una corrispondenza, per certi versi, anche nella struttura del linguaggio di programmazione. Processing è stato creato per la grafica ma con la sua evoluzione è diventato perfettamente interfacciabile con Arduino per mezzo della porta seriale.
I dati che il microcontrollore invia a Processing sono convertiti in grafico 2D e possono rappresentare il comportamento di un sensore o di un attuatore che lavora in ambiente Arduino.


Prima di iniziare, alcune istruzioni di base per programmare con Processing:

size(X,Y): rappresenta l'area del disegno  
background(X): rappresenta lo sfondo dell'area del disegno; X variabile da 0 a 255  
smooth(): evita la spigolosità delle forme disegnate  
strokeWeight(X): rappresenta lo spessore del tratto delle forme disegnate con X intero  
line(X1,Y1,X2,Y2): disegna una linea che parte dal punto X1,Y1 ed arriva al punto X2,Y2 espressi in pixel
triangle(X1,Y1,X2,Y2,X3,Y3): disegna un triangolo con i vertici in X1,Y1 X2,Y2 ed X3,Y3  
quad(X1,Y1,X2,Y2,X3,Y3,X4,Y4): disegna un quadrato con i vertici in X1,Y1 X2,Y2 X3,Y3 X4,Y4  
rect(X,Y,larghezza,altezza): disegna un rettangolo a partire da vertice in alto a sinistra X,Y avente una certa larghezza ed una certa altezza  
ellipse(X,Y,larghezza,altezza): disegna una ellisse di centro X,Y e semiassi pari a larghezza ed altezza; se altezza = larghezza è ovvio che sarà disegnato un cerchio  
arc(X,Y,larghezza,altezza,angolo di inizio, angolo di fine): disegna un arco
fill(X,Y,Z): definisce il colore di riempimento della forma disegnata secondo la regola RGB con X,Y,Z variabili da 0 a 255  
nostroke(): disegna le forme prive di contorno  
fill(X,Y,Z,trasparenza): disegna la forma con un colore X,Y,Z e con una trasparenza variabile da 0 a 100  
stroke(X,Y,Z): definisce il colore del bordo della forma disegnata  
textSize(X): imposta la grandezza del testo  
textAlign(LEFT): allinea il testo a sinistra  
text(testo da scrivere,X,Y): scrive un testo a partire dalla posizione X,Y overRect(X,Y,W,H) = true/flase: restituisce true oppure false a seconda se il puntatore del mouse è sopra la forma oppure no
mousePressed: fornisce 0 o 1 a seconda se il pulsante è premuto oppure no  
mouse(X),mouse(Y): imposta le coordinate del mouse nell'area di disegno  
etc...

Per impostare una comunicazione seriale tra arduino e Processing o tra Processing ed Arduino bisogna importare, prima di tutto, una libreria con il comando:  

import Processing.serial.*
Poi seguono gli altri comandi che rendono la porta di Arduino attiva per la comunicazione:
 
Serial MyPort;: dichiara la porta attraverso la quale transitano i dati tra Arduino e Processing  
MyPort = newSerial(this,"COM3",9600);: assegna alla MyPort il nome COM3 e la velocità di trasmissione dati
MyPort.Write(X);: trasmette ad Arduino il carattere contenuto nella variabile X etc...

Si nota che l'interfaccia (IDE) presenta una certa similitudine con quella di Arduino.



Un esempio che ho fatto è quello riguardante la carica di un condensatore elettrico il cui codice è disponibile al seguente link: Carica condensatore.

Nella zona compresa tra le righe 1 e 10 ho dichiarato un insieme di variabili che servono allo scopo.

Nella zona compresa tra le righe 13 e 32 (setup()) ho preparato la lavagna dove deve essere disegnato il grafico.

Il comando size(500,500) stabilisce la zona grafica in pixel

background(255) imposta lo sfondo con il colore bianco mentre tutte le altre istruzioni servono per disegnare la griglia, gli assi cartesiani, le denominazioni degli stessi e la graduazione numerica in verticale ed in orizzontale( vedi line(X1,Y1,X2,Y2) e text(testo,X,Y)).

Le istruzioni stroke(), strokeWeight(),fill() servono rispettivamente per stabilire il colore della linea, lo spessore del tratto ed in fine il colore del testo.

Le istruzioni triangle() e textSize() parlano da sole e mi servono per creare il verso degli assi cartesiani e per stabilire la grandezza del font.

Nella zona compresa tra le righe 38 e 50(draw()) ho destinato il codice ripetitivo per disegnare la curva di carica.
L'istruzione smooth() serve per smussare gli spigoli durante il disegno.


Ho poi creato un progetto che consente ad Arduino di inviare dati a Processing in modo che esso li traduca in grafico. Si tratta di una semplice simulazione matematica in quanto sulla scheda non esiste alcun componente.
Il codice di questa applicazione è disponibile al link: Arduino_RC e Processing_RC.






  

Nessun commento:

Posta un commento