Go Down

Topic: SG90: potentiomètre renvoie position en analogique (Read 246 times) previous topic - next topic

kammo

Bonjour tous,

La fonction read() de la bibliothèque Servo.h m'a fait beaucoup de peine. Elle ne renvoie pas la position réelle et actuelle du servo.
Pourtant, un servo contient un potentiomètre dont on pourrait, j'imagine, récupérer la position sur les ports analogiques. J'ai rien inventé.

Ma question: est-ce que quelqu'un l'a déjà fait? Est-ce faisable sur les SG90? Je me demande si j'arriverai à souder là-dedans et si j'aurai la place de faire passer deux fils supplémentaires (ou un seul?)
Make it, or make it burn.

lesept

Tu veux dépiauter un servo ? Indiano Jones, sors de ce corps !!!!

68tjs

Tu achète un servo pas cher et tu tentes l'opération.
Si mécaniquement tu réussi a faire ce que tu veux il faudra faire un étalonnage.
Les potars sont des 270° et les servos des 180° donc tu n'excursionne qu'environ les 3/4 de la piste du potar.

Artouste

#3
Apr 16, 2018, 03:11 pm Last Edit: Apr 16, 2018, 03:11 pm by Artouste
Tu veux dépiauter un servo ? Indiano Jones, sors de ce corps !!!!
bonjour
çà pose aucun probleme 8)
discuté recemment sur un autre topic
SG90 ouvert

kammo

Tu veux dépiauter un servo ? Indiano Jones, sors de ce corps !!!!
Quatre vis, c'est à ma portée, mais j'imagine des engrenages s'envoler partout dans le salon. C'est mon côté braconnier, ça ^^

Tu achète un servo pas cher et tu tentes l'opération.
Si mécaniquement tu réussi a faire ce que tu veux il faudra faire un étalonnage.
Les potars sont des 270° et les servos des 180° donc tu n'excursionne qu'environ les 3/4 de la piste du potar.

J'ai deux SG90 à la maison, j'arrête pas de jouer avec, ce qui m'embête c'est le temps pour les recevoir, j'hésite à en casser un juste pour voir ^^
pour les 270°, c'est marrant parce que j'ai mesuré ca à la maison hier, ça doit pas être difficile à bidouiller dans le code.

Mais alors MOI avec un fer à souder CHAUD pour souder un tout pti machin... me brûler c'est s^r, j'ai l'habitude, mais tout cramer le servo ça me saoulerait...

Au passage, j'ai démonté (avec un marteau) une manette playstation, j'ai récupéré les moteurs (faute de mieux, les miens sont sur un bateau échoué entre le Havre et la Chine).
Ils semblent être en 5V, mais je ne trouve nulle part leur consommation en mA.
J'ai envie d'essayer de faire un petit robot pour embêter les chiens, mais j'ai peur de cramer ma carte, et ya pas la place dans la boite (à vis Spax) pour mettre le stepper controleur...

A votre avis, je peux les mettre en PWM?
Make it, or make it burn.

lesept

Tu achète un servo pas cher et tu tentes l'opération.
Aaah, si c'est de la chirurgie, j'ai rien dit... Faut appeler George Clooney...

68tjs

Quote
pour les 270°, c'est marrant parce que j'ai mesuré ca à la maison hier,
Tu sais pour un industriel il faut toujours plusieurs fournisseurs par composant donc miracle on a écrit des normes pour l'interchangeabilité.

Quote
Aaah, si c'est de la chirurgie, j'ai rien dit..
Tout a fait, le meilleur scapel que j'ai trouvé c'est un bistouri, au moins ça coupe tout seul sans forcer.

On en trouve sur Ebay (Chirurgical scalpel). AMHA le manche numéro 3 est le plus adapté.

Pour les maladroits (ou les malagauches car tout le monde n'est pas droitier) prévoir alcool et pansements adhésifs a portée de main (ou de ce qu'il en reste).

kammo

