Controllo MG90S (360°) Servo

Buongiorno,

Ho bisogno di controllare un Tower Pro MG90S con Arduino Uno.

Girare destra per 10, 20, 30 ... secondi, poi fermare e girare a sinistra per 10 o 20 secondi.
Sono 3 giorni che provo tutto ciò che c'è sul internet ma senza riuscirci.

Aiuto, grazie.

franco120:
Girare destra per 10, 20, 30 ... secondi, poi fermare e girare a sinistra per 10 o 20 secondi.

Sarebbe meglio se tu postassi il codice che hai scritto e che non fa quello che vuoi, comunque:

in qualche modo darai avvio al motore (pulsante, etc), quando lo fai

  • fai partire il motore e leggi il tempo (millis)
  • ad ogni ciclo del loop, controlli se sono passati 10 sec
  • se sono passati, inverti il motore e leggi il tempo, altrimenti non fai nulla
  • ad ogni ciclo del loop, controlli se sono passati 10 sec
  • se sono passati, stoppi il motore, altrimenti non fai nulla

quindi ti servono almeno una variabile per il tempo e una variabile per lo stato del motore

Federico

[update]
Quando dico "non fai nulla", intendo continui a far girare il servo. :wink:

Grazie Federico,

E' la prima volta che uso Arduino, ho seguito l'unico tutorial che ho trovato:

ed il codice fornito da loro.

Ma il mio motorino non gira continuamente come fa nel video, fa qualche scatto.

Sono capace a controllare un servo di 180° ma ma non un servo continuo 360°

franco120:
Sono capace a controllare un servo di 180° ma ma non un servo continuo 360°

I servo 360 (normali servo modificati) non puoi trattarli come i normali servo, cioè non puoi fornirgli una posizione (angolo) in quanto non avendo un riferimento questo non ha senso!
I servo 360 possono solo girare in un senso o nell'altro.

Solitamente funzionano cosi:

myServo.write(0);    // Gira in senso orario
myServo.write(90);   // Ferma servo  nel video usa 60/58
myServo.write(180);  // Gira in senso antiorario nel video usa 180/106

//oppure
myServo.writeMicroseconds(2000);  // Gira in senso orario
myServo.writeMicroseconds(1500);  // Ferma servo
myServo.writeMicroseconds(1000);  // Gira in senso antiorario

che poi è quello che fa il tizio del video, anche se i valori potrebbero essere diversi!

Prova ad usare writeMicroseconds, anche se ho il sospetto che il movimento a scatti potrebbe dipendere dalla qualità del motore!

Ti consiglio la lettura di questo, questo e questo.

Federico

Federico,

Capito il codice e letto tutto da te segnalato.

Allora il mio servo MG90S, dichiarato 360° non può girare in continuo ?
Quello del tizio nel tutorial invece gira in continuo e non mi sembra un motore DC.

Nel link da te segnalato, Mauro Alfieri usa DF15HSR 360 gradi. Ho provato il suo codice
ma non riesco ad avere rotazione continuo. Anche il suo motorino é un servo 360 gradi. (?)

Cosa devo fare per avere un motorino che gira in continuo, avanti e dietro ?
Usare un motorino DC ? Quanti posso controllare con Arduino Uno ?

Grazie per l'aiuto e scusa la mia ignoranza in materia.

franco120:
Allora il mio servo MG90S, dichiarato 360° non può girare in continuo ?

Per capire se il tuo è veramente un 360, nel setup fallo girare di 90 gradi (servo.write(90);) e lascia vuoto il loop, se si muove (di circa 90°) e poi si ferma, è un normale 180.

Quelli dei tutorial sono tutti servo 360 (DS04-NFC) (DF15HSR)

franco120:
Cosa devo fare per avere un motorino che gira in continuo, avanti e dietro ?
Usare un motorino DC ? Quanti posso controllare con Arduino Uno ?

Prima di tutto, dovresti dirci per cosa ti serve, qual’è il tuo progetto, quindi sicuramente qualcuno più esperto in motori, potrà consigliarti :slight_smile:

Federico

Grazie Federico.

Ho preso un granchio, il servo è di 180°.
Bastava leggere le specifiche invece di fidarmi di parola dell'amico.

Mi dispiace per il disturbo.