スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Intel Edison ハンズオン #0

Intelから出ている小さなコンピュータ 偉人シリーズ第二弾 Edison に挑みたいと思います。
大きさは以下の写真くらいで、とても小さいです
150511_edison.jpg

環境はEdisonのBreakout boardとPCはwindows7です。
作業は以下の通り
・ドライバのインストール
・ファームエウアの更新
・無線LANの設定とSSH
・Intel XDKインストール
・Intel XDKでプログラミング
・PCにnode.jsインストール
・PCでnode.jsプログラミング
・Edisonからローカルサーバーへ送信
etc

さあ、がんばりましょう!
スポンサーサイト

キネクト無双 #1

遅くなりましたが、MakerFaireTokyo2014で出展した"キネクト無双"の動画と解説をUPします!

★ 概要

犬型ロボットがアフロ人形を次々となぎ倒すというモノです。
KinectとOpenCVを使ってアフロを画像認識し、アフロ人形が倒れたことを検知して叫び声を上げさせる仕様。全部倒すと"You win"という声と勝利のBGMが流れます。

★ 詳細
KinectMuso.jpg
左上にKinectがあり、斜め下を見下ろしています。下のノートPCで処理を行い、出力画像をモニターに映し出しています。アフロを検出して赤い丸をモニター上に表示しています。ちなみに人形を動かすとリアルタイムに追従します。右にある黄色い物体が犬型ロボットです。中央にあるAndroidタブレットを用いてBluetoothで遠隔操作します。人形が倒れているのかいないのかは、アフロの高さを検出して自動判定しています。
画像処理はPCソフトウエア、遠隔操作はAndroidアプリ、ロボットはハード改造とファームウエアから構成されていますので、1つずつ解説します。

★ PCソフトウエア
KinectMuso2.jpg
Visual Studio C++を使って書きました。まず、アフロを検出するためにOpenCVを利用します。HSV変換を行い赤色のみを抽出、Hough変換を行い丸い形のモノのみを抽出。複数の赤丸を1つ1つのアフロと認識させるためにラべリング処理を行います。このままでは3次元座標位置が分からないのでKinectの登場です。Kinectは赤外線を利用したDepthセンサーを有しているため、物体までの距離を検出することが可能です。この距離とカメラ2次元座標の位置から、実空間の3次元座標が計算できる訳です。ただしKinectは傾いているため、Knectの加速度センサーから得られる角度などを使って、先ほど得られた座標に回転行列を掛け合わせます。このようにすることで、アフロの床からの高さが分かり、人形が倒れているか倒れていないかを自動判定できる仕組みです。
Bluetooth通信に関しては.NETを使っていないためちょっとややこしく、Win32APIを使ってシリアルの受信を行いました。マルチスレッド化して非同期で動かしています。

★ Androidアプリ
device-2014-12-29-192532.png
Eclipseを使いJAVAで作成しています。BluetoothChatというGoogleのサンプルアプリを改造しました。UUIDを変更し、XMLにボタンや画像、テキストを追加して画面レイアウトを構成しています。

★ ロボットのハードウエア
131102_ChaserRobot.jpg
ロボットはタミヤのロボクラフト"メカドッグ"を改造して作っています。
ユニバーサル基板上にマイコン、Bluetooth通信用USBドングル、Bluetooth-UART変換モジュール、モータードライバ、サーボモーター、フォトリフレクタ、レギュレーターIC、昇圧DC-DCモジュール、電池を搭載したモノを追加しました。素のメカドックは本体に付いているスイッチで前に進むか後ろに進むかしかできません。Bluetoothとモータードライバを使って、遠隔操作で前進と後退とストップ、ブレーキを出来るようにしました。またサーボモーターを駆使することにより、メカドッグの片足を浮かせ、回転させる動作を加えています。また前と後ろにフォトリフレクタを付け、黒い線を検出できるようにしています。中央にLEDがありますが、これは使用していません。前回はこの赤外線LEDを発光させ、Kinectで生の赤外線映像を取得していましたが、今回はKinect本来のDepthセンサーを活用しています。なお、アフロ人形は赤丸の発泡スチロールを頭にかぶっているだけで、電気的な仕掛けはありません。

★ ロボットのファームウェア
マイコンはArduino UNO上で書き込みを行い、引っこ抜いたモノを使っていますので、ソフトはArduino IDEを使って書いています。Bluetoothで受信したコマンド通りにモーターを動かしています。コマンドは前進、後退、停止、ブレーキ、回転移動、サーボ回転です。また、フェールセーフのため、前後のフォトセンサーで片側で黒を検出したら逆方向に進む、両方検知したら停止させるという自動制御も組み込んでいます。

★ 感想
当初はロボットが自動で人形を倒す予定でしたが、間に合わな・・・いや、MakerFaireに来場されている人たちに直接動かして体験してもらおうという趣旨で、Androidタブレット操作に仕様変更しました。おかげで子供たちにも人気で、たくさん遊んでくれました。また倒れると悲鳴を出すという分かり易さから、子供にも外国の方にも言葉で説明することなく理解してもらえ、笑顔をたくさんいただきました。

more...

キネクト無双 #0

Maker Faire Tokyo 2014 申し込みました。

140824_MakerFaireImage_small.jpg

ロボットがアフロな奴らを次々となぎ倒します!
Kinectを使ってアフロとロボットを画像認識し、ロボットの動作を制御。
昨年から爽快感アップ間違いなし!(予定)

がんばります!

組み込みAndroidポータブル #14

第14章 Wiiリモコンで操作

ビーグル君とお散歩を目指すプロジェクト。
Wiiリモコンを使ってAndroidを操作しよう!

120618_BeagleBoard_Bluetooth.png


今回はシンプル!

下記のサイトのようにAndroidにミドルウェアを組み込むやり方があるようですが、面倒くさいw
Wiiリモコンで操作できるプレゼン・マシンの製作(2)


