• 検索結果がありません。

目次 2.1. 背景と目的 携帯端末の普及率 スマートフォン アプリケーション サイクルコンピュータとは サイクルコンピュータのセンサー センサーの信号伝送方式

N/A
N/A
Protected

Academic year: 2021

シェア "目次 2.1. 背景と目的 携帯端末の普及率 スマートフォン アプリケーション サイクルコンピュータとは サイクルコンピュータのセンサー センサーの信号伝送方式"

Copied!
50
0
0

読み込み中.... (全文を見る)

全文

(1)

平成

27 年度 卒業論文

Android 向けサイクルコンピュータアプリ制作

スピードセンサーとスマートフォンによる

サイクルコンピュータの構築

近畿大学工学部 情報システム工学科

情報物理研究室

(2)

目次

2.1. 背景と目的...1 2.1.1. 携帯端末の普及率...1 2.2. スマートフォン...3 2.3. アプリケーション...3 2.4. サイクルコンピュータとは...4 2.4.1. サイクルコンピュータのセンサー...5 2.4.2. センサーの信号伝送方式...6 2.4.2.1. Ant+...6 2.4.2.2. Bluetooth...6 3. 開発環境,技術要素...7 3.1.Android について...7 3.1.1. Android とは...7 3.1.2. Android 開発の特徴...7 3.1.3. Android アプリの開発に必要なもの...8 3.1.3.1. Android Studio...8 3.1.3.2. JDK...8 3.1.3.3. Android SDK...8 3.1.4 Android アプリの仕組み...9

3.2 Bluetooth Low Energy...10

3.2.1 Bluetooth のバージョン...10

3.2.2 Bluetooth Low Energy...11

3.2.3 Bluetooth 通信の概要...12 4.設計,制作の過程など...14 4.1.制作したアプリケーション...14 4.1.1.概要...14 4.1.2.PanoBike について...15 4.1.3.設計...16 4.2.制作の過程...17 4.2.1. センサーからのデータ取得...18 4.2.2. アプリ上でのセンサーとのペアリング...18 4.2.3. 取得できるデータの調査...19 4.2.4. 数値計算...20 4.2.5. 制作,稼動テスト...21 5. まとめ...28 5.1.アプリケーションに対する評価...28 5.2.制作物の問題点,今後の改善点など...28 5.3.総評...29 6. 謝辞...29 7. 参考文献...29

(3)

1. 概要

 本研究では,スマートフォン・タブレット用サイクルコンピュータアプリケーションの制作 を目的とし,Android アプリケーションの開発に関する研究を行った.本論文では上記に加 え,Bluetooth Low Energy を利用した自転車用外付けセンサーとの接続と,視認性に配慮したデ ザインに関する研究について報告する. 2. 背景と目的 2.1. 背景と目的  スマートフォンが普及した昨今において,携帯電話が持つ役割は普及前と比べて大きく変 わった.例えば,Web サイトの閲覧や,カメラや E メール等,従来の携帯電話でも利用されて いたアプリケーションが使いやすくなったことに加え,タッチパネルや加速度センサーなど, 端末に内蔵された各種装置と併用することで,アプリケーション開発の幅が広がり,スマート フォンは携帯端末としてより機能的になった.更に,App Store 等のサービスを利用すること で,簡単にアプリケーションを追加でき,様々な使い方が出来るようになった.よって,現在 のスマートフォンをはじめとする携帯電話は,単なる通信手段ではなく,PDA のような小型情 報端末の機能を従来の携帯電話に統合し,気軽に持ち運び出来るようにしたマルチメディア端 末としての側面が強いと考えられる.  また,最近は交通手段や健康志向などの観点から自転車通勤が増えるとともに,サイクルコ ンピュータなどの自転車での走行を補助するスマートフォンアプリやハンドルに取り付けるス マートフォン用ホルダーなどのグッズが増加している.しかし,一般に配布されているサイク ルコンピュータアプリは,大画面かつ多機能ゆえに一度に表示される情報が多く,ユーザビリ ティに問題があると感じ,シンプルで使いやすいサイクルコンピュータアプリを作れないかと 考えた.また,上記の市場動向とは裏腹に,サイクルコンピュータアプリの開発に役立つ情報 が未だ少ない.よって,卒業研究はサイクルコンピュータアプリの制作をテーマとし,より良 いサイクルコンピュータの開発を目指して研究を行った.

 更に,今回の開発に使用したセンサーは,Bluetooth Low Energy による通信を行うものである

が,近年のBluetooth の省電力化や IoT への対応により,今後の Bluetooth の需要が高まると考え

られる.  本研究は,サイクルコンピュータアプリの開発を通して,開発に必要な情報の調査や,視認 性の良い画面レイアウトの研究を行い,更にBluetooth による通信技術に対する知識を深めるこ とを目的とする. 2.1.1. 携帯端末の普及率  総務省の調査によると,パソコンや従来型携帯電話(フィーチャー・フォン)によるインター ネットの利用が減少傾向にあるのに対し,スマートフォンやタブレット端末の利用が増加して いる.世代別に見ても,50 代以下の世代にスマートフォン利用が増加し,特に 30 代以下の世代

(4)

への普及が目立つ(図 1).ただ,以前に比べて,現在のスマートフォン普及率の伸びは鈍化の傾 向にある(図 2).これは,スマートフォンの普及が既に進んだからであると思われる.

(5)

図2 スマートフォン普及率の変遷(2015 年)[1]

2.2. スマートフォン

 スマートフォンとは,明確な定義は無いが,電話やメール以外の様々な機能を利用できる携

帯電話端末で,かつてのPDA( Personal Digital Assistants)が持っていた機能(スケジュール管理,

アドレス帳,メモ,E メール,インターネットなど,パソコンの機能の一部)を組み込んだ携帯 端末である.かつてはハードウェアキーボードが主流だったが,現在はiPhone をはじめとした ソフトウェアキーボードやマルチタッチUI が一般的になり,更に画面の大型化が進み操作性や 機能性の水準が大幅に向上した.現在は,従来型携帯電話(フィーチャー・フォン)に代わり普及 が進み,アプリケーションの増加やインターネットの普及によって,ユビキタス社会の実現に 一役買っている. 2.3. アプリケーション  アプリケーションとは,文書作成や数値計算など,ある特定の目的のために設計されたソフ トウェアである.「応用ソフト」とも呼ばれ,どのソフトウェアにも共通する基本的な機能を

(6)

まとめたOS(基本ソフト)に,ユーザが任意に必要とするものを組み込んで利用する.アプリ ケーションソフトの種類も多種多様で,画像編集ソフトやデータベースソフト,ゲーム,Web ブラウザ,メーリングソフトなどがある.企業で使用される財務会計や人事管理のソフトもア プリケーションソフトの一種である.また,アプリケーションソフトの中でも,コンピュータ ウイルス駆除やメモリ管理など,機能や性能,操作性を向上させるために,OS や他のアプリ ケーションソフトが持つ機能を補うソフトをユーティリティソフトと呼ぶ.  従来の携帯電話は通話やメール等の通信機能がメインだったが,現在普及しているスマート フォンは,アプリケーションをインストールすることによって様々な機能が利用可能となって いる.また,スマートフォンは,その画面の大きさや操作性から,携帯端末の機能性やアプリ ケーションの飛躍的発展に大きく貢献している. 2.4. サイクルコンピュータとは  サイクルコンピュータとは,自転車のハンドル部分に取り付け,各種走行情報を計測,表示 することのできる機器である.計測できる情報として,巡航速度,平均速度,走行距離,最高 速度,走行時間など等がある.商品によっては,地図を表示したり経路のログを取ったり,ケ イデンス(1 分間のクランク回転数)を表示したりできるものもある.  自動車におけるスピードメーターにあたるが,大きな特徴として,軽量・小型のものが多 く,高価な製品は様々な機能を持っている.   図3 サイクルコンピュータ(写真はキャットアイ CC-MC200W)

