Je l'ai écrit en utilisant le servomoteur SG-90 J'ai pensé à utiliser PI HAT, que j'avais acheté il y a longtemps. Cela n'a pas fonctionné, alors j'ai essayé.
Pour l'instant, la première chose à faire est de Vérifiez l'exemple de code sur la page du produit.
Pour traduire l'explication, 1 signifie rotation avant, -1 signifie rotation arrière et 0,5 signifie demi-puissance. Il semble que 0 soit suffisant pour arrêter la rotation.
Pour le moment, je ne sais pas à quel point la rotation sera à pleine puissance, mais je vais d'abord essayer de la tourner avec 1.
kit.continuous_servo[1].throttle = 1
Rotation inverse
kit.continuous_servo[1].throttle = -1
Hmm? Arrêtons-nous pour le moment.
kit.continuous_servo[1].throttle = 0
Ne t'arrête pas ... Arrête ~~ Pour le moment, débranchez l'alimentation du moteur.
Donc, j'ai l'impression que je peux utiliser le code suivant.
# 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)
Le point est
def fs90r_convert(throttle):
return 0.1 + throttle / 2
Donc, je mets la conversion pour FS90R. Apparemment, il ne s'arrête pas à 0, il s'arrête à 0,1. L'argument peut être rotation avant, rotation arrière ou arrêt à 0, donnant une plage de 1 à -1 comme décrit dans l'exemple de programme.
Recommended Posts