Micro servo lowcost e Piattaforma Pico 1.0

Ciao a tutti, ieri finalmente mi è finalmente arrivato il kit Pico 1.0 preso su www.gioblu.com,(colgo l’occasione per consigliarvi il sito, gestito da persone davvero cordiali e disponibili, e soprattutto contraddistinto da una grande serietà)

Comunque, stavo iniziando a perderci un pò di tempo!

Con il prezioso aiuto di gbm sono riuscito a modificare il micro-servo (http://www.gioblu.com/prodotti?page=shop.product_details&flypage=flypage_images.tpl&product_id=138&category_id=56)

come descritto anche in questo tutorial molto interessante di Calamaro:
http://www.gioblu.com/tutorials/azionamenti/94-come-modificare-un-servomotore

Però dopo aver tolto i due stopper (uno dall’ingranaggio e uno dal potenziometro), ho richiuso il servo e collegato ad arduino e funziona, però non riesco a continuare…mi spiego:

gbm mi aveva accennato che dopo avere fatto le opportune modifiche “meccaniche” del servo, avrei dovuto collegare il servo a un potenziometro (lineare da 100Kohm) per impostare il cosiddetto “zero motore”, è proprio questo che non so come si fa…

qualcuno può aiutarmi?

Questa operazione vorrei farla prima di montare il tutto sulla piattaforma Pico 1.0 perchè sarebbe più comodo!!!

Grazie per le eventuali risposte, e in generale per l’attenzione!!

Ciao f.schiano L'idea della modifica del servo é di togliere la retroazione della posizione del servo che é dato dal potenziometro interno e sostituirlo con un valore fisso a metá scala. In questo modo se il segnale di pilotaggio é maggiore di 50% gira in un verso e se é minore gira nel altro verso. Intorno al 50% é fermo. Il potenziometro puoi lasciarlo presente ma sganciato dal ingranaggio e messo a metá oppure sostituirlo del tutto con 2 resistenze fisse che fanno un partitore di tensione 1:1. Ciao Uwe

Grazie uwe ci sono riuscito collegando i tre cavetti che erano connessi al potenziometro interno al servo a un potenziometro lineare da 100K da 11mm e lanciando il seguente programma:

#include <Servo.h>

Servo myservo;  // instanzia un oggetto servo
void setup()
{
  myservo.attach(9);  // servo collegato al pin 9
   myservo.write(75);  //Sposto il servo a 90 gradi
}

void loop()
{

}

Anche se non ho capito bene cosa fa l’istruzione " myservo.write(75)" in quanto vicino c’è scritto, sposto il mio servo di 90°, mentre a me c’è una rotazione continua…anche se ci metto un delay successivo… :S

Avete qualche link particolare da cui capire come pilotare i servo ???

grazie

la modifica che hai apportato serve a trasformare un normale servo in uno a rotazione continua. come diceva uwefed togliendo il potenziometro, in pratica togli al servo la capacità di capire dove si trova in un dato momento, per cui in teoria se dici al servo di posizionarsi sui 90° (cioè al centro della sua corsa) lui si aspetta di finire il suo movimento quando il potenziometro interno è anche lui a metà corsa (essendo solidali), quindi togliendo i blocchi meccanici e mettendo il pot al centro realizzi la stessa condizione e il servo dovrebbe stare fermo. Quando imposti un valore superiore a 90° il servo inizierà a girare per tentare di far raggiuingere al potenziometro interno il suo valore previsto, ma questo non avverrà mai perchè hai tolto il pot e quindi avrai come risultato la rotazione continua in un senso, e viceversa per valori sotto i 90° (rotazione nell'altro verso). nel codice il commento dice 90° perchè in teoria è giusto, ma in pratica i valori dei potenziometri interni non sono molto affidabili, per cui quando poi lo sostituisci ti trovi con valori pratici diversi da quelli teorici e quindi correggi o dal potenziometro o dal comando come nell'esempio (75°). :) si capiva o sono stato fumoso? :)

Mhhh, qualcosa in più l ho capita e ti ringrazio... Ma ancora un dubbio, quale è la differenza tra write75 e write 30?? A questo punto essendo una rotazione continua, ho lo stesso risultato?

Grazie

si, il risultato è uguale (come rotazione). però nel caso dell'azzeramento il servo si aspetta una certa corrispondenza fra la sua posizione ed il valore del potenziometro interno, quindi se 90° è fermo al centro, già da 91° in poi inseguirà la sua posizione (ruotando in un verso), e la stessa cosa vale per 89° (girando in verso opposto).

Ti ringrazio per la risposta e sto cominciando a capire…

…ho finito di modificare 2 micro-servo, come detto 1 lo riesco a fermare…l’altro anche lo riesco a fermare, ma con più difficoltà :frowning: …ora dovrei metterli in parallelo…giusto???

ma è normale che se uno lo fermo con un valore del potenziometro, l’altro lo fermo con un valore un pò diverso???

fatemi sapere…grazie

il codice che ho usato è questo:

#include <Servo.h>

Servo myservo;  // instanzia un oggetto servo
void setup()
{
  myservo.attach(9);  // servo collegato al pin 9
   myservo.write(75);  //Sposto il servo a 90 gradi
}

void loop()
{

}

i collegamenti potete vederli in figura:

Ciao Schiano. Ti ho risposto qui : http://www.gioblu.com/community/forum/topic?id=133&p=1652#p1652

E' possibile che i servomotori abbiano una leggera differenza nella lettura (o nell'interpretazione) del valore acquisito dai tre cavi che arrivano al potenziometro, per questo utilizzarne uno solo per regolare lo 0 di due servi non è la cosa migliore.

Quello che puoi fare è testare la resistenza del potenziometro quando con comando servo.write(90); il servomotore sta fermo. In questo caso avrai il valore della resistenza necessaria da porre al posto del potenziometro (che alla fine è un resistore variabile). Come potrai leggere nel link sopra bastera' saldare assieme due resistenze (a Y) e collegarle ai tre fili. (questo va fatto per entrambi i motori)

Anche se a 90 i servi dovessero muoversi leggermente basterà via codice scrivere un valore vicino a 90 che annulli il movimento.

Finalmente sono riuscito a farlo camminare, ed è anche grazie a questa community che imparato molte cose, se qualcuno fosse interessato a qualcosa del genere...mi contatti...naturalmente questo è un punto prettamente di partenza :)

ma è già una soddisfazione per me!!! http://www.youtube.com/watch?v=Q4YdrVxQumw&feature=player_embedded