(nie) buczące servo
Posted on pon 28 maja 2018 in micropython
Bawię się IoT i szumi mi serwo. W prawie każdej pozycji, kiedy się nie przesuwa - buczy i hałasuje. I denerwuje.
Po konsultacji z Doktorem Góglem wynika że albo serwo jest kiepskie i trzeba kupić inne, albo jest ustawiane w pozycji w której nie potrafi się ustawić i trzeba znaleźć inną [2], albo nadajnik sygnału daje sygnał na tyle niedokładny że każe serwu ustawić się raz tak a raz inaczej i trzebaby wstawić kondensator żeby to uśrednić [3], albo podłączenie do różnych źródeł zasilania [4] i/lub niepołączenie ich mas.
Żadna z tych sugestii nie okazała się przydatna dla mnie. Wszystkie serwa które mam mają tę przypadłość, próbowałem podłączać i do takich samych, i do różnych źródeł zasilania, masa jest wspólna, próbowałem różnych pozycji ustawienia serwa i cały czas buczy. Raz bardziej, raz mniej, ale cały czas.
Dlatego postanowiłem serwo po prostu ... wyłaczyć jak dojdzie do celu.
Założyłem że 1s wystarczy żeby serwo przesunęło się z pozycji minimalnej na maksymalną (to może być różne dla różnych serw), kod wygląda tak:
from random import random
import machine
import time
class Servo:
def __init__(self, pin_num):
self.pin = machine.Pin(pin_num, machine.Pin.OUT)
self.pwm = machine.PWM(self.pin)
self.pwm.freq(50)
self.pwm.duty(0)
self.pos = None
def set(self, pos):
ftime = 1.0
if self.pos is None:
sleeptime = ftime
else:
sleeptime = ftime * abs(pos - self.pos)
self.pos = pos
duty = int(40 + (115-40)*pos)
self.pwm.duty(duty)
print("sleeptime", sleeptime)
time.sleep(sleeptime)
self.pwm.duty(0)