ラベル Studuino の投稿を表示しています。 すべての投稿を表示
ラベル Studuino の投稿を表示しています。 すべての投稿を表示

2015年6月2日火曜日

Studuinoを深堀りしてみる

タイトルに即した内容だけ先に書いておきます。

Studuinoのライブラリを眺めたり回路図を眺めたりしていて、どうもこれはArduino Pro 3.3V 8MHzなんではないかと思って、boards.txtのbootloaderファイル名の定義を見たら、optiboot_pro_8MHz.hexでして、ずばりでした。ただ、昔買ったPro基板のbootloaderはスケッチを書き込んだあと、オートリセットがかからず手でリセットボタンを押して時間内に書き込み開始しないといけなかったのですがStuduinoはちゃんとオートリセットするわけで、なんだろうと思っていたら、Adafruit創業者Lady Adaのbootloader hackを反映しているようですね。ATmega328向けその他含めてTyler Cooper (Mr. Ada)の署名記事に改稿されてますけれども。bootloaderに歴史あり。

Ms. Limor Fried(MIT Media LabでMEとってるんですね)の足跡というのか、Arduino.cc版ハードウェア生産拠点がAdafruitになった理由は十分と納得した次第であります。

さて以下、タイトルに反してあまりStuduinoの話ではないわけですが、カタログを丹念に調べていて気づいた点についてうだうだと。

まず、Studuinoのダウンロードサイトですが、突然の充実に驚いた次第。まず、ドキュメントがたくさん。あと、Arduino 1.6.4に公式対応したり、更新情報のリンクがついたりと、利用しやすくなりました。

それで、多数の新しいドキュメントのなかで、5月のカタログに掲載されていない「可視光通信対応環境」あたりにおののくわけでして。地味に「ブロックプログラミング環境」の1.x版(いつのまにか、新センサーモジュール類対応の2.x系がある)がありまして、その使用法が書かれているわけです。

これは学校のWindows PCでインストール一切禁止になっていてUSBドライバが入れられないケースは多々あるわけですが、その対策として、記憶によればスズキ教育ソフトがかつて「キューブカート」というロボットカー制御プログラミング学習セットを販売していたときに初めて商品として実装したやつなんではないかと思うわけです。もし違っていたらすみません。一応ダウンロードサイトが残っていたのでリンクしておきます。で、どうやるかというと、当時ですとCRTですが、要するにPCの画面に黒背景に白い四角を2個点滅させて、シリアルでデータを表示するのをフォトトランジスタやCdS等でロボットカーの制御基板が読み取って、それでPC側で作成したプログラムを転送するしくみ。ざっくり考えると片方がクロックでもう一方がデータだろうと、SPIみたいにだらだら流せばいいんだろうなというように想像するわけです。

そういう懐かしい手法がいまだに有効というか必要とされるところに愕然としながらもいろいろ深堀りしていたら、アーテックにも歴史あり。「PCプログラミングロボ」というのがありました。こちらはCdSを子どもが自分ではんだづけして、紙工作した窓に貼り付けて、それを画面にはりつけてプログラムの転送する形。んで、そのプログラミング環境がStuduinoの「アイコンプログラミング環境」そのものの画面であったという発見がこのエントリのひとつ。

新たに開発したにしてはどうも地味な扱いだなと思っていたわけですが、過去の資産というか、これで長年授業実践していた先生方をこちらに引き寄せるために必要だったんだなーと思った次第。でもその四角点滅の「可視光通信転送」はScratchのみで実現して、Scratchへの移行を促す戦略なのかとほのかに思ったりしました。正しいと思います。

あともうひとつ。StuduinoでDCモータやサーボモータを制御してロボットを組み立てるわけですが、アーテックは自前のプラスチックブロック「アーテックブロック」というのがありまして、実際に組んでみるとLEGOブロックの精度がいかに驚異的なのかということにしみじみするわけですが、それはともかく作例に倒立振子の写真があって、大きな車輪を使っているのですが、それはRobotistというアーテックのロボット制御ブロックキットには入っていないわけです。あるのは小さな黒いプーリーとゴム輪で、プーリーは回転軸をもつブロックに組み付けられるようになっていますが、それだけ。大きな車輪は赤いのですが、そもそも赤系統のブロックは「ロボティスト T.Rex」とか小学生向け風味のほうであって、中学生以上向けのシリーズは青白系のブロックなわけです。

