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

52
Python, Raspberry Pi, Arduinoで作る 消費電力モニタリングシステム Junichi Kakisako a.k.a. kironono 2014/09/13 (PyCon JP 2014)

description

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

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

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

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

Junichi Kakisako a.k.a. kironono 2014/09/13 (PyCon JP 2014)

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

自己紹介

• @kironono (きろのの) ✦ http://kironono.com/

•きろ字のなかの人 ✦ $ sudo apt-get install ttf-kiloji

•好きなたべもの ✦ いちご

2

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

自己紹介•普段はWebアプリの受託開発してます

•電子回路は趣味でやってます

•今日しない話

✦ 回路設計

✦ 電気特性

✦ 半田ごての妙技

•これからハードウェア方面にも手をだしてみようかな、という方々の参考になれば幸いです

3

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

1. はじめに(仮)

4

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

ちょっと聞いてくださいよ、奥さん

5

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

ハードウェアとか

6

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

流行ってるらしいじゃないの。

7

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

フィジカル・コンピューティングとか

8

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

モノのインターネッツ(IoT)とか

9

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

オープンソースハードウェア とか

10

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

PythonでWeb開発やってきたけど、ハードウェアも手を出したいな。 という方に。

11

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

2. Raspberry PiとArduino

12

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

まぁ、よくある組み合わせだと思います。

13

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

「あ、また?」 「ですよね (^_^;)」

みたいな。

14

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

どちらか一つくらいは お手元にありますよね!?

15

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

Raspberry Pi

16

• Raspberry Pi Foundationが教育用として開発

• ARMプロセッサが乗ったカードサイズのコンピュータ

• ARM11 700MHz, 256MBのメモリ

• HDMI、オーディオ、USB、LAN端子などひと通りのインターフェイス搭載

• ディスプレイ、キーボード、マウス、ネットワークにすぐ繋げられる

• GPIO、CSI、DSI等の入出力端子

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

Raspberry Pi でできること

17

• 普通のLinuxが動く

✦ Raspbian (Debian)

✦ Pidora (Fedora)

✦ Arch Linux

•もちろんPythonも動く

• PiGRRL(ゲームボーイ)

• Automated Home Brewing(ビール醸造)

• RAPIRO(組立式ロボット)

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

でも、お高いんでしょう?

18

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

そんなことないんです!

19

• 現在3モデルが販売中

✦ Raspberry Pi Model A

✦ Raspberry Pi Model B

✦ Raspberry Pi Model B+

• $25~$35 (3,940円)

• ライバル達

✦ HummingBoard ($45)

✦ BeagleBone Black ($45)

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

必要な周辺機器

20

• USBケーブル(A-microB)

• USB電源 (700mA以上供給できること)

• SDカード (4GB以上)

•マウス、キーボード

•ディスプレイ

•シリアルケーブル(あると嬉しい)

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

Arduino

21

•オープンソースハードウェア

•開発環境、ハードウェア、言語、合わせてArduino

•設計図(Eagleファイル)も公開されているので、自分で作れる

•もちろんハードウェアを購入できる

•マイコン: ATMega328-P

•フラッシュメモリ: 32KB

•デジタルIO: 14本

•アナログInput: 6本

• 5Vで駆動

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

Arduino IDE

22

•クロスプラットフォーム (Java)

✦ Windows

✦ Mac OS

✦ Linux

•エディタ、コンパイラー、スケッチ転送、シリアルモニタ

•豊富なサンプル付き

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

Lチカ (HelloWorld)

23

int led = 13; !void setup() { pinMode(led, OUTPUT); } !void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }

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

でも、お高いんでしょう?

24

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

そんなことないんです!

• Arduinoにはファミリーがいっぱいいる

✦ Arduino Uno (3,024円)

✦ Arduino Leonardo(2,916円)

• …とは言ったもののあまり安くないような

