Buongiorno a tutti,
come qualcuno ha già avuto modo di constatare, io sono completamente digiuno di elettronica. Ho trovato, grazie al vostro aiuto, un bellissimo pdf online della vecchia rivista "Nuova Elettronica" e sto imparando le basi, nel frattempo cerco anche articoli a destra e sinistra su quello che mi può interessare al momento.
Ho comprato da poco un clone cinese di Arduino Uno (Elegoo UNO R3) insieme ad un kit di componenti, e in questo momento mi sto cimentando con il servomotore, anche perché il primo progetto che ho intenzione di realizzare è un labirinto per biglie servocomandato (un joystick a due assi e due servomotori per i due assi di rotazione) con cui far giocare i miei figli.
Seguendo il tutorial arrivato con il kit ho collegato il servomotore (Microservo 9g SG90) alla mia board, ho caricato il programma demo "sweep" e l'ho eseguito. Funzionare funziona, ma il servo, invece di eseguire una rotazione completa di 180° come dovrebbe, si attesta sui 150° circa. Ho cercato un po' di informazioni sulla libreria e alla fine ho scoperto che in fase di inizializzazione si possono impostare manualmente i valori della lunghezza dell'impulso corrispondente a 0° e 180°, e infatti scrivendo
void setup() {
myservo.attach(9,480,2400);
}
void loop() {
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}
vedo che il servo effettivamente compie una rotazione di 180°. Però il problema non è risolto, perché se inserisco un write(90) nel mezzo, il servo non compie una rotazione intermedia di 90° ma di circa 120°... allora ho eseguito di nuovo il ciclo for dell'esempio con tempi di delay più lunghi e ho notato che per le prime 5-6 esecuzioni del ciclo (write(1), write(2) ecc...), l'angolo di rotazione dell'asse è superiore a 1° come dovrebbe essere, per poi attestarsi su valori corretti.
Ho provato a usare il metodo writeMicroseconds() e ho visto che non riesco a determinare spostamenti per valori inferiori a 550us e superiori a 2400us, ottenendo per altro una rotazione dell'albero inferiore ai 180° e molto simile a quella che ottenevo all'inizio senza specificare le "frequenze di esercizio" nel metodo di inizializzazione... però a questo punto mi sfugge il perché quei 480us specificati come opzione in "attach()" funzionino, e più in generale non capisco perché questo servo si comporti in questa maniera strana.
Lumi?
Grazie, Davide.
PS. Scusate l'edit, mi è scappato l'invio prima di finire di scrivere tutto, e per quanto riguarda il servo in sé non escludo che essendo una cinesata sia malfunzionante di suo.