« 低価格デバイス向けWindows 8.1配布開始 | トップページ | 偏頭痛の悩み解決!?なヘッドバンド”Cefary” »

2014年5月26日 (月)

Raspberry Piで10個のサーボモーター動かしてみた

久々のRaspberry Piねたです。

思うところがあって、多チャンネルサーボ制御がRaspberry Piで出来ないか、試してみることにしました。

Img_5663jpg_2

まず買ったのはこれ。”PCA9685”という多サーボ制御用ボード。ついでにジャンパ線も買っておきました。

購入したのはSWITCH SCIENCEというところ。ここしか売ってないようです。

PCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続) - スイッチサイエンス

ところでこのPCA9685、まずはんだ付けしないといけないという難問に直面します。

Img_5664jpg_2

こんな感じにばらばらです。

Img_5667

がんばって半田ごて握って作りました。うちにある半田ごて/はんだが精密機器用でよかった。

Img_5669jpg_2

最初の4列分はかなり大変でしたが、だんだんと慣れてきます。

Img_5670jpg_2

サーボコネクタ、電源用コネクタを無事つけ終えました!やったー!!

Img_5672jpg_2

・・・と思いきや、ややコネクターがゆがんでます。

これでも使えるため問題はないのですが、ちょっとみっともないですね・・・

Img_5673jpg_2

Raspberry Piにつなぐ線はジャンパ線を直接このPCA9685につけました。

Img_5676jpg_2

どうやってつけたらいいのかが分からなかったんですが、たまたま日経Linux 6月号に

Img_5675jpg_2

こういう回路図が載っておりました。

これを参考に配線。

Raspberry Piのビデオ出力端子側を上にして、

・ PCA9685の”GND”は上段左から7つ目

・ ”SCL”は下段左から3つ目

・ ”SDA”は下段左から4つ目

・ ”VCC”は下段左から9つ目

にそれぞれ挿します(挿すのはこの4本のみ、512MBのRev.Bモデルの場合)。

Img_5680jpg_2

電源はいろいろ試しました(5V 1~2Aが必要)が、結局上のように百均で売ってる携帯電話充電用ケーブルをぶった切ってつけました。

Img_5693

大抵赤線が+極のはずなので、赤線をPCA9685の+極のほう(上の写真では青コネクターの右側の端子)に挿してネジで締めます。

あとは、iPad用充電器など、1A以上供給可能なUSB ACアダプタにUSBコネクタを挿して使います。

Img_5660jpg_2

サーボはSG90ってやつを購入。

小型で安いサーボ、10個でなんと3,990円!

Img_5661jpg_2

一つあたり400円です。かなり小さい。

さて、ハードウェア準備は整いましたが、Raspberry PiでこのPCA9685を動かすには少々準備が必要。

もちろん、Raspberry Piが必要。Raspbianのインストールもしなきゃいけませんが、こちらは以下を参照。

Raspberry Piを買ってしまいました!!: EeePCの軌跡

以降の手順を以下に。

◆I2C有効化編

まずI2Cを使えるようにしなきゃいけないそうです。

なぜかRaspbianのデフォルトは、I2Cデバイスが無効になってるそうなので、これを有効にします。

以降のやり方はこちらを参照しました。

adafruit-16-channel-servo-driver-with-raspberry-pi.pdf

PCA9685をRaspberry Piにつないでテストするまでの手順。英語でかかれてます。がんばって読みました。

まずエディタで/etc/modprobe.d/raspi-blacklist.conf を開きます。

sudo vi /etc/modprobe.d/raspi-blacklist.conf

私は”viエディタ使い”なのでviを使ってますが、一般には”nano”がよく使われるようです。

ラズベリーパイ、raspbian の nano エディタ?の使い方を少々 - ラズベリーパイで遊ぶよ~!

こちらを使う場合は”vi”のところを”nano”とするだけです。

エディタでraspi-blacklist.confを開いたら、

#blacklist i2c-bcm2708

のところで、頭文字の”#”を消します。

blacklist i2c-bcm2708

として保存。

つづいて、 /etc/modules に”i2c-dev”と”i2c-bcm2708”を追加します。

sudo vi /etc/modules

で最終行に

i2c-dev

i2c-bcm2708

と書き込み保存。

ここで一旦再起動します。

◆必要なソフトインストール編

Raspberry Piにサーボを動かすのに必要なものをインストールしていきます。

と、その前に、以下の呪文を実行しておいたほうがよさそうです。

sudo apt-get update

sudo apt-get upgrade