でも、カタログをじっくり見ていたら単品販売してました。「ギヤ大 30歯 8ピース」(どうも8個入りらしい)と「タイヤゴム Φ70mm 2ピース」(2個入りらしい)の組み合わせと同じ形をしていました。タイヤゴムはトレッドが入っていかにも倒立振子を比較的楽に安定させるのに必要な路面との摩擦が十分にありそうです。ゴム輪では簡単に滑ってしまいそうな心配があるのと、ギヤードモーターの回転数では十分細かな制御ができそうな径がないということもあります。ゴム輪に対応するプーリーはΦ38mmだそうです。

2015年5月16日土曜日

YosemiteとArduino IDE 1.6.4でStuduinoを使う

Arduino IDE 1.6.4が出ました。そこで、前のエントリと重複しますがStuduino対応にするための手順を書いておきます。

まず、StuduinoはUSB-シリアル変換にProlificのPL-2303TAを使っているので、「PL-2303 Mac OS X Driver Download」のページから最新のデバイスドライバを入手してインストールしてください。

次にArduino IDE 1.6.4ですが、入れてすぐの状態で、一度は起動しておいてください。きちんと確認していないのですが、インストールした状態で(起動せずに)以下の変更を加えたら、なぜだか「Arduino.appは壊れています。ゴミ箱に入れる必要があります。」というダイアログが出てしまいました。逆に、一度でも起動しておけば、以下の変更を加えても大丈夫なようです。

