AdSense

2015年4月26日日曜日

Pandboard ESでAndroidやFirefox OSやUbuntu OSを動かす


WindowsPCにVirtual Boxを入れて
そこでUbuntuを動かしつつ各種OSをビルド。

ビルド成功したらメモリーカードに焼いてPandaboardで実行。

やり方はsolaさんのブログを参考に。


1.Android 4.4 Kitkat

ICS、JeryBeansと同じように無事ビルド成功。



2.Firefox OS

ソースを見たところ、下回り(Framework以下)はAndroidと同じ。
動きはカクつく。




3.Ubuntu OS

割りとスムーズに動く。

写真は紛失。

2015年4月25日土曜日

Androidでアルコールチェッカーをつくる

アルコールセンサー(MQ-3)をもっと簡単に使いたいと思い、
Arduino経由でAndroidとつなげてみることにしました。


使うもの

・Android端末(Nexus6)
・Arduino UNO
・アルコールセンサー(MQ-3)



まず参考にしたのは、
Androidで簡単にArduinoと接続できるライブラリ

Physicaloid Library
https://github.com/ksksue/PhysicaloidLibrary

それを使ってアルコールセンサーを動かしているPocketDuinoです。

PocketDuino
http://www.physicaloid.com/wiki/doku.php?id=hardware:pocketduino


PocketDuinoがあれば良かったのだけど、既に販売終了しているようなので、
諦めてArduinoでやってみることにしました。



作業開始メモ

1.PysycaloidをEcripseに取り込んでサンプルソフトを実行する。
 しかしながら、シリアルのOpenが出来ない。Arduinoを認識していない模様。

 デバッグしようにも、Android端末のUsbがArduinoでふさがってる。
 なので、Wifiデバッグを試してみる。

 Wifiデバッグのやりかた
 ・PCのとAndroidをUSBで接続し、下記コマンドをうつ
  $ adb tcpip 5555
  $ adb connect 192.168.1.1:5555     ※IPアドレスはAndroidのやつを指定
 ・USBを抜いても、普通にログだしたりできます。
  $ adb shell logcat

 もとに戻すにははadb usbでOK

 無事デバッグ可能になりました。超簡単。

で、ログを見てみると、
UsbHostManagerはデバイス認識しているのだけど、UsbAccessorがpermissionで弾かれている?
デバイス接続が出来ない。


ログ
04-25 13:29:07.970: I/ActivityManager(812): START u0 {flg=0x10000000 cmp=com.android.systemui/.usb.UsbPermissionActivity (has extras)} from uid 1000 on display 0
04-25 13:29:07.973: V/WindowManager(812): addAppToken: AppWindowToken{3c1d4ade token=Token{162dfa19 ActivityRecord{2b414560 u0 com.android.systemui/.usb.UsbPermissionActivity t592}}} to stack=1 task=592 at 0
04-25 13:29:07.995: D/UsbAccessor(13195): Doesn't have permission device(0) : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[


http://developer.android.com/guide/topics/connectivity/usb/host.html
こちらを参考に、intent-filterとか設定してみる。
 →右USBを刺した時に起動されるようになった。そうじゃない。

Permissionが必要なのか?
 →SystemアプリじゃないとUSBのPermissionは設定出来ない。エラーになる。

ソースを解析する。
getPermission()にて、初回起動時はPermissionが無いので、ここでRequest permissionする。

