HOME > TOPICS

「Arduino & HTML5による IoTアプリのつくり方
~センサーと最新ウェブ技術でアイデアを形に~」出版決定(発売日:2017年4月24日)

文責:遠藤 理平 (2017年4月24日) カテゴリ:TOPICS(32)

978-4-87783-375-6.png

Arduino & HTML5による IoTアプリのつくり方
センサーと最新ウェブ技術でアイデアを形に

著者 特定非営利活動法人natural science 遠藤 理平/松田 佳歩/増保 純平/高橋 佑生/平岡 孝一 共著
出版社 株式会社カットシステム
判型 B5変型、392頁
本体価格 3,800円(税込 4,104円)
ISBN 978-4-87783-389-3

はじめに

 「モノのインターネット」(Internet of Things:IoT)により、ありとあらゆるモノに取り付けられたセンサーから得られる様々なデータがインターネットを介してリアルタイムに取得され、個々の状況を把握しながら目的に対して最適解を導き出すという、新たな価値創造の技術的基盤が構築されつつあります。近年整ってきたネットワーク環境とセンサー類の普及がこの流れを後押しして、様々な分野でIoT化が爆発的に広がっており、昨今ではAI(人工知能)と並んで一般のニュースでその動向が取り上げられるほど市民権を得ました。本書では「センサー」と「インターネット」をつなぐ「アプリケーション」を「IoTアプリケーション」と呼び、近年、独立に発展してきた【Arduino】と【HTML5】を組み合わせてIoTアプリケーションを開発する新しい手法を提案します。そして、そのために必要な技術の習得から、実践のための応用方法までを詳しく解説します。

【Arduinoについて】
 IoTの重要性の社会的認知が高まるにともない、マイコンプログラミングやセンサー等の専門家でなくてもIoTを学びたい、あるいは開発したいというニーズが増してきています。このような背景を受けて、センサー類を用いたアプリケーション開発を比較的簡単に行うことのできるArduinoと呼ばれるマイコンボードが世界的に人気を博しています。ArduinoはIoTのために開発されたわけではありませんが、センサーを利用するため電子回路を接続する入出力ピン、信号処理を行うマイコン、そしてマイコンにプログラムを書き込むライターなどがワンボードに搭載され、マイコンプログラミングで必須だった呪文のような命令文がきれいに隠蔽されたArduino言語と呼ばれる言語とそのライブラリが標準で用意され、さらにはハードとソフトを有機的につなぐ統合開発環境をあわせてIoTアプリケーションのセンサー側の開発に必要なすべての要素を持っています。また、開発を行うためのパソコンにもUSB一つでつながるので、従来のように一つずつ要素を揃える必要がなく、初心者でもすぐに開発を始めることができます。このようなオールインワン環境が世界中で受け入れられ、非常に広く普及しています。

