Servo
Сервоқозғалтқыш — бұл белгілі бір бұрышқа бұрыла алатын мотор. Кәдімгі мотордан айырмашылығы, ол еркін айнала алмайды (сондықтан одан желдеткіш немесе машина дөңгелегін жасау мүмкін емес), бірақ микроконтроллердің көмегімен серво жетегінің бұрылу бұрышын жарты градус дәлдігімен орнатуға болады, және ол берілген күйді ұстап тұрады.
Негізгі қолдану
Servo(pin) -> Servo
Servo объектісін жасау үшін Servo(pin) шақырыңыз.
Аргументтер:
pin (int)— пин порты (8, 9 немесе 12)
Қайтарады:
pin үшін Servo объектісін қайтарады.
Ішінде серво 50 Гц жиіліктегі ИЕМ арқылы басқарылады (период = 20 мс). Жиілік автоматты түрде орнатылады — оны қолмен баптаудың қажеті жоқ.
from pibody import Servo
servo = Servo(9)
.angle(angle | None) -> None | int
Серво бұрышын алу немесе орнату (0–180 градус).
Аргументтер:
angle (float)— серво бұрышын [0, 180] градус диапазонында орнататын опционалды параметр
Аргументсіз шақырғанда ағымдағы бұрышты [0, 180] қайтарады, әйтпесе бұрышты орнатып, None қайтарады.
Геттер объект арқылы соңғы орнатылған бұрышты қайтарады (аппаратурадан оқылған мәнді емес). Егер бұрыш әлі орнатылмаған болса, None қайтарылады.
from pibody import Servo
from time import sleep
servo = Servo(8)
servo.angle(180)
sleep(1)
print(servo.angle()) # 180
servo.angle(90)
sleep(1)
servo.angle(0)
sleep(1)
print(servo.angle()) # 0
servo(angle | None) -> None | int
Servo объектісін функция ретінде шақыруға болады — шақыру .angle() сияқты жұмыс істейді.
Аргументтер:
angle (float)— серво бұрышын [0, 180] градус диапазонында орнататын опционалды параметр
servo(90) бұрышты орнатады, servo() ағымдағы бұрышты қайтарады.
from pibody import Servo
servo = Servo(9)
servo(90) # servo.angle(90) сияқты
print(servo()) # 90
.on()
ИЕМ шығысын қайта инициализациялайды (сервоны қосады).
servo.on()
.off()
ИЕМ шығысын деинициализациялайды (сервоны өшіреді).
servo.off()
PWM арқылы тікелей басқару
Servo класы енді duty, duty_u16 және freq әдістеріне қол жеткізуді бермейді. Егер төмен деңгейлі басқару қажет болса, Servo орнына PWM объектісін тікелей жасаңыз:
from pibody import PWM
servo = PWM(8)
servo.freq(50) # қолмен орнату қажет
Серво орны ИЕМ сигналының импульс енімен басқарылады, тікелей толтыру коэффициентімен емес. Мысалы, стандартты 180° серво 0,5 мс (0°) мен 2,5 мс (180°) аралығындағы импульсті күтеді, әр 20 мс сайын қайталанады (50 Гц).
freq импульстің қайталану жиілігін орнатады — серво үшін бұл 50 Гц болуы керек (период = 20 мс). duty сигналдың жоғары күйде болатын бөлігін орнатады. Бұрышты duty мәніне түрлендіру:
pulse_width = (angle / 180) * 2 + 0.5 # 0,5–2,5 мс
duty = pulse_width / SERVO_PERIOD_MS # 20 мс бөлігі
PiBody жинағында SERVO_PERIOD_MS = 20 (1000 // freq тең).
Ұсынылған диапазоннан асу (мысалы, 180° серво үшін импульс > 2,5 мс) сервоға зақым келтірмейді — көптеген модельдер артығын елемей, максималды бұрышта ұстап тұрады. Кейбіреулері механикалық тоқтауда әлсіз гүілдеу шығаруы мүмкін; бұл қалыпты жағдай. 0,5 мс минималды мәнінен төмен мәндер де серво аппаратурасымен 0° күйіне дейін қысылады.
Төмендегі әдістер — pibody.PWM әдістері, мұнда сервоға қолданылған түрде көрсетілген.
.duty(value | None) -> None | float
Бұрышты duty арқылы орнатуға болады. Алдымен бұрышты импульс еніне түрлендіріңіз:
pulse_width = (angle / 180) * 2 + 0.5
Осыдан кейін импульс енін толтыру коэффициентіне түрлендіріңіз:
duty = pulse_width / SERVO_PERIOD_MS
int мәндерін пайдаланыңыз [0.025, 0.125] диапазонында. Мән 0 сервоны өшіреді.
Аргументтер:
value (float)— ИЕМ толтыру коэффициентін орнататын опционалды параметр. [0, 0.125] аралығындағы мәнді қабылдайды. Әдепкі: 0
Егер value бос болса, әдіс бұрын пайдаланылған толтыру коэффициентін қайтарады.
from pibody import PWM
SERVO_PERIOD_MS = 20
servo = PWM(8)
servo.freq(50)
angle = 90
pulse_width = (angle / 180) * 2 + 0.5 # 1.5
duty = pulse_width / SERVO_PERIOD_MS # 0.075
servo.duty(duty)
print(servo.duty()) # 0.075
.duty_u16(value | None) -> None | int
.duty() сияқты, бұрышты duty_u16 арқылы орнатуға болады. u16 16-биттік мәнді білдіреді.
int мәндерін пайдаланыңыз [1638, 8191] диапазонында Мән 0 сервоны өшіреді.
Аргументтер:
value (int)—pibody.PWMтолтыру коэффициентін орнататын опционалды параметр. [1638, 8191] аралығындағы мәнді қабылдайды. Әдепкі: 0
Егер value бос болса, әдіс бұрын пайдаланылған толтыру коэффициентін қайтарады.
from pibody import PWM
SERVO_PERIOD_MS = 20
servo = PWM(8)
servo.freq(50)
angle = 90
pulse_width = (angle / 180) * 2 + 0.5 # 1.5
duty = pulse_width / SERVO_PERIOD_MS # 0.075 (нормаланған)
duty_u16 = int(duty * 65535) # ~4915
servo.duty_u16(duty_u16)
print(servo.duty_u16()) # 4915
.freq(value | None) -> None | int
freq импульстің қайталану жиілігін орнатады — серво үшін бұл 50 Гц болуы керек (период = 20 мс).
Аргументтер:
value (int)— ИЕМ жиілігін орнататын опционалды параметр. Әдепкі: 50
Егер value бос болса, әдіс бұрын пайдаланылған жиілікті қайтарады.
pwm.freq(50)
print(pwm.freq()) # 50