そんなときはアプリを活用!
これです

Wiimote Controller

組み込みAndroidポータブル #12

第12章 電源不具合を解決せよ

ビーグル君とお散歩を目指すプロジェクト。
前回は、モバイル電池を購入してUSB OTGポート経由でBeagleBoardxMに給電しましたが、バックライトが中途半端な明るさで、OSが全く起動しませんでした。

120513_power.jpg

今回はこいつを解決します。


解析
不具合写真をよく見てみると、DCジャック近くのLEDが赤く光っていることがわかる。
LEDのリファレンス番号はD13。
"BeagleBoard-xM System Reference Manual Revision A3"によると、過電圧検知するとD13が点灯すると書いてある。回路図と部品データーシートを睨めっこしてみたが、過電圧検知じゃなくて低電圧検知ではなかろうか?
Revision B → Revision Cの変更点で、この回路が変更されている。やっぱ間違ってたのでは?
Rev Bに話しを戻すと、この検知回路はDC5Vジャックの電圧を検知して、低電圧の場合はFETをOFFにするという仕組みと解釈した。今回はUSB OTGポート電源なのに検知しているのは、FETから電圧が回り込んでいるのだと思う。
つまりは、内部の電圧(DC_5V)が下がっているということだ。
実測してみると、USB OTGポート端の電圧4.8Vに対し、内部電圧(DC_5V)は2.8Vくらいだった。


原因
ビジネスメンは忙しいので結論から先に言うと、原因は「突入電流」だ。
変換基板の3.3V REG ICの回路に電解コンデンサを付けているが、これを外してみるとOSがちゃんと立ち上がる。
電源投入直後は、非常に短い時間であるが、電荷のたまっていないコンデンサに急激に電流が流れる。これが「突入電流」
そして、BeagleBoardxMのUSG OTGポートと内部電圧(DC_5V)の間には"TPS2141PWP"というICがあり、DCジャックの挿入有無を検知してスイッチしているだけかと思っていたが、電流を監視して制限していた。

ICのデータシートをざっくり意訳すると
・突入電流を抑えるために最初は最大100mAに制限している
・その後、出力側の電圧が入力側の93%以上に達したら制限を1800mAまでに引き上げる
ということだ。
何でこんなことやっているのかというと、USB規格で「USBデバイスがUSBホストから電源を得る場合に突入電流による急激な電圧低下を防ぐこと」と決まっているためだ。

しばらく待っていれば、93%に達しそうなものだが、LCD側の負荷により電解コンデンサにたまった電荷がすぐ使われてしまい、電圧が上がらない均衡状態が続いていると思われる。
とりあえず、原因はわかった。


対策
・電解コンデンサ削除
これでいいじゃん! と思うかもしれないが、電解コンデンサは飾りで付いている訳ではない。
実際に外してみると、非常に映像が乱れる。
却下

・給電をUSB OTGポートからDCジャック側へ改造
DCジャック側には電流制限を行うICは居ない。
しかし、BeagleBoardxMの基板に手を入れて改造するのは避けたい。値段高いしね。
またUSBケーブルを改造してDCジャックに変換する手もあるが、こりゃ面倒だ。
却下

・制限抵抗追加
突入電流を防ぐ対策として、間に抵抗を入れる案がある。
しかし、3.3V REG ICに定常的に流れている電流は235mA。
どれくらいの抵抗値が必要なのかはやってみないと分からないが、電圧降下を考えるとそれほど大きな抵抗は入れられない。また、無駄に熱として電力が消費されてしまい、電池の持ち時間を減らしてしまう。
却下

・インダクタ追加
突入電流を防ぐ対策として、間にインダクタを入れる案がある。
インダクタであれば、突入電流時は抵抗値が大きくなり、定常時は抵抗がほぼゼロになるので、無駄な電力が消費されずに済む。
しかし、手持ちのインダクタで試してみたが結果は変わらなかった。
ちゃんと特性を考慮して購入する必要がありそうだ。
保留

電源供給タイミングをずらす
電解コンデンサにしっかり充電させた後に、LCD側の負荷を繋ぐという作戦。
LEDバックライトの電流が支配的なので、ここにトグルスイッチを付けて、手動でバックライトをON/OFF出来るようにした。
120513_power2.jpg
スイッチを挿入する場所はLEDバックライト電流が直接流れている所ではなく、LEDドライバのEN(chip enable)端子。 キャリーボード上でプルアップされているので、トグルスイッチを使ってGNDとショートもしくはオープンを切り替えられるようにした。

トグルスイッチでEN端子とGNDをショートしたまま電源投入
(バックライトOFFのまま起動)
120513_power3.jpg

その後、トグルスイッチを切り替えてEN端子とGNDをオープンにする
(ちょいと遅れてバックライトをON)
120513_power4.jpg
※実際はandroidのロゴが出るまで待つ必要はない。電源投入直後1秒以内にスイッチを切り替えて問題ない
成功!
→ これを採用


結果
とりあえず、仮ですが組み直しました。
120513_power6.jpg

「これはビーグル君の"しっぽ"です。」と誤魔化す案もありますが
邪魔だし、手動で切り替える手間がかかるので何とかしたいと思います。


続く


必要な部品 [ 購入先 ]
・トグルスイッチ[マルツパーツ館]
・スズコート線材 1.2mm[マルツパーツ館]

参考にしたサイト
BeagleBoard-xM System Reference Manual Revision A3
BeagleBoard-xM System Reference Manual Revision C
TPS3803G15
TPS2141
FDC6331L
IFB-T043S(Carry Board)
RT9293(LED Driver)
Wikipedia(突入電流)
EDN JAPAN(USBデバイスの受電時に突入電流を制限)
宮崎技術研究所(良くわかる 実用ノイズ対策技術)

組み込みAndroidポータブル #11

第11章 電源はどうするよ?

ビーグル君とお散歩を目指すプロジェクト。
前回は持ち運べるようにケースに押し込めました。
今回は電源です。
120510_Beagleboard.png


