「ロボット・電子工作・マイコン」カテゴリーアーカイブ

BeagleBoard-xMとArduinoの接続

BeagleBoardにはGPIOやI2C, SPI等のインタフェースがありますが、電圧が1.8Vなので、3.3Vや5Vのセンサー等をつなぐ場合は電圧の変換が必要になります。
また、実験中に何かミスするとボードを壊してしまうかもしれません。
そこで、Arduinoとシリアルで接続し、ハード関係はArduinoに任せるようにすることにします。

<接続図>
センサー/DCモーター/サーボ等 – Arduino – <シリアル> – BeagleBoard

BeagleBoard-xMには通常のRS232Cのコネクタがありますが、コンソールで使用しているので、
USB-シリアルTTL変換機経由で接続するようにします。
今回はaitendoのUSB-シリアルTTL変換器(USB2UART-CP2102)を試してみました。購入時は¥600でした。
USB2UART-CP2102はBeagleBoard(Ubuntu10.10)に刺すだけで認識されました。

簡単なシリアル通信プログラムを書き込んだArduinoと接続して、9600bpsで試したところ問題なく通信できました。
BeagleBoard(Ubuntu)側はminicomというターミナルソフトを使用しました。

↓はArduinoではなく、以前作ったSanguinoと接続しているところです。
f:id:studio_k:20110615214510j:image:w320
Sanguinoはシリアルが2系統あるのでやりやすいです。
(Sanguinoは最近メンテナンスされていないようで残念です。。。)

そのうち通信速度の上限を調べたいと思います。

BeagleBoard-xM バッテリー駆動

BeagleBoardを完全ワイヤレスにするために、バッテリーで駆動させてみます。BeagleBoardの電源は5Vで、電流は接続予定のUSB機器を含めると、本体:750mA, カメラ:500mA, 無線LAN:(情報なし)なので、1.5Aぐらい必要です。

まずは、手持ちの3端子レギュレーター(NJM7805FA)で試してみました。

f:id:studio_k:20110611232010j:image:w320

eneloop6本の7.2Vでは電圧が足りないせいか、BeagleBoard動作時の電圧が4.5Vぐらいまで落ちてしまい、再起動を繰り返す状態になってしまいました。

次にKHR用の10.8Vバッテリー(ニッケル水素9本)を試してみました。

無線LAN子機とカメラを接続した状態でも動作はするものの、3端子レギュレーターが熱くてさわれない状態になってしまいました。

カメラを使用中はおそらく1A以上流れていますので、(10.8V-5V)×1A=5.8W以上が熱になっている計算になります。

これでは使い物になりません。

というわけで3端子レギュレーターはあきらめて、秋月のDC-DCコンバーターHRD05003Eを購入しました。このDC-DCコンバーターは5V 3A出力でき、スイッチングレギュレータなので、効率良く降圧できそうです。値段も¥300と経済的です。

f:id:studio_k:20110611232057j:image:w320

入力電圧と出力電圧の差が3V以上必要とのことで、eneloop6本の7.2Vでは足りていませんが、少なくとも充電直後は使えるようです。どのぐらいの時間使えるかは今後調べたいと思います。KHR用の10.8Vバッテリーも問題ありませんでした。発熱もカメラを使用した状態でもほんのり温かくなる程度でした。

f:id:studio_k:20110611232122j:image:w320

これで完全ワイヤレス化ができました。

とりあえず無線カメラとして使用できる状態です。別の部屋に置いて映像を見ることができました。

バッテリー駆動ができるようになったので、以前作った↓の台車に載せてみたいと思います。

f:id:studio_k:20110611232150j:image:w320

BeagleBoard-xMでUSBカメラ(その2)

前回、有線LANでUSBカメラ LOGICOOL C905m での動画配信の実験をしましたが、無線LANが使えるようになったので、無線LANで試してみました。

f:id:studio_k:20110529191608j:image
キーボード・マウス・ディスプレイは外し、PCからはsshで接続します。
ケーブルは5Vの電源ケーブルがつながっているのみです。こうなると早くバッテリで動かしたくなります。

前回と同じくmjpg-streamerで配信します。
当たり前ですが、特に問題なく動きました。スピードも有線LANと大きな違いはなさそうです(無線親機と1mぐらいしか離れていませんが。)