(7)

2.4.1. サイクルコンピュータのセンサー  走行速度や車輪の回転数などを取得するため,付属の外付けセンサー,もしくは内蔵された センサーを使用する.センサーには回転数センサー (磁気センサー),GPS センサーのいずれか が使用される.本論文では回転数センサーを紹介する. 図4 回転数センサーの仕組み  回転数センサーはサイクルコンピュータとは別に自転車のフレームに取り付けられる.車輪 の回転により,スポークに取り付けられた磁石がセンサー付近を通過することでセンサーが回 転を検知,その信号をコンピュータ本体に送信する.これを基に,走行速度や走行距離を計算 し,表示するといった仕組みである.なお,センサーと磁石はお互いが接近するという条件の もと,前輪(フロントフォーク)もしくは後輪(チェーンステー)どちらにも取り付ける事が可能で ある.しかし,以下の理由により前輪に取り付ける場合が多い[2]. ・コンピュータの取り付けられるハンドル付近からの距離が近い ・体重による車輪の変形が少なく,使用するタイヤの公称周長に基づいた走行距離を取得し易い  しかし,ケイデンスセンサーなど,クランクに取り付けられた磁石から回転を検知する製品 に関してはチェーンステーに取り付けられるものが多い(図 5).

(8)

図5 チェーンステーに取り付けられたセンサー 2.4.2. センサーの信号伝送方式 センサーが出した信号は有線と無線いずれかの方式でコンピュータ本体に伝送される本項では 無線による伝送方式について記述する. サイクルコンピュータで利用される主な無線通信規格はBluetooth と Ant+の 2 つである.本研究 ではBluetooth に対応したセンサーを使用した. 2.4.2.1. Ant+  Ant+とは,低消費電力の無線通信規格である「Ant」を搭載した機器同士の相互通信を可能に した無線通信規格である.特徴として,消費電力が少ないこと,有効距離がBluetooth と比べ短 いことと,様々なネットワーク形態に対応し,混線防止機能が搭載されている為ネットワーク 構成が柔軟であることが挙げられる.  よって,サイクルコンピュータやパワーメーターなど,複数取り付けられるケースが考えら れ,端末同士の距離が離れることのない自転車用計測機器に多く採用されているが,スマート フォンでAnt+に対応している端末は Bluetooth に比べ少ない. 2.4.2.2. Bluetooth  Bluetooth とは,多くの携帯端末に採用されている近距離用の無線通信規格である.Ant+と比 べると大容量のデータを取り扱うことが可能であり,電波強度のクラスによっては100m もの長 距離に対応する.(表 1)

(9)

表1 Bluetooth の電波強度クラスと到達距離[2] クラス 出力[mW] 到達距離[m] Class1 100 100 Class2 2.5 10 Class3 1 1  サイクルコンピュータはリアルタイムで走行速度の更新を行う為,Ant+に比べ消費電力の大 きいBluetooth は不向きであると考えられたが,バージョン 4.0 以降は消費電力が少なくなった 為,従来のBluetooth を踏襲する BLE の普及が容易であることから各社の製品開発において ANT+から BLE に移行する動きが増えている.  また,バージョン4.2 でインターネットの直接接続が可能になった為,今後 IoT に活用される と思われる. IoT(Internet of Things)  コンピュータなどの情報・通信機器だけでなく,世の中に存在する様々なものに通信機能を 持たせ,インターネットに接続したり相互に通信することにより,自動認識や自動制御,遠隔 計測などを行うこと.自動車の位置情報をリアルタイムに集約して渋滞情報の配信をするシス テムや,電力メーターが電力会社と通信して電力使用量を申告するスマートメーター,大型の 機械などにセンサーと通信機能を内蔵して稼働状況や故障箇所,また交換が必要な部品などを リアルタイムに把握できるシステムなどが考案されている. 3. 開発環境,技術要素 3.1.Android について 3.1.1. Android とは

 Android とは,OHA(Open Handeset Alliance)が推進し,米 Google 社が中心となって開発してい るソフトウェアプラットフォームである.2007 年に発表され,わずか数年で iPhone と双璧をな すスマートフォンの代表格に発展した.最初は携帯端末向けだったが,現在タブレット端末や 車載システム,さらにはウェアラブルと呼ばれる身体装着型コンピュータにもAndroid が使用さ れている. 3.1.2. Android 開発の特徴  Android では,誰でも自由にアプリを開発し,配布することが可能である.配布の際にはイン

ターネット上で公開,もしくはGoogle 社の運営する「Google Play Store」を通じて販売といった

(10)

2 月現在)を支払ってデベロッパーアカウントを取得する必要がある.しかし,登録はインター ネット上でできる.Apple 社製携帯機器用のプラットフォームである iOS と比較すると,開発費 が安く(2016 年 2 月現在,Apple Developer Program の年間参加料が$99 USD であるのに対し),配 信するアプリの事前の審査が無いので比較的手軽で自由度の高いプラットフォームであるとさ れる.

3.1.3. Android アプリの開発に必要なもの

 Android アプリ開発のために必要なものとして,総合開発環境である Android Studio と,Android SDK,JDK が必要である.

3.1.3.1. Android Studio

 Android Studio は,2013 年に発表された IntelliJ IDEA ベースの Android アプリ開発用ソフト ウェアで,総合開発環境(IDE)と呼ばれている.IntelliJ IDEA は,チェコの JetBrains 社が開発,

販売しているIDE で,柔軟な保管機能を備える強力な IDE として定評がある.AndroidStudio

は,IntelliJ IDEA のオープンソース版(CommunityEdition)をベースに,Android アプリケーション の開発支援の機能追加といった最適化がされている.また,AndroidStudio の開発には JetBrains 社のメンバーも参加しており,AndroidStudio でアプリ開発用に最適化されている.

3.1.3.2. JDK

 JDK(Java Development Kit)は,Java でのプログラミングに最低限必要な開発環境である.2016

年1 月現在の最新バージョンは JDKit 8 Update 79 であるが,Android のデベロッパーサイトによ

ると推奨バージョンはJDK7 であると記載されているため,本研究においては JDK7 Update 79

(64-bit)を使用した. 3.1.3.3. Android SDK

 Android SDK(Android Software Development Kit)は,Android アプリケーションを開発する上で 必要なコンパイラやデバッガ,ライブラリなどのソフトウェアをまとめたパッケージである. その中で特に使用した「Android Virtual Device」と「Android Debug Bridge」について記載する. Android Virtual Device(AVD)

 他のOS や CPU の機能を再現し,それに対応したアプリケーションソフトを動作させるため

のソフトウェアをエミュレーターと呼ぶ.特に,Android 開発においては AndroidSDK に同梱さ

れているものをAndroid Virtual Device(AVD)と呼び,Android 端末を所持していなくても作成した

アプリケーションの実行が可能である.しかし,センサーやバイブレーションなど,エミュ

レータ自体が対応しない機能を実行する場合はAndroid 端末を用意する必要がある.

Android Debug Bridge(ADB)

 Android Debug Bridge(ADB)とは,Android の開発環境においてエミュレータや接続された Android 端末と通信を行い,デバッグを補助するためのツールである.プログラムの実行時の他