電源供給方法
そもそもBeagleBoardxMで可能な電源供給方法は何があるのか調べました。
(1)5V DCジャック
今、使用している方法ですが、5Vに変換するACアダプターを繋げるためコンセントが必要。
これでは持ち運べません。

(2)USB OTG Port
USB miniABコネクタにUSBケーブルを繋いで給電
スマホを充電する電池とかUSBタイプのバッテリーはたくさん世に出ているので、これを使えばいけそうだ!


消費電流調査
まずBeagleBoardxM自体の電流値は"BeagleBoard-xM System Reference Manual"よりTyp 750mAということはわかりました。
次に変換基板、キャリーボード、4.3inch LCDでの消費電流をざっくり調査・計算してみました。
Backlight LED 181mA
3.3V Regulator IC 15mA
1.8V Regulator IC 0.6mA
LCD driver 15mA
LED Driver 2.6mA
Logic Level Converter(x4) 21.2mA
NAND gate 0.01mA
------------------------------------
合計 約235mA
※TYPとMAX混在してます。ざっくりだからイイんです。

BeagleBoardxMと合わせると約985mAということがわかりました。


電源購入
BeagleBoardにマウスやキーボードなどのUSB機器やLANケーブルを繋ぐともっと消費することから1500mAくらいは流せるモノが必要そうです。
何か良いのないかな~って探していると、ぴったりなのがありました。

Panasonicモバイル電池パック QE-PL201

USB対応のリチウムイオン充電池
出力:5V 1.5A
寸法:63x70x24mm
質量:150g
端子数:2個
充電時間:約7時間
出力時間:約5時間(1端子)、約2.5時間(2端子)


という訳で、早速購入しました。

(中略)

早速、届きました。
120510_power.jpg
それほど大きくないし、デザインもシンプルでスタイリッシュ。
さすがに、今回作ったケースの中には入りませんが、簡単に持ち運べそうです。
もちろん、スマホとかにも使い回せます。


他のアイテムも必要
ここで注意するのは、1.5AというのはUSBを2端子挿したときの最大値です。
1端子あたりの出力値は仕様書に書いていないので不明。

なので、BeagleBoardxMで使う場合は、USB Yケーブルが必要になります。
家にないか探してみると、Docomoのモバイルルーターの付属品がありました。
120510_power2.jpg
家電量販店とかにも売ってます。


起動
モバイル電池パックをBeagleBoardxMに装着!
120510_power3.jpg


電源オン!
120510_power4.jpg
あれっ? バックライトが中途半端に暗いし、OSも起動もしない...


続く


必要な部品 [ 購入先 ]
・Panasonicモバイル電池パック QE-PL201[楽天]
・ELECOM ダブルパワーUSBケーブル[楽天]


組み込みAndroidポータブル #10

第10章 ケースを作ろう!

ビーグル君とお散歩を目指すプロジェクト。
Android2.3をポーティングし、4.3inch LCDに表示させることができました。

外へ持ち運ぶのに基板むき出しでは、せっかく配線した線がポロリと取れてしまう可能性があります。
そこで今回はケースを作成します!
120508_Beagleboard_case.png


ケースに入れるメリット
・一体型となり持ち運び易くなる
・何となく作った感を味わえる
・誤って配線が取れてしまうことを防げる
・透明ケースに入れると反射光でカッコよく見える
・ホコリがたまりにくい
など色々あります。


使用する材料
秋月のポリカーボネート・ケースを使いました。
寸法は縦125mmx横110mmx高さ31mm
このサイズにLCDとキャリーボードと変換基板とBeagleBoardを押し込めると、かなりギリギリです。


使用する工具
白物家電の三種の神器といえば、エアコン、冷蔵庫、洗濯機。
卓上製品の三種の神器といえば、卓上カレンダー、卓上ポールペン、そして 卓上ボール盤

120508_drilling_ machines
あと ヤスリ も必要


作業内容
現物合わせでペンで印を付けて、卓上ボール盤で穴を空け、ヤスリでシコシコと削る地道な作業です。

[空けた箇所]
・USB Aコネクタ×4
・LANコネクタ
・Dsub9pinコネクタ
・DCジャック
・USB miniABコネクタ
・microSDスロット
・HDMIケーブル
・ステレオミニジャック
・基板スぺーサー×4
※マイクとS端子の穴は用意しませんでした。


完成品
こんな感じで出来ました。
120508_case.jpg


アップ画像。
120508_case2.jpg
大雑把過ぎると思われるかもしれませんが、四角を作るのが難しいです。
ヤスリで削る作業が大変すぎます。


BeagleBoardxMを入れてみました。
120508_case3.jpg
ステレオミニジャックは遠いため、別途ジャックを用意しジャンパー線で延長しました。
この後、Beagleboardにスぺーサーも付けました。


フタをしてDCジャックやマウスを挿してAndroidを起動
120508_case4.jpg
良い感じ。
ケースに入れてしまえば、大雑把な穴の形も気にならなくなります。


続く



必要な部品 [ 購入先 ]
・大型ポリカーボネート・ケース 140[秋月電子通商]
・プラスチックナット+連結(6角ジョイント)スペーサー(10mm)セット[秋月電子通商]
・ミニジャックφ3.5ジャック(ステレオ・オープンBOX型)[千石電商]
・スズコート線材 1.2mm[マルツパーツ館]

追伸
熱がたまるので放熱は考えた方が良いかもしれません。
写真だと簡単そうに見えますが、丸一日作業でした。。。
もっと効率の良い作り方があれば、誰か教えて

組み込みAndroidポータブル #9

第9章 Androidポーティングに挑戦(2)

ビーグル君とお散歩を目指すプロジェクト。
前回からの続きで、Android 2.3(GingerBread)をビルドしてBeagleBoardxMに入れます。
120507_Beagleboard.png