04-25 15:24:48.562: D/UsbAccessor(23353): Request permission : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[


で、画面にPermission許可するダイアログがでる。ここで許可する。
04-25 15:32:16.609: I/ActivityManager(812): START u0 {flg=0x10000000 cmp=com.android.systemui/.usb.UsbPermissionActivity (has extras)} from uid 1000 on display 0

しかし、その後のログで、

04-25 15:25:21.747: D/UsbAccessor(23353): Doesn't have permission device(0) : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[

が出る。許可したはずなのに、Permissionが無いことになる。
↑嘘でした。ちゃんとダイアログでPermissionを許可してやれば大丈夫。xmlのパーミッション許可とか不要。


で、再度Debugで動かして、mSerialのmDeviceをみると、Arduinoがちゃんと接続されていることがわかる。

ただし何故かSerialが開けない。


Physicaloid.javaにて、mSerial openでfalseになる。これが原因ぽい。

ソースを潜ると
UsbCdcConnection.javaのopen()にて、falseを返しているのがおかしい。

どうも、既にOpenになっている場合は、else側に行くのだが、そっちだとFalseを返してしまうようだ。
なので、すでにOpenの場合もTrueを返すようにする。

UsbCdcConnection.javaを下記に修正


すると今度はInitのcontrolTransfer()で失敗する。

http://android.ohwada.jp/archives/tag/mbed
ここを参考にさせてもらうと、
Arduino Uno では、CDC ACM は、Interface 0 固定らしい。
元のソースでは変数mInterfaceNumになってて、これが1だったのが間違い。
これも0にしてやる。

2箇所でcontrolTransfer()が使われてるので、どちらも0にする。


UartCdcAcm.java



これでようやくSerialがOpenできるようになる。
こうして無事アルコールセンサーの値がとれました。

組み合わせだけでいけると思ってましたが、意外に時間がかかりました。

まとめ:

1.AndroidアプリはPocketDuino用に作られたのを流用させてもらう

https://github.com/ohwada/PocketDuino

2.AndroidからArduinoを認識させるためにPhysicaloid Libraryをつかう

https://github.com/ksksue/PhysicaloidLibrary/tree/master/SampleProjects

 ただしこのままでは動かない。Arduino Uno用に上述した変更が必要。

3.ArduinoのスケッチもPocketDuino用に作られたのを流用。

https://github.com/ohwada/PocketDuino

  Sparkfunのサンプルでも良い
  http://wiring.org.co/learning/basics/airqualitymq135.html

4.アルコールセンサーはこちら

https://www.sparkfun.com/products/8880

  回路図は下記を参考
  http://wiring.org.co/learning/basics/airqualitymq135.html
  http://bildr.org/2013/10/mq3-arduino/


無事、簡易アルコールチェッカーができました。

Androidの電源だけで、Arduinoとアルコールセンサが動いています。


2015年4月24日金曜日

windows環境でAndroid 4.03(ICS)のソースを解析したい

あわよくばビルドもしたい。はたして出来るのか。

1.ICSをのソースを取得する準備(git使えるようにする)
 windowsでgitが使えるようになるツール「msysgit」をインストール

  http://greety.sakura.ne.jp/redo/2012/02/windowsandroid.html
  Windowsでgit使ってICSのソースをとってくる

  http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_1.html
  gitliteというGitのツール。他にもいろいろある模様。

2.ICSのソースを入手する
 git init
 git clone https://github.com/OESF/OHA-Android-4.0.3_r1.0.git

3.構造解析のためのツールインストール
 EA
 eclipse

今日はここまで。

2015年3月7日土曜日

ミクさんが歌って踊るWAVE FILEを作ってAndroidで動かす


背景

ミクさんのライブを臨場感たっぷりで見たい
   ↓
 Cardboardを使えば簡単に見れるのではないか
   ↓
 GooglePlayを探したけど、あんまりない
   ↓
 これは、自作するしかない

環境

Windows7

費用

0円

参考にさせて頂いたとこ

http://mypace-engine.blogspot.jp/2014/07/mmdunitydive-mmd4mecanim.html
 http://teshi04.hatenablog.com/entry/2014/10/29/040202
  https://akira-watson.com/unity/unity-android-release.html
 http://mypace-engine.blogspot.jp/2014/07/float-ypfloat0.html
 http://tsubakit1.hateblo.jp/entry/2014/09/14/170753

手順

1.Unityをインストール

http://japan.unity3d.com/unity/download/

2.MMD4MecanimをUnityにImport

http://stereoarts.jp/
MMD4Mecanim_Beta_20150214.zip

3.Dive SDKから下記をUnityにImporrt

https://www.durovis.com/sdk.html
Dive Unity Plugin Package 2.0 for Android/ iOS.

4.MMD4Mecanim チュートリアル(基本編) に従い、ミクさんのモデルを入手

http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf
 ※Piaproにアカウント登録必要(無料)。Twitterアカウント必要。
モデル
 よ式初音ミクv1.2.1 / よっさん
 http://piapro.jp/t/QcRy
 [MMDモデル]巡音ルカ V4X[マシシ]/マシシさん
 https://bowlroll.net/file/64929
モーション
 WAVEFILE fullver. モーション / hinoさん
 http://bowlroll.net/up/dl5983

5.MMD4Mecanim チュートリアル(基本編) に従い、Unityでの設定

Unityの基礎がないので、操作に結構手間どう。

Audio設定する際の設定項目は、以下
Hierarchy - Yo_Miku_Ver1.2.1(モデル選択)
 右下に「MMD4Mecanim Model(Script)」の設定がでるので、そこで「Anim」タブを押す。

6.Androidのapk作成


ただしこんなエラーで止まる。
Error building Player: UnityException: Bundle Identifier has not been set up correctly
Please set the Bundle Identifier in the Player Settings. The value must follow the convention 'com.YourCompanyName.YourProductName' and can contain alphanumeric characters and underscore.
Each segment must not start with a numeric character or underscore.


対策:
playersettingのandroidsettingのBundle identifierを適当に変えること。
あと、ビルド成功したっぽいのに、apkが指定したとこに生成されてない。
で、よく探したら、
  プロジェクトフォルダ - Temp\StagingArea
に「Package_unaligned.apk」という名前で生成されてた。

7.無事Androidで動いた




8.背景の設定

ステージファイルを入れる
 http://seiga.nicovideo.jp/seiga/im3738792

 音源も設定しておく
 http://stereoarts.jp/MMD4Mecanim%20%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E5%90%8C%E6%9C%9F.pdf

9.Cardboard用のカメラ設定

Main_Cameraを無効にしてDive_Cameraを有効にする。

 Cardboard用の変更
 http://mypace-engine.blogspot.jp/2014/07/float-ypfloat0.html





2014年8月24日日曜日

Arudino Procesing Funnel環境構築

コマンドポート:サーバの起動中…
コマンドポート:サーバが起動しました:9000
I/Oモジュールと接続中です…
java.lang.UnsatisfiedLinkError: C:\Users\xxx\Documents\Processing\libraries\funnel\library\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: C:\Users\xxx\Documents\Processing\libraries\funnel\library\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:83)
at funnel.FirmataIO.begin(FirmataIO.java:513)
at funnel.ArduinoIO.(ArduinoIO.java:36)
at funnel.FunnelServer.connect(FunnelServer.java:354)
at funnel.FunnelServer.connect(FunnelServer.java:325)
at funnel.FunnelServer.(FunnelServer.java:226)
at processing.funnel.IOSystem.waitingServer(IOSystem.java:159)
at processing.funnel.Arduino.startingServer(Arduino.java:107)
at processing.funnel.IOSystem.(IOSystem.java:80)
at processing.funnel.Firmata.(Firmata.java:22)
at processing.funnel.Arduino.(Arduino.java:46)
at processing.funnel.Arduino.(Arduino.java:69)
at Blink.setup(Blink.java:36)
at processing.core.PApplet.handleDraw(PApplet.java:2117)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)

