KIHARA BLOG:社内ラズコンでめざせ優勝!

Raspberry Pi(ラズパイ)で機械学習とか音声認識とか姿勢推定とかしながら組み込みシステムを構築して、社内ラズコンで優勝をめざすブログです。勉強中:Raspberry Pi、Linux、Python、Coral EdgeTPU、PoseNet、Julius

ラズパイ8日目①:サーボモータでカメラの角度を操作する

音声認識とか姿勢推定とか、ディジタル上の処理ばっかり作っていたわけですが
やっぱり物理的に動かしてこその組み込みシステム、ラズパイの醍醐味じゃない?

そうだ、カメラを動かそう!

というわけで『人の動きに追従するカメラ』にチャレンジ。 (こうやって思いつきで機能付け足すからいつまでも完成しないんだよな〜)

今回は、サーボモータをウィウィ動かしてみました。

サーボモータはラズパイで御用達らしいSG-90を使用。
akizukidenshi.com

上記サーボモータが2つ付いた『カメラマウント』なるぴったりのセットがあったので、こちらを購入。
Amazon SG90サーボ用2軸カメラマウント

作ったもの


20200211MoterTest

1秒ごとに-90°、0°、+90°の角度に変わります。

サーボモータの接続

ラズパイのGPIOに茶線(GND)、赤線(5V)、黄色線(制御信号:私は14番を使用)を接続します。
f:id:KIHARA0223:20200211215437p:plain

※ラズパイ公式によると、GPIOから電源を取るのは非推奨とのこと。今回は動きを確認したいだけなので仮接続です。
GPIOやらサーボモータの仕組みやらきちんと説明したいけども、連日勤務で体力なくしてるので詳しくはまた後日…

Pythonプログラム

GPIOライブラリを使用して、SG-90に接続した14番ピンに信号を送ります。
角度に対応するパルス波は以下を参照。

角度パルス波
-90°2.5
-45°4.875
7.25
45°9.625
90°12
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)

gpio_no = 14 #SG90制御信号のピン
GPIO.setup(gpio_no, GPIO.OUT)
motor = GPIO.PWM(gpio_no, 50) #SG90のPWMサイクル周波数50Hz
motor.start(0.0)

time.sleep(5)

motor.ChangeDutyCycle(2.5)
time.sleep(1)
print('-90度')

motor.ChangeDutyCycle(7.25)
time.sleep(1)
print('0度')

motor.ChangeDutyCycle(12)
time.sleep(1)
print('90度')

GPIO.cleanup()

次回はPoseNetと連動させて、検出した人の動きに合わせて角度調整(カメラ追従)にチャレンジ予定。