Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20171206 d3 health_tech発表資料

352 views

Published on

20171206 d3 health_tech発表資料

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

20171206 d3 health_tech発表資料

  1. 1. 低気圧性偏頭痛悩むエンジニアに捧ぐ、 Health☓Tech 電⼦⼯作体験 Health × Tech on Raspberry Pi Zero W
  2. 2. アジェンダ 1. はじめに 1-1. ⾃⼰紹介 1-2. 本⽇お話すること 2. 準備フェーズ 2-1. 達成したいこと 2-2. 使⽤する要素技術 2-3. 電⼦⼯作部品の調達
  3. 3. 3. ⼯作フェーズ 3-1. OS起動⽤microSDの準備 3-2. 周辺機器の接続 3-3. Raspberry Piの初期設定 3-4. OSの環境設定 3-5. 電⼦回路のセットアップ 3-6. SQLiteの環境構築 3-6. Go⾔語の環境構築 3-8. 外部サービスの登録 3-9. スクリプトの実装 3-10. 運⽤設定 アジェンダ
  4. 4. 4. 総括 4-1. 達成できたこと 4-2. 所感 アジェンダ
  5. 5. 1-1.⾃⼰紹介 ⽒名:益⼦ 徹 経歴: ・2002年 新卒で中堅SIerに⼊社、テキストマイニングツールの パッケージソフト開発から⼤⼿製造業、サービス業向けの受託開発 に従事。 ・2013年 株式会社ビズリーチに⼊社、弊社サービスのDBA,インフ ラからスマートフォンアプリケーションの製造・運⽤、開発部隊の マネジメントまで幅広く担当。 1.はじめに
  6. 6. 1­2.本⽇お話すること ⾼層階オフィスにて働いていると低気圧性偏頭痛の影響を受けやす いせいか、⾃⾝を含めた数名のチームメンバーから頭痛による体調 不良の訴えが増加しました。 偏頭痛の事前対処をテーマとした電⼦⼯作について、本⽇はお話さ せていただきます。 1.はじめに
  7. 7. 2­1.達成したいこと 今回の電⼦⼯作で達成する内容について • オフィス内の⼤気圧の変化をロギング • ⼤気圧の時系列変化量から気圧が急激に下がっていることを検知 • 偏頭痛に悩むメンバーのスマートフォンに気圧が急激に下がっていることを知らせ るプッシュ通知を送信 →偏頭痛の対処を⾏う(頭痛薬を飲む、⾼層階から低い場所に移動して順応する。) 2.準備フェーズ
  8. 8. 2­2. 使⽤する要素技術 ・Go⾔語を使⽤した簡単なスクリプト -「go1.9.2.linux-armv6l.tar.gz」を使⽤ ・I2Cを活⽤したセンサー操作 - robotics/IoT framework ( https://gobot.io/ )を使⽤ ・Raspberry Pi zero w の初期セットアップ ・Linux(Rasbian)上での簡単なコマンド操作 ・SQLiteに対するデータ書き込み - github.com/mattn/go-sqlite3 を使⽤ ・外部サービスを利⽤した通知処理 - Pushbullet (スマホやPCをはじめとしたデバイス間でリアルタイムに 情報交換する仕組みを提供するサービス) 2.準備フェーズ
  9. 9. 2­3. 電⼦⼯作部品の調達 ⼯作に必要なもの ・PC (MAC推奨 ※Windows可) ・Pushbullet が稼働する Android or iOS スマートフォン端末 ・ディスプレイ or TV (HDMI端⼦搭載) ・接続可能な無線LANネットワーク ・キーボード (USB接続) ・マウス (USB) ・mini-HDMI変換コネクタ/ケーブル ・USBハブ (microUSB オス端⼦, セルフパワー型) ・USB対応電源アダプタ (2A以上) ・ハンダとハンダゴテ ・microSDカード (16GB 1,000円程度) ・Raspberry Pi zero w ⼀式 (次ページ) 2.準備フェーズ
  10. 10. 2­3. 電⼦⼯作部品の調達 Raspberry Pi zero w ⼀式の購⼊ 購⼊先 ケ:RS正規代理店 Raspberry Pi Shop by KSY ( https://raspberry-pi.ksyic.com/ ) ス:SWITCHSCIENCE ( https://www.switch-science.com/ ) ア:amazon.co.jp ( https://www.amazon.co.jp/ ) 秋:秋⽉電⼦通商 ( http://akizukidenshi.com/catalog/default.aspx ) 2.準備フェーズ
  11. 11. 2­3. 電⼦⼯作部品の調達 Raspberry Pi zero w ⼀式の購⼊ 部品 • Raspberry Pi Zero W / 1,296円(ケ) • Piケース Pibow for Zero W ⾚ / 864円(ケ) • GPIO ハンマーヘッダー メス / 388円 (ス) • BME280 ⼤気圧/温度/湿度センサーブレイクアウト / 550円(ア) • ブレッドボード・ジャンパーワイヤ / 300円(秋) • ブレッドボード・ジャンパーコード(オス-オス)(10cm) / 180円(秋) • ユニバーサル回路ケース(Low, Smoke) ブレッドボード付-3ple Decker / 980 円(ア) 合計:4,558円(送料別) 今回のテーマ上は不要だが、使⽤している部品 • 透明なブレッドボード(⾚) / 617円(ス) • AS3935 雷センサーモジュール / 1,480円(秋) 2.準備フェーズ
  12. 12. 3-1. OS起動⽤microSDの準備 Raspberry Pi⽤のOSは、NOOBS と イメージの2種類の形式で⽤ 意されていますが、今回はイメージファイルを採⽤。 (1).OSイメージのダウンロード 下記のURLから OSイメージファイル(201X-XX-XX-raspbian-jessie.zip)をダ ウンロード https://downloads.raspberrypi.org/raspbian_latest ※今回は、Raspbian(2017-07-05-raspbian-jessie.zip)を採⽤。 上記リンクは、最新版がダウンロードされます。 3.⼯作フェーズ
  13. 13. 3-1. OS起動⽤microSDの準備 (2). 「SDカードフォーマッター」のダウンロード 下記のURLからツールをダウンロードしてPCへセットアップ https://www.sdcard.org/jp/downloads/formatter_4/ ※セットアップ⽅法は、ダウンロードサイトのマニュアル参照 https://www.sdcard.org/jp/downloads/formatter_4/SD_CardFormatter5 UserManualJP_v0101.pdf 3.⼯作フェーズ
  14. 14. 3-1. OS起動⽤microSDの準備 (3). microSDへの書き込み ・ 「SDカードフォーマッター」を使⽤してmicroSDカードを初期化 ・OSイメージファイル(201X-XX-XX-raspbian-jessie.zip)を解凍 推奨ツール: https://theunarchiver.com/ ・ターミナルを使⽤してOSイメージをSDカードに書き込む 3.⼯作フェーズ $ cd <OSイメージパス> $ diskutil list ## PCで認識できているmicroSDカードのデバイスを確認 $ diskutil unmountdisk /dev/disk<番号> ## microSDデバイスパスを指定 $ sudo dd bs=1m if=201X-XX-XX-raspbian-jessie.img of=/dev/disk<番号>
  15. 15. 3-2. 周辺機器の接続 2-4に記載された 「⼯作に必要なもの」を 接続。 最後に電源を繋げて下さい。 3.⼯作フェーズ ランプ 点灯
  16. 16. 3-3. Raspberry Piの初期設定 (1). 電源をつなげる (2). GUI画⾯左上のラズベリーパイ アイコンを押下。 「Preferences」→「Raspberry Pi Configuration」を選択。 設定ツール起動。 (3).パスワードの変更 設定ツールの「System」タブ -「Change Password」を押下。 現在のパスワードと新しいパスワードを⼊⼒して「OK」ボタンを押下。 (4).ロケールの変更 設定ツールの「Localisation」タブ -「Set Locale」を押下。 Language に「ja (Japanese)」、Country に「JP (Japan)」、 Character Set に「UTF-8」を設定して「OK」ボタンを押下。 3.⼯作フェーズ
  17. 17. 3-3. Raspberry Piの初期設定 (5).タイムゾーンの変更 設定ツールの「Localisation」タブ -「Set Timezone」を押下。 Area に「Asia」、 Location に「Tokyo」を設定して「OK」ボタンを押下。 (6).キーボード配列の変更 設定ツールの「Localisation」タブ -「Set Keybord」を押下。 接続しているキーボードの Country、Variant を設定して 「OK」ボタンを押下。 (7).無線LANの利⽤場所の変更 設定ツールの「Localisation」タブ -「Set WiFi Country」を押下。 Country に「JP Japan」を設定して「OK」ボタンを押下。 3.⼯作フェーズ
  18. 18. 3-3. Raspberry Piの初期設定 (8). Raspberry Piの再起動 設定ツールの「OK」ボタンを押下。 リブート確認画⾯が表⽰される。「OK」ボタンを押下。 (9). 無線LANの設定 ターミナル起動 3.⼯作フェーズ
  19. 19. 3-3. Raspberry Piの初期設定 パスフレーズを暗号化 3.⼯作フェーズ $ sudo wpa_passphrase Your_SSID Your_PASSPHRASE ## return network={ ssid="Your_SSID “ #psk="Your_Passphrase“ psk=xxxxxxxxxxxxxxxxx }
  20. 20. 3-3. Raspberry Piの初期設定 テキストエディタで設定ファイルを上記の内容(コメント⾏以外)を追記して保存。 3.⼯作フェーズ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="Your_SSID ” psk=xxxxxxxxxxxxxxxxx key_mgmt=鍵交換方式 }
  21. 21. 3-3. Raspberry Piの初期設定 ネットワーク設定の適⽤。 3.⼯作フェーズ $ sudo ifdown wlan0 $ sudo ifup wlan0 ## 無線LANの接続情報確認 $ iwconfig $ ifconfig
  22. 22. 3-3. Raspberry Piの初期設定 (10). パッケージとファームウェアのアップデート ターミナル起動 3.⼯作フェーズ ## 安定版のアップデート ## パッケージ情報をサーバから取得 $ sudo apt-get update ## パッケージのアップデート実施 $ sudo apt-get upgrade ## 再起動 $ sudo shutdown -r now
  23. 23. 3-3. Raspberry Piの初期設定 3.⼯作フェーズ ##パッケージ構成の変更に追随してアップグレードを実施する場合 ## パッケージ情報をサーバから取得 $ sudo apt-get update ## (通常不要)パッケージのアップデート実施 $ sudo apt-get dist-upgrade ## 再起動 $ sudo shutdown -r now
  24. 24. 3-3. Raspberry Piの初期設定 3.⼯作フェーズ ## 最新版のファームウェアのアップデート ## 非推奨 kernelのバージョンアップ含む場合がある $ sudo apt-get install rpi-update $ sudo rpi-update ## 再起動 $ sudo shutdown -r now
  25. 25. 3-4. OSの環境設定 (1). ユーザ作成 ターミナル起動 3.⼯作フェーズ ## root ユーザのパスワード変更 $ sudo passwd root ## 新規ユーザ macho作成 $ sudo adduser macho ## 新規ユーザを sudo グループに追加 $ sudo gpasswd -a macho sudo ## 新規ユーザを i2c グループに追加 $ sudo gpasswd -a macho i2c ## 初期設定ユーザ pi を sudo グループから除去 $ sudo gpasswd -d pi sudo
  26. 26. 3-4. OSの環境設定 (2). SSH, I2Cの変更 GUI画⾯左上のラズベリーパイ アイコンを押下。 設定ツールの「Interfaces」タブ を押下。 「SSH」を「enable」に変更する。 「I2C」を「enable」に変更する。 「OK」ボタンを押下。 リブート確認画⾯が表⽰される。「OK」ボタンを押下。 再起動後、MACの「ターミナル」から以下のコマンドを発⾏し、 接続できることを確認。 3.⼯作フェーズ $ slogin macho@IPアドレス
  27. 27. 3-5. 電⼦回路のセットアップ I2Cとは フィリップス社が開発したシリアル通信⽅式の規格。 機器やICなどを相互に接続し、信号をやり取りするのに使⽤される。 データのやり取りを⾏う「SDA(シリアルデータ)」とIC間でタイミングを合わ せるのに利⽤する「SCL(シリアルクロック)」の2本線を利⽤してお互いのデー タを受け渡す。 実際には、デバイスを動作させる為の電源と「GND(グランド)」を含めた4本 の線で接続することになる。 3.⼯作フェーズ
  28. 28. 3-5. 電⼦回路のセットアップ GPIO(General Purpose Input/Output)とは デジタル⼊出⼒などを⾏う端⼦。 I2Cの端⼦としても利⽤可能。 Raspberry Pi Zero W は端⼦が搭載されていない為、 購⼊後、端⼦を取り付け(ハンダ付け)る必要がある。 3.⼯作フェーズ
  29. 29. 3-5. 電⼦回路のセットアップ Raspberry Pi Zero W のピンヘッダの取り付け 3.⼯作フェーズ
  30. 30. 3-5. 電⼦回路のセットアップ BME280⼤気圧/温度/湿度センサーブレイクアウト のはんだ付け 3.⼯作フェーズ
  31. 31. 3-5. 電⼦回路のセットアップ 基盤配置 3.⼯作フェーズ
  32. 32. 3-5. 電⼦回路のセットアップ センサーごとの配線 RaspberryPiとセンサーモジュールとの接続は次の通りです。 RaspberryPiのGPIOにセンサーを接続する場合は、 必ず、RaspberryPiの電源を落とした状態で実施下さい。 接続後、電源を繋いでOSを起動して下さい。 3.⼯作フェーズ
  33. 33. 3-5. 電⼦回路のセットアップ OS上の設定確認 「3-4. OSの環境設定」にて変更したI2Cが有効になっていることを確認 3.⼯作フェーズ ## I2Cのスレーブアドレスを確認する $ sudo i2cdetect 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --
  34. 34. 3-5. 電⼦回路のセットアップ I2Cのチャネルを変更する場合 下記の内容を変更するが今回は必要なし。 /boot/config.txt 3.⼯作フェーズ
  35. 35. 3-6. SQLiteの環境構築 (1). SQLiteのインストール 3.⼯作フェーズ ## sqlite3パッケージのインストール $ sudo apt-get install sqlite3 ## sqlite3のバージョン確認 $ sqlite3 --version 3.8.7.1 2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221 ## sqlite3 DBファイル作成 $ sqlite3 sensor.db
  36. 36. 3-6. SQLiteの環境構築 (2). テーブル作成 3.⼯作フェーズ -- BME280センサーデータ格納先テーブル CREATE TABLE BME280 ( BME280_ID INTEGER PRIMARY KEY, PRESSURE REAL, -- 気圧 TEMPERATURE REAL, -- 気温 HUMIDITY REAL, -- 湿度 INS_DATETIME_TEXT TEXT NOT NULL UNIQUE, INS_DATETIME_INTEGER INTEGER NOT NULL UNIQUE ); -- BME280テーブルのインデックス作成 CREATE INDEX IX_BME280_DATETIME_TEXT ON BME280 (INS_DATETIME_TEXT DESC);
  37. 37. 3-6. SQLiteの環境構築 (2). テーブル作成 3.⼯作フェーズ -- アラートデータ格納先テーブル CREATE TABLE ALERT ( CODE TEXT PRIMARY KEY, CONDITION TEXT NOT NULL, UPD_DATETIME_TEXT TEXT NOT NULL UNIQUE ); -- 初期データ投入 INSERT INTO ALERT( CODE, CONDITION, UPD_DATETIME_TEXT ) VALUES ( ’DEP’, ’false’, ‘2017-11-30 00:00’ );
  38. 38. 3-7. Go⾔語の環境構築 (1). Goのインストール 3.⼯作フェーズ ## インストーラのダウンロード $ wget https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-armv6l.tar.gz ## インストーラーの解凍 $ sudo tar -C /usr/local -xzf go1.9.2.linux-armv6l.tar.gz
  39. 39. 3-7. Go⾔語の環境構築 (2). 環境設定 /usr/local/go/binにPATHを通す。 .bashrcファイルの末尾に export PATH=$PATH:/usr/local/go/bin を追加します。 3.⼯作フェーズ ## .bashrc ファイルへの追記内容 export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:$GOPATH/bin
  40. 40. 3-7. Go⾔語の環境構築 (3). 動作確認 バージョン確認。 ビルド可否の確認。 3.⼯作フェーズ $ go version go version go1.9.2 linux/arm $ nano hello.go -------------------------------------------- package main import "fmt" func main() { fmt.Printf("Hello RaspberryPi Go.¥n") } -------------------------------------------- $ go run hello.go Hello RaspberryPi Go.
  41. 41. 3-8. 外部サービスの登録 (1). 外部サービスを利⽤するにあたって 今回、スマートフォンにプッシュ通知を送信する要件については、 コスト削減の為、PushBullet という外部サービスを活⽤することに いたしました。 (2). https://www.pushbullet.com/ にアクセス (3). PushBullet にてアカウントを登録 (4). APIのアクセストークンを取得 WEB版 PushBulletを開き、連携しているアカウントでログイン。 左メニューの「Settings」→「Account」→「Create Access Token」の 順に押下。 英数字記号を含んだアクセストークンが表⽰されるのでコピーしておく。 (5). スマートフォンにPushBulletをインストール 登録したアカウントでログインしておく 。 3.⼯作フェーズ
  42. 42. 3-9. スクリプトの実装 (1). センサーを制御するライブラリのインストール 3.⼯作フェーズ ## gobot ライブラリのダウンロードとインストール $ go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/raspi ## go-sqlite3 ライブラリのダウンロードとインストール $ go get github.com/mattn/go-sqlite3 && go install github.com/mattn/go-sqlite3
  43. 43. 3-9. スクリプトの実装 (2). 処理内容について 1. 毎分BME280センサーから気圧データを取得する。 2. 取得した気圧データをSQLiteに保存する。 3. 毎分BME280センサーから取得した気圧データと3時間前に取得した気圧デー タを⽐較する。 4. ⽐較結果が4hpa以上の場合と4hpa以上の気圧低下が収まった場合のみ、 PushBulletの通知を発⾏する。 ※気圧の⽐較基準値を4hpaとしているのは、過去の経験則に基づく。 3.⼯作フェーズ
  44. 44. 3-9. スクリプトの実装 (3). 実装 3.⼯作フェーズ ## bme280.go, push.sh 参照
  45. 45. 3-10. 運⽤設定 (1). センサー操作スクリプトを定期実⾏させる 3.⼯作フェーズ ## 毎分スクリプトを起動する cron の設定 $ crontab –e */1 * * * * /home/macho/go/bin/bme280
  46. 46. 4-1. 達成できたこと 低気圧性偏頭痛の影響を受けそうな 陽気の⽇に右図のスマートフォン画⾯の ような通知が受け取れております。 4.終わりに
  47. 47. 4-1. 達成できたこと 当初に設定した下記の達成したかったことは、全て達成。 • オフィス内の⼤気圧の変化をロギング • ⼤気圧の時系列変化量から気圧が急激に下がっていることを検知 • 偏頭痛に悩むメンバーのスマートフォンに気圧が急激に下がっていることを知 らせるプッシュ通知を送信 4.終わりに
  48. 48. 4.2.所感 実際にやってみて思うこと • 今回は将来を⾒据えて、Go⾔語でスクリプトを実装したが、サンプル実装は pythonで実施するほうが圧倒的に楽である為、試作ベースのセンサー利⽤は、 pythonで実装することをお勧めします。 ・便利なライブラリが豊富 ・サンプルモジュールを取得しやすい ・雑な作りでも良ければ、⾔語仕様的に実装量が少なくて済むことが多い • Raspberry Pi Zero W について、低価格なシングルボードコンピュータという 売り⽂句をよく⽿にするが、やることの幅を広げると意外とお⾦がかかる。 4.終わりに
  49. 49. 4.2.所感 今後について • 現状は試験運⽤中の為、今後は、本格的に職場のチームメンバーへ展開してい く予定。 • 永続して仕組みを動かし続ける運⽤⾯の機能開発が漏れている為、その対応を 実施予定。 • 今回作成したものの量産化、新たなセンサーの搭載を検討中。 4.終わりに

×