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?
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.
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.
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.
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?