(11)

に,コマンドプロンプト上でも動作し,各種コマンドを入力,実行することでサーバーの手動 接続や切断,接続機器が搭載している機能のリストアップなど様々なデバッグの補助機能を使

用できる.本研究では,使用端末がBluetooth Low Energy を搭載しているかを調べる際に使用し

た.図6 は,nexus7(2013)をパソコンに接続し,”adb shell pm list features”コマンドによって,接

続端末にBLE 通信の機能が含まれているかを調べたときの結果である.

結果に”feature:android.hardware.bluetooth_le”と記されているので,nexus7(2013)に BLE 通信機能 が搭載されていると判断した.

図6 ” adb shell pm list features”コマンド実行結果

3.1.4 Android アプリの仕組み

 Android のアプリケーションは,主に Java と XML のソースファイルで構成されている.Java のソースファイルにはメインプログラム,XML のソースファイルは,レイアウトやその他各種 リソース,マニフェストファイルなど,メインプログラム以外で動作に必要なコードをマーク アップによって記述する.本項では,XML ファイルについて記載する. レイアウトファイル  レイアウトファイルにはマークアップによってView を配置していく.また,識別子を付加し レイアウトファイルのフォルダを分けることで,表示端末の解像度や端末の向きによって表示 されるレイアウトを分けることが出来る. その他リソースファイル

(12)

 リソースとは,Android における上述のレイアウトファイルや画像,文字列,色等,レイアウ トに関する情報が入っているファイルのことである.特に,strings.xml や colors.xml はあらかじ め任意の文字列やカラーコードにID を付け定義することで,文字や色の管理に役立てることが できる. マニフェストファイル  マニフェストファイルとは,Android アプリの定義情報を記述するソースファイルである.ア プリケーションの向き指定や,各種機能の利用許可などを設定することが可能である.  

3.2 Bluetooth Low Energy 3.2.1 Bluetooth のバージョン

 Bluetooth には,以下のバージョンがあり,1999 年のリリースからバージョンを重ねるごとに 高速化や省電力化が行われている(表 2).特に,バージョン 4.0 以降は従来のバージョンとの互 換性がなくなり,大幅な省電力化が行われている為,Bluetooth Low Energy として独立してい る.Bluetooth Low Energy については後述する.

表2 Bluetooth のバージョン[3] バージョン 機能,特徴など リリース日 1.0b 最初のバージョン 1999 年 7 月 26 日 1.0b + CE (Critical Errata) 上記1.0b の修正版 1.1 普及バージョン 1.2 同じ周波帯域(2.4GHz)を使用する無線 LAN (IEEE 802.11/b/g) などとの干渉を防ぐ対策が盛り込まれた. 2003 年 11 月 2.0 容量の大きいデータを通信する際,最大通信速度が

3Mbps のに切り替わる EDR (Enhanced Data Rate) がオ プションで追加できるようになった.

2004 年 11 月

2.1 ペアリングが簡略化され,近距離無線通信のNFC

(Near Field Communication) に対応した.マウスやキー ボードなどのスリープ時間が長い機器のバッテリー

を最大で5 倍延長できる「Sniff Subrating」機能を追

加した.

2007 年 3 月

3.0 PAL(Protocol Adaptation Layer)と AMP(Generic Alternate MAC/PHY ) によって無線 LAN 規格 IEEE 802.11 の MAC/PHY 層が利用可能となり,最大通信速度が 24Mbps となる HS (High Speed) がオプションで追加可

(13)

能となった.また,電力管理機能を強化,省電力性 が向上した.

4.0 従来のバージョンと比較し,大幅な省電力化がされ

た(Bluetooth Low Energy).従来のバージョンとの互換 性が無いが,デュアルモードの実装によって互換性 の問題の克服が可能である. 2009 年 12 月 4.1 4.2 セキュリティとプライバシーが大幅に向上し,通信 速度が260kbps から 650kbps に 2.5 倍高速

化.Bluetooth Smart が IPv6/6LoWPAN でインター ネットに直接接続可能.

2014 年 12 月

3.2.2 Bluetooth Low Energy

Bluetooth Low Enegy(BLE)とは,Bluetooth4.0 に搭載された省電力無線通信技術である.通信帯域

は過去のBluetooth と同じ 2.4GHz.速度の高速化が行われてきたこれまでの Bluetooth(バージョ ン2.0 の時点で 3Mbps,3.0 の時点で 24Mbps に速度を強化できるオプションが使用可能)に対し て,BLE は通信速度は 1Mbps と遅く,ボタン電池 1 個でも数年稼動できる省電力性を重視した 特徴をもつ.また,過去のBluetooth のバージョンとは後方互換性を持たず,Bluetooth3.0 までの 端末は,BLE のみに対応した周辺機器と接続できない. また,アドバタイズとスキャンに時間間隔があり,常時通信を行わず必要なときのみ通信を行 うことから低頻度,少量データの通信に向く.

 Android では,4.3(API Level18)以降の対応であるが,セントラルのみの対応であった.Android 5.0 からペリフェラルにも対応するようになった.  従来のBluetooth との比較点は以下の通りである. ・Bluetooth3.0 までの端末は,BLE のみに対応した周辺機器と接続できない ・リチウムコイン型電池1 つで 1〜2 年間の無線通信ができるほど超低消費電力 ・低頻度,少量データの通信に向く ・任意の機能を任意に実装できる ・近接検出,ブロードキャストができる Bluetooth SMART

上記の通信規格であるBLE を使用した通信技術のブランド,または BLE 自体の通称.Bluetooth

SMART に対応したデバイス間で互換性があることをブランドによって明確に示している.

 本規格はBluetooth SMART と,Bluetooth Smart Ready に区分されており,Bluetooth SMART は

BLE にのみ対応したデバイス(シングルモード),Bluetooth Smart Ready は BLE の他に従来の Bluetooth 規格にも対応したデバイス(デュアルモード)であることを示す.シングルモードの場

合,従来のBluetooth との互換性が無いため,Bluetooth SMART,もしくは Bluetooth SMART

(14)

iBeacon

 位置情報システムの拡張を目的とし,iPhone の iOS7 に搭載された BLE を用いた近距離通信技

術である.別途に設置されたiBeacon を搭載する端末を発信機とし,端末同士のエリアの入出検 知や距離計測を行うことが可能.これにより,位置モニタリングのほか,入店時の広告サービ スなどに利用できる. 3.2.3 Bluetooth 通信の概要  本項ではBluetooth(BLE)通信における各種用語や記述など記載する. アドバタイズ  あるデバイスが,他のデバイスに提供するサービスの情報を周囲に発信すること.英単語で あるアドバタイズメント(advertisement)は広告という意味を持つ.

GATT(Generic Attribute Profile)

 BLE デバイス間のデータ交換の論理的な仕様.データ構造の読み出し,データの読み書き, データの変更通知を行う.GATT はサービス,キャラクタリスティック,ディスクリプタといっ た3 つの要素から構成される. プロファイル  用途の広いBluetooth 通信において,様々な機器の通信に対応するため機器の種類ごとに定め られたプロトコルの名称である.プロファイルは1 つ以上のサービスから構成される.例えば,

スピード&ケイデンスセンサーと通信を行うためのプロファイルはCycling Speed and

