ラズパイ8日目①:サーボモータでカメラの角度を操作する
音声認識とか姿勢推定とか、ディジタル上の処理ばっかり作っていたわけですが
やっぱり物理的に動かしてこその組み込みシステム、ラズパイの醍醐味じゃない?
そうだ、カメラを動かそう!
というわけで『人の動きに追従するカメラ』にチャレンジ。 (こうやって思いつきで機能付け足すからいつまでも完成しないんだよな〜)
今回は、サーボモータをウィウィ動かしてみました。
- Raspberry Pi 3 Model B+
- サーボモータ:Raspberry Pi Camera B01 (Rev1.3)
サーボモータはラズパイで御用達らしいSG-90を使用。
akizukidenshi.com
上記サーボモータが2つ付いた『カメラマウント』なるぴったりのセットがあったので、こちらを購入。
Amazon SG90サーボ用2軸カメラマウント
作ったもの
1秒ごとに-90°、0°、+90°の角度に変わります。
サーボモータの接続
ラズパイのGPIOに茶線(GND)、赤線(5V)、黄色線(制御信号:私は14番を使用)を接続します。
※ラズパイ公式によると、GPIOから電源を取るのは非推奨とのこと。今回は動きを確認したいだけなので仮接続です。
GPIOやらサーボモータの仕組みやらきちんと説明したいけども、連日勤務で体力なくしてるので詳しくはまた後日…
Pythonプログラム
GPIOライブラリを使用して、SG-90に接続した14番ピンに信号を送ります。
角度に対応するパルス波は以下を参照。
角度 | パルス波 |
---|---|
-90° | 2.5 |
-45° | 4.875 |
0° | 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と連動させて、検出した人の動きに合わせて角度調整(カメラ追従)にチャレンジ予定。