Hacking an SG90 for continuous rotation to drive a blind from a board slider
Yes, me again. I want to open and close the roller blind in my office from my Hermetry board. I have a bag of SG90 servos and an ESP32. Plan: a Slider control card, 0 to 100%, sends a command to the ESP32, the servo winds the blind cord.
Problem: the SG90 only turns 180 degrees, the blind needs about 8 turns of the cord pulley. I read you can « modify a servo to run freely ». How do I do that on an SG90, and will it still know where it is?
What does modify mean here, take it apart?
Traduit de English par IA ·
Ce serait moins cher d’acheter directement un servo à rotation continue ? Ils coûtent environ 5 dollars
Cheaper to just buy a continuous rotation servo? They’re like 5 dollars
Traduit de English par IA ·
Le FS90R est la version à rotation continue du SG90, de même taille.
The FS90R is the continuous version of the SG90, same size.
Traduit de English par IA ·
Quoi que vous fassiez, placez un fin de course à chaque extrémité. Au travail, un store motorisé s’est enroulé tout seul autour de la barre.
Whatever you do, put a limit switch at both ends. We had a motorized shade at work wrap itself around the bar.
Traduit de English par IA ·
J’ai fait ça sur un lot de SG90 pour un montage pédagogique. La modification :
1. Ouvrez le boîtier, retirez le pignon de sortie. Coupez ou limez la petite languette en plastique située sous celui-ci, qui heurte la butée de fin de course.
2. Le potentiomètre sous l’axe de sortie est le retour de position. Dessoudez-le et placez à sa place deux résistances de 2,2 kΩ en diviseur fixe (les extrémités sur les pastilles externes, le milieu sur la pastille du curseur). Le servo croit maintenant toujours être au centre.
3. Remontez. Désormais, la largeur d’impulsion règle la vitesse et le sens au lieu de la position : environ 1,5 ms l’arrêtent, plus court tourne dans un sens, plus long dans l’autre. Trouvez la valeur d’arrêt exacte par essais, la tolérance des résistances la décale.
Pour ta deuxième question : non, il ne connaît plus sa position, comme un FS90R. Pour un store, c’est important ; fais donc ce que Keisha a dit : ajoute un contacteur à lames souples ou un micro-interrupteur en position entièrement ouverte et entièrement fermée, et compte le temps ou ajoute un encodeur bon marché entre les deux. Honnêtement, un SG90 est aussi faible pour un vrai store : un moteur pas à pas 28BYJ-48 avec une carte ULN2003 te donne la position gratuitement et plus de couple.
Côté carte : ajoute blind.set avec un paramètre Number de 0 à 100 dans l’onglet Commands du profil de l’ESP32, niveau Basic. Le Slider envoie la valeur une seule fois au relâchement, et non pendant que tu le déplaces, ce qui convient à un moteur. Fais publier à l’ESP32 sa position réelle sous blind_pct et lie la Current value du Slider à celle-ci, pour que la carte affiche où se trouve réellement le store.
Alimente le servo ou le moteur pas à pas avec sa propre alimentation 5 V, et non avec la broche de l’ESP32.
Did this to a pile of SG90s for a teaching rig. The mod:
1. Open the case, take out the output gear. Cut or file off the little plastic tab on its underside that hits the end stop.
2. The potentiometer under the output shaft is the position feedback. Unsolder it and put two 2.2k resistors in its place as a fixed divider (ends to the outer pads, the middle to the wiper pad). The servo now always thinks it’s at centre.
3. Reassemble. Now the pulse width sets speed and direction instead of position: about 1.5 ms stops it, shorter turns one way, longer the other. Find the exact stop value by trial, resistor tolerance shifts it.
To your second question: no, it no longer knows where it is, same as an FS90R. For a blind that matters, so do what Keisha said, add a reed switch or microswitch at fully open and fully closed, and count time or add a cheap encoder in between. Honestly, an SG90 is also weak for a real blind, a 28BYJ-48 stepper with a ULN2003 board gives you position for free and more torque.
On the board side: add blind.set with a Number parameter 0-100 to the ESP32’s profile Commands tab, Basic tier. The Slider sends the value once on release, not while you drag, which suits a motor. Have the ESP32 publish its real position as blind_pct and bind the Slider’s Current value to it, so the card shows where the blind actually is.
Power the servo or stepper from its own 5 V supply, not the ESP32’s pin.
Traduit de English par IA ·
+1 pour l’alimentation séparée, mon ESP32 redémarrait sans cesse à chaque fois qu’un servo se mettait en marche.
+1 on the separate supply, my ESP32 kept rebooting every time a servo started.
Traduit de English par IA ·
J’ai d’abord fait la modification du SG90 par pure obstination : il tourne, la valeur d’arrêt était de 1,47 ms chez moi. Il avait du mal à soulever le store, alors je suis passé au 28BYJ-48 comme le suggérait Laura, avec un microrupteur en haut pour le homing. Le slider fonctionne, Current value suit blind_pct. Le SG90 fait maintenant tourner un moulin à vent en papier sur mon bureau.
Did the SG90 mod first because I’m stubborn: it spins, stop value was 1.47 ms on mine. It could barely lift the blind though, so I switched to the 28BYJ-48 like Laura said, with a microswitch at the top for homing. Slider works, Current value follows blind_pct. The SG90 now spins a paper windmill on my desk.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