Cadence(CSC)である. サービス  プロファイルの機能を表す.サービスは複数の入れ子になっているサービスと複数のキャラ クタリスティックから構成される. キャラクタリスティック  単一の値を持った属性を表す.自身の値と値へのアクセス方法を定義するプロパティ,複数 のディスクリプタで構成される. ディスクリプタ  上記のキャラクタリスティックに付加情報が必要な際に用いられる属性値.キャラクタリス ティックによってはディスクリプタが無いものも存在する.

UUID(Universally Unique Identifier)

 ソフトウェアを識別するための一意な識別子.UUID 同士は重複が起こらない仕組みとなって いる.上記のサービス,キャラクタリスティックは,UUID で識別される.

(15)

 BLE 通信は,セントラル(Central)とペリフェラル(Peripheral)によって行われる.両者には,そ れぞれ通信に必要な違う役割を持つ. ・セントラル(中央装置)  ペリフェラル側のデバイスからのサービスを取得する側のデバイス(スマートフォン等) ・ペリフェラル(周辺装置)  セントラル側のデバイスが必要とするデータを持つ側のデバイス(センサー等).  BLE 通信はクライアント/サーバ型アーキテクチャをベースとしており,セントラルがペリ フェラルから必要な情報を取得し,何らかのタスクを実行する,といった関係となっている. Bluetooth パッケージ (import に追加する文 )   android.bluetooth パッケージは,Bluetooth の機能を使用するためのクラスをまとめたものであ り,Android 4.3 (API Level18)以降は BLE を扱うクラスが追加されている.以下,BLE 通信に使 用するクラスである.

・BluetoothManager

 端末のBluetooth 機能へのアクセスを提供する.BluetoothManager を通して BluetoothAdapter を

取得する.API Level18 からの導入. ・BluetoothAdapter

 ローカルのBluetooth アダプタ.Bluetooth デバイスのスキャンや端末の Bluetooth 制御な

ど,Bluetooth に関する全ての操作を行う.他の Bluetooth デバイスを発見し,その MAC アドレ スを使って BluetoothDevice をインスタンス化,そして BluetoothServerSocket を作成し,他のデ バイスからの通信を受信できる状態にする. ・BluetoothDevice  リモート先のBluetooth デバイスの情報を表す.BluetoothAdapter のスキャン結果として取得す る.BluetoothSocket を通じてリモートデバイスへ接続する要求を出すか,名前やアドレスなどの 情報を問い合わせることができる. ・BluetoothGatt

 BLE GATT プロファイルの API.GATT プロファイルを操作する.GATT サービスの検索, キャラクタリスティックの読み書き,ディスクリプタの読み書き,GATT プロファイルの接続と 切断などを行う.API Level18 からの導入. ・BluetoothGattService  (GATT)サービス情報.キャラクタリスティック(BluetoothGattCharacteristic)を保持する.API Level18 からの導入. ・BluetoothGattCharacteristic  キャラクタリスティック情報.API level 18 からの導入.値の読み書きの対象となる.

(16)

ディスクリプタ(BluetoothGattDescriptor)を保持するが,無い場合もある. ・BluetoothGattDescriptor  ディスクリプタ情報.API level 18 からの導入.キャラクタリスティック情報同様,値の読み 書きの対象となる. マニフェストファイルによるパーミッション設定  アプリ上でBluetooth の使用,管理を行う場合,“AndroidManifest.xml”に以下の機能利用許可 の記述をする必要がある. ソースコード1 マニフェストファイルによる利用機能設定 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>    また,アプリがBLE 対応端末のみに対応していることを宣言する場合,以下のソースコード

を記述することでGooglePLAY でインストールができなくなる.PanoBike アプリを BLE 通信に

対応していないNexus7(2012)等でインストールできなかった原因が uses-feature にあると考えら れる. ソースコード2 マニフェストファイルによる必須機能設定 <uses-feature android:name="android.hardware.bluetooth_le"/> 4.設計,制作の過程など 4.1.制作したアプリケーション  本研究で制作したアプリケーションは,Android 向けサイクルコンピュータアプリである. 動作確認に使用した端末は,Nexus7(2013)である. 4.1.1.概要

 本研究で制作したアプリケーションは,TOPEAK 社の”PanoBike スピード&ケイデンスセン

サー”とBluetooth Low Energy を用いてペアリングを行い,センサーから得たデータを基に速度

計算するアプリケーションである.本アプリケーションは,Bluetooth による通信を行うた め,Bluetooth Low Energy 通信を行うサンプルプログラム[4]を参考にして制作を行った.

(17)

4.1.2.PanoBike について

 PanoBike とは,TOPEAK Inc.が提供するスマートフォン向けサイクルコンピュータアプリであ る.本アプリケーションは,別売り商品として販売されている”PanoBike スピード&ケイデンス センサー”を自転車に取り付け,携帯端末とのペアリングを行うことで機能する.機能とし て,現在速度,平均速度,最高速度,走行距離,走行時間,斜度,標高,ケイデンス(1 分間の クランク回転数),心拍数,地図表示が搭載されている.また,複数用意された中から画面のレ イアウトを選んで使用することが出来る.  今回使用したのは前述の別売り部品である”PanoBike スピード&ケイデンスセンサー(図 7)”で ある.以下,製品仕様を記載する.

通信規格:Bluetooth SMART (BLE4.0:超低消費電力規格)

電池寿命:約 900 時間 (1 日 1 時間使用した場合,約 2 年 6 ヶ月間) 使用電池:CR2032 × 1 個 通信可能距離 5 メートル以下 防水性能 IPX5(あらゆる方向からの噴流水による有害な影響がない)[2] 動作温度 -10℃~50℃ 重量 21 グラム  本製品は,屋外での使用を考慮し様々な天候に対応するため,防水性能や動作温度等,耐久 性に特化している反面,通信距離は必要最低限の性能である.

図7 TOPEAK PanoBike スピード&ケイデンスセンサー

 本アプリはAndroid4.3,iOS7 以上に対応している.制作の前に,手持ちや研究室の端末で動

作を確認した.使用端末と動作結果を以下に記載する.

(18)

使用端末 動作結果

iPhone5s(自分の所持物) インストール後,ペアリング完了

nexus7(2012)

Xperia A(SO-04E) GooglePlay に表示されないためインストール不可

nexus7(2013) インストール後,ペアリング完了

 以上より,手持ちの中でPanoBike を使用できる端末は iPhone5s と nexus7(2013)のみであっ

た.よって,制作で使用できるAndroid 端末は nexus7(2013)のみであると判断した.  PanoBike 使用手順は,以下の通りである.心拍計などその他のオプション機器については割 愛する. 1.ケイデンスマグネットをクランクに,ホイールマグネットを後輪のスポークに取り付ける. 2.外付けセンサーを結束バンドなどを使って右チェーンステーに取り付ける. 3.外付けセンサー→ホイールマグネットの順番で取り付け位置を調整する. 4.アプリ”PanoBike”をインストールし,起動する(起動の際にアカウントの登録が必要). 5.使用端末の Bluetooth 通信を ON 状態にする. 6.外付けセンサーとのペアリングを行うため,設定画面で使用デバイスの追加を行う. 7.デバイスの追加画面で,クランクまたはホイールを回転させ外付けセンサーを動作させる. 8.タイヤの周長と名前を設定し,デバイスの追加を完了させる. 以上の手順より,本スピードセンサーはクランクやホイールに取り付けられた磁石がセンサー のそばを通過した際にセンサーが反応し,ペアリング等の動作をする仕組みだと考えられる. 4.1.3.設計 ・名称:

サイクルコンピューターアプリ(BUTURI CYCLE METER) ・使用機器: ・Bluetooth4.0 以降搭載のスマートフォンやタブレット ・PanoBike スピード&ケイデンスセンサー ・機能: ・PanoBike スピード&ケイデンスセンサーとの接続,切断(画面左上のボタン) ・速度やその他各種数値の計測とリアルタイム更新 ・自転車走行速度(SPEED) ・平均速度(AVE) ・平均速度(DST) ・走行時間(TIME)) ・現在時刻表示 ・地図表示(画面下部,GoogleMap を Web 経由で表示) ・平均速度,走行距離,走行時間のリセット(右上のリセットボタン)

(19)

・使用手順: 1.自転車にスピードセンサーと磁石を装着する. 2.アプリ起動後,左上の「接続」ボタンをタップする. 3.Bluetooth 通信が開始されるので,走行を開始する等して,ホイールを回転させる. 4.ペアリングが成功すると,速度の計測を開始,速度が表示される. 5.積算情報のリセットをしたい場合は,右上の「リセット」ボタンを押す 6.使用後は「切断」ボタンでセンサーとの接続を終了する. ・画面デザイン:左がスマートフォン向け,右がタブレット向けのレイアウトである. 図8 画面デザイン(左・スマートフォン,右・タブレット用) 4.2.制作の過程  本アプリは,下記の工程で制作を行った. 1.センサーからのデータ取得(4.2.1.) 2.アプリ上でのセンサーとのペアリング(4.2.2.) 3.取得できるデータの調査 (4.2.3.) 4.数値計算(4.2.4.) 5.制作,稼動テスト(4.2.5.) 6.画面のレイアウト(4.2.6.)

(20)

4.2.1. センサーからのデータ取得  スピードセンサーから数値を取得するため,AppStore にて配布されている”LightBlue”をイン ストールし,自分の所持するiPhone との接続を行った.”LightBlue”を使用すると,接続された Bluetooth 対応機器の各種情報を取得,表示することができる.端末同士のペアリングを完了 し,センサーからの通知を取得すると,ログにセンサーから取得したデータを表示させること ができる.本センサーの場合,ホイールを回し磁石がセンサーを通過することで約1 秒の間隔で 通知が入り,値が更新されるUUID を探し,ログを取った.図 9 は,その際に取得したデータの ログである.

“Characteristic (2A5B) notified”の後に続く,”<>”で囲まれた 22 桁の数値がサイクルコンピュー タとして機能するために必要な数値である.

・・・

19 午後 7:06:12.932 ― Characteristic (2A5B) notified: <03c70501 008d3169 4bfd87> 19 午後 7:06:14.132 ― Characteristic (2A5B) notified: <03c70501 008d3169 4bfd87> ★19 午後 7:06:16.532 ― Characteristic (2A5B) notified: <03c70501 008d3169 4bfd87> 19 午後 7:06:16.532 ― Characteristic (2A5B) notified: <03c80501 009f8769 4bfd87> 19 午後 7:06:16.532 ― Characteristic (2A5B) notified: <03c90501 00628a69 4bfd87> 19 午後 7:06:17.732 ― Characteristic (2A5B) notified: <03ca0501 00628d69 4bfd87> 19 午後 7:06:18.932 ― Characteristic (2A5B) notified: <03cc0501 00629469 4bfd87> 19 午後 7:06:20.132 ― Characteristic (2A5B) notified: <03cc0501 00629469 4bfd87> 19 午後 7:06:21.332 ― Characteristic (2A5B) notified: <03cd0501 00a69869 4bfd87> 19 午後 7:06:21.332 ― Characteristic (2A5B) notified: <03ce0501 00d49d69 4bfd87> 19 午後 7:06:22.532 ― Characteristic (2A5B) notified: <03ce0501 00d49d69 4bfd87> 19 午後 7:06:23.732 ― Characteristic (2A5B) notified: <03cf0501 00e8a469 4bfd87> ★19 午後 7:06:24.932 ― Characteristic (2A5B) notified: <03cf0501 00e8a469 4bfd87> ※★印の箇所:ホイールの回転が開始,終了したことを示す. ※青く網掛けされた数値:通知の際,変動した値を示す. 図9 ”LightBlue”で取得したスピードセンサーから通知される値のログ 4.2.2. アプリ上でのセンサーとのペアリング  スピードセンサーの検索とペアリングを行う際,デバイスの名前と,32 桁で構成されるキャ ラクタリスティック,サービスの各UUID が必要となる.そこで,接続するデバイス名と必要な UUID[5]を調査し,以下のコードを記述した. ソースコード3 接続機器名と各種 UUID の記述 /* 検索機器の機器名*/

private static final String DEVICE_NAME = "PanoBike BLE CSS";

(21)

private static final String DEVICE_BUTTON_SENSOR_SERVICE_UUID = "00001816-0000-1000-8000-00805f9b34fb";

