1

BeagleBoard上でmoxaを開発する

Ubuntu 9.04をインストールしたBeagle Boardの上でtalkticのコンパイルとmoxaへ書き込みを行う。刺しっぱなしで開発できるようになるのでとても便利。

xtel technical information > download> ダウンロードから「開発用エクリプスパッケージ for Mac」をダウンロードしてくる。

xtel-eclipseの中の

  • jsc/jsc.jar
    talkticコンパイラ
  • avrdude/bin/avrdude
    avrdude実行ファイル。mac portsでインストールできるavrdudeだと書き込みが怪しい。
    Ubuntu9.04のaptでインストールできるavrdudeは普通に動くのでこれは必要ない。
  • avrdude/etc/avrdude.conf
    avrdudeの設定ファイル
この3つを手に入れて適当にアクセスしやすい場所に置いておく。


■talkticのコンパイル
javaをインストールする
sudo apt-get install default-jre
which java

コンパイル。source.jsからsource.binを作る
java -jar path/to/jsc.jar -Bsource.bin source.js
macでも同じようにバイナリを作れる。


■moxaへの書き込み
avrdudeをインストールしておく。Macはeclipseについてるavrdudeを使う。
sudo apt-get install avrdude
which avrdude

BeagleBoardではUSBデバイス名を書き込んであっても /dev/ttyUSB0 になってしまい、しかもrootしかアクセスできないのでsudoを使って書き込む。
sudo avrdude -C path/to/avrdude.conf -p m128 -c stk500v1 -b 9600 -P /dev/ttyUSB0 -F -U eeprom:w:source.bin:r


Macだとsudoが必要なくて、デバイス名が認識されてるのでこうなる。
avrdude -C path/to/avrdude.conf -p m128 -c stk500v1 -b 9600 -P /dev/tty.usbserial-gemsbok -F -U eeprom:w:source.bin:r


こんな風に書き込んだりプログラム書いたりしてる
ピクチャ 1

ピクチャ 2

0

BeagleBoard(Ubuntu9.04)とArduinoやmoxaを接続し、シリアル通信でやりとりする

BeagleBoardはTIの作ったオープンソースハードウェア。こっそり春頃からいじっていたんだけど書いてなかった。
スペックに難はあるが、ディスプレイとサウンド出力つきの組み込み環境が俺でも作れるのは魅力。作品のレベルをプロダクトに近い所まで引き上げられる。

最近CRESTでのプロジェクト用にARM版Ubuntu9.04をbuildしてインストールして、Arduinoと接続する所までやったので書いておこう。

今はApache2とruby1.8.7(いずれもaptでインストールした)を使って、外付けしたArduinoとmoxaからデータを読み取っている。とりあえず大学院棟の明るさをCdSで取得してwebに公開している → http://shokai-b.mag.keio.ac.jp/light


R0012112


■準備
BeagleBoardと、インストール時にパソコンとBeagleBoard間でシリアルコンソールを使うのに必要なBeagleケーブルはdigikeyで購入できる。他の部品は国内で全て入手可能。
BeargleBoard 周辺機器


■Ubuntu9.04をBeagleBoardにインストール
OSはSDカードにインストールする。
最初デスクトップ版をインストールしてみたけど重すぎた。AngstromやHandheld Mojoならそれなりに動くけど、フルのUbuntuデスクトップはウィンドウマネージャをtwmにしても無理だった。
今回の用途にはCUIがあれば十分だったので、最低限のbuildツールを含んだARM用イメージを作って起動させた。

なお作業はext3のファイルシステムが読み書きできる必要があるので全て別のUbuntu Desktopで行った。

  1. BeagleBoardにUbuntu Desktop版インストール – 橋本詳解
  2. BeagleBoardにUbuntuセットアップ(GUIなし)、sshdを入れてリモートログインしてみる – 橋本詳解
  3. いろいろインストールして環境を整える – 橋本詳解
  4. Rubyまわりをインストール – 橋本詳解

これで、ApacheやRubyやsshdはもちろん、emacsと各種elisp、gemとeasy_install、rails2やsinatra、mongrel_clusterとapache2でmod_proxy_balancerなどがaptとgemでさくっとインストールできた。
このへんのサーバサイドアプリ開発環境のセットアップの容易さはubuntuさすが。

処理速度は体感でDebian化した白箱より速い。SDカードなのであまりR/Wしたくないがたぶん外付けUSB-HDDも認識できるんじゃないだろうか。そうすると、クローラ作ったり簡単なbotを動かす程度の俺は自宅サーバ環境はBeagleBoardで十分という可能性もある。