【HTML5について】
 IoTアプリケーションの開発に必要なソフトウェアを開発する技術にも近年大幅な発展がありました。それがHTML5です。WEBページ制作言語だったHTMLが、WEBブラウザの高機能化に伴い、最新バージョンであるHTML5からは任意の二次元画像や三次元グラフィックスの解析や生成、音声データの解析や再生など、これまで専用ソフトがなければ実現できなかったことが、プラグインなしにネイティブに実現できるようになってきました。HTMLはもともとネットワークとの情報のやり取りに長けているウェブ技術であることもあり、IoTアプリケーションを開発するための技術としてHTML5はうってつけの存在と言えます。HTML5の強みは何と言ってもクロスプラットフォーム性です。パソコン、スマートフォン、タブレットなどのデバイスに関わらず、Windows、iOS、Androidなどのオペレーティングシステムにも依らず、HTML5が実行可能なウェブブラウザがあれば動作させることができることができます。さらには、IoTアプリケーションを端末にインストールして利用するネイティブアプリケーションではなく、特定のURLにアクセスすることで実行するWEBアプリケーションとして動作させる場合には、アプリケーションのインストールすら必要なく、IoTアプリケーション作動させるための環境をユーザー自身が用意する必要が全く無くすことができます。

 このHTML5を動かすのはJavaScriptというプログラミング言語です。HTML5の発展とともに世界シェアが拡大してきた結果、これまでウェブブラウザ上でのみ動作していたJavaScriptを用いたnodo.jsというサーバープログラムが開発されました。本書でもサーバープログラムとしてnode.jsを利用します。これにより、Iotアプリケーション開発に不可欠なローカル側とサーバー側におけるプログラミング言語をJavaScriptに統一して開発を行うことができます。

 本書は、加速度センサーなどのMEMSと呼ばれるセンサーを活用したアプリケーションを競う学生向けコンテスト、国際ナノ・マイクロアプリケーションコンテストにおける、世界大会第一位を受賞した「どこでも茶道」(2015年)、国内大会ポスター賞した「バーチャル・ボクシングゲーム」(2016年)を開発するために学生へ技術指導した内容をまとめたものです。指導の過程で【Arduino】と【HTML5】の組み合わせは、各自がもっているアイディアを形にする際の最小構成要素を比較的容易に実現することができると感じています。本書がアイディを形にするための一助をなれば幸いです。

 最後に、国際ナノ・マイクロアプリケーションコンテストに出場するにあたり、多大なご指導とご支援を賜りました東北大学マイクロシステム融合研究開発センター江刺正喜センター長並びにMEMSパークコンソーシアムの関係者の皆様、また、日常的に議論を特定非営利活動法人 natural science の皆様、本書の執筆の機会を頂きました株式会社カットシステムの石塚勝敏さん、厳しいスケジュールのなか丁寧な編集を行なって頂きました武井智裕さんに深く感謝申し上げます。

2017年4月
遠藤理平、松田佳歩、増保純平、高橋佑生、平岡孝一