こんなエラーになってProceesingメイクできない。
で、64bit環境のドライバになってないぽいので、64bit環境のをとってきて入れてみる

http://www.cloudhopper.com/opensource/rxtx/
ここから64bitのやつダウンロード

ch-rxtx-2.2-20081207-win-x64.zip


で、「rxtxSerial.dll」をエラーが出てた「C:\Users\xxx\Documents\Processing\libraries\funnel\library」
にいれる。元あったやつは名前変えておく。

で実行すると、無事成功!

========


コマンドポート:サーバの起動中…
コマンドポート:サーバが起動しました:9000
I/Oモジュールと接続中です…
Stable Library
=========================================
Native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Java lib Version = RXTX-2.1-7
WARNING: RXTX Version mismatch
Jar version = RXTX-2.1-7
native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Firmata Protocol Version: 2.3
I/Oモジュールと接続が完了しました://./COM28, 57600
Pin 0:
Pin 1:
Pin 2: Input, Output, Servo
Pin 3: Input, Output, PWM, Servo
Pin 4: Input, Output, Servo
Pin 5: Input, Output, PWM, Servo
Pin 6: Input, Output, PWM, Servo
Pin 7: Input, Output, Servo
Pin 8: Input, Output, Servo
Pin 9: Input, Output, PWM, Servo
Pin 10: Input, Output, PWM, Servo
Pin 11: Input, Output, PWM, Servo
Pin 12: Input, Output, Servo
Pin 13: Input, Output, Servo
Pin 14: Input, Output, Analog
Pin 15: Input, Output, Analog
Pin 16: Input, Output, Analog
Pin 17: Input, Output, Analog
Pin 18: Input, Output, Analog, I2C
Pin 19: Input, Output, Analog, I2C
Total configurable pins: 20
opened host address 127.0.0.1
コマンドポート:127.0.0.1がサーバに接続しました
I/Oモジュールを再起動中です…
I/Oモジュールは正常に再起動しました
Firmata Protocol Version: 2.3
reboot OK
configureation OK
addModule() Arduino -> 0
funnelServiceThread start
notify thread start
OscServiceThread start

pandaboard ESでUbuntuサーバ立ててツイートさせてみる

Linuxでサーバの勉強をしてみたい。
手元にLinuxPCが無いので、AndroidやFirefoxOS以来ほったらかしてたPanadaboardいUbuntu入れて動かしてみよう。

0.環境準備
 SDカード買ってくる。CLASS10のKingston 690円
 キーボードとマウス。合わせて1000円くらい。

1.Pandaboard用のUbuntuを入手
http://cdimage.ubuntu.com/releases/12.04/release/
ubuntu-12.04-preinstalled-desktop-armhf+omap4.img.gz

