Leggere la velocità di un servo

Ciao a tutti. In merito ai servocomandi come questo di esempio http://www.savoxusa.com/Savox_SB2252SG_6_0V_Brushless_Digital_Servo_p/savsb2252mg.htm ho letto diversi post che danno la possibilità di testarlo e comandarlo in mille modi. Ma non sono riuscito a trovare un progetto che, collegato il servo ad Arduino, mi indichi la velocità massima che può raggiungere il servo stesso.

Esiste un caricabatterie in particolare (http://www.icharger.co.nz/Products/4010-Duo.aspx) che ho visto funzionare da un amico che ha una porta per i servi da modellismo tramite la quale vengono effettuati una serie di test sul servo e fin qui non è un problema : di progetti di test ce ne sono tanti. Uno di questi test mi da come risultato la velocità massima alla quale si può muovere il servo.

Avete qualche idea in merito a come si potrebbe realizzare una prova così? Io ho anche letto le varie istruzioni della library dei servi ma non mi sembra di aver visto qualcosa che faccia quanto sto cercando.

Grazie

mgaproduction: Avete qualche idea in merito a come si potrebbe realizzare una prova così? Io ho anche letto le varie istruzioni della library dei servi ma non mi sembra di aver visto qualcosa che faccia quanto sto cercando.

Molti servo digitali sono programmabili in alcune loro caratteristiche, serve l'apposita interfaccia/programmatore, però solo pochissimi modelli forniscono un feedback del loro stato, inoltre è quasi sempre tramite un protocollo proprietario del costruttore che nessuno conosce. La velocità massima di un servo, a vuoto, è un parametro noto perché fa parte delle caratteristiche tecniche dichiarate dal costruttore, è un valore attendibile se parliamo di servo di buona qualità. Per quanto ne so io nessun servo da modellismo, quei pochi dotati di feedback, fornisce la velocità istantanea di rotazione, solo i servo specifici per Robotica danno questa informazione e tante altre.

Grazie. Quello che dici è tutto vero però quel caricabatterie se ne infischia dei protocolli di comunicazione dei servi programmabili.
Qualunque servo tu gli attacchi (ho provato io con un servo cinese da 20€), lui fa tutte le prove classiche ed in più ti dice la velocità del servo.
Che è nient’ altro che il dato che citi tu che viene dichiarato dal costruttore. Il problema è che i costruttori non sempre dichiarano il vero.
Il dato dovrebbe essere tipo questo : a 6V di alimentazione, il servo xyz impiega 0,10 secondi per un movimento di 60°.

Stavo pensando : visto che non esiste questa funzione di lettura della velocità, esiste una possibile lettura di un qualche ciclo di clock di Arduino? Se imposto un programma che legge il clock, subito dopo esegue un’operazione di spostamento dell’alberino del servo di 60° e subito dopo ancora rileggo il clock.
A questo punto, sapendo quanti impulsi di clock sono passati e la loro durata posso risalire alla velocità nonchè il tempo.

Ti pare una cosa sensata?

mgaproduction: subito dopo esegue un'operazione di spostamento dell'alberino del servo di 60° e subito dopo ancora rileggo il clock.

Il punto chiave è che in qualche modo devi sapere quando parte e quando si ferma il servo, senza questa informazione col clock non ci fai nulla, e comunque Arduino ha la micros() che permette di conteggiare un intervallo di tempo in microsecondi. Posso ipotizzare che quel caricabatterie, con funzione servo tester, misura la corrente assorbita dal servo, a riposo o in moto, per ottenere una stima se il servo è in movimento oppure è fermo, però non è una cosa semplice da mettere in pratica con Arduino.

Dunque, la micros() riporta in tempo che è intercorso dallo starup del sw quindi credo che sia totalmente inutile per il mio scopo. Purtroppo ragionandoci su, neanche la mia idea di prima funzionerebbe perchè io in realtà saprei quando dò il comando ma non saprei quando l'esecuzione dello stesso da parte del servo finisce....

Come venirne fuori?

mgaproduction: Dunque, la micros() riporta in tempo che è intercorso dallo starup del sw quindi credo che sia totalmente inutile per il mio scopo.

Puoi fare la differenza del micros() al termine con quelli all'inizio. Devi misurare la corrente che assorbe il Servo. Puoi mettere una resistenza nel ramo di alimentazione e amplificare il valore per poterlo leggere / triggerare il movimento.

Ciao Uwe

uwefed:

mgaproduction: Dunque, la micros() riporta in tempo che è intercorso dallo starup del sw quindi credo che sia totalmente inutile per il mio scopo.

Puoi fare la differenza del micros() al termine con quelli all'inizio. Devi misurare la corrente che assorbe il Servo. Puoi mettere una resistenza nel ramo di alimentazione e amplificare il valore per poterlo leggere / triggerare il movimento.

Ciao Uwe

La vedo già molto difficile per quelle che sono le mie capacità su Arduino ... Ci studio su un pò in ogni caso. Ma prima cercherò di fare qualche esperimento con la micros() per capire se e quando esattamente parte il conteggio e se per caso esistesse la possibilità di resettarlo conuna qualche funzione specifica.