Go Down

Topic: controllo due motori passo passo con joystick (Read 587 times) previous topic - next topic

yamahandrea

Buonasera a tutti, sono nuovo del forum ed ho subito un mio progetto da sottoporvi:

come da titolo voglio far funzionare due motori passo passo, che ho montato su una mia struttura in costruzione, quindi con tanto di 4 finecorsa per non forzare le manovre in finecorsa, e fin qui l'idea c'è...

Ho acquistato (spero si possano citare i modelli)

Arduino MEGA
una scheda shield driver per motori passo passo: Pixnor L293D Drive Motor Shield per Arduino
2 motorini passo passo recuperati da una videocamera per videosorveglianza
joystick 2 assi che nella descrizione sembrano essere tipo quelli della play2 se ho capito bene
svariati finecorsa

Ora ho provato i joystick con una rappresentazione grafica sul pc, e fin qui ci siamo, ho copiato il testo del programma da una guida cercando di capire cosa significasse ciò che ho copiato, e fin qui ci siamo, certo non avrei saputo farlo da solo, il mio problema principale è qui;

Finora ho stabilito le fasi del motore con il multimetro e ho collegato la mia schedina su arduino mega, sto cercando un progetto simile da capire o una guida che mi faccia capire come fare, se qualcuno sapesse scrivermi il programma e ne avesse la pazienza qui nel forum mi sarebbe molto utile, o anche solo indicazioni su cosa dovrei sapere e magari dove cercarlo...
 
Spero di essermi spiegato bene, non sono mai stato iscritto ad un forum e non so muovermi bene ma sono aperto ad ogni critica e spero che la mia domanda possa essere utile magari anche ad altri.. Grazie!

ExperimentUno

Per i motori c'è una libreria da consultare. Fai qualche prova e se ci sono dubbi, scrivi cosa hai fatto e cosa succede. Con molti dettagli perché non lo vediamo quello che fai.

yamahandrea

Ho trovato la libreria e nel frattempo ho fatto un pò di prove e ho steso uno sketch... mi è sorta una piccola peplessità:
per definire l'avanzamanto avanti o indietro dei motori ho dato un valore di x e y riferito al joystick se x<450 forward se x>550 backward...
é possibile rendere proporzionale la velocità del motore passo passo in base a questi valori?

ExperimentUno

Se il joystick è analogico, si può fare. Altrimenti potresti "giocare" sul periodo che il joystick rimane in quella posizione e gradualmente accelerare. Oppure anche altri tipi di funzioni che si usano con un contatto (tale è quello del joystick). Dovresti guardare la libreria OneButton

yamahandrea

il joystick è analogico e mi restituisce un valore da 0 a 1024, però la velocità al motore passo passo la do durante il setup   
motor1.setSpeed(100);
motor2.setSpeed(100);   

ExperimentUno

Se è analogico, allora è facile mappare il valore della lettura analogica con la velocità del motore. C'è solo da definire lo zero. Se leggendo zero è tutto da un lato e 1023 è tutto l' altro allora lo zero numero di giri è 511. Invece se zero è quando non è usato ed il massimo è 1023, allora le letture sono su due canali, se sbaglio correggi. Infine in tale modo servono 4 canali, che nel primo caso sono 2.

Da questa lettura puoi dare
Code: [Select]

int m1speed = 0;
int m2speed = 0;

speed1 = map(analogRead(channel1, 0,1023,-200,200) // abbiamo lo zero a 511

motor1.setSpeed(speed1);

speed2 = map(analogRead(channel2, 0,1023,-200,200) // abbiamo lo zero a 511

motor2.setSpeed(speed2);

Nel caso di 4 canali, il map dovrebbe essere simile
Code: [Select]

speed1 = map(analogRead(channel1, 0,1023,0,200) // abbiamo da 0 a 200
speed2 = map(analogRead(channel2, 0,1023,0,-200) // abbiamo da 0 a -200
speed3 = map(analogRead(channel3, 0,1023,0,200) // abbiamo da 0 a 200
speed4 = map(analogRead(channel4, 0,1023,0,-200) // abbiamo da 0 a -200

if (speed2) motor1.setSpeed(speed2);        // ammesso che canale 1 registri zero
else motor1.setSpeed(speed1);
if (speed4) motor1.setSpeed(speed4);        // ammesso che canale 3 registri zero
else motor2.setSpeed(speed3);



yamahandrea

Grazie mille, solo una cosa: come posso impostare un valore più ampio di zero per evitare un'isteresi del sistema? Cioè aumentare il range di zero? Ah e una seconda cosa che shield mi consigli per pilotare due motori passo passo con assorbimento attorno ai 2.5 A?

yamahandrea

La posizione di fermo, ovvero il joystick a riposo corrisponde a 511

Go Up