Blackでサーボモーターの使い方もうスカートめくり以外でウケる動画を作れないんじゃ無いかというマンネリズムに悩む日々を送っています。ばかおもちゃ本店です。動画を作ったり工作をしたりブログを書いたりしております。Blackでの使い方を書く。安いサーボが出回っていることもあり、ちょっとした動きのあるものを使うには、サーボモーターは必須のアイテムでしょう。サーボモーターについては以下のページなんかを参照のこと。上記のページにあるとおり、サーボモーターを動かすにはPWMという、マイコンなんかに付いている出力のオン/オフの周波数やデューティ比(オンオフの比率)を制御できる機能を使う。結論を書くと、サーボモーターのPWMはanalogWriteに引数を与えるだけですぐに使える。これがAVRなんかを直接叩くと結構いっぱいあるPWM関連の設定項目一個一個にどのビットが対応するみたいなことを読みながら、特定のメモリにその設定を書き込むみたいなことをやらなきゃならんので、大変簡単である。ぶっちゃけて書くと、PWMの使い方はここに書いてある。ServoMotorこれで分かる人はこれを読めば良いでしょう。分からない人のために、コードを解説します。***サンプルの説明まず前段にも書いてあるけど、前提として、サーボモーターは一定時間出力がオンになっていると、その出力時間に応じて角度が変わるというものである。上記のページを参照すると、オンになっている時間が1.5ms~2ms、一周期は15ms~20msで出力できれば良いらしい。これはメーカーによって違いがあって、Amazonで買った格安サーボは0.5ms~2.4msくらいの幅になっていた。この幅は割と一般的なものなのか、上記のBeagleBoard.orgのサンプルもこの幅に合わせてあるし、ArduinoのServoクラスもデフォルトはこれくらいの値になっている。次にanalogWriteの仕様は以下のとおり。[callback])[引数]pin:出力対象のピン名。サーボモーターのサンプルではP9_14となっている。analogWriteのページを見れば分かるが、USBポートに近い側のピンにあるPWM用のポートだ。ちなみにこういうマイコンの入出力はポートによって機能が違っているので、適当なポートに変えても良いってわけではない(PWMポートになら変えても良い)。value:デューティ比、設定値は0~1。freq:周波数(Hz)。サーボのサンプルでは60で固定されている。60Hzは1秒間に60周期あるという意味だから、一周期は1/60で約16msになる。上で書いてある15ms~20msというやつですね。callback:出力処理終了時に実行するコールバック。200);}8行目まではライブラリを読み込んで、変数の設定をしている。SERVOはサーボにつかうPWMのポート名、duty_minは0度のときのデューティ比を表している。ここでは0.03で3%になっている。上述の通り周期が約16msなので、16*0.03=0.48msが最小になる。1ms~2msのサーボを使うなら、duty_minを0.06などにする必要がある。positionは180度までを0~1で表していて、incrementはサーボの動作幅だが、どうせ実際に使うときは角度を入力して動作させるようなものにするはずなので、特に気にする必要は無い。同じ理由で、scheduleNextUpdateという関数も単純にポジションをincrement分ずつ増やしていって、1になったらincrement分減らすというだけのものなので、あんまり気にしなくて良い。実際のPWM出力の部分であるupdateDutyだが以下の二行が重要である。duty_minということで、0の時は0+0.03でデューティ比が3%になる。1の時は0.115+0.03なので0.145で14.5%になる。b.analogWriteには出力ポート、デューティ比、周波数、コールバックを渡していていて、60Hzの3~14.5%でパルス幅0.48ms~2.32msがサーボに出力される。いうことで、サンプルの説明はこんな感じ。実際につかうときは角度をパルス幅に変換したり、最小・最大時のパルス幅を設定できるライブラリみたいなものを作ってしまった方が良いだろうと思う。その辺探してみて、無かったらまた自作してみよう。24,712Amazon.co.jpで詳細を見る安いけど品質も値段なり。2,613Amazon.co.jpで詳細を見るたのしい。Blackを注文していた。Blackが届いて、とりあえずざっくりと動かしてみた。買う前はあまり日本語での情報も多くないし、前のバージョンの情報がヒットすることも多く、またOS入れ替えたりするようなバリバリのものばかりでやや不安に思っていた。実際のところ、これがびっくりするくらい簡単に使える。単純に動かすだけなら、同梱のUSBケーブルだけでプログラムを書き始めることができる。Black入門というか、使い方というか、そういうものを書いていく。A5Cという現状では最新のリビジョンのもの。マニュアルはこの写真に写ってる二つ折りの小さい紙だけ。その内容だけで普通に動かせる。ボードは黒主体でなかなか格好いい。上述のAdafruitのケースに入れるとこんな感じ。今は上蓋は開けている。取り出したら、同梱のUSBケーブルでPCと接続。するとストレージとして認識されるので直下のSTART.htmを動かす。#2の下のドライバを選択する。ここでインストールされるのはArduinoなんかでも使うUSBを仮想シリアル接続にするやつとか、USB接続を仮想LAN接続とするやつとかみたい。BlackとPCが接続される。Black上での開発について書かれたページが表示される。IDEやSSHでの接続方法など書いてある。Blackで開発をする場合は、ブラウザ上で動くIDEのCloud9を利用するか、あるいはSSHで接続して普通のLinux上での開発みたいに行うかのどちらかになる。IDEという題字のリンクを開くと、すぐエディタが表示される。私は特に使うつもりはないのであまり調べてはいないが、デバッガなんかも付いていてステップ実行なども可能らしい。IDEのURLは192.168.7.2:3000だ。ブラウザ上でコードを書いて、実行すればそのままLチカでも何でも可能だ。GPIOなどの汎用入出力の操作はBoneScriptというJavaScriptのライブラリを使えば簡単にできる。デジタル/アナログ入出力とは何かとか、PWMとは、I2Cとは何かみたいな部分は自分で勉強する他ないが、C言語でAVRマイコンを直接触るよりは取っつきやすいだろう。ちなみにpinMode()とかanalogWrite()とかメソッドの名前はArduinoと同じにしてあるっぽい。いうわけで、こんな感じで開発を始めることが出来る。USBを挿して、ドライバを入れて、192.168.7.2:3000を開けば開発が始められるので非常にシンプルだ。JavaScript(Node.js)についてある程度の知識があれば、ソフトウェア側の開発はすぐにでも出来ると言って良いだろう。***で、以下は補足みたいなことを雑多に書く。Dateというボタンを押すと時間が設定される。ボタン電池など見当たらないので、電源を切るたびに時計はずれるものと思われる。省電力なので付けっぱなしにしておいても問題はないと思う。[SSHでの接続]192.168.7.2:22にターミナルで接続できる。IDはrootでパスワードはなし。[スタンドアローンでの動作]HDMIでモニターにつないで、USBキーボードを接続すれば直接操作出来る。DHCPのLANがあればそのまま接続できる。この状態でSSHなどを利用してネットワーク越しに動かすことも出来る。電源用の5VのACアダプタやLANケーブルは同梱されていないので買う必要がある。ページ末にAmazonのリンクは貼っておくけど、私は秋月で一緒に買った。超小型スイッチングACアダプター5V2A(秋月)[HDMI]上述のとおりHDMIで接続できる。ボード側はマイクロHDMIなので、HDMI⇔マイクロHDMIのケーブルを買う必要がある。間違えないように注意。やってみてないが、とりあえずケーブルだけ買った。Amazonマークが入っていてちょっと可愛い。[ストレージ]マイクロSDをストレージとして利用できる。本体に元から2GB分のフラッシュメモリが搭載されているので、まず動かしてみようというときには、特にマイクロSDカードを買う必要は無い。BlackのSTART.htmにも書いてあるが、ボードのソフトウェアを最新版にしたり他のOS入れたりしようとするなら、マイクロSDカードを利用することになる。POWERってのが電源ボタン。普通はケーブル挿したら勝手に起動する。終了時は10秒程度長押し。nowとか流しても電源は落ちる。それで電源が落ちた後はこのボタンを押せば起動する。ちなみにACアダプタをつなげばここには写っていないPWRってLEDが点滅するんだけど、その状態では起動しているわけではなくて、POWERスイッチの左側のチップLEDがチカチカしてたら起動している状態。[USBハブ]USBは1ポートしかないので、色々つなぐならハブが必要。操作する場合でもマウスとキーボードをつなぐならハブが要る。私は一応バスパワー・セルフパワー両対応のやつを買ってみた。***というわけでざっくりとだが、印象がかなり良かったので、もっと流行って欲しいなと思って書いてみた。USBで接続して動かすだけなら何も買わなくて良いのは素晴らしい。今までまったく組み込みのプログラムを書いたことがないとか、LEDやセンサーをどうやってつないだら良いのか検討もつかないというような人にはArduinoをおすすめする。Arduinoが何より良いのは色々な作例がページや本に大量に掲載されているということだ。何か分からないときや、つまづいた時、本当はそういうときこそ物事を理解するチャンスなのだけど、それ以前にその挫折でやめてしまっては元も子も無い。その点、Arduinoなら延々ネットを調べれば、たいていのことはどうにかなるだろう。BlackはArduinoではやや物足りなくなってきたとか、Node.jsで組み込み開発したいとか、Linuxの使い方もついでにちょっと覚えてみたいなんて人にお勧めである。電子回路なんかのことは全く知らなくても、LinuxやNode.jsのことはかなり経験があるというようなプログラマにもお勧めかも知れない。Blackを使った作例というのも動画と共に作ってみようと思います。なんだか面白そうだなと思ってもらえて、手に取ってくれる人が増えて、こういうような製品が沢山出ると非常にナイスだなと思いました。*[追記]サーボモーター動かしてみた。1,154Amazon.co.jpで詳細を見るマケプレの新品の出品ってリンクからコンディションを見られる。そこにRevA5Cとかリビジョンが書いてあります。3,823Amazon.co.jpで詳細を見る秋月で買うともうちょい安い。27Amazon.co.jpで詳細を見るOS更新したりするならこれも要るけど、まず使ってみる分には無くても可。262Amazon.co.jpで詳細を見るHDMI接続するときには必要(HDMI⇔マイクロHDMI)直接モニターにつなぐ必要が無いなら要らない。202Amazon.co.jpで詳細を見る別にバスパワーでも良いだろうけど、不安なので両対応のやつ。14,200Amazon.co.jpで詳細を見る前の記事に書いたAdafruit製のケース。Blackが秋月で売っていたので衝動的に注文してしまった。boxというケースだけ来たので中身が無いまま入れ物だけ組み立てたりしてみた。Piと同じジャンルのものだ。簡単に言うと手の平に乗る程度のサイズのボード一枚に映像出力やUSB、SDカードリーダー、LANアダプタなんかが乗っていて、Linuxが動いていますよってなもの。それだけだと単なる小さいサーバーと変わらないが、GPIOってつまりデジタル入出力なんかが備わっていて、ArduinoでやるみたいにセンサやLEDを利用したりすることが出来る。Arduinoとの差異としては、Arduinoが1チップマイコンを利用したものであるのに対して、BeagleBoneやRasberryPiは上述の通りLinuxなどの汎用的なOSが動作するような普通のパソコンに近い環境であることだ。Cronでプログラムを定期的に実行させることも簡単だし、大容量のHDDなんかを扱うこともできるし、PythonやNode.jsなんかでプログラムを書くことも出来る。Linuxの知識などが必要になるので、そのあたりがさっぱり分からないとか、とにかくLEDをチカチカさせてみたいというような向きにはArduinoの方が良いだろう。RasberryPiとの違いは多少のスペック差くらいなものだ。Blackの方がやや高く、やや高性能で、入出力が非常に多い。アナログ入出力も備える。RasberryPiの方が日本語での情報は遥かに多いので、英語の情報を読むのに抵抗のある人はRasberryPiの方が良いだろう。BlackはAmazonでも秋月でも買えるので入手性は高い。Blackはまだ届いていない。BlackにしろRasberryPiにしろどれもボードがむき出しなので、ケースが色々売っていてそれを利用することができる。いうわけで、やっと私が買ったケースの話に辿り着いた。素材はアクリルでレーザーカットされているそう。Boxというのはそのまま骨箱という意味らしく角の丸みとかは骨を表したデザインになっているんじゃないかと思う。届いた状態ではこんな感じで台紙を外して使う。上の写真みたいに細かい部分にまで台紙が付いているので、精密ピンセットで剥がした。こんな感じで、前後どちらかのねじを軽く外すことで簡単にボードを取り出したりすることができる。軽く外した状態だとバラバラにならないので便利だ。GPIOを使うときは上蓋を外して使う感じになるだろう。製品については以下のページに書いてある。製品自体はAmazonから買った。Bone組み立てや使い方については以下のページにあった。System見た目としては非常に全体がテッカテカで指紋が付くのが非常に気になり、傷とか付いたらやだなーという感じである。テッカテカなので見た目はすごく良いし、GPIOなんかを使うために上蓋だけを外して利用できるのも便利だ。箱の値段が本体の半額くらいするのはどうなんだと思うが、ひとつくらいこういうものを持っていても良いのではないだろうか。Blackとかを追加で買ったときは、おもちゃの箱とかを改造して自分で適当なガワでも作ろうかと思っている。そんなわけで中身が届かないので、箱だけパコパコして待っています。967Amazon.co.jpで詳細を見るなんとなく秋月で買っちゃったけど、送料込みの分Amazonの方がお得っぽい。6,465Amazon.co.jpで詳細を見る自分でこういうの作れれば良いなーと思う。共有2013年8月15日木曜日Amazonで買えるマイクロサーボSG90は安くて良いかんじそういえば念力スカートめくりのサーボモーターにはアマゾンで売っていた安いものを使った。11,162Amazon.co.jpで詳細を見る二個で送料込み¥1,000というのはかなり安いと言って良いレベルだと思う。レビューで書かれていたりするように、動きは結構荒い感じがするが、あまり高級なサーボモーターというものを利用したことがないので、どの程度感覚が違うのかはよく分からない。私が使うようなおもちゃの用途には充分な性能なので今後も利用したい。今回みたいなちょっとした用途でも、値段を考えて普通のモーターを使おうとすると、リンク機構を作ったり、ギアを入れたりしなくてはならなくて難しいのだけど、サーボモーターがこの値段で買えるなら、くだらない用途にもガンガン使えて良いなと思った。Arduinoでサーボモーター駆動またこんなものを作ってしまった。Motionという手を認識してくれるUSBデバイスだ。送料込みで$100弱で買えるが、なかなかの精度と速度を誇るというのは動画を見てもらえばなんとなく分かると思う。このデバイスは元々SDKが提供されていて、プログラムなどから利用することが非常に容易に出来ている。MotionのドライバはWebsocketサーバーを立て、そこにアクセスすればJSONでデータを取得することもできるので、この動画ではnode.jsでそれを取得後シリアル通信でArduinoに送っている。そのあたりの技術については以下の記事に詳しく書いた。http://b.denkizakana.com/2013/07/leap-motionnodejsarduino.html動画に関しては特に言うこともないが、一番苦労したのはプログラミングではなく初音ミクのスカートを針金で固定する部分だ。出来るだけ硬くて、かつ何とか曲げられるような金属と思ってクリップを使っているのだけど、ちゃんとスカートが戻るように固定するのは大変難しかった。夜12時くらいから始めて気づけば6時くらいになっていた。俺は何をやっているんだと思った。動画とは違い、内なる声はむしろ「バカなことはやめろ」「いい大人が徹夜して何やってんだ」という感じのネガティブな方面のことばかり言っていた。だいたいこれまでもそんな感じで生きてきた。18,233Amazon.co.jpで詳細を見るいつもおつかれさまです。2,552Amazon.co.jpで詳細を見る英語サイトでも良いながら直販のが安いです。https://www.leapmotion.com/product直販のサイトは上記のURL。PLUGSという耳栓を海外から買った。