2012年2月25日土曜日

Puppy LinuxでArduino-IDEを使えるようにする

前回までに、PuppyJavaをインストールして、Dolittleを動かすことに成功しましたが、Arduino-IDEを使えるようにしてPuppyのリマスタCD(Puppy4Robo)を作ってしまおうと考えて作業を進めています。

Arduino-IDEでプログラミングしてArduinoに流しこむためには、それぞれの過程で必要なものがたくさんあります。まずは、前回インストールしたJREをJDKに置き換える作業を行いました。Javaのダウンロードサイトからダウンロードした「jdk-6u31-linux-i586.bin」を「/usr/java」フォルダ内で解凍します。すると、「jdk1.6.0_31」というフォルダができあがって、必要な実行ファイルやライブラリ類などが現れます。このままでは動かないので、「/usr/bin/」内で「ln -s /usr/java/jdk1.6.0_31/bin/java java」としてシンボリックリンクを作ります。これで、Javaが使えるようになります。

次に、日本語フォントを設定します。「/usr/java/jdk1.6.0_31/jre/lib/fonts/」の中に、mkdirで「fallback」というフォルダを作って、その中に「ln -s /usr/share/fonts/default/TTF/M+1P+IPAG.ttf M+1P+IPAG.ttf」としてシンボリックリンクを作りました。これで日本語表示も問題なくなりました。

この状態でもArduino-IDE自体は起動するのですが、使える状態ではありません。できるだけ簡単に使えるようにしたいと考えて探しまわっていると、「arudino-ubuntu-lucid-i386-debs.tar(※私の間違いではありません)」という便利なものがあることを知りました。(Puppy Linux Discussion ForumのHow to Install Arduino on Lupu-500に詳しく書かれています)早速ダウンロードして、片っ端からインストール(debファイルをクリックするとインストールするか聞かれるので指示に従う)してみました。すると、「gcc-avr」だけはどうもうまくインストール出来ませんでした。

そこで、gccのdebパッケージを探すことにしました。Debianパッケージサイトから安定していて、バージョン番号が揃いそうなところを選んでダウンロードしました。インストールしたものをインストール順に並べると以下のようになります。

  1. cpp-4.3_4.3.2-1.1_i386.deb
  2. gcc-4.3-base_4.3.2-1.1_i386.deb
  3. gcc-4.3_4.3.2-1.1_i386.deb
  4. gcc-4.3-locales_4.3.2-1.1_all.deb
  5. gcc-avr_4.3.2-1.1_i386.deb

これをインストールすると、Arduino-IDEでプログラムしたものをコンパイルして、Arduinoに流しこむことに成功しました。(Lチカも確認できました)これで、Puppy4Roboの完成が見えてきました。

2012年2月23日木曜日

Puppy LinuxでJavaソフトを動かす

前回は、Puppy LinuxScratchを動かすところまでできましたが、Javaをインストールして、DolittleArduino-IDE、Processingなどを動かせたら4Roboとしても申し分ない状態になるので、それをめざして実験を続けてみました。

はじめに、PuppyパッケージマネージャからJava関連の物を探しましたが見つからず、OpenJDKで何とかならないかと思っていろいろとやってみたのですが埒があかない感じだったのでこちらも断念しました。そこで、初心に返ってOracleのJavaを使うことにしました。
#「[Puppy]Javaのインストール」に詳しいので参考にしてください。

Javaのダウンロードサイトから、Linux用の自己解凍版をダウンロードして、「/usr/」の中に、mkdirで「java」フォルダを作ってその中で解凍します。すると、「jre1.6.0_x(xはバージョン番号)」というフォルダができあがって、必要な実行ファイルやライブラリ類などが現れます。このままでは動かないので、「/usr/bin/」内で「ln -s /usr/java/jre1.6.0_x(xはバージョン番号)/bin/java java」としてシンボリックリンクを作ります。

