Ich habe es geschrieben, als ich den Servomotor SG-90 verwendet habe Ich habe über die Verwendung von PI HAT nachgedacht, das ich vor langer Zeit gekauft hatte. Es hat nicht funktioniert, also habe ich es versucht.
Das erste, was Sie tun müssen, ist Überprüfen Sie den Beispielcode auf der Produktseite.
In der Übersetzung bedeutet 1 Vorwärtsdrehung, -1 Rückwärtsdrehung und 0,5 halbe Kraft. Es scheint, dass 0 ausreicht, um die Drehung zu stoppen.
Im Moment weiß ich nicht, wie viel die Rotation bei voller Leistung sein wird, aber zuerst werde ich versuchen, sie mit 1 zu drehen.
kit.continuous_servo[1].throttle = 1
Rückwärtsdrehung
kit.continuous_servo[1].throttle = -1
Hmm? Hören wir vorerst auf.
kit.continuous_servo[1].throttle = 0
Hör nicht auf ... Hör auf ~~ Lassen Sie uns vorerst die Stromversorgung für den Motor trennen.
Ich habe das Gefühl, dass ich den folgenden Code verwenden kann.
# Adafruit 16-Channel PWM/Servo HAT & Bonnet for Raspberry Pi & FS90R sample
#
# see:
# https://learn.adafruit.com/adafruit-16-channel-pwm-servo-hat-for-raspberry-pi
#
# test system:
# python 3.7.3
# adafruit-circuitpython-servokit 1.2.1
import time
from adafruit_servokit import ServoKit
# Set channels to the number of servo channels on your kit.
# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.
kit = ServoKit(channels=16)
ch = 1
def fs90r_convert(throttle):
"""
Parameters
----------
throttle : float
require -1.0 .. 1.0, but no check
Returns : float
-0.4(right rotation) <= 0.1(stop) <= 0.6(left rotation)
"""
return 0.1 + throttle / 2
# left rotation (0.1 .. 1.0(max))
for i in range(1,11):
v = fs90r_convert(i/10)
print( "i=%f v=%f" % (i/10, v) )
kit.continuous_servo[ch].throttle = v
time.sleep(1)
# right rotation (-0.1 .. -1.0(max))
for i in range(-1,-11,-1):
v = fs90r_convert(i/10)
print( "i=%f v=%f" % (i/10, v) )
kit.continuous_servo[ch].throttle = v
time.sleep(1)
# stop rotation
kit.continuous_servo[ch].throttle = fs90r_convert(0)
time.sleep(1)
# left rotation, max throttle
kit.continuous_servo[ch].throttle = fs90r_convert(1)
time.sleep(1)
# right rotation, half throttle
kit.continuous_servo[ch].throttle = fs90r_convert(-0.5)
time.sleep(1)
# stop rotation
kit.continuous_servo[ch].throttle = fs90r_convert(0)
Der Punkt ist
def fs90r_convert(throttle):
return 0.1 + throttle / 2
Also habe ich die Konvertierung für FS90R vorgenommen. Anscheinend hört es nicht bei 0 auf, sondern bei 0,1. Das Argument kann Vorwärtsdrehung, Rückwärtsdrehung oder Stopp bei 0 sein, was einen Bereich von 1 bis -1 ergibt, wie im Beispielprogramm beschrieben.
Recommended Posts