以下の作業でインストールがうまくいかないときは、これを唱えておくと直るようです。

さて、まずはi2c-toolsをインストールします。

sudo apt-get install i2c-tools

I2Cをチェックするためのツールです。なくてもいいかもしれませんが、一応入れておきます。

python(パイソン)というのを使うので、こちらもインストール。

sudo apt-get install python-smbus

さらに”git”というのも使うので、これも入れます。

sudo apt-get install git

このgitを使って、サーボを動かすためのドライバをインストールします。

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

インストールが終わったら、サンプルコードの入ったディレクトリに移動しておきます。

cd Adafruit-Raspberry-Pi-Python-Code

 

cd Adafruit_PWM_Servo_Driver

ここで、Adafruit_PWM_Servo_Driver.pyを編集します。

sudo vi Adafruit_PWM_Servo_Driver.py

ちょっとしたの方に”self.i2c = Adafruit.I2C(address)”という行があるので、この”address”の部分を”adress,1”と書き換えておきます(新しいRaspberry Pi Rev.Bの場合、Rev.Aモデルの方は後ろが”0”です)。

これで準備完了。

◆サーボ起動編

いよいよサーボ起動です。

PCA9685の青い電極につないだUSBコネクタをUSB ACアダプターに挿します。

ここで「ジッ」という音が鳴ったらOK。何も音がならない場合は、電極が逆につながってるか、電力不足かのどちらかです。ケーブルが壊れてる、PCA9685の半田付け不良って場合もあります。

Img_5678

SG90サーボを一個取り付けます。つけるところはID 0のところ。

PCA9685を青い電源コネクターの部分を上にしたときに、一番左のサーボコネクタに挿します。

サーボコネクターの茶色がGND(青い電極を上にしたときの、一番下の列)になるように挿します。

とりあえず、この状態で

sudo python Servo_Example.py

と打ち込みます。

サーボが一定周期で動き出したら成功。

止めるときは”CTRL”と”C”を押してください。

◆複数サーボ動作編

このままでは1つしかサーボが動かないため

Img_5682jpg_2

調子に乗って10個動かせるように”Servo_Example.py”を書き換えます。

まず、Servo_Example.pyをコピーします。

sudo cp Servo_Example.py Servo_Example2.py

コピーしたコードを編集します。

sudo vi Servo_Example2.py

最後の方に”pwm.setPWM(0,0,servoMin)”とpwm.setPWM(0,0,servoMax)”とがありますが、

Rpi_svo01

これを上のようにそれぞれ8つコピーして、最初の数字を1、2、・・・、9と変更します。

この”Servo_Example2.py”をpythonで実行すると、10個のサーボがいっせいに動作します。

なかなかどうして、圧巻ものです。

今回はとりあえず動作テストまで。

これを自在に動かせるようにしたいですね。ついでにブラウザ上で制御できるようにしたいと思っております。

で、こんなものを何に使うのか?

それは今後のお楽しみ。

マイクロサーボ SG90 (10個入)

« 低価格デバイス向けWindows 8.1配布開始 | トップページ | 偏頭痛の悩み解決!?なヘッドバンド”Cefary” »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

おもちゃ系」カテゴリの記事

コメント

git clornのところをうってみても反応がありません

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

インストールが終わったら、サンプルコードの入ったディレクトリに移動しておきます。

cd Adafruit-Raspberry-Pi-Python-Code

↑のところよくわからないです。助けてください。返信待ってます。早めに見てください。

電源はいろいろ試しました(5V 1~2Aが必要)が、結局上のように百均で売ってる携帯電話充電用ケーブルをぶった切ってつけました。

上の画像を拝見したのですが切ってどこに何をつけたか、追記してもらえませんか?
悪戦苦闘しております。∑(=゚ω゚=;)

こんにちは、matsubaraさん。

返事遅れてすいません。まず確認ですが、「git clone 〜」のところは通過できたんでしょうか?

gitというのは、サイトからソースコードを取ってくるコマンドです。

上の記事ではちょうど改行されてて、「t」だけが離れてしまってるかもしれません。正しいアドレスは

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

です。最後のgとtの間にスペースが入っていないことを確認してください。

電源コードですが、PCA9685上の青いコネクターがあります。ネジが2本付いてて、これを緩めて携帯充電コードの線をはさんで締め付けます。

百均の充電コードで、たまに赤がマイナスになってるものもあるらしいですんで、うまくいかない時は逆にして見るのも手です。

返信感謝いたします。電源の方は解決しました。
https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.gitを打ち込んだ後どうするのか
詳しく教えていただけませんか?