ここまでで、debパッケージのdolittleをインストールして動かしてみましたが、文字化けして何が何だか訳がわからないものの、起動することには成功しました。

あとはフォントの設定だけなので、以前にやったことを生かして 「/usr/java/jre1.6.0_x(xはバージョン番号)/lib/fonts/」の中に、mkdirで「fallback」というフォルダを作って、その中に「ln -s /usr/share/fonts/default/TTF/M+1P+IPAG.ttf M+1P+IPAG.ttf」としてシンボリックリンクを作りました。これで、日本語表示も問題なくできるようになります。

今回の作業でJREの設定が出来ましたので、JDKのインストールも難しくないかもしれないと思っています。Arduino-IDEなどのインストールまでにはもう少し時間がかかりそうですが、少しずつ作業を進めていきたいと思います。

2012年2月21日火曜日

Puppy Linuxで子ども向けフィジカル・コンピューティング環境を構築する

これまで、KNOPPIX 6.0.1で作ってきた子ども向けフィジカル・コンピューティング環境(Scratchと各種マイコンボードの組み合わせ)でしたが、USBメモリの扱いがイマイチなので、他のLinuxを使うことを検討していました。以前は、Mint 12でやってみましたが、1.起動が遅い、2.カスタマイズドCD作りが面倒、3.日本語化がかなり不完全、という理由で別のものを探していました。

PC自体がかなり古いし、ハードウエアが特殊(?)なので、うまく動くものがなかなか見つからなかったのですが、以前からサイズの小ささで注目していた「Puppy Linux」でdebパッケージがインストールできるようになったという噂を聞いて、試して見ることにしました。

早速、Puppy Linux日本語版ダウンロードサイトから5.1.1-01jのISOイメージファイルをダウンロードして、CDに焼いて古いPCで起動するか確認しました。こちらは難なく成功。第1段階クリアでホッとしました。はじめにつまずいたのは、HDDへのインストールでした。取りあえず、情報を求めて探してみるとAZISATOさんのブログに詳しい手順が載っていたので、参考にさせて頂くことにしました。

これでようやく使えるようになりました。しかし、debパッケージのインストールまでには、まだ克服しなければならないことがありました。debパッケージをクリックするだけでインストール作業をしてくれるらしいことはわかったのですが、何も変化が無いのでどうやら失敗している様子。詳しく調べてみると、必要なライブラリ類が十分に揃っていないことがわかりました。とするとインターネットに接続しなければなりません。自宅に持ち帰ってネットにつないで作業を続けました。

ネットへの接続は、自宅のサーバ経由で簡単に出来ました。次に、画面左下の「メニュー」から「セットアップ」とたどって、「Puppy パッケージマネージャ」を起動しました。「PETgetパッケージマネージャの設定」をクリックして、データベースを「ただちに更新」しました。(「パッケージレポジトリ」は「puppy-4-official」以下のすべてにチェックを入れました)そして、「dpkg」を検索すると「dpkg-1.15.3.1-w5c」が見つかったので、これをインストールしました。それから、Scratchのdebパッケージファイルをクリックしてインストールしました。今度は、うまく行った感じがしたので、「メニュー」→「ユーティリティ」→「Scratch」とたどって起動を試みましたが起動しません。どうやら、実行ファイルやプラグインファイルのパーミッションの設定がダメなようです。

そこで、デスクトップ上の「端末」を開いて、「/usr/lib/scratch/」内の実行ファイルや「Plugins」内のファイルを「chmod」して実行できるようにしました。これでもまだダメなので、「/usr/bin/scratch」をviで開いて「-vm-sound-pulse」を「-vm-sound-ALSA」に変更しました。これで何とかScratchを動かすことに成功しました。もう少し作業は必要ですが、ここまで出来れば後はそれほど難しくないと思います。

次は、Javaの開発環境をインストールして、DolittleArduino-IDE、Processingなどを動かしたいと考えています。

2012年2月18日土曜日

市販のLEGOをロボット化する実験