目次

  • 第1章 Arduinoの全体像
    • 1.1 Arduinoについて
      • 1.1.1 Arduinoとは?
      • 1.1.2 Arduinoの種類
      • 1.1.3 Arduino Unoの紹介
      • 1.1.4 Arduino Megaの紹介
      • 1.1.5 Arduino Dueの紹介
    • 1.2 Arduino統合開発環境(IDE)の利用方法
      • 1.2.1 Arduino統合開発環境(IDE)のインストール
      • 1.2.2 Arduino Unoの動作チェック
      • 1.2.3 サンプルプログラム「Blink」の解説
      • 1.2.4 ファイルの保存
      • 1.2.5 コンパイルエラー
      • 1.2.6 実行時エラー
    • 1.3 Arduino言語の全体像
      • 1.3.1 基本構造
      • 1.3.2 時間関連
      • 1.3.3 シリアル通信
      • 1.3.4 デジタル入出力
      • 1.3.5 アナログ入出力
      • 1.3.6 その他の入出力関数
      • 1.3.7 割り込み関連
      • 1.3.8 ビットとバイトの操作
    • 1.4 Arduino言語で定義されているデータ型と関数
      • 1.4.1 C言語と共通のデータ型
      • 1.4.2 Stringクラス
      • 1.4.3 数学関数
    • 1.5 Arduinoボードで利用可能なメモリ
      • 1.5.1 Arduinoボードで利用可能な3つのメモリ
      • 1.5.2 Flashメモリの利用方法
      • 1.5.3 EEPROMの利用方法
  • 第2章 シリアル通信
    • 2.1 シリアル通信によるデータ送受信の基本
      • 2.1.1 Arduinoからパソコンへの送信方法
      • 2.1.2 パソコンからの送信されたデータの受信方法
      • 2.1.3 readStringUntil関数によるデータ取得方法
      • 2.1.4 loop関数内でシリアルバッファのデータを取得する方法
    • 2.2 高度なシリアルバッファのデータ取得方法
      • 2.2.1 1文字取得:Serial.read関数
      • 2.2.2 文字列取得:Serial.readBytes関数とSerial.readBytesUntil関数
      • 2.2.3 整数と小数の取得:Serial.parseInt関数とSerial.parseFloat関数
      • 2.2.4 文字列検索:Serial.find関数とSerial.findUntil関数
      • 2.2.5 1文字のぞき見:Serial.peek関数
    • 2.3 送信・受信の実行時間の計測
      • 2.3.1 Serial.print関数によるシリアル通信の通信速度の実測値
      • 2.3.2 Serial.readString関数による文字列取得時間の計測
      • 2.3.3 Serial.readStringUntil関数による文字列取得時間の計測
      • 2.3.4 Serial.parseInt関数、Serial.parseFloat関数の実行時間
    • 2.4 データ取得時間の短縮化の方法
      • 2.4.1 受信待機時間を短く設定
      • 2.4.2 シリアルバッファへのバッファリング
      • 2.4.3 String型からChar型による短縮化
      • 2.4.4 「区切り文字」指定から「バイト数」指定による短縮化
      • 2.4.5 Arduino Dueのシリアルバッファ取得時間
  • 第3章 各種関数の実行時間の計測
    • 3.1 Arduinoの基本性能の実測
      • 3.1.1 無負荷時のwhile文の実行時間の計測
      • 3.1.2 無負荷時のloop関数の実行時間の計測
      • 3.1.3 Stringクラスのオブジェクト生成時間
    • 3.2 アナログ入力の実行時間
      • 3.2.1 analogRead関数の実行時間の計測(whiteループ)
      • 3.2.2 analogRead関数の実行時間の計測(loop関数ループ)
      • 3.2.3 分解能12[bit]時のanalogRead関数の実行時間(DUEのみ)
    • 3.3 デジタル入力の実行時間
      • 3.3.1 digitalRead関数の実行時間の計測(whiteループ)
      • 3.3.2 digitalRead関数の実行時間の計測(loopループ)
    • 3.4 アナログ出力の実行時間
      • 3.4.1 analogWrite関数の実行時間の計測(whileループ)
      • 3.4.2 analogWrite関数の実行時間の計測(loopループ)
    • 3.5 デジタル出力の実行時間
      • 3.5.1 digitalWrite関数の実行時間の計測(whileループ)
      • 3.5.2 digitalWrite関数の実行時間の計測(loopループ)
  • 第4章 Arduinoによる電子工作の始め方
    • 4.1 電圧値の計測方法
      • 4.1.1 3.3[v]電源の電圧計測
      • 4.1.2 回路中の電圧と電流
      • 4.1.3 アナログ入力ピンの抵抗値
      • 4.1.4 DACによる電圧出力方法(DUE)
    • 4.2 LED点灯回路と電圧測定
      • 4.2.1 使用するLEDの紹介
      • 4.2.2 LED点灯回路
      • 4.2.3 LEDに加わる電圧測定
      • 4.2.4 LED電圧/電流特性の計測方法
      • 4.2.5 LED電圧/電流特性の計測結果
    • 4.3 LEDの点灯制御
      • 4.3.1 デジタル出力によるLED点灯制御
      • 4.3.2 直列と並列
      • 4.3.3 複数LEDの点灯/消灯
      • 4.3.4 シリアル通信による点灯制御
    • 4.4 PWMによる出力電圧制御
      • 4.4.1 PWMとは?
      • 4.4.2 PWM出力電圧の周波数の実測
      • 4.4.3 PWMによるLEDの明るさ制御
      • 4.4.4 周波数指定型PWM出力関数:tone関数
      • 4.4.5 自作PWM出力関数の定義
  • 第5章 様々なセンサーを使ってみよう!
    • 5.1 温度センサー
      • 5.1.1 アナログ温度センサー「LM61biz(Texas Instruments社)」
      • 5.1.2 「LM61biz」を用いた温度計測方法
      • 5.1.3 連続温度値の取得方法
      • 5.1.4 デジタル温度センサー「D6T-44L-06」
      • 5.1.5 「D6T-44L-06」で温度計測する方法
    • 5.2 湿度センサー、光センサー
      • 5.2.1 アナログ湿度センサー「HIH4030」
      • 5.2.2 「HIH4030」を用いた湿度計測方法
      • 5.2.3 アナログ光センサー「CdSセル」
      • 5.2.4 「CdSセル」を用いた照度計測
    • 5.3 加速度センサー
      • 5.3.1 アナログ3軸加速度センサー「KXR94-2050」
      • 5.3.2 「KXR94-2050」を用いた加速度計測方法
      • 5.3.3 オフセット電圧の初期自動校正の方法
      • 5.3.4 デジタル加速度センサー「MMA8451Q」
      • 5.3.5 「MMA8451Q」の初期化方法
      • 5.3.6 「MMA8451Q」で加速度を計測する方法
    • 5.4 ジャイロセンサー
      • 5.4.1 アナログジャイロセンサー「ENC-03R」
      • 5.4.2「ENC-03R」を用いた加速度計測方法
      • 5.4.3 角速度の平準化
      • 5.4.4 デジタルジャイロセンサー「L3GD20」
      • 5.4.5 「L3GD20」の初期化方法
      • 5.4.6 「L3GD20」で角速度を計測する方法
    • 5.5 デジタル複合センサー
      • 5.5.1 9軸(加速度・角速度・磁場の強さ)センサー「MPU-9250」
      • 5.5.2 「MPU-9250」の接続方法
      • 5.5.3 「MPU-9250」のレジスタアドレス
      • 5.5.4 「MPU-9250」の初期化方法
      • 5.5.5 加速度・角速度・磁場の強さの測定方法
  • 第6章 Bluetoothを用いた無線通信の方法
    • 6.1 Bluetoothの基礎知識
      • 6.1.1 Arduinoで利用可能な無線通信規格
      • 6.1.2 Bluetoothの歴史とバージョン
      • 6.1.3 Bluetoothの通信距離規格:クラス
      • 6.1.4 Bluetoothの通信手順 :プロファイル
      • 6.1.5 代表的なプロファイル
      • 6.1.6 Bluetoothのネットワーク:ピコネット
      • 6.1.7 Bluetoothの機器認証:ペアリング
    • 6.2 Bluetoothモジュールの概要
      • 6.2.1 BluetoothモジュールRN-42の概要
      • 6.2.2 RN-42使用Bluetooth無線モジュール評価キットの概要
      • 6.2.3 RN-42使用Bluetooth無線モジュール評価キットの仕様
      • 6.2.4 RN-42の使用例
    • 6.3 Bluetoothモジュールの動作確認をしよう
      • 6.3.1 評価キットの準備
      • 6.3.2 パソコンでモジュールを利用するための初期設定
      • 6.3.3 Tera Termのインストール
      • 6.3.4 評価キットの動作チェック
      • 6.3.5 RN-42の機能設定
    • 6.4 パソコン・Arduino間の無線通信
      • 6.4.1 パソコン・Arduino間の無線通信の概念
      • 6.4.2 テストボードの作成
      • 6.4.3 動作確認用プログラム
      • 6.4.4 動作確認の実行
    • 6.5 Arduino - Arduino間の無線通信
      • 6.5.1 Arduino - Arduino間の無線通信の概念
      • 6.5.2 マスター・スレーブの設定
      • 6.5.3 テストボードの配線の変更
      • 6.5.4 ソフトウェアシリアルを用いたシリアル通信プログラム
      • 6.5.5 通信の確認
  • 第7章 デジタル百葉箱の開発
    • 7.1 ウェブ最新技術HTML5の紹介
      • 7.1.1 ウェブ最新技術HTML5について
      • 7.1.2 HTML5で2次元グラフ描画
      • 7.1.3 2次元グラフ描画HTML文書の解説
      • 7.1.4 2次元グラフ描画プログラムの解説
      • 7.1.5 様々な2次元グラフ描画の実行例
    • 7.2 ウェブサーバ構築 Node.jsの導入
      • 7.2.1 ArduinoとHTML5の連携方法
      • 7.2.2 Node.jsのインストール
      • 7.2.3 HTTPサーバーの立ち上げ
      • 7.2.4 外部定義されたファイルを返す方法
      • 7.2.5 応答するHTMLファイルの切り替え
      • 7.2.6 グラフ描画のためのサーバープログラム
    • 7.3 Arduinoとウェブサーバーとの連携
      • 7.3.1 Socket.ioモジュールのインストール
      • 7.3.2 Socket.ioモジュールの動作確認
      • 7.3.3 一対多のデータ送受信(ブロードキャスト)
      • 7.3.4 Serial Portモジュールの導入
      • 7.3.5 ウェブブラウザでAruduinoボード13ピンLEDのオン/オフ制御
    • 7.4 デジタル百葉箱の作成
      • 7.4.1 計測データの転送方法:Arduino → サーバー → ウェブブラウザ
      • 7.4.2 計測データの時系列データのリアルタイムグラフ描画
      • 7.4.3 複数センサー計測データの取り扱い方法
      • 7.4.4 デジタル百葉箱ビューアーの開発
      • 7.4.5 デジタル百葉箱の具体例
  • 第8章 仮想現実(VR)アプリの開発手法
    • 8.1 3次元コンピュータ・グラフィックスの基礎
      • 8.1.1 HTMLによる3次元コンピュータ・グラフィックス「WebGL」
      • 8.1.2 3次元グラフィックスの基本構造
      • 8.1.3 透視投影カメラのパラメータ
      • 8.1.4 位置座標の指定方法(positionプロパティ)
      • 8.1.5 姿勢の指定方法(rotaitionプロパティ)
      • 8.1.6 任意軸回転(quaternionプロパティ)
    • 8.2 加速度センサー値を仮想現実に取り込む方法
      • 8.2.1 センサー値をHTML5で取得までの確認
      • 8.2.2 加速度データから位置座標の計算方法
      • 8.2.3 加速度センサー値から重力加速度を除去する方法
      • 8.2.4 加速度センサーで仮想空間内の物体の上方向を制御
      • 8.2.5 加速度センサーで制御する平面上を転がる球体
    • 8.3 ジャイロセンサー値を仮想現実に取り込む方法
      • 8.3.1 ワールド座標系における任意軸回転
      • 8.3.2 ジャイロセンサーでティーポットの姿勢制御
      • 8.3.3 ティーポットの上方向の補正
    • 8.4 一人称視点ゲームの開発手法
      • 8.4.1 仮想現実の背景の設定方法
      • 8.4.2 外部モデリングデータの読み込み
      • 8.4.3 一人称視点用センサー値を用いたカメラ制御
      • 8.4.4 ヘッドマウントディスプレイ向けステレオ用カメラの実装
      • 8.4.5 バーチャル・ボクシングゲーム「Virtual Stress Fighter」の紹介
  • 第9章 世界第一位アプリ「どこでも茶道」ができるまで
    • 9.1 私と茶道
      • 9.1.1 茶道とは
      • 9.1.2 裏千家茶道のお茶の点て方
      • 9.1.3 個人的に茶道を学ぶ上で難しいと感じたこと
      • 9.1.4 お茶の味を決める要素として着目した点
    • 9.2 お茶の味と運動の関係を定量化する実験
      • 9.2.1 お茶の味のポイント(1) まろやかさ:茶筅の速さの評価
      • 9.2.2 お茶の味のポイント(2) 泡のきめ細やかさ:茶筅の動きの直線性の評価
      • 9.2.3 お茶の味のポイント(3) 均一な濃さ:角速度の評価
      • 9.2.4 お茶の味のポイント(4) 適切な温度:お茶の温度の評価
    • 9.3 「どこでも茶道」ver.1(有線バージョン)の開発
      • 9.3.1 有線アプリの実現に必要な条件の整理
      • 9.3.2 加速度センサーの選定
      • 9.3.3 ジャイロセンサーの選定
      • 9.3.4 温度センサーの選定と予備実験
      • 9.3.5 システム構成(「どこでも茶道」ver.1)
      • 9.3.6 センサーの配置方法の設計
      • 9.3.7 採点方法へのアイデア
      • 9.3.8 「どこでも茶道」ver.1の完成
    • 9.4 「どこでも茶道」ver.2(無線バージョン)の開発
      • 9.4.1 無線化に必要な要件とセンサーの選定
      • 9.4.2 電源の選定
      • 9.4.3 「どこでも茶道」ver.2のシステムダイアグラム
      • 9.4.4 アプリver.2(無線バージョン)のまとめ
    • 9.5 国際ナノ・マイクロアプリケーションコンテストの報告
      • 9.5.1 国際ナノ・マイクロアプリケーションコンテストとは
      • 9.5.2 デモンストレーションとプレゼンテーション
      • 9.5.3 開発を通じて学んだこと


タグ: ,

▲このページのトップNPO法人 natural science トップ

関連記事

TOPICS







▲このページのトップNPO法人 natural science トップ