2021/07/11
昨日、今年最後の出社をしてきました!(今日は二日酔いで若干頭が痛いです)
今年も残すところあと少しなので張り切っていきましょう!
さて、今日もマークⅣを作成していこうと思います。今回はサーボモータを制御するお話です。
配線図
以前購入したPWMドライバ「HiLetgo PCA9685」とサーボモータを使ってラズパイからサーボモータを制御しようと思います。
接続図はこのようになります。Raspberry Pi Zero(以下ラズパイ)はUSBコネクタから電源供給せず、GPIOピンから電源を供給することにします。USBケーブルが不要になるので面積を小さくすることができます。また、HiLetgo PCA9685のピンの説明をざっくりまとめてみました。
項目 | 説明 | 備考 |
V+ | サーボモータ用の電源 | 上図のサーボモータと接続されている赤いラインの電源 |
VDD | IC(PCA9685)の電源 | PWMを制御するICの電源 |
SDA | I2C通信のデータ信号線 | – |
SCL | I2C通信のクロック信号線 | – |
OE | アウトプットイネーブル | このピンをHighにするとPWM出力しなくなる。今回は使わない |
GND | グランド | – |
※この説明は簡易的なものです。詳細はデータシートを参照して下さい。
配線
実際に配線していきましょう。といっても、先ほどの配線図通りにケーブルをつなぐだけです。
上の図では抵抗器が入っていますが、これは不要です(間違えてプルアップ抵抗を入れていましたが、ラズパイには不要でした)。今回の配線では、直接ハンダ付けを行わず、ブレッドボード上に配線を構築していきます。
i2c-toolsのインストール
ラズパイでI2Cの接続を確認するために”i2c-tools”をインストールします。以前と同様にTera Termからラズパイに接続して、以下のコマンドを実行します。
1 2 |
sudo apt-get update sudo apt-get i2c-tools |
問題なくコマンドが実行できれば、i2c-toolsのインストールは成功しているはずです。配線が完了している状態で以下のコマンドを実行すると、ラズパイのGPIOに接続されたデバイスのスレーブアドレスが見えるはずです。
スレーブアドレスのテーブルにスレーブアドレス(40,70)が表示されました。
トラブルシューティング
スレーブアドレスが表示されなければ、何か問題があるかもしれません。その場合は、以下の点を確認してみてください。
・配線が間違っていないかどうか
・I2Cの設定が有効になっているかどうか
Adafruit_PCA9685のインストール
Adafruit_PCA9685をインストールします。これは名前の通り、PCA9685をRaspberry PiやBeagleBoneBlackで使用するためのPythonコードです。Adafruit_PCA9685のソースコードをgit cloneしてインストールしても良いですが、今回は以下の方法で進めます。
1 |
sudo pip install adafruit-pca9685 |
エラーが発生しなければ問題なくインストールされているはずです。
i2cテストプログラムの作成
PWMドライバが接続されていることが確認できたので、今度はPythonを用いてテストプログラムを作成しましょう。今回のテストプログラムは、サーボモータを毎秒おきに一定の角度に切り替えるものを作成します。
1 |
vi servo.py |
viエディタで”servo.py”というテストプログラムを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#! /usr/bin/env python3 import time import Adafruit_PCA9685 pwm = Adafruit_PCA9685.PCA9685() pwm.set_pwm_freq(60) while True: pwm.set_pwm(0, 0, 150) pwm.set_pwm(1, 0, 150) time.sleep(1) pwm.set_pwm(0, 0, 300) pwm.set_pwm(1, 0, 300) time.sleep(1) pwm.set_pwm(0, 0, 450) pwm.set_pwm(1, 0, 450) time.sleep(1) |
入力が完了したら、”:w”で保存し、”:q”でviコマンドを終了します。
動作確認
ではコマンドを実行してサーボモータが動くか確認してみましょう。以下のコマンドを実行するとサーボモータが動くはずです。
1 |
./servo.py |
1秒ごとにサーボモータの軸の角度が変化すればOKです。
波形確認
動いている時のPWM信号(PWMドライバの黄色いピンのところ)の波形を見てみました。
安いオシロスコープ(KKmoon デジタル オシロスコープ)で制御ピンを確認してみたら、デューティー比が変化しているのがわかります。以下に実際に動作した時の動画を載せました。
動画
※動画では色々と試していたため、記事の内容と配線が異なりますが、記事の通りで問題ありません。
あとがき
今回はサーボモータの制御についてまとめてみました!今回はサーボモーターのみ動かしましたが、サーボモーターが動かせるということは、マークⅣの走行用DCモーターの速度制御やLEDの光量調節などが行えるということです!マークⅣは前照灯がありませんが、第二次世界大戦以降の戦車などを作る場合はLEDとか付けてみたいですね!
あと、今回初めてYoutubeに動画投稿してブログにリンクを埋め込んでみました。記事の補足説明に便利なので今後も使っていこうと思います。
では今回はこれで終わりにしようと思います!明日は地元に帰ってしまうので、何とかもう一記事くらい書きたいですが、無理はしないようにします(笑)。ではでは~
関連URL
関連記事
・続き↓
・前回↓
タミヤ 1/35 マークIV カメラ付きラジコン化計画 (その12) ~3Dプリンタでラズパイの台座を作成する~
・一覧↓
カメラ付きラジコン化計画シリーズ