Joystick e servomotori

Salve a tutti, dovrei fare un progetto in cui muovo 4 sevomotori MG90 con 2 shield joystick.
Vorrei che se mando avanti la levetta analogica il servo giri poi se la levetta analogica torna al punto iniziale il servo rimanga in quella posizione e non torni indietro, viceversa se mando la levetta analogica indietro il servo gira all'indietro e quando rimetto la levetta analogica al punto di origine il servo rimanga fermo.
Come devo fare?
In giro ci sono solo esempi in cui il servo segue alla lettera il movimento del joystick
P.S.
Non sono un esperto in programmazione, però una piccola base ce l'ho.
Grazie a tutti per la pazienza

Innanzi tutto..... quali shield joystick ?

Che tipo di shield joystick hai (link)?
Ciao,
P.

pgiagno:
Che tipo di shield joystick hai (link)?
Ciao,
P.

La shield del joystick è questa
http://www.dx.com/p/qj-xm1121-new-arduino-joystick-shield-development-board-red-black-176818#.WKsabNThBLU

Il joystick fornisce un segnale analogico dal terminale X (avanti/indietro) e un segnale analogico dal terminale Y (sinistra/destra). Se alimentato (+ = 5Vcc, - = GND) sul terminale X e su Y dovrebbero esserci 2,5V. Muovendo il joystick in avanti e indietro si dovrebbe ottenere un'escursione fra 0 e 5V sul terminale X. La stessa cosa sul terminale Y muovendo il joystick da sinistra a destra.
Supponiamo di avere 0V a joystick tutto avanti e 5V a joystick tutto indietro. Il programma che vuoi fare dovrebbe comportarsi così: joystick al centro = 2,5V = servo fermo; joystick in avanti = tensione IN DIMINUZIONE <2,5V = servo in avanti; joystick ritorna al centro = tensione IN AUMENTO <2,5V = servo fermo FINO A 2,5V; joystick indietro = tensione IN AUMENTO >2,5V = servo all'indietro; joystick ritorna al centro = tensione IN DIMINUZIONE >2,5V = servo fermo FINO A 2,5V
Stessa solfa per sinistra/destra.
Ciao,
P.

pgiagno:
Il joystick fornisce un segnale analogico dal terminale X (avanti/indietro) e un segnale analogico dal terminale Y (sinistra/destra). Se alimentato (+ = 5Vcc, - = GND) sul terminale X e su Y dovrebbero esserci 2,5V. Muovendo il joystick in avanti e indietro si dovrebbe ottenere un'escursione fra 0 e 5V sul terminale X. La stessa cosa sul terminale Y muovendo il joystick da sinistra a destra.
Supponiamo di avere 0V a joystick tutto avanti e 5V a joystick tutto indietro. Il programma che vuoi fare dovrebbe comportarsi così: joystick al centro = 2,5V = servo fermo; joystick in avanti = tensione IN DIMINUZIONE <2,5V = servo in avanti; joystick ritorna al centro = tensione IN AUMENTO <2,5V = servo fermo FINO A 2,5V; joystick indietro = tensione IN AUMENTO >2,5V = servo all'indietro; joystick ritorna al centro = tensione IN DIMINUZIONE >2,5V = servo fermo FINO A 2,5V
Stessa solfa per sinistra/destra.
Ciao,
P.

Non so come fare il programma però, ho provato tantissime combinazioni ma nulla

Emmm ... ti prego di considerare che, purtroppo qui NON funziona così ... :confused:

... qui nessuno scrive software per conto terzi o realizza schemi su ordinazione, ma si aiuta chi viene qui a correggere/ottimizzare il software che lui scrive o gli schemi che lui realizza :slight_smile:

Se non hai mai sviluppato su Arduino, o hai sviluppato molto poco, puoi cominciare con studiare QUESTO proseguire con QUESTO e/o acquistare qualche buon libro (es. QUESTO) ... dopo di che puoi cominciare a scrivere il tuo programma, metterlo qui (... mi raccomando, sempre racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) e chiedere aiuto sui punti che non ti funzionano o che non capisci.

Buono studio e buon lavoro ... :slight_smile:

Guglielmo

Intanto riesci a pilotare il servo con uno dei tanti esempi trovati in rete? Se si, avrai visto che per centrare il servo devi inviare un valore X, mentre per spostarlo a destra devi aumentare questo valore e per spostarlo a sinistra lo devi diminuire (o viceversa ma non è importante adesso), sai anche che il joystick quando è in posizione di riposo ipoteticamente dovrebbe fornire un valore di 512 (visto che il range di un segnale analogico letto va da 0 a 1024) mentre questo valore varia aumentando o diminuendo a seconda da dove lo sposti, adesso basta che ti fai le condizioni giuste di IF dove quando il valore del joy è più alto di 512 si vada ad incrementare il valore di X fino al massimo voluto e diminuisca quando il valore è sotto 512, così facendo varia il valore di X che usi per pilotare la posizione del servo senza essere vincolato alla posizione del joystick... spero di essermi spiegato in modo un po' comprensibile

1024 posizioni differenti se il software e il servo saranno in grado di gestire una risoluzione di 1uSec senza tremolare, più realisticamente si potrà ottenere una risoluzione di 4uSec cioè 250/256 posizioni differenti senza tremolare