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.

Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ

745 views

Published on

JJUG CCC 2016 Fallでの発表です。
社内のトイレ空室管理システムを作ってみました。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ

  1. 1. Pi4Jで簡単! ラズパイでトイレ空室管理システムを つくってみたよ JJUC CCC 2016 FALL 梶栗 芳夫 #ccc_l10
  2. 2. 目次  自己紹介  開発きっかけ  システム構成紹介 (pi4j,LastaFlute)  DEMO  終わりに
  3. 3. 自己紹介  梶栗芳夫 (かじくり よしお)  U-NEXT (動画配信サービス) 新卒2年目 サーバサイドエンジニア 大学院を半年で休学後、一年間放浪。 プログラミング未経験ながら、開発部初の新卒?社員としてU-NEXTに入社。 サーバサイドのエンジニアとして、先輩方に揉まれながら日々奮闘中。
  4. 4. 開発のきっかけ  jfluteさんのブログ(DBFluteのメインコミッター)  破片プログラマの悲しみ  既存の大きなシステムでの実装 → 全体の一部(破片)だよね → 0から考える筋肉も大事だぜ → それに無自覚で、壁にぶつかる悲しみ。。。 → 小さくてもいいので、自分で考えて作ったみたら? http://d.hatena.ne.jp/jflute/20160330/fragramming
  5. 5. ああ、 破片プログラマ予備軍じゃん。。。 何かつくってみたいなー
  6. 6. トイレからIoTの流れ  IoT(Internet of Toilet) Microsoft Worldwide Partner Conference 2016  トイレ「空いてます」がスマホでわかるー富士 通九州システムズが開発 (日刊工業新聞2016 年6月2日)  トイレの空き状況、IoTで把握 伊藤忠系な ど開発 (日本経済新聞2016年10月14日)
  7. 7. トイレ空き情報システム 作ってみよう!
  8. 8. トイレのスペック  1フロアに2個室  利用時以外はドアは開い ている  人が一定時間いないと電 気が消える  ウォッシュレット付き  立ち上がると、自動で水 が流れる  ペーパーは2枚組
  9. 9. 空室の検知方法は?  トイレの明かりで検知 => 光センサー  トイレの音で検知 => 音センサー  ドアと壁の距離で検知 => 距離センサー  ドアと壁の接地で検知 => 磁気スイッチ
  10. 10. 空室の検知方法は?  トイレの明かりで検知 => 光センサー  トイレの音で検知 => 音センサー  ドアと壁の距離で検知 => 距離センサー  ドアと壁の接地で検知 => 磁気スイッチ
  11. 11. 空室の検知方法は? 実際に設置した様子
  12. 12. 空室の検知方法は? 実際に設置した様子
  13. 13. 空室の検知方法は? トイレはリラックススペース 目立たない方がいい!
  14. 14. 空室の検知方法は?  トイレに入った時の明かりで検知 => 光センサー  トイレの音で検知 => 音センサー  ドアと壁の距離で検知 => 超音波距離センサー  ドアと壁の接地で検知 => 磁気スイッチ
  15. 15. 必要だったもの一覧  ラズペリーパイ(Raspberry Pi3 Model B)  MircoSDカード(16G)  MicroUSBケーブル、電源  磁気スイッチ  ジャンパーコード (配線用)  HDMIケーブル(開発時モニター用)  USEマウス、USBキーボード(開発時入力用)
  16. 16. ラズペリーパイ (Raspberry Pi3 Model B)  手のひらサイズのコンピュータ  GPIO  出力電圧の制御や入力電圧 の読みとり可能なピン  全部で40ピン  その他  USB×4,HDMI,WiFi
  17. 17. Pi4j (ラズパイ用のライブラリ)  GPIOの入出力の制御ができる。  説明通りに実行すればOK。  http://pi4j.com/install.html  サンプルプログラムがとても親切。  今回利用したサンプルListenMultipleGpioExample.java
  18. 18. ListenMultipleGpioExample.java public static void main(String args[]) throws InterruptedException { // create GPIO controller final GpioController gpio = GpioFactory.getInstance(); // create GPIO listener GpioPinListenerDigital listener = new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { // display pin state on console System.out.println(“ --> GPIO PIN STATE CHANGE:“ + event.getPin()); } }; // provision gpio input pins with its internal pull down resistor enabled GpioPinDigitalInput[] pins = { gpio.provisionDigitalInputPin(RaspiPin.GPIO_00, PinPullResistance.PULL_DOWN), gpio.provisionDigitalInputPin(RaspiPin.GPIO_01, PinPullResistance.PULL_DOWN), }; // create and register gpio pin listener gpio.addListener(listener, pins); // keep program running until user aborts (CTRL-C) while(true) { Thread.sleep(500); } } GPIOのイベントを受けた時の動作 GPIOの初期化 GPIOコントローラに渡す
  19. 19. イベント=>HTTPリクエスト GpioPinListenerDigital listener = new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { // display pin state on console System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin()); executeGetRequest(DOOR_MAP.get(event.getPin().getPin()), event.getState().isLow()); } }; private static void executeGetRequest(String doorId, boolean status) { try { String baseURL = “http://IPアドレス:8080/door/insert"; URL url = new URL(baseURL + "?doorId=" + doorId + "&statusFlg=" + status); HttpURLConnection connection = null; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(“GET”); ・・・・・・・・・・・・・・ ここにメソッドを追加!!
  20. 20. システム概要 Pi4j GPIOでドアの 開閉状況を取得 Raspberry Pi磁気スイッチ 開 = > 電圧LOW 閉 = > 電圧HIGH AWS HTT P HTT P
  21. 21. DEMO Pi4j GPIOでドアの 開閉状況を取得 Raspberry Pi磁気スイッチ 開 = > 電圧LOW 閉 = > 電圧HIGH • iphoneでデザリング • ラズパイとMacを同じネットワークに • LastaFluteのTomcatBootでmacのローカルにサーバ立ち上げ • BotKitでSlackのBotを立ち上げ HTT P HTT P
  22. 22. 実際に設置した様子  電源
  23. 23. 実際に設置した様子  ラズパイと磁気スイッチ(開)
  24. 24. 実際に設置した様子  ラズパイと磁気スイッチ(閉)
  25. 25. 実際に設置した様子  座った時の視点
  26. 26. SlackのBOT  Botkitを利用  ‘空いてる’,‘あいてる’, ‘open’, ‘トイレ’に反応
  27. 27. おわりに  Pi4jで簡単にJavaでラズパイの制御ができる!  普段使い慣れている言語だと壁が低い。  業務外のプログラミンでしか学べないことがある。  “自分”でDB設計  “自分”で利用するAPIを作成、呼び出し  “自分”でリリース 皆さんも作ってみませんか???
  28. 28. U-NEXTは、 エンジニアを募集しています。 エンターメントが好きな人 動配信プラットフォームに興味がある人 技術的なことが好きな人 一緒に仕事をしましょう https://inside.unext.jp
  29. 29. ご静聴ありがとうございました。

×