•自分で作ることができます!( ー`дー´)キリッ

25

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

Arduino互換回路

26

•いらないものを取っ払って…

✦ 電源安定化回路

✦ USBシリアル変換

✦ 拡張用の各種回路

•必要最小限にする

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

ワンチップArduinoもどき

27

• ATMega328-P: 250円

•積層セラミック・コンデンサ: 3×15円

•セラロック: 40円

•抵抗: 4×1円

• LED: 25円

364円

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

Arduinoできないこと

• Python 動かない

•メモリをたくさん使う処理

•高負荷な処理(画像処理とか)

28

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

3. Arduinoとおしゃべりする

29

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

シリアル通信

30

•ここではRS-232C

•簡素なものは、TX, RX, GND があればよい

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

Firmata

• Firmata (ふぁるまーた)

✦ Arduinoに書き込む

• python-firmata (Pythonライブラリ)

•これを使えば、自分で書くコードはPythonで完結できる

•が、基本的な操作(例えば入出力ピンのON/OFF)しかできない

•もちろん拡張することは可能だが、それだとPython以外を書くことになる

31

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

pySerial

• Pythonからシリアル通信をおこなうためのモジュール

• PyPIから取得可能

•ファイル操作ライクなAPIで操作可能read, write, readline

32

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

pySerial

33

import serial !# シリアルポートを開く

s = serial.Serial(‘/dev/ttyusbserial’, 19200) !# シリアルポートから改行まで読み込み

line = s.readline() !# シリアルポートに書き込み

s.write(“hello”) !# シリアルポートを閉じる

s.close()

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

4. 電力を見える化しよう

34

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

電力モニタを作る

35

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

使うもの•電流センサー

✦ 流れている電流を測る

• Arduino (自作Arduino互換)

✦ センサーを制御する

• Raspberry Pi (Model: B)

✦ Arduinoと通信する

✦ Webアプリケーションをサーブする

✦ データを蓄積する

• USB接続の無線アダプタ

✦ Raspberry Piを無線LANに接続する

36

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

電流センサ

37

•クランプ型の電流センサ CTL-10-CLS

•最大80Aまで測定可能

•センサを貫通する電流の大きさに合わせて、出力電圧が変化

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

Raspberry Pi (Raspbian)

構成図

38

Arduino Sensor

Browser Redis

Serial port / Client

Pyramid MySQLWebSocket

PublishSubscribe

USB - Serial Adapter

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

制作手順•センサーの値を読む回路を考える

•ブレッドボードに実装する

• Arduinoのスケッチを書いて、Arduinoに書き込む

•シリアル通信できる端末でテスト

•ユニバーサル基板に実装する

•シリアル通信するPythonコードを書く

• Webアプリを書く

•テスト

• Raspberry Pi にデプロイ

•テスト39

ハードウェア

ソフトウェア

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

Arduino側の処理

•センサーの電圧をA/D変換 -> 電流がわかる

•検出した電流から電力を計算

• 1秒間 (W = ジュール毎秒毎秒) の平均をとる

•シリアルポートを通してRaspberry Piに送信

40

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

Raspberry Pi側の処理• Arduino連携部分

✦ シリアルポートを開いて、データが到着するのを待つ

✦ 電力値を受け取ったら、RedisのPubSubにPublish

✦ MySQLにも書き込む

• Webサーバー部分

✦ WebSocketのsubscribe待ち受け

✦ RedisのPubSubをSubscribe、データを受け取ったら、WebSocketにemit

✦ Pyramid + gevent_socketio

41

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

42

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

43

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

Webアプリ

44

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

分電盤に設置してみる

45

•クランプで挟むだけなので、既存の設備を切断したりする必要はない

•第二種電気工事士の資格は持ってます

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

デモ

46

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

5. まとめ

47

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

まとめ

•入門に適しているツール群

✦ Python

✦ Arduino

✦ Raspberry Pi

•現実世界とインタラクションを始めるためのツールが出揃っている

48

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

まとめ

•オープンソースハードウェアの普及

•プロトタイピング環境の充実

49

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

ソースコードとか

• Githubhttps://github.com/kironono/homepower

50

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

書籍とか

• Raspberry Piクックブック (Make:PROJECTS) オライリージャパン - Simon Monk

• Arduinoをはじめよう (Make:PROJECTS) オライリージャパン - Massimo Banzi

• Arduinoをはじめようキットスイッチサイエンス

51

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

パーツとか

•スイッチサイエンスhttp://www.switch-science.com/

•秋月電子通商http://akizukidenshi.com/

•マルツパーツ館http://www.marutsu.co.jp/

52