バッテリーで動くようになれば、とりあえずロボットに搭載して、PCから動画を見るのはすぐにでもできますね。

BeagleBoard-xM + Ubuntuで無線LAN

BeagleBoard xM rev.C + Ubuntu10.10に無線LAN子機「Planex GW-USValue-EZ」を導入し、ようやく(WPAで)接続ができました。

なお、無線親機にはBuffalo WZR-HP-G300NHを使用しています。

f:id:studio_k:20110529190549j:image

BeagleBoard xM にGW-USValue-EZを取り付けたところ。小さい!!!

GW-USValue-EZのドライバはUbuntu10.10には含まれていないため、USBに挿しただけでは認識しませんでした。

GW-USValue-EZにはRTL8192CUが使われており、メーカー(realtek)のサイトからLinux用のドライバーがダウンロードできます。ただし、ソースなので、コンパイルが必要です。

以下に手順メモを記載します。

(2012/6/9追記 Ubuntu11.04以降にはドライバが含まれていましたので、コンパイルは不要です。)

【ドライバーのインストール】

  • ドライバーソースをダウンロード

http://www.realtek.com/downloads/downloadsView.aspx?Langid=4&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true

今回はRTL8192CU_linux_v2.0.1502.20110402.zip をダウンロードしたが、5/28時点で新しいドライバが公開されている。

  • ソースを解凍するためUNZIPをインストール

$ sudo apt-get install unzip

  • ソースの解凍

$ unzip RTL8192CU_linux_v2.0.1502.20110402.zip

  • ドライバーのビルドとインストール

$ cd RTL8192CU_8188CUS_8188CE-VAU_linux_v2.0.1502.20110402
$ sudo sh install.sh

以下のエラーで止まった。

/lib/modules/2.6.38.4-x3/build: No such file or directory.  Stop.

/lib/modules/2.6.38.4-x3

build -> /build/buildd/linux-2.6.38 へハードリンクが張られているが、リンク先が存在しない。

カーネルのビルドを行った。


★カーネルのビルド

$ sudo apt-get install bzr
$ cd
$ sudo bzr branch lp:~beagleboard-kernel/+junk/2.6-stable
$ cd 2.6-stable/
$ cp system.sh.sample system.sh
$ sudo ./build_kernel.sh

なんか聞いてくるが、デフォルトで。

(ビルドするのに8時間ほどかかった。)

※今回はカーネルをビルドしたが、以下でよかったかも。

$ sudo apt-get install kernel-devel


以上で、カーネルのビルドができたので、ドライバーのビルドに戻って、、、

$ cd /lib/modules/2.6.38.4-x3
$ sudo rm build
$ sudo ln -s /home/ubuntu/2.6-stable/KERNEL build

なぜかアーキテクチャ(arm)がうまく取れないので、セットするように修正

$ sudo vi /home/ubuntu/2.6-stable/KERNEL/Makefile

SRCARCH         := $(ARCH)  の下に
SRCARCH         := arm      を追加

$ sudo sh install.sh

コンパイルが進むが、usb_intf.cでエラー

http://blog.livedoor.jp/mtk_sugi/ を参考に、以下のように修正

$ sudo vi driver/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c

コメントアウト://pdvobjpriv->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
追加:pm_runtime_set_autosuspend_delay(&pdvobjpriv->pusbdev->dev, 0 * HZ);

install.shがdriverディレクトリを解凍してusb_intf.cを上書きしないように、tarしているところをコメントアウト

$ sudo vi install.sh

#tar zxvf $Drvfoulder

$ sudo sh install.sh

無線子機(GW-USValue-EZ)をUSBに指して、

$ lsmod

で、8192cuができていればOK。また、

$ ifconfig

で、wlan0ができていればOK

ここまでできれば、後はBeagleBoardというよりはUbuntuでの無線LANの設定の問題となる。

【無線LAN親機の設定】

今回使用した、Buffalo WZR-HP-G300NHでは無線の認証方式が「WPA/WPA2 mixedmode – PSK」となっており、この設定だとうまくいかないとの書き込みがネット上にあったので、「WPA-PSK」の固定に変更した。(この設定を変更するとつながらなくなるかは当方では未確認です。)

★設定手順

  • WEB設定画面にログインし、「無線設定」-「基本(11n/g/b)」を開く

無線の認証を「WPA-PSK」、無線の暗号化を「AES」に変更

  • 「無線設定」-「AOSS」を開く