処理速度とストレージ読み書きに不安はあるが小型かつバッテリーでも動かせるUbuntu Linux環境ができた。


■Arduino / moxaとの通信
BeagleBoard基板上のシリアルコンソールに使ったポートをArduinoやmoxaとの通信を使った。

本当はUSBで接続したかったけどできなかった。
FTDIチップのドライバはaptでインストールできるが、USBに接続しても認識されない(/dev/ttyUSB0に現れない)
同じバージョンのUbuntuデスクトップを別のAMD64マシンで用意して、同じようにセットアップをしたがこちらは認識した。ARM版Ubuntuが何かおかしいのかもしれない。

64bitAMDマシンではlsmodした時にFTDIチップを監視してるプロセスがいるんだけど、BeagleBoardではlsmodしてもいない。
誰かLinux詳しい人教えてくれるとうれしいです・・・


しかたないのでセットアップに使ったBeagleケーブルのオス版を作って通信に使う。
シリアルポートの9つのピンにはよく見ると番号が振ってあり、それをBeagleBoardの基板上の1~9ピン(10は無視する)と接続する。
シリアルポート側は

12345
6789

のようになるが、BeagleBoard上のコネクタは

13579
2468

となっているのでとても捻れる。気合いではんだづけする。基板上のシルク印刷をよく見てね。


R0012102
R0012104
R0012106
R0012107


これで、Arduinoの外側にあるRX / TXピンにMAX232(ADM3202)を接続すればBeagleBoardとシリアル通信できる。
R0012110

ArduinoにCdS(明るさのセンサ)なんかを接続して数値をBeagleBoardに送り続ければいい。


/etc/event.d/ttyS2 を削除して再起動すると、/dev/ttyS2がシリアルコンソールではなくシリアルポートとして開ける。

screen /dev/ttyS2

でモニタできる。
UNIX系なので、シリアルポートもFileとして簡単に読み出せた。
Arduino + BeagleBoard(Ubuntu) シリアルポートを読んでたまにファイルに書き出す – 橋本詳解

通信できる手段が整えばあとは好きにできる。

0

moxaでバイオメタルを動かした

バイオメタルをmoxaで動かすために0V~3V程度を出せる回路とプログラムを作った。

色々試した結果、最終的にPCからシリアル通信でmoxaのanalogWrite(PWM出力)を制御できるようにして、analogWriteをトランジスタ(2SC1815)に突っ込む。トランジスタは三端子レギュレータ7805から得た5Vを出すが、トランジスタを通る事で3.7V程度に落ちて、バイオメタルにちょうど良い電圧になった。

バイオメタルは「3Vで駆動」と書いてあったけど3.7Vでも大丈夫だった。5Vそのまま入れると変な臭いがしてきてヤバイ(すぐ止めました)

AVRマイコンのGPIO出力は3Vだけど40mAと電流が足りなかった。
バイオメタルを動かすには200mA程度必要で、秋月の3.3Vの三端子レギュレータを使っても動いたけどマイコンから制御するためにトランジスタをかますと2V程度に落ちてしまうので5V電源でやったらちょうど良くなった。アクチュエータ系は試行錯誤が必要だなー



パソコンでアナログ値を制御している動画


回路。基盤で隠れて見えないけど、moxaの左下のGNDはブレッドボードのGNDと接続されている
moxaでバイオメタル動かす
moxaでバイオメタル動かす


今回のtalkticコード
xtel technical information > learning> Analog Read & Writeを参考にした

serialInit(9600);
pinMode(1,true);
pinMode(0,true);
power = 0.0;

function onSerialReceive(){ // シリアル受信イベント
    while(serialAvailable()){ // 受信データがある時
        var recvData = serialRead(); // 読み出し
        power = recvData*0.01;
        analogWrite(0, power);
        analogWrite(1, power)
        serialSend(recvData); // 受信した文字列をそのままエコーする
    }
}

while(true){
}

0

PCなしで、moxaで音を出す

xtel technical information > learning> Sound Writeより

moxaとスピーカを直結させて、soundWrite(ピン番号, 周波数)関数を使うと音が出せる





センサと組み合わせるとインタラクティブに音階を変えられる。CdSという明度センサを使っている

0

moxaでセンサーネットワーク

xtelのmoxaを使う。

moxaのzigbee無線で距離を測るから距離情報を削って、少しフォーマットを変えただけだが
たくさんあるセンサ付きノードの状態を、zigbee無線で一カ所に集めるのが簡単にできる。
8ビットマイコンなのにclassが作れて(厳密にはJavaScript互換なのでクラスではないが)文字列が可変長でString.splitなども使えてArrayもあるので、こういう無線通信プロトコルは簡単に作れる

Read more