[Risolto] Strano comportamento del servo-motore

Salve a tutti,
ho riscontrato recentemente uno strano comportamento nel mio servo-motore (acquistato con lo starter kit di Arduino): il programma scritto e la configurazione dei componenti elettronici sulla basetta sono giusti perché il servo obbedisce all'angolazione che gli do con un potenziometro, ma dopo pochi secondi inizia a vibrare dentro (come quando si muove) per spostarsi all'improvviso a 179 gradi, fissandosici. È la prima volta che mi capita (finora non mi avevano dato problemi né il potenziometro, né il servo), è come se dopo 2 o 3 secondi che ha eseguito la mia istruzione, di default, tornasse a 179 gradi, tentando di andare anche oltre.
Sapreste dirmi il perché?
Grazie in anticipo.

P.s.: essendo nuovissimo di Arduino ed elettronica, mi è capitato i primi giorni, 3 o 4 volte di cambiare la configurazione hardware senza staccare Arduino dal computer; potrebbe averlo danneggiato?

Ecco lo sketch e allego anche il circuito:

#include <Servo.h>
Servo myServo;

int const potPin = A0;
int potVal;
int angle;

void setup() {
 myServo.attach(8);

 Serial.begin(9600); 
}

void loop() {
 potVal = analogRead(potPin);
 Serial.print("potVal: ");
 Serial.print(potVal);
 angle = map(potVal, 0, 1023, 0, 179);
 Serial.print(", angle: ");
 Serial.println(angle);
 
 myServo.write(angle);
 delay(15);
}

Puó essere un problem adi alimentazione che il servo consuma troppa corrente che l' aliemntazione non sa dargli.
Cosa hai collagato ad Arduino e come lo alimenti?
Ciao Uwe

Uso il portatile come alimentatore.
È strano perché prima non ci ha mai fatto, solo che prima collegavo il potenziometro diversamente: nella basetta dello starter kit occupa tutta una delle due colonne di collegamenti (dalla a alla e, o l'altra), quindi lo facevo "stare" a cavallo del solco centrale e per collegare il terzo piedino del potenziometro gli facevo passare sotto un cavetto, solo che, ovviamente, a quel punto faceva male contatto; solo oggi ho pensato semplicemente di collegare comunque il terzo piedino ad un pin analogico di Arduino, senza prima "ricollegarlo" alla prima colonna di collegamenti (dalla a alla e, per esempio), passando per sotto.
Non riesco proprio a pensare cosa può cambiare in peggio; anzi, pensavo che la situazione potesse solo migliorare, visto che il potenziometro avrebbe fatto molto meglio contatto.

Puoi aver introdotto un falso contatto.
Fatti stampare sulla seriale i valori letti sul potenziometro.
Ciao Uwe

L'ho fatto: ottengo gli stessi valori che otterrei se fosse tutto normale e così sarebbe, se non fosse che dopo pochi secondi il servomotore fa come gli pare. Quindi, mentre il servomotore cambia "da solo" la propria posizione, ottengo cambiamenti di valori corrispondenti a quel movimento, come se il potenziometro si fosse effettivamente mosso, però io non ho fatto nulla.

Allora potrebbe essere un Cavetto interrotto che ognitanto fa contatto per caso. Sostituisci tutti i cavetti usati.

Ciao Uwe

Si comporta così anche se non c'è altro collegato?
In genere questo problema è dovuto alla presenza di librerie tipo SoftwareSerial..

Potresti girarci attorno creando una funzione per attivare/disattivare il pin su cui comandi il servo ogni volta che lo usi..

Qualcosa del genere

void Move(int pin, int angolo)  {
  
  pinMode(pin, OUTPUT);
  
  // ... genera movimento servo ...
  
  pinMode(pin, INPUT);
  
}

Posta lo sketch e lo schema elettrico.
Può essere che prelevi dei disturbi, ma può anche essere il potenziometro usurato che "invia dati errati", se posti il codice possiamo inserire un pò di debug.

@TheTrigger, se togli il segnale al servo perdi la forza ed è come se fosse scollegato.

Non proprio come scollegato, con la sola alimentazione hanno una certa resistenza (almeno quelli della Hitec che uso io), in ogni caso dipende cosa deve fare..

TheTrigger:
Non proprio come scollegato, con la sola alimentazione hanno una certa resistenza

Dipende dal modello di Servo, quelli analogici senza segnale in ingresso spengono il motore e la squadretta è frenata solo dalla resistenza meccanica del riduttore di giri.
Nei servo digitali sono possibili due modalità di funzionamento, in alcuni modelli è programmabile, o funzionano come i servo analogici oppure "ricordano" l'ultimo segnale di comando (il PPM) ricevuto e mantengono la posizione anche sotto sforzo.

vbextreme:
Posta lo sketch e lo schema elettrico.
Può essere che prelevi dei disturbi, ma può anche essere il potenziometro usurato che "invia dati errati", se posti il codice possiamo inserire un pò di debug.

@TheTrigger, se togli il segnale al servo perdi la forza ed è come se fosse scollegato.

Ecco, ho fatto; spero possa aiutare :confused:

sulla seriale arrivano dati corretti?
il delay puoi aumentarlo anche sui 50/60 ms, i servo sono lentucci.

Puoi provare con un condensatore nel caso si tratti di sbalzi di tensione

vbextreme:
sulla seriale arrivano dati corretti?
il delay puoi aumentarlo anche sui 50/60 ms, i servo sono lentucci.

I servo richiedono un feed dati con cadenza 50 Hz (20 ms), anche di più se sono servo digitali visto che arrivano senza problemi a 75 Hz come frame rate.

vbextreme:
sulla seriale arrivano dati corretti?
il delay puoi aumentarlo anche sui 50/60 ms, i servo sono lentucci.

@vbextreme Ho fatto, grazie! Ho portato il delay a 100 ms (tanto per sicurezza ahaha) ed ora va benissimo! Grazie! In ogni caso, il problema ho capito che era dato dal delay troppo breve, ma non capisco questo cosa implichi all'interno del servo: sarebbe come se arrivassero troppe informazioni insieme?