(nie) buczące servo

Posted on pon 28 maj 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)