2.WindwsでSDに書き込むツールを入手。書き込み。
http://www.si-linux.co.jp/techinfo/index.php?DDforWindows
DDWin_Ver0998.zip
 ※管理者で実行すること

3.電源入れて起動
 起動には5分くらい時間がかかる

4.パフォーマンスの向上・安定?(lightdmとgdmの切り替え) →破棄
http://ankyo.blog.so-net.ne.jp/2011-06-17
 →再起動でUbuntuロゴから進まなくなる。
  下記と思われる。
  https://forums.ubuntulinux.jp/viewtopic.php?id=11345
  IPがわからないので、2からやりなおし。

5.SSHを有効にする
 http://d.hatena.ne.jp/Fiore/20080228/1204174833

6.好みのエディタ(SublimeText2)を入れる
 http://qiita.com/kanpou_/items/bc739c1215fc222f17c8
 →何故かインストール中に失敗。断念

7.LAMP環境構築(Apache、PHP、MySQLをインストール)
 http://tackysroom.com/myserver/Desktop/myserver_d01.htm


さらにWeb経由でArduino動かしたいのでArduinoの環境もつくる

8.Arduinoつなげる準備
 JDKインストール
 http://enthusiastickcoding.blogspot.jp/2013/05/arduinoubuntuide.html
 http://makers-with-myson.blog.so-net.ne.jp/2013-10-27
 
 これらを参考にオフィシャルからArduinoをとってきて動かすが
 librxtxSerial.soが(Possible cause; can't load IA 32-bit .so on a ARM-bit platform)とか言われて動かない。

 sudo apt-get install arduinoでいれてみる。→動いた!
 sudo arduinoまたは、$sudo chmod a+rw /dev/ttyACM0 にするのを忘れずに。

9.Twitterにつぶやけるように環境つくる
 Rubyのtwitterがいいぽいので、まずはRuby入れる
 http://hitoriblog.com/?p=9835
 sudo apt-get install rubygems

  twitterがinstallできない
 http://www.amulet.co.jp/shop-blog/?p=5157
  # apt-get install ruby-dev
  まだできない。
 Permission denied とか言われるからsudoで実行
 # sudo gem install twitter
 最初に時間がかかったけど出来たぽい

10.Twitterのアカウントを得る
  http://el.jibun.atmarkit.co.jp/haya/2010/09/twitter-bot-0e0.html
    Twitterアカウント作成
  Twitter DeveloperAPI登録。 key, API secret , Access token, Access token secret

11.自動Tweetするスクリプトを書く
  http://lance104.hatenablog.jp/entry/2014/03/10/234257
  RubyGems 5.0.0以上ではconfigureの使い方変わってるから注意

  「Your credentials do not allow access to this resource」というエラーがでる。
  key設定が上手く言ってない。yamlの使い方が合ってないみたい。Keyを直接いれたら成功。


参考にさせていただいたサイト
http://suen-study.blogspot.jp/2013/02/pandaboard-esubuntu-12042.html
http://jazz-love.ddo.jp/main/node/873
http://mylog.cswiki.jp/index.php?PandaBoard%2FUbuntu%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99
http://magazine.wizapply.com/2012/06/28/pandaboardes-makegame/


Arduino
http://yamada468.blogspot.jp/2012/06/arduino-ide.html
http://enthusiastickcoding.blogspot.jp/2013/05/arduinoubuntuide.html
http://makers-with-myson.blog.so-net.ne.jp/2013-10-27

Arduinoと赤外線センサー&LEDでSharpのテレビを制御できた

赤外線コード
http://akizukidenshi.com/download/k4174_manual.pdf

赤外線リモコン受信モジュール
SparkFun SEN-08554
http://www.switch-science.com/catalog/129/

赤外線LED
長い方が+です

AQUOSのTVはパナソニックの赤外線プロトコルと同じでした。

Decoded PANASONIC - Address: 555A Value: F148688B (48 bits)
Raw (100): 14092 3500 -1500 600 -250 550 -1100 600 -250 550 -1100 600 -250 550 -1100 600 -250 550 -1100 550 -300 550 -1100 550 -300 550 -1100 550 -1100 600 -250 550 -1100 550 -300 550 -1100 550 -1100 550 -1100 600 -1050 600 -250 600 -250 550 -300 550 -1100 550 -300 550 -1100 550 -250 600 -250 600 -1050 600 -250 600 -250 550 -300 550 -300 550 -1100 550 -1100 600 -250 550 -1100 550 -300 550 -250 600 -250 600 -1050 600 -250 600 -250 550 -300 550 -1100 550 -300