- 2025-07-31 (Thu) 20:03
- 一般
物理ボタンをリモートから押したいなぁと思ったので,ラズパイ Zero 2 W に小さなサーボモータ(SG90)をつけてスイッチ押せるようにしてみた.
gpiozero の AngularServo を使ったらとても簡単で,データシートから PWM Peiod (frame_width) = 20ms, duty_cycle = 0.5ms--2.4ms という辺りの情報を拾ってコンストラクタに渡しておけば,あとは角度を代入するだけでアームがその角度になってくれる:
from gpiozero.pins.pigpio import PiGPIOFactory from gpiozero import Device Device.pin_factory = PiGPIOFactory() from gpiozero import AngularServo from time import sleep sg90pin = 18 # PWM0 servo = AngularServo(sg90pin, min_angle=-90, max_angle=90, min_pulse_width=0.5/1000, max_pulse_width=2.4/1000, frame_width=20/1000) servo.angle = 38 sleep(0.5) servo.angle = 30 sleep(1.0)
/boot/firmware/config.txt に dtoverlay=pwm を入れてればたぶんハードウェアの PWM が使えてくれてるんじゃなかろうか.スイッチ押すだけなのでソフトウェア PWM でも問題ないけれど.
あとはいい感じの位置にモータとラズパイを固定するための枠を 3D プリンタで用意して目的達成.
- Newer: ことはじめ