ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2013年8月24日土曜日

BeagleBone Blackでサーボモーターの使い方

もうスカートめくり以外でウケる動画を作れないんじゃ無いかというマンネリズムに悩む日々を送っています。どうも、ばかおもちゃ本店です。動画を作ったり工作をしたりブログを書いたりしております。

さて、今回は以前作ったスカートめくりの動画なんかでも使っているサーボモーターのBeagleBone Blackでの使い方を書く。安いサーボが出回っていることもあり、ちょっとした動きのあるものを使うには、サーボモーターは必須のアイテムでしょう。

サーボモーターについては以下のページなんかを参照のこと。

サーボモータの制御

上記のページにあるとおり、サーボモーターを動かすにはPWMという、マイコンなんかに付いている出力のオン/オフの周波数やデューティ比(オンオフの比率)を制御できる機能を使う。

でいきなり結論を書くと、サーボモーターのPWMはanalogWriteに引数を与えるだけですぐに使える。これがAVRなんかを直接叩くと結構いっぱいあるPWM関連の設定項目一個一個にどのビットが対応するみたいなことを読みながら、特定のメモリにその設定を書き込むみたいなことをやらなきゃならんので、大変簡単である。
更にぶっちゃけて書くと、PWMの使い方はここに書いてある。

BeagleBoard.org - ServoMotor

これで分かる人はこれを読めば良いでしょう。
分からない人のために、コードを解説します。

***

サンプルの説明

まず前段にも書いてあるけど、前提として、サーボモーターは一定時間出力がオンになっていると、その出力時間に応じて角度が変わるというものである。
上記のページを参照すると、オンになっている時間が1.5ms~2ms、一周期は15ms~20msで出力できれば良いらしい。ただこれはメーカーによって違いがあって、Amazonで買った格安サーボは0.5ms~2.4msくらいの幅になっていた。またこの幅は割と一般的なものなのか、上記のBeagleBoard.orgのサンプルもこの幅に合わせてあるし、ArduinoのServoクラスもデフォルトはこれくらいの値になっている。

次にanalogWriteの仕様は以下のとおり。

BeagleBoard.org - analogWrite

analogWrite(pin, value, [freq], [callback])

[引数]

pin:
出力対象のピン名。サーボモーターのサンプルではP9_14となっている。
analogWriteのページを見れば分かるが、USBポートに近い側のピンにあるPWM用のポートだ。ちなみにこういうマイコンの入出力はポートによって機能が違っているので、適当なポートに変えても良いってわけではない(PWMポートになら変えても良い)。

value:
デューティ比、設定値は0~1。

freq:
周波数(Hz)。サーボのサンプルでは60で固定されている。
60Hzは1秒間に60周期あるという意味だから、一周期は1/60で約16msになる。
上で書いてある15ms~20msというやつですね。

callback:
出力処理終了時に実行するコールバック。

ではサンプルを見ていく。

var b = require('bonescript');
var SERVO = 'P9_14';
var duty_min = 0.03;
var position = 0;
var increment = 0.1;

b.pinMode(SERVO, b.OUTPUT);
updateDuty();

function updateDuty() {
    // compute and adjust duty_cycle based on
    // desired position in range 0..1
    var duty_cycle = (position*0.115) + duty_min;
    b.analogWrite(SERVO, duty_cycle, 60, scheduleNextUpdate);
    console.log("Duty Cycle: " + 
        parseFloat(duty_cycle*100).toFixed(1) + " %");   
}