暗号化レベル拡張機能を「無効」に変更

【無線LAN設定】

  • network-managerが動いているとうまくいかないので、停止させる。

デフォルトでは入っていないかも。入っていない場合は不要。

$ sudo stop network-manager

  • アクセスポイントのスキャン

$ iwlist wlan0 scan

で、無線親機のSSID等が表示されれば無線のドライバやハードは動いていると判断できる。(無線親機のSSIDがステルスモードの場合は表示されないと思われる。)

  • /etc/network/interfacesを以下のようにする

auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※なお、有線LANの設定は消しています。

※IPはDHCPではなく、固定としています。IPアドレスはネットワークに合うように適当に変更してください。

  • 暗号キーをwpa_passphraseコマンドで暗号化する

$ wpa_passphrase SSIDを記入 暗号化キーを記入

以下のような結果が表示される。

network={
ssid="指定したSSID"
#psk="指定した暗号キー"
psk=暗号化された暗号キー
}

  • /etc/wpa_supplicant/wpa_supplicant.confを編集

network={
ssid="無線親機のSSIDを書く"
proto=WPA WPA2
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=wpa_passphraseの暗号化された暗号キーを指定
}

  • confファイルの確認

$ sudo wpa_supplicant -iwlan1 -c /etc/wpa_supplicant/wpa_supplicant.conf -Dwext

  • 無線設定確認

$ iwconfig

で、ESSID等が表示されていればうまくいっている。

wlan0     IEEE 802.11bgn  ESSID:"指定したSSID"  Nickname:"<WIFI@REALTEK>"
Mode:Managed  Frequency:2.422 GHz  Access Point: XX:XX:XX:XX:XX:XX
Bit Rate:150 Mb/s   Sensitivity:45/0
Retry:off   RTS thr:off   Fragment thr:off
Power Management:off
Link Quality=99/100  Signal level=-45 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

  • 設定を変更した時は以下でインタフェースを再起動させる。

$ sudo ifdown wlan0
$ sudo ifup wlan0

  • NetworkManagerをOS起動時に起動しないようにする

NetworkManagerが起動していると、うまくいかないため、停止させる。

※NetworkManagerはもともとは入っていなかったかも。

ランレベル毎に起動設定ができるはずだが、sysv-rc-confやupdate-rc.dを試してみたがうまくいかない(良く分からない)ので、/etc/init以下のファイルの拡張子を.conf以外にしてすべてのランレベルで起動しなくなるようにする。

※redhat系のchkconfigとは設定方法が違っていて良く分からない

$ cd /etc/init
$ sudo mv network-manager.conf network-manager.conf.bak

OSを再起動して、ping等で通信できればOK。

YOKAロボまつり20

f:id:studio_k:20110529170206j:image:w640
本日ROBOSQUAREにて開催されたYOKAロボまつり20バトル大会に親子で参加してきました。運営の皆様、参加者の皆様、お疲れ様でした。
前回参加したYOKAロボまつり16から約半年ぶりの参加です。
(我々の機体「ポンタ1号」は写真の左端です。)

【前回からの変更点】

  • 腕を伸ばしました。
  • モーションを改良しました。
  • 急速充電器を導入しました。(ラジコン用のPERFECT5000です。)
  • モーションの作成時に使用する電源は前回は単3のeneloopをケーブルでつないで使っていましたが、PCのATX電源の12Vを使用するようにしました。
  • 前回はeneloop単4×9本を電池ボックスに入れたものを使っていましたが、バトル中に電池が外れてしまうトラブルがあったので、はんだ付けしてパッキングしました。パッキングは物干し竿用の熱収縮チューブ(太さ3.8cm~4.2cm用)を使いました。

f:id:studio_k:20110529171732j:image:w200
f:id:studio_k:20110529171723j:image:w200
※電池のはんだ付けは危険なのでお勧めしません。自己責任でお願いします。

ポンタ1号の結果は、、、
[予選1戦目]拓歩
今回優勝した拓歩との対戦。
ロボットのスピードと安定感が全く違いますね。。。負けました。

[予選2戦目]impulseRB
途中までは良い試合でしたが、前回に引き続いてまたもや電源のトラブルで起き上がれず。負けました。

今回も1勝もできず、予選2敗でした。残念。
初勝利を目指して頑張ります。