Translate

ページ

2015年3月17日火曜日

WallbotBLE (MPU6050 only) and "EEG Acceleration logger"

さて、EEG Acceleration loggerとnecomimiで遊んでみたわけですが、このアプリは”三軸加速度三軸ジャイロセンサモジュール”(MPU6050)のセンサー値を表示したり、グラフ化したりする機能もあります。

私は、まだこのセンサーモジュールを持っていないのですが、先日購入したばかりのWallbot BLEがMPU6050を搭載していることに気づいたので、これで試してみることにしました。

プログラムはケンタさんのBLE_MPU6050_Nanoを元に、次の変更を加えました。
変更前のmain.cpp 28行目~
//MPU6050 mpu(p4, p5);
MPU6050 mpu(I2C_SDA0, I2C_SCL0);

static const char DEVICENAME[] = "BLE-Nano";
変更後のmain.cpp 28行目~
//MPU6050 mpu(p4, p5);
MPU6050 mpu(I2C_SDA, I2C_SCL);

static const char DEVICENAME[] = "WallbotBLE";


あとは、プラットフォーム設定を"Wallbot BLE"に設定し、コンパイル後書き込んで完了です。
良い感じにセンサー値を拾えているようです。





WallbotBLEを出荷状態に戻すには....
JKSoft のBLE_WallbotBLE_Challengeを書き込みますが、
なぜか、前後が逆に動いてしまったので、main/cppの22行目の
#if 0

#if 1
に変更しました。
(Firmwareを戻しておかないと、息子に怒られるので...)

2015年3月16日月曜日

necomimi and "EEG Acceleration logger"

普通の人の3周遅れくらいでnecomimiを入手...


mbed HRM1017の勉強を始めた頃から、ケンタさんがこれで遊んでいるのを知ってまして、
私もいずれ遊んでみよう...と思っていたのでした。

最近、ケンタさんが、Apple Storeにログを取るアプリ”EEG Acceleration logger”を公開されました。そこで、これを機に入手して遊んでみることにしました。
  • necomimi改造
  • mbed HRM1017接続
  • BLE nano接続


まずはNecomimi単独で

まぁ、3周遅れでレポート書いても仕方ないですが...
  • ベルトがきつい....すいません。頭の後ろ回すんですね。ちゃんと取説(と、ついている紙)は読まなきゃですね。
  • ゾーンモード難しい...全然できません。
と思ったら、うちの息子、付けて数分でマインクラフトしながらゾーンモード出した...将来期待できるかしら?←親ばか


参考資料


 necomimi改造


  • 他の方同様に、メインボード側から、TAG1への信号を取り出す。
  • ピンの対応は次の通り
    TGAM1
    Main Board
    意味
    mbed
    GND
    TP1
    GND
    GND
    VCC (V)
    TP2
    VCC
    VDD or
    RX(R)
    TP3
    センサへの送信
    接続不要
    TX (T)
    TP4
    センサからの受信
    Serial Rx (UART入力)
    (任意ピンに再割当可能)
  • 最終的にmbed用のnecomimiから電源を取る計画なので、4本とも取り出しました。(AWG24)
  • ケースにカッターで穴を追加し、端にピンソケットを接続。電極部分は熱収縮チューブで保護。


 mbed HRM1017でのテスト

  • mbed HRM1017用のコードが提供されているので、まずはmbed HRM1017で接続
    ちなみに、赤:VDD、黒:GND,黄色:P0_11に接続されています。(mbed HRM1017をはじめよう参照)
    LED1,2もつないでいますが、このプログラムでは光らないので、不要です。
    プラットフォームがちゃんとmbed HRM1017であることを確認してからコンパイル&書き込み。
  • うまく動いているようです。


 BLEnano

  • 今度はBLEnanoでやってみます。
  • せっかくのコンパクトなデバイスですので半田付け無しでやってみました。
  • 用意したのは、サンハヤトのスルーホールテスト用テストワイヤTTW-200

    ピン先がこんな風になっていて、スルーホール、ピンソケット、ブレッドボード等に使うことが出来ます
  • 書き込みのためのUSB I/Fとの接続は、GND, VIN, SWCLK, SWDIOの4本だけ接続

  • プログラムは、次のように変更しました。
    変更前のmain.cpp 5行目~
    //#define BLE_Nano
    #define HRM1017

    #define DBG 1
    #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
                                   * it will have an impact on code-size and power consumption. */

    Serial  pc(USBTX, p11);       //for UART comms (TX, RX)
    変更後のmain.cpp 5行目~
    #define BLE_Nano
    //#define HRM1017

    #define DBG 1
    #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
                                   * it will have an impact on code-size and power consumption. */

    #ifdef HRM1017
    Serial  pc(USBTX, p11);       //for UART comms (TX, RX)
    #endif

    #ifdef BLE_Nano
    Serial  pc(USBTX, p5);       //for UART comms (TX, RX)
    #endif
  • プラットフォームがちゃんとBLEnanoであることを確認してからコンパイル&書き込み。
  • で、necomimi改との接続はこうなります。
  • 適当にプラスティックの箱に入れて、ケーブル束ねてnecomimi改の横に貼り付けると、こうなりました。

    これくらいコンパクトなら、付けたままでいろいろ出来ますね