以下、アーテックのライブラリを再度入れてください。Studuino/Studuino.cppに最近変更が入っています。ただし、比較を代入と間違える誤りが、別のところで再現しているので、以下の訂正をしておいたほうがいいと思います。
*** Studuino.cpp.orig 2015-04-07 19:09:40.000000000 +0900
--- Studuino.cpp 2015-05-16 19:29:18.000000000 +0900
***************
*** 813,819 ****
  {
    if(axis == X_AXIS) {
      return bt_result.accX;
!   }else if(axis = Y_AXIS) {
      return bt_result.accY;
    }else {
      return bt_result.accZ;
--- 813,819 ----
  {
    if(axis == X_AXIS) {
      return bt_result.accX;
!   }else if(axis == Y_AXIS) {
      return bt_result.accY;
    }else {
      return bt_result.accZ;
ライブラリの置き場所はお好みで。ご自身のプロジェクトディレクトリのlibraries以下でもよいですし、/Applications/Arduino.app/Contents/Java/libraries 以下でも。

最後にboards.txtの書き換えですが、以前と同様に、以下を末尾に追記する形でよいようです。ファイルの場所は、/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt です。
proo.name=Studuino (3.3V, 8 MHz) w/ ATmega168
proo.upload.tool=avrdude
proo.upload.protocol=arduino
proo.upload.maximum_size=15872
proo.upload.speed=115200
proo.bootloader.tool=avrdude
proo.bootloader.low_fuses=0xc6
proo.bootloader.high_fuses=0xdd
proo.bootloader.extended_fuses=0x02
proo.bootloader.path=optiboot
proo.bootloader.file=optiboot_pro_8MHz.hex
proo.bootloader.unlock_bits=0x3F
proo.bootloader.lock_bits=0x0F
proo.build.mcu=atmega168
proo.build.f_cpu=8000000L
proo.build.core=arduino:arduino
proo.build.variant=arduino:standard
proo.build.board=AVR_PROO
他のボードの設定を読むと、1.6.4では新たなプロパティが加えられているようですが、ひとまず以前のまま(これ)で動いています。

2015年4月4日土曜日

YosemiteとArduino IDE 1.6.3でStuduinoを使う

前のエントリを出した翌日にArduino IDE 1.6.3が出たのと、4月1日付けでアーテックのArduino IDE用ライブラリが更新されたので、新たに書き起こします。

ちなみに、「スタディーノとはなにか」は、前のエントリをご参照ください。

Arduino IDE 1.6.3では、ライブラリマネージャとボードマネージャを使う方向が一応完成したようで、1.6.2の混乱した状況は「なかったこと」になっているようです。一応、1.6.2の設定のままでも動くようになっているようですが、将来的にどうなるのかわからないので、思い切って ~/Library/Arduino15 以下は、必要なもののバックアップをとった上でごっそり捨ててしまったほうがよいように思います。

それでArduino IDE 1.6.3を再起動すると、~/Library/Arduino15 以下は以下の内容だけになります。
  • library_index.json
  • package_index.json
まじかよって感じですが、JSONで記述された、それぞれライブラリマネージャとボードマネージャが参照する設定ファイルのようです。

あと、何か設定を変えたりスケッチを編集するなどすると、これまで通りのpreferences.txtもできます。

それで、これらに追記してライブラリマネージャやボードマネージャで対応できるようにすればいいかと思いきや、ボードはArduino IDEのパッケージとして組込みなので、「ボードだけの設定はない」わけです。ライブラリも、アーテックはひとまとめにして提供しているので、簡単に追記というわけにいかない。せめてlibraries以下でないようにしてくれればいいのに。

結局、/Applications/Arduino.app以下が再び整理されて、一通り展開されたものが入っている形に戻ったので、そちらに手を加えればよいことになりました。

まず、boards.txtは、以下のところになりました。アーキテクチャが増えたので、アーキテクチャごとのディレクトリ以下(今回はavr以下)になります。
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt
 このファイルの末尾あたりに以下を追記します。
proo.name=Studuino (3.3V, 8 MHz) w/ ATmega168
proo.upload.tool=avrdude
proo.upload.protocol=arduino
proo.upload.maximum_size=15872
proo.upload.speed=115200
proo.bootloader.tool=avrdude
proo.bootloader.low_fuses=0xc6
proo.bootloader.high_fuses=0xdd
proo.bootloader.extended_fuses=0x02
proo.bootloader.path=optiboot
proo.bootloader.file=optiboot_pro_8MHz.hex
proo.bootloader.unlock_bits=0x3F
proo.bootloader.lock_bits=0x0F
proo.build.mcu=atmega168
proo.build.f_cpu=8000000L
proo.build.core=arduino:arduino
proo.build.variant=arduino:standard
proo.build.board=AVR_PROO
アーテックのライブラリは、新しいセンサ類(Bluetoothシリアル、赤外線リモコン受信器、カラーセンサ、超音波距離センサ、温度センサ、ジャイロ・加速度センサ)のドライバが追加され、APIドキュメントも4月1日付で改訂されています。Webには何のアナウンスもないので、開いてみて初めて気づくという仕様です。

そこで、新しい「Studuinoライブラリセット」(libraries.zip)をアーテックのサイトからダウンロードしてunzipします。すると、libraries以下に、
  • ColorSensor
  • IRremoteForStuduino
  • MMA8653
  • MPU6050
  • Studuino
 の5つのディレクトリができるので、これを
/Applications/Arduino.app/Contents/Java/libraries
以下に移動します。これで完了。もし、以前のライブラリを自分のプロジェクトディレクトリ以下に置いていた方は、そちらを置き換えるか、消しておかないとコンパイラが「ライブラリが複数ある」といってエラーを出しますのでご注意ください。

ついでですが、Studuinoの下のexamplesは消滅したので、Blinkを試すことはできなくなりました。

記憶にあるものと同内容を再現するなら、こうなるかと思います(delay()使っていたのをboard.Timer()に直しました)。
#include"arduino.h"
#include<Arduino.h>
#include<Servo.h>
#include<Wire.h>
#include<MMA8653.h>
#include<MPU6050.h>
#include<ColorSensor.h>
#include<IRremoteForStuduino.h>
#include"Bluetooth.h"
#include"Studuino.h"
Studuino board;
 
void setup() {
  board.InitSensorPort(PORT_A4, PIDLED);
}
 
void loop() {
  board.LED(PORT_A4, ON);
  board.Timer(1000);
  board.LED(PORT_A4, OFF);
  board.Timer(1000);
}
このスケッチをBlinkの名称で保存し、/Applications/Arduino.app/Contents/Java/libraries/Studuino の下にexamplesディレクトリを作成し、そこに移せば「ファイル」→「スケッチの例」 メニューにStuduinoが現れて、以前と同じになります。

2015年3月31日火曜日

YosemiteとArduino IDE 1.6.2でStuduinoを使う(訂正あり)

(追記:2015-04-04 Arduino IDE 1.6.3対応と、アーテックのライブラリ更新について、次のエントリに書きました。以下は参考までにしていただき、新しいほうをご参照ください)



東大阪の学校向け教材メーカー、アーテックのスタディーノ(Studuino)という、Arduinoとモータドライバを一枚にした基板があり、一般向けに秋月共立が取り扱っていることもあり、結構お使いの方がいらっしゃるようで、ブログエントリをたくさん見かけました。

上でショップ名に商品のリンク貼ってるんですが、値段がそうとう違うのは、企業向けと学校向けでボリュームが違うから卸の価格も違うんだろうと。どっちがどっちかは想像にお任せする感じで。

スタディーノはクロック8MHzのATmega168、USB-シリアルにProlificのPL-2303TAを使っていて、モータドライバ(Toshiba TB6552FNG)と大量のピンヘッダやコネクタ分の価格を、CPUのスペックを落としたり安価なUSBデバイスを使うことで補っている雰囲気なのが特徴かと思います。(商品紹介ページ

ピンヘッダが大量にあるのは、通常のピンソケットとは別に、すべてのI/Oに電源ラインがセットになっていて、3ピンソケットのケーブルで入出力デバイスを接続できる設計だからです。カタログを教材販売店からいただいたのですが、以下のモジュールが専用品としてラインナップされていて、プラスチックブロックに入っており、他にキューブ型などいろいろなプラスチックブロックの組み立てでロボット風味の工作ができるように考慮されています。レゴっぽいといえばそうかもしれない、というところです。

ちなみに上からサーボモータまで全部盛りセットは「Robotist Advance」になるので学校関係の方でいろいろ試してみたい方(特に加速度センサが必要な方)におすすめしておきます。「計測と制御キット」のシリーズや「うきうきロボットプログラミング」のセットには加速度センサが入っているものはいまのところないようです。
  • タッチセンサ(押しボタン風味。ストローク5mmぐらい)
  • 圧電スピーカ
  • LED(赤、緑、青、白)
  • 赤外線フォトリフレクタ(Rhom RPR-220
  • フォトトランジスタ(Siemens SH309)
  • 音センサ(ECM+アンプIC、現物がないので未確認)
  • 加速度センサ(Freescale MMA8653FC
  • DCモータ(ギヤードモータ)
  • サーボモータ(いわゆる超小型サイズでトルク3kgらしい)
  • 温度センサ(Microchip MCP9700
  • 赤外線リモコン受信器
  • カラーセンサ(AMS-TOAS TCS3414CS)
  • 超音波距離センサ(HC-SR04)←Parallax Inc. "Ping))"の中華コピーの代表かと
  • ジャイロ・加速度センサー(Invensense MPU-6050
  • Bluetoothシリアル(Robotech RBT-001)―プラスチックブロックなし
  • 技適なしBluetooth 2.0+EDR←...

上記パーツはどれも基板に実装されていて、日圧のPHの4ピンソケットがついてます。実際に使うのは2〜4ピンなわけですが、スタディーノ側が3ピンソケットになったケーブルを使い、4ピンはI2C接続のみなので、3ピン2列のソケットでA4, A5, VCC, GNDに接続することになるわけです。専用ケーブルは一応I/Oラインはグレー、電源は±どちらも黒、になっていて逆刺ししないよう色で区別するようになっているので念のため(僕は最初間違えてから気づきました)。

DCモータ端子も外部電源端子もPHの2ピンです。モータと電源の関係では、モータ用電源とロジックの電源は小さなダイオード通して共通(ロジック側はレギュレータで3.3Vにしている)なので、モータドライバの発熱を心配するほどの使い方は考えられていないと思います。純正電池ケースが単3形(AA)電池3本用なので、アルカリ電池で4.5Vとか二次電池で3.6Vとか、そういう使い方の範囲にとどめて、たくさん電流流したい人はシールドの利用を考えるべきでしょう。また、サーボの電源もモータと共通です。

普通のArduinoと言われるUnoは、クロック16MHzのATmega328、USB-シリアルはATmega8U2というUSBつきの小さなAVRを使ってCDCクラスのデバイスを実装しているので、Mac OS XやLinuxではドライバのインストール不要で勝手にデバイスが生えますが、スタディーノはメーカー製チップを使っているのでメーカーのデバイスドライバが必要です。

前書きが長くなりましたが、そういうわけで、YosemiteとArduino IDE 1.6.2で使うためのメモを書いておこうと思いました。

まず最初にはまるのがデバイスドライバだと思います。Prolificは昔いろいろと苦労させられた方が多いと思いますが、なにかあったら、最新のデバイスドライバを探すことが第一だと思います。その際、末尾の型番がいろいろありますが、スタディーノで使っているのはTAなので、以下のリンクから、TA対応の最新版をダウンロードしてください。アーテックのダウンロードページにあるものは最新とは限らないです。(いま現在掲載されているものでもYosemiteでも動くらしいですが、僕のところではデバイスが生えませんでした。バージョン番号はかわっていませんが、plistの変更があったのかもしれません)
Prolific PL-2303のページ
初めてProlificのドライバを入れる方への注意ですが、Mac OS Xの場合kextなのでkextloadコマンド叩けばいいはずなのに、インストーラはマシンを再起動させます。なんとかならんものか。

アーテック側で用意されている、Scratch 1.4を魔改造(ほめてます)した開発環境にはArduinoのコンパイラとライブラリが入っているので、Scratchでプログラムする分にはこれ以上特に考えなくてもわりとサクサク動いて面白いのですが(ダウンロードページにScratchライセンスとGPLv2ライセンスでソースコード全部が置いてあるので読むと楽しいです)、Arduino IDEを使うには、作業が必要です。

アーテックのページには、Arduino IDE 1.0.5を使う方法が書いてありますが、こちらはAdafruit版やらいろいろ入っているせいかどうも動きがおかしく、これを書いているいま最新の1.6.2で使えるようにしました。

まず、標準のArduino IDEはこのボードを知らないのでboards.txtに追記が必要ですが、1.x(0以外)以後は構成がかわったようで、ユーザのホームディレクトリ側を書き換えればよいようです(「ツール」→「ボード」→「Boards Manager...」というメニューがありますが、使うのは1.6.3以後を待て、のようです)。以下のところにありました。
~/Library/Arduino15/packages/arduino/hardware/avr/1.6.2/boards.txt
で、この末尾にでも、以下の内容を追記します。
proo.name=Studuino (3.3V, 8 MHz) w/ ATmega168
proo.upload.tool=avrdude
proo.upload.protocol=arduino
proo.upload.maximum_size=15872
proo.upload.speed=115200
proo.bootloader.tool=avrdude
proo.bootloader.low_fuses=0xc6
proo.bootloader.high_fuses=0xdd
proo.bootloader.extended_fuses=0x02
proo.bootloader.path=optiboot
proo.bootloader.file=optiboot_pro_8MHz.hex
proo.bootloader.unlock_bits=0x3F
proo.bootloader.lock_bits=0x0F
proo.build.mcu=atmega168
proo.build.f_cpu=8000000L
proo.build.core=arduino:arduino
proo.build.variant=arduino:standard
proo.build.board=AVR_PROO
 アーテックの用意しているboards.txtに加えて、proo.upload.tool=avrdudeを書かないと、「書き込むツールがわからん」と言って転送エラーで止まります。proo.build.board=AVR_PROOについては大阪電気通信大学の兼宗先生からご教示いただきましたが、たしかに他のボードに倣って追記しておいたほうがよさそうです。

そのあと、アーテックのページにある「Studuinoライブラリセット」のzipを展開して、プロジェクトディレクトリ下に作ったlibrariesなり、/Applications/Arduino.app/Contents/Java/libraries 以下なりお好みのところに移動します。これで完了。

サンプルとしてBlinkが用意されているので、「ファイル」→「スケッチの例」→「Studuino」→「Blink」を開いて、コンパイル、書き込みができることを確認してください。このサンプルはA4で点滅するので、A4端子にLEDを接続する必要があることに注意、です。下手にArduinoの経験があるとD13が点滅するんだろうと思ってしまいますが、スタディーノの流儀にしたがい、APIドキュメントにしたがって書かれたスケッチです(そのわりにboard.timer(1000);でなくdelay(1000);なのはなぜだろう、とか思わない大人になりたいです)。

というわけで、ひとまずセットアップについて書いてみました。