気がつけば、何も書かないうちに2月も半ばを過ぎていて、ちょっと慌てて1つだけ今やっていることを書いておきます。LEGO WeDoで使ったUSBハブとモータを使って、既存のLEGOブロックで作った物を動かすことはできないか、実験をはじめたところです。

手始めに、LEGOの青バケツに入っていた車輪などをつかって車らしきものを作り、WeDoモータでプロペラを回して進むかどうかやってみました。(制御ソフトはScratch 1.4を使用しました)青バケツに入っていた小さなプロペラを回しただけでは何も起きないので、直径6cmのDCモータ用のプロペラを加工して取り付けてみました。それでもダメなので、Amazonで購入したCrazy Action Contraptionsの部品を使ってプーリーを組み、回転数を上げて実験を続けると、プーリーを2段にしてプロペラを回転させたところでわずかに動きました。どうやら、構造が複雑になるほど重たくなるために、うまく動かないのだということがわかりました。また、この方法だと例え動いたとしても、静止や左右旋回などのコントロールが難しいので、あまり実用的ではないと判断しました。

次に、Crazy Action Contraptionsで車らしきものを作って、WeDoモータで動かしてみました。はじめは、プーリーで回転数を上げたものをそのまま使ったので、勢いよく飛んでいってしまいました。そこで、逆に回転数を下げて制御しやすい速さに調整しました。すると、前後へ細かく動かすことができるようになり、とても扱いやすくなりました。

そして、いよいよ一番やりたかった、2つのWeDoモータで車を制御する実験を行うことにしました。Scratchは前回も使わせて頂いた@abee2さんカスタマイズの「NanoBoardAGWithMotors」を使いました。モータが大きくてかさばるので作り方に工夫は必要ですが、前後進だけでなく、左右回転もスムーズに動くものを作ることができました。これなら、子どもたちに作らせることも可能だと思いました。

これからSPPに応募するのですが、並行して来年度の活動をどんなものにしようか思案している最中です。(イヤ、締切間近なので急がないと…)

2012年1月22日日曜日

NanoBoardAGで2つのモータを動かす

前回NanoBoardAGWithMotorsHelloBoardなのぼ〜どをつないでモータが動くかどうか実験をしましたが、今回は、2つのモータを同時に動かすことが出来るかという実験をしてみました。

この実験には、以前に作成したHelloBoard用モータドライバモジュールを使おうと思ったのですが、これには設計上の問題があることがわかっています。このモジュールでモータを動かすことはできるのですが、センサボードに過度な負担をかけてしまうのです。また、PWMによるパワーコントロールにも対応していませんでした。今回の実験では、このモータドライバモジュールを設計し直すことを目標として、動作確認をすることにしました。

はじめに、HelloBoardで実験をしました。モータAをTA7291SG(モータA用)の3番と7番ピンに接続します。HelloBoardの「D3.PWM」をTA7291SG(A)の8番ピン(制御電源=Vref)につなぎ、「D2」と「D7」を9番と1番ピンにつなぎました。次に、モータBをTA7291SG(モータB用)の3番と7番ピンに接続します。HelloBoardの「D9.PWM」をTA7291SG(B)の8番ピン(制御電源=Vref)につなぎ、「D8」と「D12」を9番と1番ピンにつなぎました。そして、両方のTA7291SGの2番ピン(ロジック電源=Vcc)を「5V」に接続し、そこからさらに抵抗を介して6番ピン(出力電源=Vs)に接続しました。最後に、両方の5番ピンを「GND」に接続して終了です。

この状態で、両方のモータを動かしてみましたが、問題なく動いてくれました。スピードコントロールも問題ありませんし、正逆回転も正常に動きました。片方ずつ動かしてみたり、急に正逆を変えてみたりといろいろやってみた結果、2番と6番の間に入れる抵抗は、4.7Ωでは抵抗が熱くなりすぎることがわかりました。そこで、1Ωや2.2Ωで試してみたのですが、2.2Ωでも過酷な使い方をすると少し熱くなることがわかったので、1Ωでやることにしました。
#センサボードは、1Ωでも落ちることはありませんでした。