こちらもお礼が送れて申し訳ございません。

こんにちは、matubaraさん。

git https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git と打ち込んでEnterキーを押した後に、ずらずらっとなにやら文字が流れませんでしたか?

Enterキーを押しても反応が無い場合は、うまくデータをゲットできていないと思われます。

もし文字が流れていたなら、

ls

とタイプしてみると、 Adafruit-Raspberry-Pi-Python-Code という名前のディレクトリが出来ているはずです。

cd Adafruit-Raspberry-Pi-Python-Code

とタイプすれば、そのディレクトリ内に入ることが出来ます。

うまくいきました!

ありがとうございます。

僕はロボットをこの記事を見て動かせるのではないかと思っております。
今の進行具合ですと、電源ケーブルをぶったぎって、サーボがジッと音がするというのは確認してます。(PCA9685の電源がなぜかつかない)
ジャンパ線(♀*♀)を自作して繋げてみると、ラズベリーパイの電源が落ちます。これは接触不良ですかね?買ったほうがいいのではないかと思っておりますが...。

追記ですがlsと打つと→Adafruit-Raspberry-Pi-Python-Code Desktop ocr_pi.png python_games test.txtこれは成功ではないのかと思っております。
動作テストまで行ってないのですが、ここから先何かいいアイデア等があれば教えていただきたいです。ラズベリーパイマスターを目指します。

pi@raspberrypi:~$ sudo python Servo_Example.py
python: can't open file 'Servo_Example.py': [Errno 2] No such file or directory

sudo python Servo_Example.pyを打ち込んだ結果↑のようになりました。

改善策を教えてください

こんにちは、matsubaraさん。

sudo python ./Servo_Example.py

ではいかがでしょうか?

sudo python ./Servo_Example.pyと入力すると、以下の、メッセージが出ました。

python: can't open file './Servo_Example.py': [Errno 2] No such file or directory

どこかやり方が間違えている可能性が高いですかね・・・::?

返信が1週間ばかり遅れて申し訳ないです

こんにちは、matsubaraさん。

pythonを実行するディレクトリに”Servo_Example.py”はありますか?

”ls”と入力しディレクトリ内のファイル一覧を表示し、そこに”Servo_Example.py”がなければ上のようなNo such file or directoryといわれてしまいます。

なお、”./”とは自分の今いるディレクトリと同じ階層のファイルであることを示してます。

Servo_Example.pyをどこで打てばいいんでしょうか?

改善策お願いします

こんにちは
”address”の部分を”adress,1”と書き換えておきます
という部分で、".1"という文字をLXterminalで追加書き換えができません。
Linux超初心者です。
すみません、よろしくお願いします。

こんにちは、manaさん。

そのLXterminal上で使われているエディタってなんでしょうか?ターミナルというより、エディタによって挿入操作の方法が変わります。

私が使うのは viエディタというものすごく簡素で使いづらい(でも軽量でどんなLinuxにも実装されてる)ものを使っておりますが、viでいけばカーソルキーを”address”の最後のsの上に移動し、”a”のキーを押して”,1”と入力。最後にESCキーを押します。

一般的に、Raspberry Pi(のOS Raspbian)で推奨されてるエディタは”nano”というエディタだそうです。

https://sites.google.com/site/linuxnomemo/mint-use/nano

こちらであれば、多少はWindowsのエディタに近いといわれてるそうです。

さて、このRaspberry Piネタですが、やはりLinuxをある程度扱うことが出来ないと少々つらいと思われます。

せっかく買ったRaspberry Piなので、一度Linuxを勉強する事をお勧めいたします。最初は市販の書籍に頼るのがよろしいかと。

Linuxのコマンドラインやファイル操作、エディタの起動・編集・終了、そして”権限”という概念がある程度理解できないと(上の記事でもいちいち”sudo”とつけていますが、その意味)、おそらくこの記事はしんどいと思われます。

Raspberry Piで電子工作やプログラム作成を扱ったムック本はいろいろあります。このあたりを一冊読んでみると大体基本的な操作が可能となります。

早々のご返事ありがとうございます。
本業は電気屋(変電所等の強電)、趣味はラジコン、以前からトラ技のような世界に憧れておりラズベリーパイとこのPWM制御基板に飛びついた訳です。
ハードは弱電となっても容易に理解できるのですが、それを制御するプログラムは全くの素人で勉強するいい機会と思った訳です。
おっしゃる通りもうちょっとより道した方がよさそうです。
ちなみにnanoを使い、問題の追加書き換えはできました。
今度はサーボを一つ繋いで、sudo python Servo_Example.pyを実行したところ

