部屋の明るさを計測してブラウザから確認してみる(その1)

IoTデバイス的な何かを作ってみたいという欲求が前からあったので、
センサからデータ取得、Webサーバに保存してブラウザから確認する、
という簡単なものを作ってみようと思います。

今回は光センサを使って部屋の明るさを計測して、Raspberry Piを介してWebサーバに保存、
ブラウザ上で明るさを確認するアプリケーションを作成します。
その1では、Raspberry Piで部屋の明るさを表示するところまで作っていきます。

明るさを計測する回路

まずは、Raspberry Piに接続するセンサ回路を作ります。
電源とグランドはRaspberry Piから取ります。
明るさを検知するセンサ部分はCdSと半固定抵抗を使います。
AD変換のためにPIC(12F1822)を使います。
あとはPIC安定化のためのコンデンサ1つと、
I2Cを使うための1kΩ抵抗を2つです。

明るさの変化でCdSの抵抗が変化し、半固定抵抗にかかる電圧も変化するので、
PICでその電圧を読み取ってAD変換、I2Cバスに乗せてRaspberry Piに送信します。

PICで光センサの出力をAD変換する

続いて、AD変換のためPICにプログラムを書き込みます(MPLAB X IDE v4.15、PICKit3で書き込み)。
I2Cを使った通信部分のコードは以下のWebサイトから引用しました。
http://diy.ease-labs.com/?page_id=1938( I2C(アイ・スクエアド・シー) | DIYのホームページ )

マスター(Raspberry Pi)からデータの送信要求があるたびに、
スレーブ(PIC)が明るさの情報を取得してマスターに送信します。
明るさは、電源電圧(約3.3V)をリファレンス電圧として
AN3ピンにかかっている電圧を0~1023のデジタル値にAD変換したものになります。
なお、マスターがI2Cバス上にいるスレーブを検知できるように、
スレーブにアドレス(今回は0x09)を割り当てています。

Raspberry Piで明るさを表示する

続いて、Raspberry PiでPICから明るさを受信してターミナル上に表示するプログラムをPythonで作ります。
最終的には定期的にWebサーバにあるDBに保存して、
ブラウザ上でDBから情報を表示するようにしたいと思いますが、
今回はRaspberry Pi上で回路等が動作するかの確認までに留めます。

上のプログラムで指定したI2Cアドレスを持つPICに対して、
データの送信を要求すると明るさを取得します。
データは配列の別々の要素に上位8ビット・下位8ビットが格納されているので、
シフト操作と加算で16ビットの数値に戻しています。
これを整数として表示しています。
送信要求から明るさの表示までの処理は1秒おきに実行します。

動作確認

以下のように表示されます。
自分の部屋のライトを点けた状態で500~600くらいになるように半固定抵抗を調整しています。
自分の環境だと暗くなると値が100前後になるので、
150~200で閾値を設ければ、何かのスイッチングに使えそうですね。

Webサーバに明るさを保存してブラウザで確認するところまで実装したら、また記事にしようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です