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?
Traducido del English por IA ·
¿No sale más barato comprar directamente un servo de rotación continua? Cuestan unos 5 dólares
Cheaper to just buy a continuous rotation servo? They’re like 5 dollars
Traducido del English por IA ·
El FS90R es la versión de rotación continua del SG90, del mismo tamaño.
The FS90R is the continuous version of the SG90, same size.
Traducido del English por IA ·
Hagas lo que hagas, pon un final de carrera en ambos extremos. En el trabajo, una persiana motorizada se enrolló sola alrededor de la barra.
Whatever you do, put a limit switch at both ends. We had a motorized shade at work wrap itself around the bar.
Traducido del English por IA ·
Hice esto con un montón de SG90 para un montaje didáctico. La modificación:
1. Abre la carcasa, saca el engranaje de salida. Corta o lima la pequeña lengüeta de plástico de su parte inferior que choca con el tope final.
2. El potenciómetro bajo el eje de salida es la realimentación de posición. Desuéldalo y pon dos resistencias de 2,2 kΩ en su lugar como divisor fijo (los extremos a las pistas exteriores, el centro a la pista del cursor). El servo ahora siempre cree que está en el centro.
3. Vuelve a montarlo. Ahora el ancho de pulso controla la velocidad y la dirección en lugar de la posición: unos 1,5 ms lo detienen, más corto gira en un sentido y más largo en el otro. Encuentra el valor exacto de parada por prueba y error, ya que la tolerancia de las resistencias lo desplaza.
A tu segunda pregunta: no, ya no sabe dónde está, igual que un FS90R. En una persiana eso importa, así que haz lo que dijo Keisha: añade un interruptor reed o un microinterruptor en totalmente abierta y totalmente cerrada, y cuenta el tiempo o añade un encoder barato intermedio. Sinceramente, un SG90 también es débil para una persiana real; un motor paso a paso 28BYJ-48 con placa ULN2003 te da la posición gratis y más par.
En cuanto a la placa: añade blind.set con un parámetro Number de 0 a 100 en la pestaña Commands del perfil del ESP32, nivel Basic. El Slider envía el valor una vez al soltarlo, no mientras arrastras, lo que encaja con un motor. Haz que el ESP32 publique su posición real como blind_pct y vincula el Current value del Slider a ella, para que la tarjeta muestre dónde está realmente la persiana.
Alimenta el servo o el paso a paso con su propia fuente de 5 V, no con el pin del 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.
Traducido del English por IA ·
+1 a lo de la alimentación separada, mi ESP32 se reiniciaba todas las veces que arrancaba un servo.
+1 on the separate supply, my ESP32 kept rebooting every time a servo started.
Traducido del English por IA ·
Primero hice la modificación del SG90 por terquedad: gira, y en mi caso el valor de parada fue 1,47 ms. Apenas podía levantar la persiana, así que cambié al 28BYJ-48 como dijo Laura, con un microinterruptor arriba para el homing. El slider funciona, Current value sigue a blind_pct. El SG90 ahora hace girar un molinillo de papel en mi escritorio.
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.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