今度は、この環境でなのぼ〜どでも動くか実験をしました。モータとの接続はそのままにして、なのぼ〜どの「9」をTA7291SG(A)の8番ピン(制御電源=Vref)につなぎ、「7」と「8」を9番と1番ピンにつなぎました。なのぼ〜どの「10」をTA7291SG(B)の8番ピン(制御電源=Vref)につなぎ、「5」と「6」を9番と1番ピンにつなぎました。そして、両方の TA7291SGの2番ピン(ロジック電源=Vcc)を「5V」に接続し、そこからさらに1Ωの抵抗を介して6番ピン(出力電源=Vs)に接続しました。最後に、両方の5番ピンを「GND」に接続して終了…と言いたいところですが、なぜか「5V」のとなりの「GND」に接続しないと(他の「GND」に接続したのでは)動きませんでした。

今回の実験で、いずれも快適に動くことがわかりました。ロジック電源と出力電源を1Ωの抵抗でつなげば実用的なモジュールが作れることもわかりました。しかし、HelloBoardとなのぼ〜どは、ピン互換性がないため同じモジュールを載せて使うことができません。それぞれ専用のモジュールを作るか、何かうまい方法があるか考えて設計してみようと思います。

2012年1月16日月曜日

NanoBoardAGでSensorBoardからモータを動かす

ちっちゃいものくらぶなのぼ〜どを使って、モータを動かすのがちょっとしたブームになっているようなので、私も参加してみることにしました。
#備忘を兼ねて、環境整備から記述しておきます。

まず、オープンになっているScratchを2モータ対応に改造して頂いた「NanoBoardAGWithMotors」を自宅のMacで使えるようにします。ダウンロードした.zipファイルを開いて「NanoBoardAGWithMotors.image」ファイルを既存の「Scratch 1.4」と同じフォルダに入れます。そして、「Scratch(.app)」を複製して適当な名前をつけます。この「内容を表示」して「info.plist」を編集(NanoBoardAGWithMotors.imageから起動するように)すると、Macのアプリとして使えるようになります。

次に、Arduino-IDE 1.0からNanoBoardAGWithMotors付属のスケッチを、なのぼ〜どに流し込みます。ここでちょっとつまずいたのですが、エラーメッセージを見ると「pins_arduino.h」が見つからないと言っていることがわかりました。「boards.txt」を見ると、他のボードには、「(ボードの種類).build.variant=standard」というような一行がありました。そこで、以前に設定したものに「atmega8o.build.variant=standard」という一行を加えました。すると、書き込みが完了したというメッセージが出るようになりました。
#それでも、なんか変なメッセージが表示される…。

これで準備万端と思って、TA7291SG(←データシート)とつないでモータを動かそうとしましたが、何だか動きが変なのです。そこで、これまで動作実績のあるHelloBoard(helloboardv2motor.pdeを使用)から動作確認をすることにしました。

HelloBoard TA7291SG 端子記号
+5 2 Vcc
+5 6(2とジャンパ) Vs
D3 8 Vref
GND 5 GND
D7 9 IN1
D8 1 IN2
Motor1 7 OUT1
Motor2 3 OUT2

この状態で、NanoBoardAGWithMotorsから制御しようとすると、何だか思い通りには動いてくれません。そこで、ちょっとつぶやいてみたところ、いつも助けて頂いている@abee2さんから「HelloBoard用のスケッチを作ってなかった」というお返事を頂いたので、ブログを書きながら待つことにしました。しばらくすると、出来上がりのお知らせがあったので、NanoBoardAGWithMotors.zipに同梱して頂いた「HelloBoardAGWithMotors.pde」をHelloBoardに流し込んで動作確認してみました。いやいや、お見事という他ありません。これで、バッチリ動作します。
#調子に乗って勢い良く回していると、HelloBoardが過電流でダウンすることがあります。