全体の流れ
前回(1)、(2)が終わりました。今回は(3)から最後までダーっとやります。
簡単に言うと、"images"というフォルダを作り、ビルドしたモノをそこにどんどん放り込みます。
最後にシェルスクリプトを使ってmircroSDに書き込む という流れです。

(1)事前準備
(2)Source CodeとDevKitをダウンロード

(3)作業準備
(4)MLOを作成
(5)u-bootを作成
(6)KernelをビルドしてuImageを作成
(7)Andoridをビルドしてrootfsを作成
(8)boot script作成と解像度変更
(9)microSDカードへ書き込み
(10)起動


(3)作業準備
"myGingerBread"というフォルダを作成します。
その下に"images"というフォルダを作成します。

mkdir myGingerBread
cd myGingerBread
mkdir images


前回ダウンロードした2つのファイルをドラッグ&ドロップでmyGingerBreadへ移動します。

マウスで作業


以下のコマンドを実行して2つとも解凍

tar zxvf TI_Android_GingerBread_2_3_4Sources.tar.gz
tar zxvf TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz


"TI_Android_GingerBread_2_3_4Sources"へ移動し
readmeというファイルに従ってコマンドを実行

cd TI_Android_GingerBread_2_3_4Sources
./.repo/repo/repo sync --local-only


以下コマンドを実行しPATHを通す

export PATH=~/myGingerBread/TI_Android_GingerBread_2_3_4Sources/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

これで、ビルド作業に入れます。


(4)MLOを作成
"x-loader"フォルダへ移動

cd x-loader


クロスコンパイルを実行

make CROSS_COMPILE=arm-eabi- distclean
make CROSS_COMPILE=arm-eabi- omap3beagle_config
make CROSS_COMPILE=arm-eabi-


"x-loader.bin"というファイルができるので、DevKitの中にある"signGP"というプログラムを使ってMLOを作成する

../../TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/signGP/signGP ./x-load.bin


"x-load.bin.ift"というファイルができるので、"images"フォルダへ移動し、名前を"MLO"に変更する

mv x-load.bin.ift ../../images/MLO



(5)u-bootを作成
"u-boot"フォルダへ移動しビルド

cd ../u-boot/
make CROSS_COMPILE=arm-eabi- distclean
make CROSS_COMPILE=arm-eabi- omap3_beagle_config
make CROSS_COMPILE=arm-eabi-


"u-boot.bin"というファイルができたので、"images"フォルダへコピー

cp u-boot.bin ../../images/


母艦PC直下の"/usr/bin"フォルダに、"tools"フォルダの下にある"mkimage"をコピー
これはkernel imageを発生させるのに必要

cd tools
cp mkimage ~/bin



(6)KernelをビルドしてuImageを作成
"kernel"フォルダへ移動

cd ../../kernel


ビルドする。 このとき最後の "-5"というオプションは母艦PCのCPUコア数 + 1 の値にすると速く実行できる。
CPUコアの調べ方は、"cat /proc/cpuinfo"などで調べられる。

make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig
make ARCH=arm CROSS_COMPILE=arm-eabi- -j5 uImage


"arch/arm/boot"の下に"uImage"ファイルが出来たので、"images"フォルダへコピー

cd arch/arm/boot
cp uImage ../../../../../images/
cd ../../../../



(7)Andoridをビルドしてrootfsを作成
Android File Systemをビルドします。 先ほどと同様にCPUコア数+1 を-jオプションで追加
ちなみに1時間弱放置していたら、いつの間にか出来ていました。

make TARGET_PRODUCT=beagleboard OMAPES=5.x -j5


Android File Systemが作られた位置へ移動

cd out/target/product/beagleboard


"android_rootfs"というフォルダを作成して、その中に"root"フォルダの中身 と "system"フォルダ をコピー

