[Squeak-ja: 4600] Re: Scratch + Arduinoいろいろ試してます
Toshiyuki Kamada
tkamada @ gmail.com
2011年 7月 23日 (土) 05:52:35 JST
鎌田です。
阿部さん、早速ありがとうございます。
> たぶんこれはGoGo Boardのコードですね。
> http://www.gogoboard.org/
むむむ、GoGo BoardとSensorBoardが切り分けられているのは気づいていたので注意していたのですが、結局そちらでしたか(SensorBoardにモータはつながらないから、僕が仕様を知らないWeDoの隠れ仕様なのかなと漠然と考えていました)。WeDoがA,
B 2個のモータをもつ、というのは後述のご示唆で確認できました。
> Scratchが標準でサポートするデバイスには、SensorBoard(aka PicoBoard)、WeDo、そしてGoGo Boardがあります。
> この内、SensorBoardとGoGo
> Boardは排他で、ScratchBoard監視盤(SensorBoardMorph)のShift+右ボタンメニューで切り替えます(SensorBoardMorph>>rightButtonMenu)。
> モーター関連のメソッドはGoGo BoardとWeDoのものが混ざっており、センダーなどを確認してどちらに属するものか調べる必要があります。
ありがとうございます。コードの該当部分を確認しました。
>> ただ、モータ番号を指定するブロック(Morph)はありませんので、現在の実装がどうなっているのか、変更するならどのあたりか、といったことを若干ご示唆いただければと思っております。
>
> SensorBoardWithMotorで私が変更したのはSensorBoardの方です。このプロトコルは、ボードへのデータ送信要求として1サイクルごとにPCから1バイト(16r01)を送っていたので、これをモーター1個分の回転方向用に2ビット、モーターのパワー用に6ビット使って送信するように変えました(SensorBoardMorph>>processIncomingData)。
なるほど、ハンドシェイク用の1バイトを流用した形でしたか。納得です。
> UIのブロックとそのためのメソッドはWeDo用のものを流用しています(ScriptableScratchMorph>>motorOn:など)。
> その他の変更箇所は、SensorBoardWithMotor.1.csをご覧ください。
> この設計は、ArduinoにSensorBoardとWeDoの両方の機能を持たせ、ハード、ソフト共に最低限の変更(モータードライバーとWeDo用コネクターの追加など)で低コストに両方の機能を活かしつつ、プロジェクトファイルの互換性を維持することを意図しています(公式サイトで共有可能)。それらを超える能力は狙っていません。
ありがとうございます。ScriptableScratchMorphにセレクタがあるのですね。
一点だけ、知識が足りなくて、.csというのがどこを指しているのかわかりませんでした。
一応、ChangeFileを通して変更箇所は把握できたつもりです。(おかげさまで、Smalltalkの使い方を徐々に思い出してきました)
> GoGo BoardにしてもWeDoにしても、DCモーターの制御しかできませんので、ブロックもそれ用のものしか用意されていません。もし、サーボモーターを使われるのであれば、自分でスケッチを書き、プロトコルを決め、ブロックも用意する必要があります。
>
> それを実際に行なっているのがS4Aです。
> http://seaside.citilab.eu/scratch?_s=yQf-lmh7eaq_Ev0_&_k=_Ac121eeMFBO3xsR
> Smalltalkの拡張でサーボモーターをお使いになるのであれば、これを参考にすることをお勧めします。
なんと、これは派手にやっていますね。たいへん参考になります。
実は僕もScratchのプロジェクト互換は考慮していなくて、MYUロボ的に自律動作できるVMをArduinoに載せて、そのバイトコードをScratchのブロックからコンパイルして送り込むような改変をする、ある意味Scratchコミュニティに対して全く失礼な構想を持っています。ただし、Scratchとの協調動作もできるようにしたいと思っているので、Scratchを単なるプログラミングインタフェースに貶めてしまうようなつもりは全くありません。
むしろ、ModKitの、ScratchのUI模倣、ブロックはすべてWiredの命令、というのが筋悪に感じています。
> あるいは、リモートセンサープロトコルを使って、サーボモーターを制御するサーバーとScratchがソケットで通信するように書くのも手です。その場合、サーバーの記述言語はSmalltalkで無くても構いません。また、Scratch側の変更が不要となります。
> http://wiki.scratch.mit.edu/wiki/Remote_Sensors_Protocol
> これを行っているのがCatenaryです。
> https://sites.google.com/site/chalkmarrowfiles/
はい、これは承知しています。遠隔センサープロトコルを知れば、まずやってみることかなと思います。
ただ、制御がScratch側にしかないので、ひもつき(無線でも電波が届く範囲)なのは少し物足りなく思いました。
というのも、サーボモーターで質問したのはひとつの例で、他にはGPSロガーをプログラミングして近所を巡ってきた結果を視覚化するとか、そんな応用まで考えています。Scratch(では、もはやないのかもしれませんが、派生物)とは、いつでも切り離せて、再び接続して協調動作させることもできる(同じプロジェクトのなかで、どちらもできる)といいなと思っています。PCとマイコンが主従関係にあるのではなくて、相互補完の関係になるのが理想です。
Squeak-ja メーリングリストの案内