なのぼ〜どの方は、どうもうまくNanoBoardAGWithMotors付属のスケッチが流し込めていなかったようなので、純正の「書込装置(AVRISP mkII←PDFファイル)」を使ってやってみました。今度は変なメッセージが出ることもなく、なんとなくうまく行った感じだったので実験を続けると、これも問題なく動作してくれるようになりました。

実はこれまでの動作実験は、モータとドライバの配線が面倒だと感じていて、モータにドライバを付けてしまおうと考えて実験をしていたのでした。モータに接続する7番&3番ピンの間隔が丁度よい感じで満足しています。0.1μFのセラミックコンデンサは、見た目が大きくて自己主張が強い感じ。VccからVsへは、ジャンパではなく4.7Ωの抵抗でつなぎました。この方が安定して動いてくれます。(特に計算をして決めたのではなく、自宅にあった一番抵抗値の低いものをつけただけです)次は、2つのモータを同時に動かす実験をしてみたいと思います。

2012年1月5日木曜日

古いラップトップPCにMint 12を入れてみる

2004年に(独)情報処理推進機構(IPA)が公募した「学校教育現場におけるオープンソースソフトウェア活用に向けての実証実験」に(株)アルファシステムズさんに誘われて参加しました。その際に頂いたラップトップPC(SHARP MebiusAthlon XP-M 2000+搭載)は、現在もフィジカル・コンピューティングの授業研究に活用させて頂いております。今までは、KNOPPIX 6.0.1で動かしていたのですが、USBメモリの取り扱いがイマイチ(マウント/アンマウントが面倒だったり、それを繰り返しているとマウント関係がおかしくなるという不具合がある)なので新しい環境を構築し直すことを考えました。とは言え、古いPC故に動くものが限られているため、何でもOKという訳には行きません。条件は、(1)このPCで快適に動く、(2)debパッケージがインストールできる、(3)子どもたちにとっても使い勝手が良い、の3つとしました。そこで白羽の矢を立てたのが、Linux Mint 12でした。

Linux Mintは、私が使っているUbuntuやKNOPPIXと同じdebian/GNU Linuxの仲間で、Ubuntuをベースに作られています。最新のLinux Mint 12のCD版isoファイルを、本家のダウンロードサイトからダウンロードしてCDに焼きました。件のPCにはCD-ROMドライブしか付いておらず、ライブCDの部屋にあるような、豪華DVD版は使えないのです。

実は、他にもPuppyDSLなどを候補として考えたのですが、パッケージ管理が特殊だったり最新版がちょっと古い感じだったりするのでやめました。一方で、この古いPCで最新のものが動くのかという疑問もありましたが、チャレンジしてみることにしたのでした。

はじめにCD-Rから起動を試みた時には、起動はしているようなのですが、ディスプレーに何も表示されませんでした。あっちこっち弄ってみましたが、徒労に終わりました。この間、起動カウントダウン中に、マウスクリックや矢印キーを押すと、別の起動メニューが選べることを知りました。そこで、「(compatibility mode)」となっている方を選んで起動すると、かなり時間はかかりましたが、無事にデスクトップを表示してくれました。

後は、ネットワークの設定をしてデスクトップに並んでいる、「Install Linux Mint」でHDDにインストールするだけです。それなりに時間はかかりましたが、スムーズに終了しました。とは言え、デフォルトのままだと日本語環境が貧弱なので、「ソフトウェアの管理」から「scim-anthy」と幾つかのIPAフォントやTakaoフォントをインストールしました。続いて、OpenJDK(フォントの設定をしました)やWineをインストールして、いつものScratchDolittleをインストールしました。自分が普段使っているPCには、LibreOfficeも入れました。動作確認も今のところすべて問題なしです。使用感としては、今までのKNOPPIXよりもたもたした感じはあるのですが、使えないレベルじゃないのでよいかなといったところです。