Arduino 照度センサ データ記録シールドの作成

Arduino UNO を対象として、照度センサと温湿度センサの出力を液晶ディスプレイ (LCD) に表示させながら SD カードに記録を残す機能を有するシールドを作成しました。

作成動機は自転車用の前照灯登山用ヘッドランプを長時間使用した場合 (とくに電池残量が少なくなったとき) の挙動を定量的に知りたいという、ただそれだけのことです。

当初はスケッチ (計測用プログラム) を書き込んだマイコンを Arduino ボードから取り外してユニバーサル基板上に移植することを検討していたのですが、実装がうまく行かなかったこと、著しい小型化や可搬性の向上が望めないと思われたことの2点から Arduino UNO ボードに接続するシールドを作成することに方針を転換しました。

作成するスケッチも配線もまさに今までの記事の集大成です。

I2C 液晶ディスプレイ AE-AQM1602A のあれこれ
Arduino で 温湿度センサ DHT11 を使う
LCDディスプレイ表示とSDカード記録
レベルシフタ付き microSDカードスロット AE-microSD-LLCNV




これらを統合して次のような配線を行います。

ATmega328P Module
VCC VCC
GND GND
A4 SDA BH1750/LCD SDA
A5 SCL BH1750/LCD SCL
D2 DHTPIN DHT11
D10 SS SD 8/CS
D11 CMD SD 7/CMD
D12 CMD SD 6/DAT0
D13 CLK SD 5/CLK

ご覧のように LCD と BH1750 照度センサモジュールが A4, A5 ピンに同時に接続されていますが、これらのデバイスは I2C (Wire) 規格でシリアル通信を行いますので同じピンを共有していても問題はありません。

ざっくりと一文で説明すると I2C は接続されている (スレーブ) デバイスにアドレスを割り振って、クロック信号線 (SCL) とデータ信号線 (SDA) の2つの通信線を利用することでデバイス間 (マスタとスレーブ間) でのデータ通信のほかに各デバイスとの通信タイミングを制御を行っています。

したがって2つ以上の (スレーブ) デバイスがマスタに同時に接続されていても、ここでは問題は生じません。

より詳しくは NXP Semiconductors (Philips Semiconductors の後継企業) が公開している仕様をご参照ください。


NXP Semiconductors
I²C-bus Specification, Version 6.0, 4th of April 2014.


配線が決まりましたら、計測用スケッチを次のようにまとめます。先の記事で述べましたように LCD への文字表示は特別なライブラリを必要とするわけではないものの、ここではソースコード簡略化のため、ライブラリマネージャに登録されているライブラリのなかで最終メンテナンス日が最も新しいものを利用しています。

ここで作成するのはシールドなので Arduino Uno の配線に合わせて DHT PIN に D2 を割り当てました。

使用しているモジュールで接続ピンが指定されているのは I2C の A4, A5 と SPI の D11-13 そして電源の 5V と GND です。

ここで Arduino Uno の各ピンの位置を見て頂くと分かりやすいのですが、今回使用するピンが長方形の左下と右上に固まっています。


Arduino Uno Rev3 | Arduino Official Store
https://store.arduino.cc/usa/arduino-uno-rev3


左上の方には 5V と GND がありますので、接続ピンに自由度がある DHT には右下に移動してもらいました。

これがもしユニバーサル基板への移植であれば、ATmega328P で使用するピンが D10-13 と A4,A5 といった具合にマイコンの右側に固まっているので D9 を割り当てるか、D8 を割り当てて下側から配線を回してくるときれいに収まりそうですね。

あとは私が苦手とする工作の時間です。前回の反省から交差を許容して複雑な配線を廃しました。交差は絶縁体の塗料で被覆されたポリウレタン銅線を導入することで解決です。

見た目は醜悪ではあるものの、照度センサの計測データを記録メディアに保存するという要件を満たせる Arduino UNO シールドがこれで一応は完成しました。

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Us