Bon. J'ai fouillé, et dans toutes les langues. Je n'ai pas trouvé de tuto sur le SG90 pour ça. On en voit pour le passer en 360. le mien n'est pas du tout comme sur youtube ^^
Il y a un tout piti piti PCB en dessous, avec un mille pattes dessus (un microcontroleur j'imagine)
J'ai essayé de tirer, pousser le moteur pour faire de la place, il vient pas, pareil avec le PCB, pareil avec le potard. C'est collé.
J'ai un solvant fait maison qui doit en venir à bout, mais qui va aussi tout pourrir dedans.
J'en reviens pas de n'avoir pas trouvé quelqu'un qui ait réalisé l'opération sur un élément aussi populaire...
Ou alors d'autres ont tenté et en sont venus à ma conclusion: c'est collé, m**de.

Par transparence, je crois que les fils entre le potard et le PCB sont tout droits, ils ne laisse aucune marge de manoeuvre, on ne peut pas sortir le PCB sans le potard... grrrrr

Cependant, par le dessus du potard, on voit bien trois points en cuivre, mais impossible d'y mettre mon multimètre et encore moins de souder...

Une idée?
Make it, or make it burn.

Artouste

tu a regardé le lien que j'ai mis à la reponse #4 ?

kammo

Alors NON clairement, je n'avais pas vu ton lien, toutes mes excuses.

Bon apparemment, toi, tu y es arrivé, mais je me demande comment.
Le potard est pas collé, je viens de voir ça en m'éclatant les yeux, ya deux petits trucs en plastique sur les parois, le potentiomètre vient s'y clipser... C'est sûr, je vais le péter. Je ne dispose pas de pince pour écarter (genre pince à circlips), et je ne peux rien introduire à cause du PCB.

La différence avec les SG90 sur les vidéos, et sur la photo aussi il me semble, c'est que les câbles entre le PCB et le petit potard semblent être droits, en fait je soupçonne non pas du fil souple avec du jeu mais un truc qui casse si on force.

Sur la photo, on voit bien que tout est démonté, mais on ne voit pas faire, ça m'aiderait...
Make it, or make it burn.

kammo

haha! j'ai bien un signal!
J'ai un fil à souder, mais sur une patte de mouche...

Ca vous semble cohérent que la borne du milieu du potentiomètre m'envoie sa position? (parce que moi oui).

Donc j'ai trouvé, j'y arrive avec un multimètre.
Mais comment souder un point si petit avec de l'étain de 1mm et un fer à souder à 10€?

Si j'étame un fil fin, avec beaucoup de douceur, que je le chauffe et que je le pose sur le point, est-ce qu'il va prendre?
Si je remplace ma panne par un clou fin, je meurs électrocuté  ou j'ai un outil plus précis?

Je suis chaud, ce soir, je lis un angle
Make it, or make it burn.

kammo

Bien, bien, bien ...

CA MARRRRCCCHHHEEUUUH!!!!


En me servant de mon code du jour, celui-même posté et utilisant une fonction qui permet d'auto-régler le delay (voir le code hein...); j'ai envoyé sur D5 un signal PWM, puis, sur A0, j'ai lu ce que renvoie le potentiomètre de mon SG90:

PWM:
0
ANALOG
169
 
PWM:
10
ANALOG
108
 
PWM:
20
ANALOG
135
 
PWM:
30
ANALOG
156
 
PWM:
40
ANALOG
177
 
PWM:
50
ANALOG
198
 
PWM:
60
ANALOG
218
 
PWM:
70
ANALOG
240
 
PWM:
80
ANALOG
259
 
PWM:
90
ANALOG
280
 
PWM:
100
ANALOG
299
 
PWM:
110
ANALOG
319
 
PWM:
120
ANALOG
339
 
PWM:
130
ANALOG
358
 
PWM:
140
ANALOG
378
 
PWM:
150
ANALOG
396
 
PWM:
160
ANALOG
416
 
PWM:
170
ANALOG
434

CHAMPAGNE !!!!!!

Vu que je suis chaud, je me dis, tournos-le à la main... j'ai mis au point un code très simple, mais qui fonctionne ^^
Code: [Select]
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println(analogRead(A0));
delay(1000);
}


Et vous savez quoi?

CA MAAAARRRCHE AUSSI!!

La position 0° renvoie 77
La position 180° renvoie 473

Je suis aux anges.
Est-ce que quelqu'un sait pourquoi ces chiffres?
Est-ce que je fais un tuto?





Make it, or make it burn.

lesept

Ça a une bonne tête :



Sauf la première valeur qui est hors de la droite. La droite de régression s'écrit :
Code: [Select]
ANALOG = 2.015 PWM + 95.713 avec un coefficient de 0.9992 (très proche de 1).

kammo

Haha, c'est très sympa, merci.
La première valeur n'était pas bonne, qualité de matos oblige, j'imagine, mais en recommençant, c'est vraiment nickel.
Merci pour la courbe et l'équation, j'ai envie de faire un tuto, ça peut servir à d'autres noobs.
Je me lance dans un programme d'apprentissage qui enregistre les positions dans un tableau et qui ensuite les automatise.
J'ai encore jamais fait de tableau ni d'interruptions, ça va prendre du temps.

Je suis super content de mon bidouillage :)
Make it, or make it burn.

lesept

La position 0° renvoie 77
La position 180° renvoie 473
Là aussi tu peux en tirer une droite :

Code: [Select]
A0 = 77 + angle_en_degres * (473 - 77) / 180
Attention aux divisions entière qui réservent des surprises : passe en float pour la division puis reviens en int, genre :
Code: [Select]
float angle_div = angle_en_degres / 180.0;
int Valeur_A0 = 77+angle_div * (473 - 77);



C'est de l'étalonnage. Cherche des infos sur Internet, il y a des méthodes pour rendre ça robuste. A minima, une seule mesure à 0 et une seule à 180 ne suffisent pas, il faut moyenner plusieurs mesures.

"Bonne bidouille" comme dirait Microquettas !

Go Up