Trackback (most recent call last)
File "Servo_Example.py",line 3, in
from Adafruit_PWM_Servo_Drriver import PWM
File "/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit?PWM_Servo_Driver/Ada
fruit_PWM_Servo_Driver.py", line 43
self.i2c = Adafruit_I2C(address.1)

SyntaxError: invalid syntax

と表示されサーボが動きませんでした。

すみません、ここまではどうしてもできるようにしたいのです。
ご指南よろしくお願いします。


こんにちは、manaさん。

コードを見ると、”Adafruit_I2C(address,1)”が”Adafruit_I2C(address.1)”となっており、1の前の記号がカンマ(,)ではなくピリオド(.)になってます。カンマの方が正解ですね。

なお、この電子工作の行き着いた先は以下のねたです。

http://arkouji.cocolog-nifty.com/blog/2014/07/raspberry-pi-ab.html

私は電子工作、プラモデルが苦手なので、こんな出来になってしまいました。砲塔の動作が速すぎるので、もうちょっとプログラムも改良したいところでしたが、参考文献が英語ばかりで、この辺りが限界でした。このRaspberry Piに関する情報はまだまだ日本では少ないですね。

こんにちは
お陰様で無事動きました。ありがとうございます。少し感激です。
まだ、なんでこのコマンドなんだろう?みたいな感じなので、これから少しずつ勉強しようと思います。
ありがとうございました。

こんにちは、manaさん。

おめでとうございます。思い通り動かすにはまだまだ壁はありますけど、まずはハードが正常という確認ができただけでも大きな前進です。頑張ってください。

こんにちわ。

pi@raspberrypi:~$ sudo python ./Servo_Example.py
File "./Servo_Example.py", line 14
pwm = PWM(0x40, debug=True)
^
IndentationError: unexpected indent

エラーが出てるのはわかるのですが、どのようなエラーかわかりません。
ご指摘お願いします

こんにちは、??さん。

このエラーの意味は、どうやら”インデントを空けろ”という意味だそうです。

http://aheadonestep.blogspot.jp/2008/03/python.html

pythonという言語の特徴で、for ~文ではインデントをつけないといけないようですね。

とりあえず、14行目の頭にスペースを入れてはどうでしょうか?

こんにちは。

14行目は↓が表示されており

# bmp = PWM(0x40, debug=True)

# bmp = PWM(0x40, debug=True)

としてみましたが、同様のエラーを吐きました。

何か改善策はないでしょうか・・・?よろしくお願いします。

こんにちは、??さん。

まず確認ですが、

http://raspuser.blog.fc2.com/blog-entry-8.html

の最初のほうにありますが、

sudo i2cdetect -y 1

というコマンドを入力すると、どうなるでしょう?

横の”40:”、縦”0”のところに”40”という数字が出てくるはずですが、これが表示されないと、何らかのトラブルが考えられます。

もしこのチェックがクリアできていれば・・・原因が分かりませんね。なんでしょう?

ただコメントの文章を見る限り、14行目の「# bmp = PWM(0x40, debug=True)」というのは、コメントアウトされている行ですんで、その下あたりにある「pwm = PWM(0x40, debug=True)」という文字列が14行目のような気がします。

このエラーを起こしている14行目を消して、改めて「pwm = PWM(0x40, debug=True)」と打ち直すとどうなるでしょうか?

過去の経験で、どういうわけかまれに見えない文字が入っていて、それが悪さすることがありました。この場合、行ごと消して、その行を打ち直すだけで直ります。なにかゴミが入っていることもありえますね。

こんにちは

sudo i2cdetect -y 1を実行した結果、以下のようになり表示されてると思います。

pi@raspberrypi:~$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30: 30 31 32 33 34 35 36 37 38 39 3a UU 3c 3d 3e 3f
40: 40 41 42 43 44 45 46 47 48 49 4a 4b UU UU 4e 4f
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70: 70 71 72 73 74 75 76 77

pwm = PWM(0x40, debug=True)を打ち直してみましたが、変わらず以下のエラーのままでした。

File "Servo_Example.py", line 14
pwm = PWM(0x40, debug=True)
^
IndentationError: unexpected indent

またスペースも明けてみましたが、駄目でした。何か解決に結びつく方法はないでしょうか?
質問してばかりで申し訳ございません。

こんにちは、??さん。

まずi2cdetectの実行結果ですが、すべてのアドレスに値が表示されてるというのがちょっと変ですね。