function scheduleNextUpdate() {
    // adjust position by increment and 
    // reverse if it exceeds range of 0..1
    position = position + increment;
    if(position < 0) {
        position = 0;
        increment = -increment;
    } else if(position > 1) {
        position = 1;
        increment = -increment;
    }
    
    // call updateDuty after 200ms
    setTimeout(updateDuty, 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だが以下の二行が重要である。
(あとはコメントと、コンソール出力なので)

    var duty_cycle = (position*0.115) + duty_min;
    b.analogWrite(SERVO, duty_cycle, 60, scheduleNextUpdate);

duty_cycleはposition*0.115 + 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がサーボに出力される。

ということで、サンプルの説明はこんな感じ。

実際につかうときは角度をパルス幅に変換したり、最小・最大時のパルス幅を設定できるライブラリみたいなものを作ってしまった方が良いだろうと思う。
その辺探してみて、無かったらまた自作してみよう。



マイクロサーボ SG90 (2個入)
Tower Pro
売り上げランキング: 24,712
安いけど品質も値段なり。

BeagleBone Black
BeagleBone Black
posted with amazlet at 13.08.25
Circuitco Electronics LLC
売り上げランキング: 2,613
たのしい。

2013年8月22日木曜日

BeagleBone Blackことはじめ/USB接続して開発を始めるまでとその他もろもろ

前のエントリでも書いたとおりBeagleBone Blackを注文していた。

BeagleBoneのケースAdafruit Bone Boxが届いた - ばかおもちゃ製作所

やっとBeagleBone Blackが届いて、とりあえずざっくりと動かしてみた。
買う前はあまり日本語での情報も多くないし、前のバージョンの情報がヒットすることも多く、またOS入れ替えたりするようなバリバリのものばかりでやや不安に思っていた。しかし実際のところ、これがびっくりするくらい簡単に使える。単純に動かすだけなら、同梱のUSBケーブルだけでプログラムを書き始めることができる。
簡単なので書くことは多くないけど、一応BeagleBone Black入門というか、使い方というか、そういうものを書いていく。


秋月で買った。Rev A5Cという現状では最新のリビジョンのもの。


マニュアルはこの写真に写ってる二つ折りの小さい紙だけ。
もっともその内容だけで普通に動かせる。


ボードは黒主体でなかなか格好いい。


上述のAdafruitのケースに入れるとこんな感じ。今は上蓋は開けている。

取り出したら、同梱のUSBケーブルでPCと接続。
そうするとストレージとして認識されるので直下のSTART.htmを動かす。


上記のページが開くので、Step #2の下のドライバを選択する。
ここでインストールされるのはArduinoなんかでも使うUSBを仮想シリアル接続にするやつとか、USB接続を仮想LAN接続とするやつとかみたい。インストールが終わると、その仮想LAN接続でBeagleBone BlackとPCが接続される。
Step #3のClick here to launch: http://192.168.7.2(下一桁は変わるかも) というところをクリックするとBeagleBone BlackのWebサーバーに接続されて、BeagleBone Black上での開発について書かれたページが表示される。このページにスクリプトの書き方からColud9 IDEやSSHでの接続方法など書いてある。


初期状態のBeagleBone Blackで開発をする場合は、ブラウザ上で動くIDEのCloud9を利用するか、あるいはSSHで接続して普通のLinux上での開発みたいに行うかのどちらかになる。

Cloud9を使う場合、この画面の中にあるCloud9 IDEという題字のリンクを開くと、すぐエディタが表示される。私は特に使うつもりはないのであまり調べてはいないが、デバッガなんかも付いていてステップ実行なども可能らしい。
ちなみにCloud9 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)についてある程度の知識があれば、ソフトウェア側の開発はすぐにでも出来ると言って良いだろう。

***

で、以下は補足みたいなことを雑多に書く。

[時刻について]
初期状態では時計が合っていないが以下の画面のSet 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カードを買う必要は無い。
ただ、BeagleBone BlackのSTART.htmにも書いてあるが、ボードのソフトウェアを最新版にしたり他のOS入れたりしようとするなら、マイクロSDカードを利用することになる。
(使わなくてもイケるかもしれないが良く知らない)

[電源ボタン]


手前側のS3 POWERってのが電源ボタン。
普通はケーブル挿したら勝手に起動する。終了時は10秒程度長押し。もちろんターミナルからshutdown -h nowとか流しても電源は落ちる。それで電源が落ちた後はこのボタンを押せば起動する。
ちなみにACアダプタをつなげばここには写っていないPWRってLEDが点滅するんだけど、その状態では起動しているわけではなくて、POWERスイッチの左側のチップLEDがチカチカしてたら起動している状態。

[USBハブ]

USBは1ポートしかないので、色々つなぐならハブが必要。
たとえば直接操作する場合でもマウスとキーボードをつなぐならハブが要る。
私は一応バスパワー・セルフパワー両対応のやつを買ってみた。
まだ使ってない。

***

というわけでざっくりとだが、印象がかなり良かったので、もっと流行って欲しいなと思って書いてみた。とにかくUSBで接続して動かすだけなら何も買わなくて良いのは素晴らしい。

もっとも今までまったく組み込みのプログラムを書いたことがないとか、LEDやセンサーをどうやってつないだら良いのか検討もつかないというような人にはArduinoをおすすめする。
Arduinoが何より良いのは色々な作例がページや本に大量に掲載されているということだ。何か分からないときや、つまづいた時、本当はそういうときこそ物事を理解するチャンスなのだけど、それ以前にその挫折でやめてしまっては元も子も無い。その点、Arduinoなら延々ネットを調べれば、たいていのことはどうにかなるだろう。

どちらかというとBeagleBone BlackはArduinoではやや物足りなくなってきたとか、Node.jsで組み込み開発したいとか、Linuxの使い方もついでにちょっと覚えてみたいなんて人にお勧めである。あるいは電子回路なんかのことは全く知らなくても、LinuxやNode.jsのことはかなり経験があるというようなプログラマにもお勧めかも知れない。

またBeagleBone Blackを使った作例というのも動画と共に作ってみようと思います。
そしてなんだか面白そうだなと思ってもらえて、手に取ってくれる人が増えて、こういうような製品が沢山出ると非常にナイスだなと思いました。



[追記]

サーボモーター動かしてみた。
BeagleBone Blackでサーボモーターの使い方



BeagleBone Black
BeagleBone Black
posted with amazlet at 13.08.22
Circuitco Electronics LLC
売り上げランキング: 1,154
マケプレの新品の出品ってリンクからコンディションを見られる。
で、そこにRevA5Cとかリビジョンが書いてあります。
本日現在(8/22)はRev A5Cが最新。


ACアダプタ 小型高信頼性5V2A【5V2A-APS】
ANTHIN
売り上げランキング: 3,823
秋月で買うともうちょい安い。

OS更新したりするならこれも要るけど、まず使ってみる分には無くても可。

HDMI接続するときには必要(HDMI⇔マイクロHDMI)
直接モニターにつなぐ必要が無いなら要らない。

別にバスパワーでも良いだろうけど、不安なので両対応のやつ。


Adafruit Bone Box - Enclosure for Beagle Bone/BeagleBone Black
Adafruit Industries
売り上げランキング: 14,200
前の記事に書いたAdafruit製のケース。
たいへんかわいい。

2013年8月18日日曜日

BeagleBoneのケースAdafruit Bone Boxが届いた

BeagleBone Blackが秋月で売っていたので衝動的に注文してしまった。
まだ届いていないけど、Amazonで注文したAdafruit製のBone boxというケースだけ来たので中身が無いまま入れ物だけ組み立てたりしてみた。

BeagleBone Blackというのは省電力のシングルボードコンピューターで最近はやりのRasberry Piと同じジャンルのものだ。簡単に言うと手の平に乗る程度のサイズのボード一枚に映像出力やUSB、SDカードリーダー、LANアダプタなんかが乗っていて、Linuxが動いていますよってなもの。もっともそれだけだと単なる小さいサーバーと変わらないが、GPIOってつまりデジタル入出力なんかが備わっていて、ArduinoでやるみたいにセンサやLEDを利用したりすることが出来る。
Arduinoとの差異としては、Arduinoが1チップマイコンを利用したものであるのに対して、BeagleBoneやRasberryPiは上述の通りLinuxなどの汎用的なOSが動作するような普通のパソコンに近い環境であることだ。つまりCronでプログラムを定期的に実行させることも簡単だし、大容量のHDDなんかを扱うこともできるし、PythonやNode.jsなんかでプログラムを書くことも出来る。
もちろんLinuxの知識などが必要になるので、そのあたりがさっぱり分からないとか、とにかくLEDをチカチカさせてみたいというような向きにはArduinoの方が良いだろう。

RasberryPiとの違いは多少のスペック差くらいなものだ。BeagleBone Blackの方がやや高く、やや高性能で、入出力が非常に多い。アナログ入出力も備える。ただRasberryPiの方が日本語での情報は遥かに多いので、英語の情報を読むのに抵抗のある人はRasberryPiの方が良いだろう。あとBeagleBone BlackはAmazonでも秋月でも買えるので入手性は高い。

もっとも延々書いたところで、BeagleBone Blackはまだ届いていない。お盆である。

ちなみにArduinoにしろBeagleBone BlackにしろRasberryPiにしろどれもボードがむき出しなので、ケースが色々売っていてそれを利用することができる。というわけで、やっと私が買ったケースの話に辿り着いた。


じゃーんこんな感じです。
素材はアクリルでレーザーカットされているそう。
ちなみにBone Boxというのはそのまま骨箱という意味らしく角の丸みとかは骨を表したデザインになっているんじゃないかと思う。


届いた状態ではこんな感じで台紙を外して使う。


上の写真みたいに細かい部分にまで台紙が付いているので、精密ピンセットで剥がした。


こんな感じで、前後どちらかのねじを軽く外すことで簡単にボードを取り出したりすることができる。軽く外した状態だとバラバラにならないので便利だ。


GPIOを使うときは上蓋を外して使う感じになるだろう。

製品については以下のページに書いてある。
製品自体はAmazonから買った。

Adafruit Bone Box - Enclosure for Beagle Bone

組み立てや使い方については以下のページにあった。

Preparation | Bone Box | Adafruit Learning System

見た目としては非常に全体がテッカテカで指紋が付くのが非常に気になり、傷とか付いたらやだなーという感じである。もちろんテッカテカなので見た目はすごく良いし、GPIOなんかを使うために上蓋だけを外して利用できるのも便利だ。
箱の値段が本体の半額くらいするのはどうなんだと思うが、ひとつくらいこういうものを持っていても良いのではないだろうか。もっとも、今後BeagleBone Blackとかを追加で買ったときは、おもちゃの箱とかを改造して自分で適当なガワでも作ろうかと思っている。

そんなわけで中身が届かないので、箱だけパコパコして待っています。



追記:届きました。

BeagleBoneのケースAdafruit Bone Boxが届いた - ばかおもちゃ製作所



BeagleBone Black
BeagleBone Black
posted with amazlet at 13.08.18
Circuitco Electronics LLC
売り上げランキング: 967
なんとなく秋月で買っちゃったけど、送料込みの分Amazonの方がお得っぽい。

Adafruit Bone Box - Enclosure for Beagle Bone/BeagleBone Black
Adafruit Industries
売り上げランキング: 6,465
自分でこういうの作れれば良いなーと思う。

2013年8月15日木曜日

Amazonで買えるマイクロサーボSG90は安くて良いかんじ


そういえば念力スカートめくりのサーボモーターにはアマゾンで売っていた安いものを使った。

マイクロサーボ SG90 (2個入)
Tower Pro
売り上げランキング: 11,162

二個で送料込み¥1,000というのはかなり安いと言って良いレベルだと思う。
レビューで書かれていたりするように、動きは結構荒い感じがするが、あまり高級なサーボモーターというものを利用したことがないので、どの程度感覚が違うのかはよく分からない。ただ私が使うようなおもちゃの用途には充分な性能なので今後も利用したい。

たとえば今回みたいなちょっとした用途でも、値段を考えて普通のモーターを使おうとすると、リンク機構を作ったり、ギアを入れたりしなくてはならなくて難しいのだけど、サーボモーターがこの値段で買えるなら、くだらない用途にもガンガン使えて良いなと思った。

2013年8月3日土曜日

念力スカートめくり機/Leap Motion + node.js + Arduinoでサーボモーター駆動


またこんなものを作ってしまった。

これまでにもうちのサイトでは書いているが、利用しているのはLeap Motionという手を認識してくれるUSBデバイスだ。送料込みで$100弱で買えるが、なかなかの精度と速度を誇るというのは動画を見てもらえばなんとなく分かると思う。
またこのデバイスは元々SDKが提供されていて、プログラムなどから利用することが非常に容易に出来ている。Leap MotionのドライバはWebsocketサーバーを立て、そこにアクセスすればJSONでデータを取得することもできるので、この動画ではnode.jsでそれを取得後シリアル通信でArduinoに送っている。
そのあたりの技術については以下の記事に詳しく書いた。

http://b.denkizakana.com/2013/07/leap-motionnodejsarduino.html

動画に関しては特に言うこともないが、一番苦労したのはプログラミングではなく初音ミクのスカートを針金で固定する部分だ。出来るだけ硬くて、かつ何とか曲げられるような金属と思ってクリップを使っているのだけど、ちゃんとスカートが戻るように固定するのは大変難しかった。夜12時くらいから始めて気づけば6時くらいになっていた。
さすがに俺は何をやっているんだと思った。
動画とは違い、内なる声はむしろ「バカなことはやめろ」「いい大人が徹夜して何やってんだ」という感じのネガティブな方面のことばかり言っていた。だいたい無視した。
だいたいこれまでもそんな感じで生きてきた。



ねんどろいどぷらす ぬいぐるみシリーズ01 「初音ミク」
Gift (2009-11-06)
売り上げランキング: 18,233
いつもおつかれさまです。

英語サイトでも良いながら直販のが安いです。

https://www.leapmotion.com/product

直販のサイトは上記のURL。