RaspberryPi + HiPi + PCA9685 でサーボを動かしてみよう
2019/06/16 22:46
category:RaspberryPi
センサー類はだいたいいじれる様になってきたので、サーボに手を出してみました。
ラズパイ用のセンサー類をだいたい網羅したモジュールを作ってる人がおったんですね。ありがたいこっちゃ。
HiPi Perl Modules for Raspberry Pi
こちらを使って調理したいと思います。
モジュールインストール
そのままcpanなりcpanmすると、依存関係で失敗しました。
Installation手順にあるapt-getを使って依存関係にあるパッケージをインストールするのが良いでしょう。
sudo apt-get update
sudo apt-get install libmodule-build-perl \
libdevice-serialport-perl \
libfile-copy-recursive-perl \
libfile-slurp-perl \
libjson-perl \
libtry-tiny-perl \
libuniversal-require-perl \
libio-epoll-perl \
libimage-imlib2-perl \
libbit-vector-perl \
libxml-libxml-perl \
libwww-perl
後、
sudo apt-get install cpanminus
sudo cpanm HiPi
にて無事インストールできました。cpanの方は試してないけど多分問題ないでしょう。
稼働テスト
サンプルに記載されているものは、コマンドラインからオプションを付けて実行するものでした。
なので、まずはシンプルに稼働させてみます。
use strict;
use warnings;
use HiPi qw( :pca9685 );
use HiPi::Interface::PCA9685;
my $pwm = HiPi::Interface::PCA9685->new(
address => 0x40,
external_clock => 0,
backend => 'smbus',
);
my $servotype = $pwm->register_servotype( #ここの値は、サーボによって変えます。以下はSG-90の例です。
pulse_min => 500,
pulse_max => 2400,
degree_range => 180,
degree_min => 0,
degree_max => 180,
);
$pwm->set_servo_degrees(0,$servotype,0,0);
sleep 1;
$pwm->set_servo_degrees(0,$servotype,90,0);
sleep 1;
$pwm->set_servo_degrees(0,$servotype,180,0);
exit
# set_servo_degrees(サーボの番号,サーボのタイプ,角度,ディレイ値)
ディレイ値を使うとカクカクしますが、値分ゆっくり動きます。
ただ、ディレイ値を使って複数のサーボを同時に動かすと
0番目のサーボを動かす⇒止まる⇒1番目のサーボを動かす⇒止まる
となり、並行して稼働してくれません。。
その為、値を0にし、ちょっとづつ並列で動かしながらTime::HiResをかまさないといけない感じがしました。
あれ、めんどくさいぞ?
とりあえず、何かしら歩行させてみたいですね。