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?
Yapay zekâ tarafından English dilinden çevrildi ·
Sürekli dönüşlü bir servo almak daha ucuz olmaz mı? Yaklaşık 5 dolar
Cheaper to just buy a continuous rotation servo? They’re like 5 dollars
Yapay zekâ tarafından English dilinden çevrildi ·
FS90R, SG90’ın boyutu aynı olan sürekli dönüşlü sürümüdür.
The FS90R is the continuous version of the SG90, same size.
Yapay zekâ tarafından English dilinden çevrildi ·
Ne yaparsanız yapın, iki uca da bir limit switch koyun. İşte motorlu bir gölgelendiricinin kendini mile sarmasını yaşadık.
Whatever you do, put a limit switch at both ends. We had a motorized shade at work wrap itself around the bar.
Yapay zekâ tarafından English dilinden çevrildi ·
Bunu bir eğitim düzeneği için bir grup SG90 üzerinde yaptım. Modifikasyon:
1. Kasayı açın, çıkış dişlisini çıkarın. Alt yüzündeki, bitiş durdurucusuna çarpan küçük plastik çıkıntıyı kesin ya da törpüleyin.
2. Çıkış milinin altındaki potansiyometre konum geri beslemesidir. Lehimini sökün ve yerine sabit bir gerilim bölücü olarak iki adet 2.2k direnç takın (uçları dış pedlere, orta ucu sürgü pedine bağlayın). Servo artık her zaman merkezde olduğunu düşünür.
3. Yeniden birleştirin. Artık darbe genişliği konum yerine hızı ve yönü belirler: yaklaşık 1.5 ms durdurur, daha kısa değerler bir yöne, daha uzun değerler diğer yöne döndürür. Tam durma değerini deneyerek bulun, direnç toleransı bu değeri kaydırır.
İkinci sorunuza gelince: hayır, FS90R’de olduğu gibi artık konumunu bilmiyor. Bir panjur için bu önemlidir, bu yüzden Keisha’nın dediğini yapın; tamamen açık ve tamamen kapalı konumlara bir reed anahtarı ya da mikro anahtar ekleyin ve aradaki süreyi sayın ya da araya ucuz bir enkoder ekleyin. Açıkçası SG90 gerçek bir panjur için de zayıftır; 28BYJ-48 step motor ile ULN2003 kartı size konumu bedavaya ve daha fazla tork ile verir.
Kart tarafında: ESP32’nin profilindeki Commands sekmesine, Basic seviyesinde, 0-100 aralığında bir Number parametreli blind.set ekleyin. Kaydırıcı değeri, sürüklerken değil bırakıldığında bir kez gönderir; bu da bir motor için uygundur. ESP32’nin gerçek konumunu blind_pct olarak yayınlamasını sağlayın ve Kaydırıcının Current value alanını buna bağlayın; böylece kart panjurun gerçekte nerede olduğunu gösterir.
Servoyu ya da step motoru ESP32’nin pininden değil, kendi 5 V kaynağından besleyin.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
Ayrı besleme önerisine +1, her servo çalıştığında ESP32’m sürekli yeniden başlıyordu.
+1 on the separate supply, my ESP32 kept rebooting every time a servo started.
Yapay zekâ tarafından English dilinden çevrildi ·
Önce SG90 modifikasyonunu inatçılıktan denedim: dönüyor, bende durma değeri 1.47 ms çıktı. Perdeyi zar zor kaldırabildi, bu yüzden Laura’nın dediği gibi 28BYJ-48’e geçtim; başlangıç konumunu bulmak için en üstte bir mikro anahtar var. Kaydırıcı çalışıyor, Current value blind_pct’yi takip ediyor. SG90 artık masamda kağıttan bir yel değirmenini döndürüyor.
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.
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Sohbete katılın
Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