で、脳波?測定の結果は?

  • 実際にこれを装着したまま、数時間生活してみた(昼寝含む)のですが、DELTA波のグラフがちょっと伸びるだけで、ほとんどそれっぽいデータが取れません。
  • 壊れているのかな?と思いましたが、necomimi自体はそれっぽく動いています。ボーっとしているとリラックスモード、集中するとゾーンモードなど。なので、壊れているわけではなさそう。
  • いろいろWebで調べてみると、necomimiではあくまで筋電測定が関の山で脳波が測定できるようなハードウェアでは無いとのこと。
  • まぁ、こめかみの筋電でも、ある程度の判定が可能ということのようです。
  • なので、本アプリはあくまで参考までと考えることにします。
  • 数値が取れること自体が面白いし。
  • あえて言うなら、測定されたモードもアプリで表示出来ると面白いかも。→日々ゾーンモードに入った時間や装着時間に占める割合など記録して、徐々に訓練して集中力を高める訓練に使うなど。
  • 万人受けする遊び方ではないですが、私はそれなりに楽しみました。自分でも何かアプリ作ってみたいですね。

    2015年3月1日日曜日

    uCXpresso LilyPad for nano51822 : 文鎮化

    uCXpresso LilyPad for nano51822 が、一つ文鎮化しましたorz

    • 説明通り、LPC expressoで作ったhexファイルを、Android経由でDFUアップデート→成功
    • SWDを配線後TSUBOLINK-2等で書込→失敗。
      • FAIL.TXTの内容は、”The interface firmware FAILED to initialize the target MCU”
      • 書き込み自体ができない様子で、リセットすると元のプログラムが再開する。
    • DFUでmbedオフラインコンパイラでコンパイルしたファイル(softdevice + application hexファイル)書き込み→予想通り失敗。文鎮化。
      • 二度とDFUモードにならず、mbed書き込み出来ない状態も継続

    現在、いろいろ調査中。
    SWD経由で復旧させないと、どうしようもないですね。

    2015年2月22日日曜日

    もう1つのNRF51822 オフラインコンパイラ(uCXpresso.NRFを試してみる:インストール編)

    昨日調べていたuCXpresso LilyPad for nano51822ですが、とりあえず手持ちのマシンにインストールしてみました。
    他のNRF51822環境でも使えるのでは?という期待もあります。→ライセンスを購入しないと、他のモジュールでの利用や商用利用は難しそうです。(Link)
    LPCXpresso IDEはEclipse+GCCの開発環境の様です。

    インストールは、”Getting Started with uCXpresso.NRF”(英語)に沿って進めていきます。
    (正直、面倒くさかったです!!!)

    install LPCXpresso IDE


    • Increase VM memory for Windows System (Windows環境)
      もしLPCXpressoが起動している場合は、一旦停止。c:/nxp/LPCXpresso_x.x/lpcxpresso/lpcxpresso.ini を開いて、MaxPermSizeの値を256MBから512MBに変更して下さい。(X.Xはインストールバージョンによって異なる数字となりますので、自分が使う環境に合わせて指定して下さい。)

    • Install new software (Eclipse Plug-­‐in)
      LPCXpressoを起動。
      Help -> Install New Software から Addを選択

      Name: Eclipse Juno
      Location: http://download.eclipse.org/releases/juno
      「General Purpose Tools」 セクションから、 “Marketplace Client”を選択
      「Mobile and Device Developments」 セクションから、 “Target Management Terminal”を選択

      その後インストール(Next→ライセンス確認(Accept)→各種警告にYesで回答)
      完了すると、再起動を促されるのでLPCXpressoを再起動
    • Install RXTX Plug-­‐in
      同様に
      Name: RXTX
      Location: http://archive.eclipse.org/tm/updates/rxtx/
      最新バージョンのセクションから、"“RXTX End-­‐User Runtime”"を選択

      その後インストール(Next→ライセンス確認(Accept)→各種警告にYesで回答)
      完了すると、再起動を促されるのでLPCXpressoを再起動

    • enable the USB CDC virtual COM.Port (Mac OS X) (多分不要?)Terminal Appから以下を実行
      sudo mkdir /var/lock
      sudo chmod a+rw /var/lock


    • SVNをインストールHelp > Marketplaceを起動
      Find欄に”SVN”と入力後をGoを実行。
      検索結果から"Subversive"をインストール。
      完了すると、再起動を促されるのでLPCXpressoを再起動

    • Show the SVN and Terminal Views
      Window -> Show View -> Other を起動
      SVNの下のSVNレポジトリーを選択して[OK]を実行。

      SubversizeのSVN Connection選択画面が開くので、SVN Kitの最新版(執筆時点で1.8.7)をインストールする。
      完了すると、再起動を促されるのでLPCXpressoを再起動

    • Show the SVN and Terminal Views
      Window -> Show View -> Other を起動

      「SVN」の下の「SVNレポジトリー」と、「Terminal」の下の「Terminal」を選択して[OK]を実行

    • SVNレポジトリータブを右下から左上に移動

    Install uCXpresso.NRF Framework


    • Check Out uCXpresso.NRF framework
      追加したレポジトリ表示を展開してuCXpresso.NRFの上で右クリック

      ドロップダウンメニューから”チェックアウト”を選択

      チェックアウトが完了すると、Project WorkspaceタブにチェックアウトしたuCXpresso.NRFが展開されます。

    Exampleプログラムのコンパイル

    • Exampleプログラム"blink"のチェックアウト
      SVNレポジトリータブから、examples/rtos/blinkをチェックアウト
      (右クリックでプルダウンメニューを出し、チェックアウトを実行)
    • コンパイル実行
      Project Workspaceで"blink"を選択し
      Quickstart Panelから"Build 'blink'[Debug]"を実行
      コンパイルが進行し、実行ログが右下の”CDT Build Console ...”に表示されます。

    • 作成されたhexファイルは起動時に指定したworkplaceパスに格納されています。

    uCXpresso LilyPad for nano51822

    スイッチサイエンスにuCXpresso LilyPad for nano51822
    という製品が入荷しました。(2015/02/21)

    製品の特徴は上記ページとそのリンク先の製品の紹介をご覧ください。
    また、どんな風に使えるのかは、”Getting Started with uCXpresso.NRF”(英語)を見ると良いと思います。
    以下、個人的に、注目している点をずらずらっと書いていきます。

    なお、実物で確認出来ていないことも含まれますので、間違いがあるかもしれません。個人作成ブログなので、その辺はご容赦下さい。(ここに書かれていることを信じて何か損害が発生しても責任は持てません。自己責任でお願いします。)


    概要

    Getting Started with uCXpresso.NRF”(英語)をざっと見ると次のことが書いてありました。
    • オリジナルのRTOS(?)が動作する。
    • IDEとしてNXP社のLPCXpresso IDE(EclipseベースのIDE+GCC)を使用する。
    • これに、独自開発のuCXpresso.NRFという独自のRTOS C/C++ frameworkを追加して使用する(で良いのかな?)
    • DFUコードがすでに書き込まれており、ファームウェアの更新は"nordic Master Control Panel"を使い、OTA(BLE経由)で行う。
    • ARM Keil5を使ったオフライン開発環境と対比すると、こんな感じでしょうか...
      ARM MDK (32kB制限) → NPC LPCXpresso (256kB制限)
      noridc nrf51-SDK → ucXpresso uCXpresso.NRF
      CMSIS-DAP(mbed) → DFU OTA
    • この作りなら、IDEを他のnrf51822を使ったモジュールでも多分使えるように出来るでしょう。(ただし、他のモジュール向けの開発・商用利用にはライセンスの購入が必要そうである。”Getting Started with uCXpresso.NRF”(英語)のAppendix E参照。)
    • DFU-OTAはソースが非公開のため、外部クリスタルの無いモジュールでそのまま使うのは難しいと思われます。(いや、回路図に外部クリスタルがオプションと書いてあるので、内部クロック使うようになっているかも...)

    ハードウェア
    回路図を読むと次のようなことが分かります。
    • SWD optional という4ピンのコネクタが書かれています。
      この端子には、SWCLK, nRST, V3.3, GND の4つのラインが引き出されています。
      この4端子を使うと、mbedで書き込みが出来るようになると思われます。(参考)
      基板写真を見ると、会社ロゴの下に4ピンのパターンがあるので、この端子が対応しているのだと思います。(配置は一番右の13番端子の上あたりがGNDのようです。)

      TSUBOLink-II等を使うと、書き込み出来ると思います。
      接続ピンは 電源ピンおよび、TGT_SWDIOとnRST、TGT_SWCLKとSWCLとなります。
      接続方法は工夫が必要です。ピンソケットを立てても良いですが、Lilypad製品の趣旨を考えれば、コンタクトプローブ(スプリングプローブ)を使うと良いのかもしれません。実物が来たら、考えます。

    • 32.768kHzのクリスタルはオプションと書いてありますが、ボードに載っている様です。(Y1)

    外観から
    • 搭載モジュールの技術適合番号は204-420020。これは、BLE nanoに記載の番号と一致しており、同じものか同等の製品が使われているのだと思います。(MDBT40/NRF51822QFAA)

      このことから、LEDとスイッチをつなげばBLE nanoやmbed HRM1017等でも本製品用に用意されたIDEが使える可能性があります。この辺は今後調べていきます。
    • SWDコネクタ:スルーホール内径1mm,ピッチ2.54mm, コネクタヘッダパターン10x2.54mm
    • 外周部のホールは内径2mm 配線にはM2のネジが使用出来ます。ナットは角度によっては隣同士が接触してしまうので、心配な人はポリカーボネート製を利用して下さい。

    関連リンク


    2015年1月31日土曜日

    BLE nano ピンヘッドとソケットをひっくり返した

    BLE nanoの使いにくいところ

    1. ブレッドボードに挿すとオンボードLEDが見えない。
    2. ブレッドボードに挿したときに、何のピンか分かりにくい。
    3. PC接続用のUSBモジュールMK20に接続するとき、向きが分かりにくい
    4. なぜかnano本体のピンは6x2なのに、なぜかMK20のソケットは7x2
    5. nanoの横に出ているGPIOピンが使いにくい

    というわけで、次のように改造しました。
    1. ピンヘッダとソケット一旦取り外し
    2. 裏返しに新しく取り付け
    3. ソケットはどうせ使わないので6x2に変更
    4. nanoの横に出ているGPIOピンにもソケット半田付け(ROBOMICブログを参考に)


    組み合わせるときも、対応するピンがシルク印刷上で確認できるので、間違いが減ります。

    ブレッドボードに挿した時も指した状態で各ピンの意味が分かります。


    一番の問題はノートPC等で下に出っ張ってしまうこと。

    こんなケーブルが欠かせなくなります。


    2015年1月30日金曜日

    mergehex無しでのmbed環境でのNodic SDK使用 (mbed HRM1017)

    nrf51822ベースのmbedデバイス(mbed HRM1017BLE nanoなど)を使うとき、通常はSoftdeviceとプログラムを結合したhexファイルを使って書き込みます。
    しかし、この結合に利用するプログラムmergehexが使えない場合、どうやって書き込むば良いのか?Flash Memoryに書き込むデータは実はそのまま残っているのではないか?そう考えて調査してみました。(詳細はPDF版参照)
    mergehexを使えないケースの例。

    結局、Softdevice→プログラムの順でhexファイルを書き込めば結合しなくても書き込めることが分かりました。ただし、プログラムのhexファイルのアドレス指定の調整が必要な場合があります。
    全てのケースでうまく行くかどうかは分かりませんが、Nordic IoT SDK 0.7.0ipv6_icmpS110使用のSDK上でarm gccでコンパイルした別のプログラムで試したところ、以下でうまく行きました。

    • コンパイラにKeilを使っている場合はそのまま書き込めば動く
      • まずSoftdevice hexファイルをDrag&Dropで書き込む
      • 次にプログラムhexファイルをDrag&Dropで書き込む。


    • コンパイラにarmgccを使っている場合はアプリケーションのhexファイルのアドレス指定を変更すれば動く
      • まずSoftdeviceを書き込む。
      • 次に以下の文字列変換を行う。(I32HEXに準拠させる。)
    :020000021000EC -> :020000040001F9
    :020000022000DC -> :020000040002F8
    :020000023000CC -> :020000040003F7
    :020000024000BC -> :020000040004F6



    たとえば、1行目は次の様に変換される。

    :020000021000EC
    :1080000000400020B5BC0100FDBC0100FFBC010028
    :108010000000000000000000000000000000000060
    :020000040001F9
    :1080000000400020B5BC0100FDBC0100FFBC010028
    :108010000000000000000000000000000000000060

    • もっとしっかり変換したい場合は、スクリプトなどで処理する必要があります。Pythonで作るとこうなりました
    • 修正後のプログラムhexファイルをDrag&Dropで書き込む。

    mbed I/FのFirmwareで形式(02)にも対応してくれると良いのですが...