視覚相当機能はラズパイ5の標準カメラで実現しますが、ロボットなので目玉風に格納したい
目玉の中心部にカメラ、カメラを覆うような形でサーボモーターで瞼を動かしてみる
<瞼側>
<眼球側>
サーボモーターを取り付け部分はそのままだと造形できないので、仮にサポートを立てて、後でハンダゴテで溶かしてニッパーで切り落とし、最初からニッパーだとストレスで割れます
<カメラ取り付け>
<カメラの外観>
<可動部分>
<動作の動画>
カメラからの画像をどう扱うかはこれから、YOLOとか有力だと思うけど
<サーボモーター駆動のコード>
PWM機能はgpiodにないのでソフトでPWM作成
import gpiod
import time
CHIP = 'gpiochip4' # Raspberry Pi 5では'gpiochip4'を使用
PIN = 18
chip = gpiod.Chip(CHIP)
line = chip.get_line(PIN)
line.request(consumer="Servo", type=gpiod.LINE_REQ_DIR_OUT)
def set_servo_angle(angle):
duty_cycle = (angle / 18) + 2.5
pulse_width = duty_cycle / 100 * 20000 # 20ms周期
line.set_value(1)
time.sleep(pulse_width / 1000000)
line.set_value(0)
time.sleep((20000 - pulse_width) / 1000000)
try:
while True:
for angle in range(80,141, 5):
for _ in range(10): # 各角度でn回パルスを送信
set_servo_angle(angle)
time.sleep(0.1)
except KeyboardInterrupt:
pass
finally:
line.release()
admin