mkdir android_rootfs
cp -r root/* android_rootfs
cp -r system android_rootfs


圧縮して"rootfs.tar.bz2"というファイル名にした後、"images"フォルダへコピー

sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2
cp rootfs.tar.bz2 ../../../../../images/



(8)boot script作成と解像度変更
DevKitへ移動し、"mkbootscr"を実行

cd ~/BeagleBoard/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-bootscr/
./mkbootscr


"boot.script"というファイルが出来るので、編集する

sudo emacs boot.script


以下を入力して保存。 ここで解像度を480x272にしています。

mmc init
fatload mmc 1 80200000 uImage
setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init omap_vout.vid1_static_vrfb_alloc=y omapfb.mode=dvi:480x272MR-24 omapdss.def_disp="dvi" vram=8M omapfb.vram=0:8M'
bootm 0x80200000


"boot.scr"を作成して、"images"フォルダへコピー

sudo ./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n BeagleBoard -d boot.script boot.scr
cp boot.scr ../../../images/



(9)microSDカードへ書き込み
シェルスクリプトを"images"フォルダへコピー

cd ../mk-mmc
cp mkmmc-android.sh ../../../images/


さあ、これで役者はそろいました!
書き込む microSDカードを母艦PCへ繋ぎます。
ドライブの場所を確認してください。
システム→Administration→ディスク・ユーティリティ でわかります。
もしくは、dfコマンドでも確認できます。
エレバカの母艦の場合は "/dev/sdc" ということが分かりました

cd ../../../images
LANG=C sudo ./mkmmc-android.sh /dev/sdc MLO u-boot.bin uImage boot.scr rootfs.tar.bz2

書き込みが終了したら、microSDカードをBeagleBoardxMへ挿入!


(10)起動
電源オン!
120507_android1.jpg


とりゃー!
120507_android2.jpg
おおー!
ドロイド先生登場! しかも2体もいらっしゃる! 恐れ入ります!

120507_android3.jpg
ロゴ出ました!


120507_android4.jpg
ログイン画面!

120507_android5.jpg
マウスでログイン!

120507_android6.jpg
ランチャー画面!

ちょっと、画像が乱れている?
そんな小さな事は気にしてはいけない!
とりあえず成功だ! 今夜は良い夢が見られそうだ

続く



参考にしたサイト
知らんがな  ← こちらのサイトを激しく参考にさせていただきました!
TI-Android-GingerBread-2.3.4-DevKit-2.1 DeveloperGuide


追伸
以前に参考書を見ながらやってましたが、数時間要するダウンロードに何度も失敗し、上手く行きませんでした。
根幹となる部分は変わりませんが、ダウンロード先のURLなどは、変更が激しいので最新の情報をキャッチする必要があります。
ここに書いた情報もいつの日か古くなってしまうときが来ると思いますが、参考にされる方は めげずに頑張ってください。必ず解決策があります。


組み込みAndroidポータブル #8

第8章 Androidポーティングに挑戦(1)

ビーグル君とお散歩を目指すプロジェクト。
今回は いよいよAndroid 2.3(GingerBread)をビルドしてBeagleBoardxMに入れます。
120506_Beagleboard.png


全体の流れ
若干手順が多いですが、着実に行えばできます。
(1)事前準備
(2)Source CodeとDevKitをダウンロード
(3)作業準備
(4)MLOを作成
(5)u-bootを作成
(6)KernelをビルドしてuImageを作成
(7)Andoridをビルドしてrootfsを作成
(8)boot script作成と解像度変更
(9)microSDカードへ書き込み
(10)起動


(1)事前準備
ここは最初1回だけ必要な手順です。
人によっては既に導入済みのものもあると思います。

・環境について
前回同様、母艦PCにLinux環境が必須です。
エレバカはwubiでインストールしてUbuntu 10.04でやってます。
環境が異なる場合は、最後に記述している"参考にしたサイト"を参照して下さい。
ちなみにBeagleBoardxMは"rev B"です。

・空き容量確認
ダウンロードファイルと各作業で16GBくらい消費しましたので、最低20GB以上空き容量があることをお勧めします。
既にインストールしたUbuntuで空き容量を増やすには"LVPM"が便利です。

・JDKのインストール

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk


・その他の必要なソフトのインストール

sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc


・作業ディレクトリ準備
まずbinディレクトリを作成し、そこにPATHを通す

mkdir ~/bin
export PATH=~/bin:$PATH


・repoの入手
repoをダウンロードし、実行できるように設定する

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo


・checksumを確認

sha1sum repo

エレバカが以前にDLしたときと、現在versionが変わっているようです。
For version 1.15, the SHA-1 checksum for repo is 8eb56d98b36d615c3efec51868e87bebe757feb1
For version 1.16, the SHA-1 checksum for repo is f3bfa7fd2d0a44aa40579bb0242cc20df37b5e17
android open source project(Downloading the Source)で確かめてください。

・repo initを実行
これが絶対に必要なコマンドかわかりませんが、一応書いておきます。

repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-GingerBread-2.3.4-DevKit-2.1.xml

これを実行すると、名前とEmailアドレスを聞かれるので入力します。
特にmailが返ってくるわけでもありません。


(2)Source CodeとDevKitをダウンロード
Texas Instruments(BeagleBoardのCPUを作っているメーカー)が用意しているBeagleBoard用のAndroidソースコードと開発用キットをダウンロードします。
ダウンロードに6時間弱かかりましたので、寝る前に行うことをお勧めします

以下のページから2つのファイルをrepo syncを使わず直接ダウンロードします。
TI_Android_DevKit TI_Android_GingerBread_2_3_4_DevKit_2_1 Product Download Page
"TI_Android_GingerBread_2_3_4Sources.tar.gz"
"TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz"

とりあえず、ダウンロードを仕掛けたら寝るべし
続きはまた明日。

続く


ポイント
・repoはURLが間違っていてもDLできてしまう。たまに正しいファイルが取得できていない場合もある。これでハマった。checksumが合っていることを必ずチェック!

参考にしたサイト
android open source project(Initializing the Build Environment)
android open source project(Downloading the Source)
TI-Android-GingerBread-2.3.4-DevKit-2.1 DeveloperGuide
知らんがな(Gingerbread (Android 2.3.4) on BeagleBoard-xM Rev.C)

組み込みAndroidポータブル #7

第7章 UbuntuにGUIを入れろ

ビーグル君とお散歩を目指すプロジェクト。
前回遂に4.3inch LCDへの表示が成功しました。

しかし文字だけのCUI(Character User Interface)画面では物足りないので、
今回はGUI(Graphical User Interface)画面を表示させます。
120505_ubuntuGUI.png

何度かインストール作業を繰り返して、やっとこさ成功したので、時系列でその記録をお伝えします。


事前準備
ちっちゃいLCDだと見づらいので、前回修正したuEnv.txtファイルの内容を元に戻しBeagleBoardxMにHDMIケーブルを繋ぎ、母艦PCの液晶モニターに映してインストール作業を行った。


1回目
・ログイン
まずBeagleBoard上でUbuntuを起動してログイン

Default user: ubuntu
pass: temppwd


・イーサネット有効化
BeagleBoardにLANケーブルを挿し込んでからコマンド実行

sudo  ifconfig  -a
sudo  dhclient  eth0


・アップデート

sudo  apt-get  update


・GUIをインストール

sudo apt-get install gdm xubuntu-desktop

→エラーが出て失敗。


2回目
再び、電源OFF/ONしてログイン→イーサネット有効化→アップデート→GUIインストール を実行
エラーとその対処が出ていたので、それに従いコマンドを打ち込んだ

sudo dpkg --configure -a

"gdm" か "lightdm" か選ぶ箇所があったので、"gdm"を選択
→しばらくして途中で映像が消えてしまう。

3回目
microSDカードを別のモノに変えてやってみた
→ダメ。同じく映像が消える

4回目
途中の選択を"lightdm"にしてみた。
→ダメ。同じ。

5回目
BeagleBoardxMのDsubコネクタにRS232C-USBケーブルを繋ぎ母艦PCのUSBコネクタと接続。
母艦のUbuntu上では、"minicom"というソフトを利用。
BeagleBoard上ではなく、母艦PCの"minicom"からインストール作業を実行
ログイン→イーサネット有効化→アップデート→GUIインストール を実行

→どうやら、HDMI端子から出力されている映像が消えた後もBeagleBoardはインストール作業を実行し続けているということが判明した!

2,3時間くらいかかった。

BeagleBoardの電源をOFF/ONして起動
いつもと違う感じ。
なんか、GUIを出そうとしてるが、すぐ画になってしまう。
そういえば、今回は"gdm" か "lightdm" かを選ぶ箇所がなかった気がする。

とりあえず"ふて寝"


6回目
今回は母艦PCをWindowsで立ち上げていたので、"minicon"ではなく"teraterm"を使用しインストール作業を行った。ついでにuEnv.txtファイルの内容を480x272に再び変更した。

電源ONしてログイン→イーサネット有効化→アップデート→GUIインストール を実行
前回はこの画面が出ていなかった気がする
120505_ubuntuGUI2.jpg
※PC液晶モニターの映像

Enterキーを押すと、"gdm" か "lightdm" かを選ぶ画面に
120505_ubuntuGUI3.jpg
※PC液晶モニターの映像

その後、1時間くらい放置して、気づくと終了していた。
そして電源をOFF/ONすると・・・
120505_ubuntuGUI4.jpg
GUI来ました!
マウスも動きます。

120505_ubuntuGUI5.jpg
しかし! 色々クリックしてみるが、どうしてもこれ以上先に進まない。
なぜだ?
再び "ふて寝"


7回目
先に進まない原因がわかった。
4.3inch LCDではパスワード入力のインプットボックスが画面上に見えていなかったのだ。
uEnv.txtファイルの内容を元に戻し、PC用の液晶モニターに表示してみてわかった。
120505_ubuntuGUI6.jpg
※PC液晶モニターの映像

えっ?、じゃあ4.3inchだとログイン不可能なのか?
いいえ、大丈夫です。
こういうときは心の眼で打ち込むべし。

ポイント
・左下のプルダウンメニューで「Xubuntu Session」を選択
・Demo Userをクリックして一旦フォーカスをここに合わせる
・キーボードでTabを押し、フォーカスを見えないパスワード入力インプットボックスに移動させる
・そこでパスワード「temppwd」を間違わずに入力してEnterを押す

そうすると・・・
120505_ubuntuGUI7.jpg
4.3inch LCDでUbuntu11.10 GUIログイン成功!

ちょっと、画像が乱れている?
いいや、そんな小さな事は気にしてはいけない!
次は、Androidに挑戦だ!!

続く


まとめ
・作業内容は、ログイン→イーサネット有効化→アップデート→GUIインストール だけ
・BeagleBoard上でのインストールの際は、シリアルケーブルを繋げて母艦PCで状況をチェック
・途中で、"gdm" か "lightdm" かを選ぶ必要あり
・インストールに1時間くらいはかかる
・480x272の解像度でログインする場合は、ポイントに書いたように工夫して入力する

参考にしたサイト
Embedded Linux Wiki(BeagleBoardUbuntu)
Ichmy's Web Site(Beagleboard-xM で遊ぼうのこーなー)
とりあえずやってみる

組み込みAndroidポータブル #6

第6章 Ubuntuを入手して解像度を変更

ビーグル君とお散歩を目指すプロジェクト。
LCDに表示させるための3つの対策中2つは出来ました。
残り1つの対策である、解像度の変更を行います。

Androidをポーティングすることでも可能ですが、ちょっと時間がかかりそうなので、我慢できません。
まずは、手っ取り早く確認ができそうなUbuntu11.10のプリビルドイメージを入れることとします。Androidは後のお楽しみです。
120504_ubuntu0.png
※イメージ図


ここからは、Linuxと にらめっこ大会が始まりますので、母艦となるPCにUbuntuがインストールされていることが前提です。
Ubuntuのインストール方法などについてはこちらを参照してください。

Pre-Build Imageを入手
まずダウンロード。数十秒でDLできます。

wget http://rcn-ee.net/deb/rootfs/oneiric/ubuntu-11.10-r7-minimal-armel.tar.xz


チェックサムを実行
正しくダウンロードできているかチェックします。

md5sum ubuntu-11.10-r7-minimal-armel.tar.xz

"58092de96f8934da74ea00e6a7b8eccf ubuntu-11.10-r7-minimal-armel.tar.xz"と出ればOK

解凍

tar xJf ubuntu-11.10-r7-minimal-armel.tar.xz


解凍したディレクトリへ移動

cd ubuntu-11.10-r7-minimal-armel



microSDカードへ展開
microSDカードを母艦へ接続し、マウントしてドライブの場所を確認します。
システム→Administration→ディスク・ユーティリティ でわかります。
もしくは、dfコマンドでも確認できます。
エレバカの母艦の場合は "/dev/sdc" ということが分かりました。

シェルスクリプトを実行します。

sudo ./setup_sdcard.sh --mmc /dev/sdc --uboot beagle_xm

※赤字部分は母艦によって異なりますので、よくご確認下さい。

本当に良いか聞かれるので"y"を打ち込むが、何やら足りないとエラーが出ました。
インストールすべきコマンドが表示されているので、それに従ってコマンドを打ちました。

sudo apt-get install uboot -mkimage wget pv dosfstools btrfs -tools parted

インストール完了後、再びシェルスクリプトを実行すると、数分かかってから
"setup sdcard.sh script complete" と表示が出て完了。


設定ファイルを変更
microSDカードの中の"boot"パーティションの中にある"uEnv.txt"を開きます。
以下のように修正保存します。 "#"を入れればコメント行扱いになります。

#dvimode=1280x720MR-16@60
dvimode=480x272MR-16@60

これで解像度が変更され、LCDスペック内のCLK周波数になります。(約11MHz)
保存したらアンマウントして、microSDカードを母艦から取り出します。


電源ON
作成したmicroSDをBeagleBoardに挿入し、いよいよ電源ON!
とりゃー!
120504_ubuntu1.jpg
おおーーー! やったーーー!!

120504_ubuntu3.jpg
ペンギンさん、いらっしゃい!


120504_ubuntu2.jpg
CUIまで出来たので、次回はGUIに挑戦だ!


続く


ポイント
ログインID:ubuntu
パスワード:temppwd

参考にしたサイト
Embedded Linux Wiki(BeagleBoardUbuntu)
Ichmy's Web Site(Beagleboard-xM で遊ぼうのこーなー)

追伸
LCDに映ったときは感動しました。

組み込みAndroidポータブル #5

第5章 変換基板を製作せよ

ビーグル君とお散歩を目指すプロジェクト。
前回 変換基板の設計図ができたので、ユニバーサル基板にモクモクと結線してゆきます。

最終的にケースの中に押し込めたいので、BeagleBoardがギリギリ入りそうなポリカーボネートケースを購入し、それと現物合わせをしながら、部品のレイアウトや配線の引き回しを決めました。


変換基板結線の様子(Top)
120502_ConverterBoard_Top.jpg
BeagleBoardxMのLCDコネクタが1.27mmピッチであるため、1.27mmピッチのユニバーサル基板を使っています。
右下のピンヘッダはLCDコネクタ用。1列用のピンヘッダを2列に並べる場合はヤスリで削る必要あります。
左下のピンヘッダは回路的には使用しておらず、BeagleBoardと合体したときに安定させるために付けました。
下側に4つ並んでいるのが「8ビット双方向ロジックレベル変換モジュール」
左上が1.8VのレギュレーターIC、右上が3.3VのレギュレーターIC。ケースに入れることを考慮すると裏面には配置できません。そこで、無理矢理表面にユニバーサル基板を小さく切った基板に載せてセロテープで付けました。良い子はマネしてはいけません。
コンデンサの足が長すぎたので、後で短くしようと思います。


変換基板結線の様子(Bottom)
120502_ConverterBoard_Bottom.jpg
左上がNANDゲート。足を曲げたりして、ピン直で線付けしました。
途中まで、φ0.56mmのETFE(ジュンフロン)線で繋いでいましたが、ケースに押しこめることを考えると、もっと細い線が必要であることに気づき、途中からφ0.2mmのUEW(ポリウレタン銅)線に変えました。
電源とGNDは太いスズコート線を使っています。


CarryBoardと結線し、BeagleBoardxMと合体した様子
120502_ConverterBoard.jpg
すっかりスパゲティ状態です。
後半は疲れて、もうどうでもよくなってきました。


回路自体は複雑ではないのですが
信号線が60本以上あることと基板が1.27mmピッチで作業しづらく、丸一日かかりました・・・
お疲れさん!!
次は解像度の設定だ!

続く


必要な部品 [ 購入先 ]
・片面ガラス・ユニバーサル基板Cタイプ1.27mmピッチ(72x48mm)[秋月電子通商]
・大型ポリカーボネート・ケース 140[秋月電子通商]
・8ビット双方向ロジックレベル変換モジュール[秋月電子通商]
・CMOS 2入力 NANDゲート TC74AC00FT[秋月電子通商]
・三端子レギュレーター(3.3V1.5A) AZ1086H-3.3[秋月電子通商]
・低損失表面実装型三端子レギュレーター(1.8V800mA) NJM2845DL1-18[秋月電子通商]
・1.27mmピッチピンヘッダ1x40(40P)[秋月電子通商]
・電解コンデンサー10μF50V[秋月電子通商]
・電解コンデンサー22μF50V[秋月電子通商]
・積層セラミックコンデンサー0.22μF50V[秋月電子通商]
・スズコート線材 1.2mm[マルツパーツ館]
・ポリウレタン銅線 0.2mm[マルツパーツ館]

ポイント(というか反省)
・配線はなるべく短く
・信号は全てUEW(ポリウレタン銅)線で接続した方が良い
・できれば基板にGND面を作った方が良い

参考にしたサイト
#include "matsu.h"


組み込みAndroidポータブル #4

第4章 変換基板を設計せよ

ビーグル君とお散歩を目指すプロジェクト。
BeagleBoardxMとLCDを直接繋いでもダメで、3つの対策を行う必要があるということが前回まででわかりました。
今回は、その中の2つの対策を盛り込んだ変換基板を設計します。


全体イメージはこんな感じ
120502_Beagble_LCD2.png


変換基板を中心としたブロック図です。
red,green,blueはそれぞれ8bitなので、実際には24本の信号があります。
120502_Block.png


それぞれの部位について、画像付きの回路図で説明します。
LCD Connector
BeagleBoardxMのLCDコネクタです。
変換基板にピンヘッダを付けて、BeagleBoardxMと合体することを想定しています。
120502_LCD_Connector.png


Voltage Converter
各信号を1.8Vから3.3Vへ変換します。
秋月の「8ビット双方向ロジックレベル変換モジュール」を利用しました。
裏面から見た図になっています。OEはGNDに繋げます。
120502_VoltageConverter.png



Inverter
VSYNCとHSYCNをNANDゲートを使って反転させます。
「CMOS 2入力 NANDゲート TC74AC00FT」を使用
120502_Inverter.png


Power3.3V
レギュレーターICを使って5Vから3.3Vを作りだします。
手持ちの「三端子レギュレーター(3.3V1.5A) AZ1086H-3.3」を使用しましたが、500mAくらいでも問題ないと思います。
120502_Power3_3v.png


Power1.8V
レギュレーターICを使って3.3Vから1.8Vを作りだします。
低損失表面実装型三端子レギュレーター(1.8V800mA) NJM2845DL1-18を使用しました。
120502_Power1_8v.png


CarryBoard
変換基板から線を飛ばして、CarryBoardの20pinコネクタの足に付けます。
LED driverについてはCarryBoardに既に実装されているため、特に何もする必要はありません。
120502_carry_board.png


大文字小文字に注意して、黒丸で示した同じ信号名同士を結線すれば完成です。
ちょっと長くなってしまったので、実際の結線の様子は次回へ。


続く

組み込みAndroidポータブル #3

第3章 表示されない原因を探る

ビーグル君とお散歩を目指すプロジェクト。
LCDを買ってとりあえず繋いだは良いが、真っ白にしか表示されませんでした。

120430_Beagble_LCD.png

検討の結果、3つの間違いがあることがわかりました。

(1)電圧が異なる
LCDの駆動電圧が3.3Vに対して、BeagleBoardxMのLCDの各信号の出力信号の振幅は1.8V
LCDのスペックを見ると信号電圧に関しても電源電圧と同じスペックです。

120430_LCDspec.png
LCD(H043M48027240NC08)のデータシートより抜粋

また、タイミング特性を見るとMAX時の70%や30%を基準としてセットアップ・ホールド時間を規定しています。
電源電圧3.3Vであれば、信号電圧のMAXも3.3Vなので、70%の電圧は2.31Vとなり、1.8Vでは足りないことがわかります。


(2)波形が反転している
LCDのスペックを見ると、VSD(VSYNC Detec)とHSD(HSYNC Detect)はLow Activeになっています。

120430_SYNCspec.png
LCD(H043M48027240NC08)のデータシートより抜粋

これに対してオシロスコープで取得したHSYNCとVSYNCの波形を示します。

HSYNC
120430_HSYNC.png

VSYNC
120430_VSYNC.png

Detectがデータシートと異なりHigh Activeになっています。
他のCLKやRGB DATA、DENはデータシートと同じ論理で問題ありません。
つまり、HSYNCとVSYNCのみ波形が反転してしまっているということ。


(3)CLK周波数が異なる
LCDのスペックを見ると、CLK周波数は5~12MHzである必要があります。
120430_CLKspec.png
LCD(H043M48027240NC08)のデータシートより抜粋

これに対してオシロスコープで取得したCKLの波形を示します。
120430_CLKwave.jpg

計算すると約23MHzで、スペックを超えています。


ポイント
解決方法は以下の通り
(1)LCDの各信号について、1.8Vから3.3Vへ電圧変換する
(2)HSYNCとVSYNCに関して、波形を反転する
(3)解像度の設定を480x272にして、CLKを5~12MHzの範囲内にする

(1)と(2)は、変換基板を新たに挿入することで実現させます。(次回説明)
(3)については、microSDカードにOSを入れるときに設定変更することで実現させます。(後日説明)


続く

組み込みAndroidポータブル #2

第2章 とりあえずLCDを接続してみる

ビーグル君とお散歩を目指すプロジェクト、いよいよ始動です。

まず、LCDを購入します。
パラレルRGB24bitのI/Fで、サイズ4.3inch 解像度480x272、電源電圧3.3VのTFT液晶をaitendoで購入しました。LCDドライバチップ内蔵で、RGB24本とHSYNC(水平同期信号)、VSYNC(垂直同期信号)、CLK(ピクセルクロック信号)、DEN(データイネーブル信号)、電源(VDDとGND)さえ与えてやれば動きます。
120429_LCD.jpg


液晶には必ずバックライトが必要です。このLCDの場合はバックライトLED内蔵ですが、電源22.4Vを外から与えてやることが必要で、昇圧回路が必要になります。
また、40pinのFPCケーブルを受ける基板も必要になります。
しかし、キャリーボードと呼ばれる、昇圧回路もFPCコネクタも搭載されている便利なボードが売られているため、こいつを利用します。キャリーボードにはピンヘッダが挿さるコネクタがありますが、これは使用せず、コネクタの足に直接線で半田付けします
120429_CarryBoard.jpg



まずは、お試しということで、BeagleBoardxMのLCDコネクタの足に直接半田付け。
CLK、HSYNC、VSYNC、DEN、GNDを付けてゆきます。
RGB24bitに関しては、お試し段階なので全部付けるのではなく、どれか一色、最上位ビット辺りを付けときゃ良いだろ。
1.27mmピッチって意外と付けるの大変
VDDに関しては、おっと、LCDの電源電圧は3.3Vなので、レギュレーターICを使ってBeagbleBoardの電源5Vから降圧が必要だった。ユニバーサル基板を小さくカットして、キャリーボードに載せました。
とりゃー! 
120429_Beagle_LCD.jpg
プローブが映っていますが、オシロで波形を取るためです。動作には関係ありません。


Android 2.2(Froyo)のプリビルドイメージを入れたmicroSDカードを挿し、いざ電源ON!
120429_LCD_White.jpg

真っ白です。
バックライトは動いていそうだ

いつまで経っても真っ白・・・
頭の中も真っ白・・・


続く


必要な部品 [ 購入先 ]
・TFT液晶モジュール(4.3) T043S48027240NC07 [aitendo]
・液晶I/F変換基板IFB-T043S [aitendo]
・三端子レギュレータ3.3V出力 [秋月電子通商]
・microSDカード(2GB以上) [電気屋]

ポイント
BeagleBoardと上記LCDを直接接続するのは間違っています。次回解説します。
Androidのイメージの作り方に関しては後日解説します。

03 | 2017/04 | 05
Su Mo Tu We Th Fr Sa
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
プロフィール

エレクトリックバカ

Author:エレクトリックバカ

ポケコンでプログラミングに目覚め、PICマイコンで電子工作に希望を抱き、来たるべきUGDの時代を夢見て眠る。
そんな うだつが上がらないサラリーメン。
先生、電子工作はおやつに入りますか?




Electric Baka

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。