このコマンドでは、接続されてるアドレス以外はすべて"--"(ハイフン)が表示されるはずです。

PCA9685以外をRaspberry Piにつないでいないとすると、こんな風にはならないはずです。アドレス40のところに"40"と表示されるだけです。

上の"I2C有効化"は実行されましたでしょうか?あるいは、配線は正しいでしょうか?

お使いのRaspberry Piが256MB版(有線LANコネクターが付いてないRaspberry Pi)の場合は、配線の仕方などが変わります。

思いつくのはこれくらいでしょうか?

初めまして、質問したいことがありますのでここにコメントさせて頂きます。

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.gitをインストールしようとすると、プロキシのせいでうまくインストールができません。

改善策を教えていただきたいです。

こんにちは、田中政勝さん。

プロキシサーバーのURL、ポートIDなどが分かれば、以下の記事を参考に使うことが出来るようです。

http://sushichop.blogspot.jp/2013/09/git.html

$ git config --global http.proxy http://proxy.example.com:8080
$ git config --global https.proxy http://proxy.example.com:8080

のように、プロキシサーバーとポートIDを設定すればいいみたいです。
(proxy.example.comがプロキシサーバーのURLで、8080というのがポートID。Windowsをお使いなら、コントロールパネルのインターネットオプション - 接続 に書かれているはずです)

$ git config --global http.proxy http://proxy.example.com:8080
$ git config --global https.proxy http://proxy.example.com:8080

と打って見ましたが同様にエラーでインストールできませんでした。
上記の文を打ったことでエラーを出すまでの時間は短縮されたように感じました。
改善策を教えていただけないでしょうか?

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

を何度も実行したのですが、サンプルコードが見当たらないです。
PACKファイルの中にあるのでしょうか?

こんにちは、川崎さん。

この記事中のコードのアドレスの最後の一文字がどういうわけか全角の”t”になってるらしく、このためこの記事のものをコピペするとうまくいかないようになってます。すいません。何度か直してるんですが・・・

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

こちらのアドレスを使うといかがでしょうか?

コメントで全角文字になってますと書いても
質問される方は見ませんから、本文を修正した方が
早いです。
そに手の質問をする方は、コマンドラインの基本すら
知らない方ばかりなので、説明しても疲弊するだけです

こんにちは、mokekyoさん。

おっしゃる通りのことはすでに過去に何度もやってるんですが、どういうわけか記事を保存すると最後のtが何度やっても全角文字にされてしまうんです。結構困ってるんですよね。

ココログの仕様で何かバグがあると思うんですが、回避方法も見つからず、結局コメント欄で訂正するしかないのが現状です。

既に対応を考えてらしたんですね、
失礼いたしました。

記述に特別な事があるようにも見えませんが
改行後に丁度ファイル名がくるようになっているので
gitコマンドの後にスペースを多めにいれて改行する
箇所を変更してみてはいかがでしょう。


他のosでも既に書き換えをされていたりするのでしょうから
ブラウザを変更してみるとかも良いかもしれません
既に実行済みの場合は、その程度かとデュすられても
仕方ありませぬ

早い返信ありがとうございます。
記事をこぴぺはしてなくて、コマンドからインストールは出来るのですがそのファイルの中に「Adafruit_PWM_Servo_Driver.py」が見当たらない状態です。

個別に対応もいいですが時間がかかるので
回答をした部分を本文に追記してあげると
負担が少なくなるかもですね>arkoujiさん

質問からgitの設定が理解出来てない、
取得後フォルダができることが認識出来てない
のようなので、その辺りの説明を詳しくしてあげれば
いいかなと思います。

ここを見る人は他のページを参照するような事は
されないでしょう。したら、そんな質問されmせんし

こんにちは、川崎さん。

最近、アドレスが変わったようです。

上のコマンドでインストールすると「README.md」というのがあると思いますが、そこに書かれています。

今は

git clone https://github.com/adafruit/Adafruit_Python_PCA9685

とやると必要なドライバがダウンロードできて、

cd Adafruit_Python_PCA9685
sudo python setup.py install

でインストール開始。「examples」というディレクトリができるので、その中にある「simpletest.py」というのが「Adafruit_PWM_Servo_Driver.py」に相当するスクリプトのようです。

一度ご確認ください。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/510034/59693387

この記事へのトラックバック一覧です: Raspberry Piで10個のサーボモーター動かしてみた:

« 低価格デバイス向けWindows 8.1配布開始 | トップページ | 偏頭痛の悩み解決!?なヘッドバンド”Cefary” »

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