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.

Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム

17,774 views

Published on

PyCon JP 2014 days1 で発表した資料です

Published in: Technology
  • Be the first to comment

Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム

  1. 1. Python, Raspberry Pi, Arduinoで作る 消費電力モニタリングシステム Junichi Kakisako a.k.a. kironono 2014/09/13 (PyCon JP 2014)
  2. 2. 自己紹介 • @kironono (きろのの) ✦ http://kironono.com/ • きろ字のなかの人 ✦ $ sudo apt-get install ttf-kiloji • 好きなたべもの ✦ いちご 2
  3. 3. 自己紹介 • 普段はWebアプリの受託開発してます • 電子回路は趣味でやってます • 今日しない話 ✦ 回路設計 ✦ 電気特性 ✦ 半田ごての妙技 • これからハードウェア方面にも手をだしてみようかな、 という方々の参考になれば幸いです 3
  4. 4. 1. はじめに(仮) 4
  5. 5. ちょっと聞いてくださいよ、 奥さん 5
  6. 6. ハードウェアとか 6
  7. 7. 流行ってるらしいじゃないの。 7
  8. 8. フィジカル・コンピューティング とか 8
  9. 9. モノのインターネッツ(IoT) とか 9
  10. 10. オープンソースハードウェア とか 10
  11. 11. PythonでWeb開発やってきたけど、 ハードウェアも手を出したいな。 という方に。 11
  12. 12. 2. Raspberry PiとArduino 12
  13. 13. まぁ、よくある組み合わせ だと思います。 13
  14. 14. 「あ、また?」 「ですよね (^_^;)」 みたいな。 14
  15. 15. どちらか一つくらいは お手元にありますよね!? 15
  16. 16. Raspberry Pi 16 • Raspberry Pi Foundationが教育用と して開発 • ARMプロセッサが乗ったカードサイ ズのコンピュータ • ARM11 700MHz, 256MBのメモリ • HDMI、オーディオ、USB、LAN端子 などひと通りのインターフェイス搭載 • ディスプレイ、キーボード、マウス、 ネットワークにすぐ繋げられる • GPIO、CSI、DSI等の入出力端子
  17. 17. Raspberry Pi でできること 17 • 普通のLinuxが動く ✦ Raspbian (Debian) ✦ Pidora (Fedora) ✦ Arch Linux • もちろんPythonも動く • PiGRRL(ゲームボーイ) • Automated Home Brewing(ビール醸 造) • RAPIRO(組立式ロボット)
  18. 18. でも、お高いんでしょう? 18
  19. 19. そんなことないんです! 19 • 現在3モデルが販売中 ✦ Raspberry Pi Model A ✦ Raspberry Pi Model B ✦ Raspberry Pi Model B+ • $25~$35 (3,940円) • ライバル達 ✦ HummingBoard ($45) ✦ BeagleBone Black ($45)
  20. 20. 必要な周辺機器 20 • USBケーブル (A-microB) • USB電源 (700mA以上供給 できること) • SDカード (4GB以上) • マウス、キーボード • ディスプレイ • シリアルケーブル(あると 嬉しい)
  21. 21. Arduino 21 • オープンソースハードウェア • 開発環境、ハードウェア、言語、合わ せてArduino • 設計図(Eagleファイル)も公開されてい るので、自分で作れる • もちろんハードウェアを購入できる • マイコン: ATMega328-P • フラッシュメモリ: 32KB • デジタルIO: 14本 • アナログInput: 6本 • 5Vで駆動
  22. 22. Arduino IDE 22 • クロスプラットフォーム (Java) ✦ Windows ✦ Mac OS ✦ Linux • エディタ、コンパイラー、 スケッチ転送、シリアル モニタ • 豊富なサンプル付き
  23. 23. Lチカ (HelloWorld) 23 int led = 13; ! void setup() { pinMode(led, OUTPUT); } ! void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
  24. 24. でも、お高いんでしょう? 24
  25. 25. そんなことないんです! • Arduinoにはファミリーがいっぱいいる ✦ Arduino Uno (3,024円) ✦ Arduino Leonardo(2,916円) • …とは言ったもののあまり安くないような • 自分で作ることができます!( ー`дー´)キリッ 25
  26. 26. Arduino互換回路 26 • いらないものを取っ払っ て… ✦ 電源安定化回路 ✦ USBシリアル変換 ✦ 拡張用の各種回路 • 必要最小限にする
  27. 27. ワンチップArduinoもどき 27 • ATMega328-P: 250円 • 積層セラミック・コン デンサ: 3×15円 • セラロック: 40円 • 抵抗: 4×1円 • LED: 25円 364円
  28. 28. Arduinoできないこと • Python 動かない • メモリをたくさん使う処理 • 高負荷な処理(画像処理とか) 28
  29. 29. 3. Arduinoとおしゃべりする 29
  30. 30. シリアル通信 30 • ここではRS-232C • 簡素なものは、TX, RX, GND があればよい
  31. 31. Firmata • Firmata (ふぁるまーた) ✦ Arduinoに書き込む • python-firmata (Pythonライブラリ) • これを使えば、自分で書くコードはPythonで完結できる • が、基本的な操作(例えば入出力ピンのON/OFF)しか できない • もちろん拡張することは可能だが、それだとPython以外 を書くことになる 31
  32. 32. pySerial • Pythonからシリアル通信をおこなうためのモジュー ル • PyPIから取得可能 • ファイル操作ライクなAPIで操作可能 read, write, readline 32
  33. 33. pySerial 33 import serial ! # シリアルポートを開く s = serial.Serial(‘/dev/ttyusbserial’, 19200) ! # シリアルポートから改行まで読み込み line = s.readline() ! # シリアルポートに書き込み s.write(“hello”) ! # シリアルポートを閉じる s.close()
  34. 34. 4. 電力を見える化しよう 34
  35. 35. 電力モニタを作る 35
  36. 36. 使うもの • 電流センサー ✦ 流れている電流を測る • Arduino (自作Arduino互換) ✦ センサーを制御する • Raspberry Pi (Model: B) ✦ Arduinoと通信する ✦ Webアプリケーションをサーブする ✦ データを蓄積する • USB接続の無線アダプタ ✦ Raspberry Piを無線LANに接続する 36
  37. 37. 電流センサ 37 • クランプ型の電流セン サ CTL-10-CLS • 最大80Aまで測定可能 • センサを貫通する電流 の大きさに合わせて、 出力電圧が変化
  38. 38. Raspberry Pi (Raspbian) 構成図 38 Browser Redis Pyramid MySQL Serial port / Client Arduino Sensor WebSocket Subscribe Publish USB - Serial Adapter
  39. 39. 制作手順 • センサーの値を読む回路を考える • ブレッドボードに実装する • Arduinoのスケッチを書いて、Arduinoに書き込む • シリアル通信できる端末でテスト • ユニバーサル基板に実装する • シリアル通信するPythonコードを書く • Webアプリを書く • テスト • Raspberry Pi にデプロイ • テスト ハードウェア ソフトウェア 39
  40. 40. Arduino側の処理 • センサーの電圧をA/D変換 -> 電流がわかる • 検出した電流から電力を計算 • 1秒間 (W = ジュール毎秒毎秒) の平均をとる • シリアルポートを通してRaspberry Piに送信 40
  41. 41. Raspberry Pi側の処理 • Arduino連携部分 ✦ シリアルポートを開いて、データが到着するのを待つ ✦ 電力値を受け取ったら、RedisのPubSubにPublish ✦ MySQLにも書き込む • Webサーバー部分 ✦ WebSocketのsubscribe待ち受け ✦ RedisのPubSubをSubscribe、データを受け取ったら、WebSocketに emit ✦ Pyramid + gevent_socketio 41
  42. 42. 42
  43. 43. 43
  44. 44. Webアプリ 44
  45. 45. 分電盤に設置してみる 45 • クランプで挟むだけな ので、既存の設備を切 断したりする必要はな い • 第二種電気工事士の資 格は持ってます
  46. 46. デモ 46
  47. 47. 5. まとめ 47
  48. 48. まとめ • 入門に適しているツール群 ✦ Python ✦ Arduino ✦ Raspberry Pi • 現実世界とインタラクションを始めるためのツール が出揃っている 48
  49. 49. まとめ • オープンソースハードウェアの普及 • プロトタイピング環境の充実 49
  50. 50. ソースコードとか • Github https://github.com/kironono/homepower 50
  51. 51. 書籍とか • Raspberry Piクックブック (Make:PROJECTS) オライリージャパン - Simon Monk • Arduinoをはじめよう (Make:PROJECTS) オライリージャパン - Massimo Banzi • Arduinoをはじめようキット スイッチサイエンス 51
  52. 52. パーツとか • スイッチサイエンス http://www.switch-science.com/ • 秋月電子通商 http://akizukidenshi.com/ • マルツパーツ館 http://www.marutsu.co.jp/ 52

×