/*対象のキャラクタリスティックUUID(SensorTagのボタン通知のキャラクタリスティックを

指定)

private static final String DEVICE_BUTTON_SENSOR_CHARACTERISTIC_UUID = "00002a5b-0000-1000-8000-00805f9b34fb"; 4.2.3. 取得できるデータの調査  図9 のログから,スピードセンサーからどのような数値を取得できるかを調査した.数値 は,Byte 型による 256 段階(8 ビット)の数値で表現されており,1 回の通知で 11 個の数値を取得 できることが分かった.このデータはそれぞれ配列の要素であると考えられる.以降,図解を 踏まえてそれぞれの数値について解説する.なお,図10 の赤色の番号②,③の部分がアプリの 開発に使用した数値である. 図10 センサーから取得した数値の図解 ①データの種類  データの種類を示す.1 がクランク,2 がホイールの回転情報だとされていれる.3 が何を示 しているかの情報は見つからなかったが,恐らくクランクとホイール両方の情報だと思われ る. ②ホイールの回転数  ホイールマグネットがセンサーを通過した回数,すなわちホイールの回転数をカウントす る. ③ホイールイベントのタイムスタンプ

(22)

 センサー上で扱う時間をタイムスタンプ上でのカウントアップによって管理している.通知 ごとに大きく変動するが,これは1 秒につき 1024 カウントという細かい単位で時間を取り扱っ ているためである[6]. ④クランクのの回転数  クランクマグネットがセンサーを通過した回数,すなわちホイールの回転数をカウントす る. ⑤クランクイベントのタイムスタンプ  ホイールのタイムスタンプと同様である.  ④,⑤は,ケイデンスに関する数値であり,今回の制作には関係ないため使用しない. 4.2.4. 数値計算  センサーからデータを取得した後,取得したデータの値から走行速度などの各種数値を算出 した.  算出には,まずタイヤの周長が必要である.理由は,1 秒間の走行距離を算出するためのベー スになるからである.タイヤが1 回転する毎にタイヤの周長分の距離を走るため,センサーが 1 秒間のタイヤの回転数を検知すれば1 秒間の走行距離,すなわち秒速を導出でき,時速を計算す ることができる.上述の理由によって,タイヤの周長が違うとタイヤ1 回転毎の移動距離にも違 いが生じる.よって,タイヤの周長はあらかじめ調べる必要がある.本研究では,700×25C サイ ズのタイヤを使用したため,タイヤの周長は2105mm(2.105m)に固定する.[2][7] 表4 数値取得のための計算式 数値 計測の仕方 ホイールの回転数( 1)※ :n 磁石に反応してカウント 距離(km):distance タイヤ周長 × n ÷ 1000 時速(km/h):speed 1 秒ごとの回転数 × タイヤ周長 × 60×60 走行時間:runtime 計測している時間を積算する 平均速度:average 走行距離 ÷ 走行時間 ※1.ペダルの回転数の単位であるケイデンス(rpm:回毎分)とは異なる.

(23)

4.2.5. 制作,稼動テスト  本段階では制作アプリがサイクルコンピュータとして機能できるようプログラミングしなが ら数値計算を行った.本アプリはセンサーから通知を受けるたびonCharacteristicChanged メソッ ド内の処理を繰り返し,数値の更新を行う仕組みとなっている.本項では,サイクルコン ピュータとしての機能に重点を置いて解説するため,onCharacteristicChanged メソッド内の処理 を記述する.  まず,センサーから必要な値を取得し,プログラム上で容易に扱えるよう変換した. スピードセンサーから得た数値はByte 型による数値であるが,Byte 型の数値は-128 から 127 ま での範囲であり,負の値が含まれるため計算に適しないと考えたため,int 型の正の整数に変換 した.変換には論理積演算を用いた[8].以降は,累積回転数を最大 256,累積タイムスタンプを 最大65536 までのカウントとして扱う. ソースコード4 値の取得,符号なしの数値に変換

Byte value = characteristic.getValue()[1]; //ホイールの累積回転数を参照 Byte time1 = characteristic.getValue()[5]; //タイムスタンプ

Byte time2 = characteristic.getValue()[6]; //タイムスタンプ

//byte型数値を符号なし数値に変換

int intValue = value & 0xFF; int intTime1 = time1 & 0xFF; int intTime2 = time2 & 0xFF;

 この後,前の通知と現在のタイムスタンプ差を算出して前の通知からの経過時間を求めた. センサーの値のカウントが上限に達すると,0 にクリアされカウントを再開する.よって,上限 を超えた場合と超えない場合に分岐を追加した. ソースコード5 前回の通知からの経過時間算出 intTimeNow1 = intTime1; intTimeNow2 = intTime2; int rotation = intValue;

if (countUp == 0) { //最初のカウントの場合 rotationNow = rotation;

intTimeNow = intTimeNow1 + 256 * intTimeNow2; } else { //カウントが 2 回目以降の場合

//タイムスタンプの値の差を算出 int intTimeBefore = intTimeNow;

(24)

if (intTimeBefore != intTimeNow) { if (intTimeBefore <= intTimeNow)

intTimeDifference = intTimeNow - intTimeBefore; else { //もし intTime2 が上限に達したならば

intTimeDifference = 65536 - intTimeBefore + intTimeNow; } } else { intTimeDifference = 0; }  上記経過時間内のホイールの回転数も同様の方法で求めた. ソースコード6 経過時間内のホイール回転数導出

int rotationBefore = rotationNow; rotationNow = rotation;

//1通知毎のタイヤ回転算出

if (rotationBefore < rotationNow) { rpc = rotationNow - rotationBefore;

} else if (rotationNow == rotationBefore) { //intValueに変化が無かったら rpc = 0;

} else if (rotationNow < rotationBefore) { //intValue0に戻ったら rpc = rotationNow + (256 - rotationBefore);

}

 次に,直前で算出したホイールの回転数と現在速度の計算を行った(ソースコード 7).なお, 本プログラムではタイムスタンプによる時間と計算方法による違いを検証するため,速度を speed1 と speed2 の 2 種類に分け,計算した.なお,アプリでの表示に採用したのは speed1 の方 である.

 まずspeed1 は,前述のタイムスタンプ差による経過時間を基に時速を算出したときの速度で

ある.speed2 は,回転数とタイヤ周長の積による速度である.約 1 秒の間隔で処理を繰り返すセ ンサーの仕組みを利用した計算式である.

 speed1 と speed2 はそれぞれ,速度算出の時に扱う時間に違いがある.speed1 は数値取得ごと の時間の間隔を毎回細かく取得する,speed2 は時間の間隔を 1 秒であると仮定する点が速度算出 における特徴である.

(25)

表5 speed1 と speed2 との違い 取得時刻 回転数 Speed1 (km/h) Speed2 (km/h) 前回の通知との タイムスタンプ差 20:31:29.715 1 11.9 7.6 652 20:31:30.915 2 11.3 15.2 1375 20:31:30.918 3 18.8 22.7 1241 20:31:32.115 2 18.2 15.2 851 20:31:33.315 2 16.5 15.2 943 20:31:34.515 2 14.6 15.2 1083 20:31:35.717 2 13.4 15.2 1159 20:31:36.915 3 21.6 22.7 1076  まず,speed2 は回転数とタイヤ周長の積であると上述したが,その間隔は 7.6(km/h)であり, 精度が高いとは言えない.それに対してspeed1 は,回転数や speed2 の速度の値に変化がない時 も細かく変化している.これは,タイムスタンプの差,すなわち数値取得の間隔が毎回変化し ているからであると考えられる.数値取得が一定間隔でない理由は,センサーがホイールの回 転を検知するためのホイールマグネットの装着数を1 個に抑え,その上精度の高い速度計算を行 うためであると推測される.   開発の初期段階ではspeed2 の計算式を使用していたが,算出した速度の精度を理由に speed1 の計算式を採用した.  なお,speed1,speed2 の計算式は以下のとおりである.

speed 1[km/h]=

tirePerimeter × rpc×10

−6

intTimeDifference

×1024 ×(60 ×60)

speed 2 [km/h]=tirePerimeter × rpc×10

−6

×(60 ×60)

※ tirePerimeter:タイヤの周長(mm) ※ rpc:ホイールの回転数(回) ※ intTimeDifference:数値取得の時間間隔(カウント) なお,1024 カウント=1 秒とする.

(26)

ソースコード7 走行時間算出 double tirePerimeter = 2105.0; //タイヤ周長(mm) if (rpc == 0) {//ホイールが回転しなかった場合スピードを0にする speed1 = 0.0; speed2 = 0.0; } else {//ホイールが回転した場合スピードを計算する

//■ constant = milliKm ÷ tickHour ■ milliKm = 0.000001 ■ tickHour =1.0 ÷1024.0 ÷ 3600.0

speed1 = tirePerimeter * rpc * constant / intTimeDifference; //タイムスタンプによる計算法 speed2 = tirePerimeter * rpc * milliKm * secondHour;

//時速(km/h)=1秒間のタイヤの回転*タイヤ周長(mm)×60×60÷(10mm÷100cm÷1000m)

}

 以下は走行時間を導出するためのコードである.走行時間は倍精度実数として積算される が,タイマー表示する際,整数にキャストし時間,分,秒を算出した.

ソースコード8 走行時間算出

runTime = runTime + intTimeDifference / 1024.0; //走行時間の積算 timeCount = (int) runTime; //走行時間を整数にキャスト

runHour = timeCount / 3600; //タイマー上の時間算出(時間)

runMinute = (timeCount - runHour * 3600) / 60; //タイマー上の時間算出()

runSecond = timeCount - (runHour * 3600) - (runMinute * 60); //タイマー上の時間算出()

 そして,上記のホイール回転数と走行時間を基に走行距離と平均速度の計算式を算出した.

ソースコード9 距離と平均速度の算出

distance += rpc * tirePerimeter * milliKm; //積算距離(mmからkmに変換)

………

average = distance / runTime * secondHour;

//平均速度(km/h)=走行距離÷走行秒数÷1000(mからkmに変換)×3600(秒から時間)

 上記にて算出した各種数値を小数点第1 位以下で切り捨てるため,BigDecimal クラスを使用し

(27)

ソースコード10 BigDecimal による小数点以下の処理

//小数点第1位までの表示(km/h)

BigDecimal bd1 = new BigDecimal(speed1);

resSpeed1 = bd1.setScale(1, BigDecimal.ROUND_HALF_UP);

//タイムスタンプ速度の小数点1位四捨五入

BigDecimal bd1_2 = new BigDecimal(speed2);

resSpeed2 = bd1_2.setScale(1, BigDecimal.ROUND_HALF_UP); ………

//小数点第1位までの表示()

BigDecimal bd2 = new BigDecimal(distance);

resDistance = bd2.setScale(2, BigDecimal.ROUND_HALF_UP); ………

//小数点第1位までの表示()

BigDecimal bd3 = new BigDecimal(average);

resAverage = bd3.setScale(1, BigDecimal.ROUND_HALF_UP);

 また,センサーから取得した数値や数値計算の経過などをAndroidStudio の AndroidMonitor に

て確認できるよう,各箇所にログ表示の記述をした.表5 の速度検証もこの方法で行った.

 ソースコード11 ログ表示

Log.d(TAG, "* count=" + countUp + " * intTime1,2= " + intTime1 + " : " + intTime2 + " intTimeNow= " + intTimeNow + " * intTimeDifference=" + intTimeDifference);

//countUp,intTime1,2,intTimeNow,intTimeDifferenceを表示 ………

Log.d(TAG, "******* 距離=" + resDistance + "km * 現在速度 =" + resSpeed1 + "(km/h) * resSpeed2=" + resSpeed2 + "runTime,timeCount = " + runTime + ":" + timeCount + "走行時間= " + runHour + "時間 " + runMinute + "分 " + runSecond + "秒");

………

Log.d(TAG, "* 平均速度 =" + resAverage + "(km/h)"); //平均速度

 ログ上で正しい速度の導出に成功した後,画面に出力するための記述を行ったが,リアルタ

イムで画面の更新を行うという仕様上Android 機器に負担が掛かるため,UI スレッド上でテキ

スト表示による数値表示更新の処理を記述した.

ソースコード12 UI スレッドによる画面更新処理

(28)

@Override

public void run() {

DecimalFormat df = new DecimalFormat("00"); speedText.setText("" + resSpeed1); distanceText.setText("" + resDistance); averageText.setText("" + resAverage); runTimeText.setText(runHour + ":" + df.format(runMinute) + ":" + df.format(runSecond)); } });  以上をセンサーから通知を受けるたびに繰り返し,数値の更新を行う仕組みとなっている. 4.2.6. 画面のレイアウト  制作において,以下の点に気をつけながら画面のデザインを行った. ・見やすい背景色と文字色とアクセントカラーの組み合わせ ・表示する文字の大きさと画面レイアウトのバランス ・グリッドデザインを意識しながらも大きさや位置を微妙にずらすことによる視認性の向上 ・スマートフォンなどの画面が狭い端末向けのレイアウト  以下より,本アプリの画面レイアウトの変遷を記載する. 試作版:  速度表示のテストを目的に作成した画面で ある.よって,配色などは,style.xml に入って いたデフォルトカラーを使用しているため統 一されていない.しかし,表示する情報は速 度,平均速度,距離,経過時間,現在時刻の5 種類であること,上段に走行情報,下段に時 間に関する情報を表示することといったレイ アウトの根幹となる部分はこの時点で決定し ている.

(29)

初代デザイン:  全体的な配色を変え,アクセントとして現 在時刻のバックカラーに緑を挿し色として採 用した.全体的なデザインは,既存のサイク ルコンピュータの液晶表示をイメージした. 背景や文字などは,コントラスト差がはっき りしすぎない配色をした.  また,レイアウトも大幅に変更し,表示情 報の主体となる現在速度のスペースを画面上 段左半分に設け,平均速度や走行距離といっ た補助情報を右に集中させることで,視点の 移動が少なくなるように配慮した. 2 代目デザイン:  サイクルコンピュータの筐体をイメージし て作成し,画面上部に位置していたセンサー との接続状態を表示下部に移動させ,明度の 高い表示部分に必要情報を全て表示するよう にした.  画面下部の地図と瞬時に見分けが付くよ う,表示部分の左右端に余白を設けた.  また,上段,下段の表示を明確に分けるた め,線によるエリア分けを図った.  コントラスト差が明確になるよう配色を見 直した. 3 代目デザイン:  前回までのデザインは動作確認に使用した Nexus7(2013)に基づくデザインであったため, 今回はスマートフォン用に文字などの大きさ を変更した.  センサーとの接続状態表示を画面上部の 余ったスペースに移動したり,時刻の午前・ 午後表示を秒の上部に配置したりするなど, 画面スペースの節約に努めた.  先代デザインで採用した左右の黒い余白 は,スマートフォン上での表示の際に表示部 分が狭くなり,スペースがなくなるとの指摘 があったため削除した. 

(30)

現行版デザイン: スマートフォン用とタブレット用にレイアウ トを分け,画面の大きさが異なる端末に対応 できるようにした(画像はタブレット用).  特にタブレット用レイアウトは,使用でき る画面の領域が大きいことを利用し,数値の 余白を大きくし,視認性の向上に努めた.  また,黒地に白文字の配色を実験的に導入 したところ,概ね好評だったのでそのまま採 用した. 5. まとめ 5.1.アプリケーションに対する評価  本研究で制作したアプリは,実験端末に対応したハンドルバーマウントなど,走行中に画面 を確認できる環境が準備できなかったが,使用したPanoBike の純正サイクルコンピュータアプ リより見やすい,との評価を得ることができた. 5.2.制作物の問題点,今後の改善点など

 画面下部のマップは,WebView で GoogleMaps の Web ページをそのまま表示したものである が,Google Maps API を使用することによって表示座標の指定や地図への図形描画など,様々な

機能を追加することができる.制作時間の問題によりWeb ページを使用することになった

が,Google Maps API を使用することで地図機能をより強化することができたと考えられる.

 また,見やすいUI を目指して下記の機能を追加する予定であったが,同様の理由により実装 を見送った. ・フォントの変更による数値の7 セグメント表記  数値を最大7 本の直線のみで構成される 7 セグメントで表記することによって,他の文字と区 別がつきやすくなり視認性が向上すると考えたためフォントの変更に取り掛かったが,実装後 アプリケーションが動作しなくなった.解決策を探したが,完成予定日まで時間が無かった為 断念した. ・表示カラーの変更ボタン実装  デザインの配色をミーティングで議題に出した際,屋内外などの使用環境によって見やすい 配色が異なる場合があるという意見があった.そこで,実験用に色の異なる2 つのデザインを用 意し,クリックすると色が変化するボタンの実装を考えたが,フォントの件同様アプリケー ションが動作しなくなった為,実現には至らなかった. 5.3.本研究のまとめ

(31)

 今回,PanoBike スピード&ケイデンスセンサーを利用したサイクルコンピュータアプリの開発 に成功した.また,画面のデザインによる視認性向上など,実用面の改善にも努めた.  1 年間 Android アプリの開発知識や Bluetooth に対する情報を勉強し,本研究室の担当教員であ る徐 丙鉄教授からの協力を受けながら本アプリケーションの開発を進めた.日本語による開発 に有用な情報が少なく,自分のアプリケーション開発経験も少ないため,開発がスムーズに進 まなかったが,何とか1 つのアプリケーションとして機能する段階まで至った.  しかし,完成が遅かったため,上記改善点をはじめとする本アプリを実用化するにあたって の改良や,十分な検証をすることができなかった.本研究を通して,アプリケーション開発に どれほどの労力と時間が掛かるか,そして,長期間の開発に対して十分な計画を立てる必要が あることを実感した.また,開発スキルや知識が不十分であったことも原因であり,これらが 原因で開発が滞った場面も少なくない.一人前の技術者としてスムーズに開発を進めるには, 知識とスキル,そして経験が不可欠であることを開発を通して学んだ.  とはいえ,自分の趣味である自転車を研究テーマに,卒業研究に1 年間取り組み,実在する 1 つのアプリケーションとして遺した.これは4 年間の大学生活の集大成であり,明確な実績であ る.また,日本語による開発情報が少なかったと上述したが,本論文が,同様の開発に役立つ 可能性があることが考えられる.よって,本研究は自分の人生において大きな出発点になるで あろう. 6. 謝辞  本研究を行うにあたって,知識やプログラミングスキルが不十分な私に貴重な時間を割いて ご指導,協力頂きました徐 丙鉄先生には大変感謝いたします.また,ミーティングなどを通 してアドバイスなどを下さいました本研究室メンバーの皆様に,この場を借りてお礼申し上げ ます. 7. 参考文献 [1]総務省 平成 26 年通信利用動向調査の結果 http://www.soumu.go.jp/johotsusintokei/statistics/data/150717_1.pdf [2]自転車 探険! サイクルコンピュータ http://www.geocities.jp/jitensha_tanken/cyclecomputer.html [3]Bluetooth のバージョンによる違いについて!プロファイル,Class http://dokoblo.com/archives/24730297.html

[4]Bluetooth LE (5) Android 4.3 で Bluetooth LE 機器を使う (フェンリル | デベロッパーズブログ) http://blog.fenrir-inc.com/jp/2013/10/bluetooth-le-android.html

[5]Onion and garlic How to get Cadense and speed information using gattool http://onion-garlic.blogspot.jp/2015/06/how-to-get-cadense-and-speed.html [6]Bluetooth Developer Portal CSC Measurement

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx? u=org.bluetooth.characteristic.csc_measurement.xml

[7]キャットアイ タイヤ周長ガイド http

:// www . cateye . com / jp / tire _ guide /

[8][Java]byte 型数値を符号なし数値として扱う http://masao6739.blog89.fc2.com/blog-entry-21.html

(32)

8. 付録

 本研究で作成,編集したソースコードを以下に記載する. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="jp.co.fenrir.blesample" >

<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.INTERNET"/>

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme" >

<activity android:name=".BleActivity"

android:screenOrientation="portrait">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter>

</activity>

<!-- ATTENTION: This was auto-generated to add Google Play services to your project for

App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. -->

<meta-data

android:name="com.google.android.gms.version"

android:value="@integer/google_play_services_version" />

</application> </manifest>

colors.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

<color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="background">#000000</color> <color name="colorClock">#8effbb</color> <color name="colorCase">#072100</color> <color name="white">#fff</color>

<color name="speed">#94ffb7</color> <color name="number">#fff</color> <color name="textClock">#000</color> </resources>

(33)

colors.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

<color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="background">#000000</color> <color name="colorClock">#8effbb</color> <color name="colorCase">#072100</color> <color name="white">#fff</color>

<color name="speed">#94ffb7</color> <color name="number">#fff</color> <color name="textClock">#000</color> </resources>

strings.xml

<resources>

<string name="app_name">BUTURI CYCLE METER</string> <string name="kmph">km/h</string>

<string name="km">km</string>

<string name="textSpeed">SPEED</string> <string name="textAvg">AVG</string> <string name="textDst">DST</string> <string name="textTime">TIME</string> </resources>

styles.xml

<resources>

<!-- Base application theme. -->

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. -->

<item name="colorPrimary">@color/colorCase</item> <item name="colorPrimaryDark">#061503</item> <item name="colorAccent">@color/colorClock</item> </style>

</resources>

activity_ble.xml(スマートフォン用レイアウトを記載.タブレット用レイアウトは割愛する.)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/all"

android:orientation="vertical"

android:background="@color/colorCase"

xmlns:android="http://schemas.android.com/apk/res/android"

>

(34)

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/bt_info"

android:orientation="horizontal"> <LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/bt_btn"

android:orientation="horizontal">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="接続"

android:id="@+id/btn_connect"/>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="切断"

android:id="@+id/btn_disconnect"/>

</LinearLayout> <View

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_weight="1"></View> <LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/reset_btn"

android:orientation="horizontal">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="リセット"

android:id="@+id/btn_reset"

android:layout_gravity="right"/>

</LinearLayout> </LinearLayout> <LinearLayout

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/background"

android:paddingRight="5dp">

<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

(35)

<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="2"

android:gravity="bottom">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="16dp"

android:text="@string/textSpeed"

android:textColor="@color/colorClock"

android:layout_weight="1"

android:gravity="center_horizontal|bottom"

android:id="@+id/textSPEED" />

</LinearLayout> <LinearLayout

android:layout_width="420dp"

android:layout_height="match_parent"

android:id="@+id/bt_status"

android:orientation="horizontal"

android:layout_weight="1"

android:paddingBottom="10dp">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Bt"

android:layout_alignParentLeft="true"

android:id="@+id/statusStrings"

android:textColor="@color/background"

android:padding="2dp"

android:background="@color/number"

android:textSize="12dp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/text_status"

android:layout_alignParentTop="true"

android:layout_marginLeft="5dp"

android:textColor="@color/number"

android:textSize="16dp"

android:text="---" /> </LinearLayout>

</LinearLayout> <LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

図 1 スマートフォンの世代別普及率(2015 年)[1]
図 2 スマートフォン普及率の変遷(2015 年)[1]
図 5 チェーンステーに取り付けられたセンサー 2.4.2. センサーの信号伝送方式 センサーが出した信号は有線と無線いずれかの方式でコンピュータ本体に伝送される本項では 無線による伝送方式について記述する. サイクルコンピュータで利用される主な無線通信規格は Bluetooth と Ant+の 2 つである.本研究 では Bluetooth に対応したセンサーを使用した. 2.4.2.1
表 1 Bluetooth の電波強度クラスと到達距離[2]   クラス 出力[mW] 到達距離[m] Class1 100 100 Class2 2.5 10 Class3 1 1  サイクルコンピュータはリアルタイムで走行速度の更新を行う為,Ant+に比べ消費電力の大 きい Bluetooth は不向きであると考えられたが,バージョン 4.0 以降は消費電力が少なくなった 為,従来の Bluetooth を踏襲する BLE の普及が容易であることから各社の製品開発において ANT+から BLE に移行す
+5

参照

関連したドキュメント

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

話者の発表態度 がプレゼンテー ションの内容を 説得的にしてお り、聴衆の反応 を見ながら自信 をもって伝えて

市民的その他のあらゆる分野において、他の 者との平等を基礎として全ての人権及び基本

HS誕生の背景 ①関税協力理事会品目表(CCCN) 世界貿易の75%をカバー 【米、加は使用せず】 ②真に国際的な品目表の作成を目指して

層の項目 MaaS 提供にあたっての目的 データ連携を行う上でのルール MaaS に関連するプレイヤー ビジネスとしての MaaS MaaS

・マネジメントモデルを導入して1 年半が経過したが、安全改革プランを遂行するという本来の目的に対して、「現在のCFAM

 此準備的、先駆的の目的を過 あやま りて法律は自からその貴尊を傷るに至

 Rule F 42は、GISC がその目的を達成し、GISC の会員となるか会員の