ラズパイでサーボモーターを制御② そのモーターは回らなかった
こんにちは。えぬです。
先日は先輩と2人でラズパイと闘っていました。
したことは
です。
目次
scrot(スクリーンショットソフト)の導入
まずは、スクリーンショットソフトの導入です。このブログで作業工程を記録していくにあたり、スクショは絶対にあった方がいい!と思い、インストールしました。参考にさせていただいたサイトはこちらです。
こちらで紹介されている、"scrot"というソフトをインストールしました。前回の活動でksnapshotをインストールしようとしたのですが、apt-getを用いてインストールしてもメニューにksnapshotが表示されず、使用を断念。”なべふぁい”の通信量を無駄に消費しただけで終わってしまいました。そこで、scrotをを今回の活動で導入しました。スクリーンショットを撮ると”/pi”のフォルダに画像が保存されます。最初はこの保存場所がわからず混乱しました(-_-;)
こんな感じにスクリーンショットを撮ることができます。
サーボモーターが回るための設定
次は本題のサーボーモーターの制御です。大変ややこしいです。そういえば、前回では具体的な目標を述べていなかったのでそれも説明していこうと思います。
目標はラズパイで、サーボモーターを制御し、2足歩行をすること。元々は先輩方が取り組まれていたので(過去の記事参照)もう必要な部品が手元にあります。まずはそれらの紹介から。
部品
サーボモーター:VSD18MB
デジットで2000円程度で販売されているものです。かなりパワフルなモーターです。カタログシートには最大消費電流が1.6Aと書かれているのですが、それだけの電力を供給できる電池を用意できるのか、不安が残ります。普通のアルカリ乾電池では電流が足りず、ラジコン等で用いられるリチウム系のバッテリーを用意する必要があるかもしれません。スペックは以下のリンク先から参照できます。
http://www.vigorprecision.com.hk/uploadfile/20120530/20120530163338446.pdf
モーターコントローラ:PCA9685
モーターは大電流を要しますので、直接ラズパイに繋ぐのでは力不足です。そこで、モーターコントローラというものを使います。「モータードライバー」「モーターコントローラー」で検索すると詳細な解説が出てくると思います。こちらのPCA9685はよく使われる製品らしく、沢山の情報がネットにあがっています。ありがたや、ありがたや…
http://akizukidenshi.com/download/ds/akizuki/AE-PCA9685.pdf
以上の部品を用いて改めてチャレンジしていきます!
PCA9685とラズパイの接続
PCA9685とラズパイはI2Cという通信方式で接続します。そのために配線をする必要があります。参考にしたのはこちらのサイト
歴代のRaspberryPiシリーズのGPIO配線図 - NAVER まとめ
まとめサイトですが、ラズパイのピンの配線図が書いてあります。これを参考に
こちらの配線例を参考につなげていきます。
こんな感じ。毎度のごとく机が汚いですね…
i2cの有効化
PCA9685とラズパイはI2cという方法で通信を行います。デフォルトではそれが無効となっているので、有効化する必要があります。
http://www.yam-web.net/raspberry-pi/servomotor.html
参考にさせていただいたのはこちらのサイト。
大変わかりやすいサイトなのですが、詳細な手順が省略されているので補足していきます。
まずは、i2cを行うのに必要なツールをインストールします。
$ sudo apt-get upgrade
$ sudo apt-get update
$ sudo apt-get install i2c-tools //I2Cをチェックするためのツール
$ sudo apt-get install python-smbus //I2C通信用ライブラリ
この、sudo というのは、管理者権限で実行という意味のコマンドです。管理者権限で実行しないと上手くいかない場合が多いのでこの"sudo"を実行したいコマンドの前におまじないのようにつけておくといいでしょう。apt-get upgrade,updateを入力することによって最新版のソフトをインストールできます。今回はpythonという言語を使って制御しようと考えているので、ついでにpythonを使うためのpython-smbusもインストールします。
次に、I2cの有効化です。
$ sudo raspi-config
と入力すると以下の画面が表示されるので、設定を進めていきます。
Interfacingを選択。
そしてI2Cを選択し、"Enable"に設定します。
これで有効化は完了です。
次に、エディタを用いてファイルを編集します。
エディタで/etc/modprobe.d/raspi-blacklist.conf を開き、
#blacklist i2c-bcm2708を確認(コメントアウトされていることを確認。あるいは、記述されていないことを確認)。
ここを直接編集してもよい?
●つづいて、 /etc/modulesを編集
最終行に追加
i2c-dev
i2c-bcm2708
ここで一旦再起動。
参考させていただいたサイトにはこのように書かれているので、これに基づいてコマンドを入力していきます。
& sudo nano /etc/modprobe.d/raspi-blacklist.conf
を入力し、”#blacklist i2c-bcm2708”という文字がないことを確認します。
ctrl+Xを押し、編集画面を終了します。続いて、
$ sudo nano /etc/modules
と入力。次に
i2c-dev
i2c-bcm2708
を最終行に入力し、ctrl+Oを入力して保存を行います。名前は編集しないので、エンターキーを押して終了させます。
この、nanoというコマンドはテキストエディタのコマンドで、上記のように様々なテキストや設定ファイルを編集することができます。同様のものに"vi"がありますが、nanoが一番使いやすいと感じます。恥ずかしながら、私もnanoの使い方を今まで知りませんでした。これは以下のサイトに詳しく乗っているので参考にするといいかもしれません。
このように解説をしてきましたが、このファイルへの書き込み作業は何のために行うかわかっていません。誰か教えて欲しいですね…
次にモーターを動かすためのドライバをインストールします。
$ sudo apt-get install git
$ sudo git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
参考サイトの記述をもとにこのコマンドを入力しましたが、ここで問題発生。gitのインストールは成功しましたが、下の行で行ったリンク先から正常にファイルがダウンロードできません。なぜか、readmeのテキストファイルしかありません。おかしい。サンプルプログラムやドライバなどが入っていないといけないのに…そこで、他のリンクからのダウンロードを試みます。そこで発見したのが下記のサイト。
”べゼリー”というラズパイを用いたロボットを販売しておられる方のサイトです。
このベセリー、ラズパイでの制御を勉強するのにもってこいなので購入してみると良いかも知れません。(ステマではない)
このサイトを参照すると、AdaFruit社がサーボドライバ「PCA9685」を使うためのモジュールを公開しているようですね。ありがたく使わさせていただきます。
$ cd
$ sudo git clone -b legacy https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
と、リンク先からダウンロードします。
ついでに、べゼリー用のプログラムも欲しい!ということでそちらもダウンロードします。というかこちらの方が解説が詳しいのでべゼリーのサンプルプログラムを使用することに決定。
$ cd
$ mkdir bezelie //この2行でべゼリー用のディレクトリ(フォルダを作成)
$ cd /home/pi/bezelie //作成したディレクトリに移動
$ sudo git clone https://github.com/bezelie/pi.git //gitからファイルをDL
この作業ではよく使う新しい2つのコマンドを使用しました。
cd: 指定したディレクトリに移動
mkdir :ディレクトリを作成
これも覚えておくと便利ですね。
$ cd /home/pi/bezelie/pi
$ python sampleServo1.py
そして、サンプルプログラムを実行。しかし…動かない。悩む2人…分からない。
ん?ブログを書いていて気づきました。AdaFruit社が公開しているファイルをコピーしていない?この作業を行っていない!
$ cd
$ sudo cp Adafruit-Raspberry-Pi-Python-Code/Adafruit_PWM_Servo_Driver/* bezelie/pi
この他にも、うまく動かない原因は以下のものが考えられます。っていうか、作業の抜けに気づかず真剣に原因の推測を行っていました…。せっかくなのでメモしておきます。
動かない原因
- モーターへの供給電力が足りない→べゼリーに使わているサーボモーターSG-90を買う
- プログラムがおかしい→プログラムを変える
- モーターコントローラの故障→同じものを新しく購入
次回の作業では動くようにしたいですね!
頑張っていきます!
他にも参考にさせていただいたサイトがあるので紹介させていただきます。
いつか、自らの知識で発信できるようになりたいですね。