Arduinoの内臓クロック動作と日照、温度記録計

以前に、ATmega328を使って、各種の情報を電圧として読み取り、 SDカードへ保存するデータロガーを報告いたしました。 (低消費電力のデータロガー) 今回は、動作クロックを外部発振の16 MHz (8 MHz)から ATmega328の内部発振の128 kHzへと下げることで、 消費電力をさらに低減したデータロガーを作製しました。 長時間の動作が可能になったため、日照量(明るさ)と温度を長時間連続して記録するシステムを作製しました。 単三電池2本で、平常時に0.86 mA、SDカード書き込み時には1.1 mA程度の消費電流 でしたので、およそ2000時間 (83日)の連続測定が可能です。 ブレッドボードで配線して100円ショップのお弁当箱に入れれば完全防水です。 Sep 4, 2011.


クロック用のビットを書き換え中


測定中

部品

使用した部品類は以下の通りです。
  1. ATmega328とSDカード (SDカードデータロガー参照)
  2. AVR ISP システムプログラマーmarkII (内部クロックへビット変更するため)
  3. ブレッドボードとコネクタ類
  4. 照度センサ(NJL7502L)
  5. 温度センサ(LM35)
  6. 3.3 V昇圧DCDCコンバーター(電池2本から電源3.3Vを取るため)
  7. 電源電圧安定化用のコンデンサ(100 uFなど)
  8. 読み取り電圧安定用のコンデンサ(100 pFなど)
  9. 読み取り電圧調整用の炭素皮膜抵抗(100, 1 KΩなど)

手順

作製は以下の3段階の手順に分けることができます。電子工作が初めての人は かなり時間がかかる可能性もあります。また、情報が不足している可能性もあります。

  1. Arduinoを用いてATmega328にスケッチを書き込む。
  2. ATmega328を内部クロック動作に変更する。
  3. ブレッドボード上でATmega328、センサー、電池類を接続する。

AVRのプログラマーを使用しますので、 慣れている方はプログラムを Arduinoベースで書く必要はありませんが、 私は初心者ですので上記方法をとりました。 では、順に追って方法を解説いたします。

手順1:日照、温度記録用のスケッチ

以下からコピーしてお使いいただければ幸いです。 私の環境では動作しておりますが、使用環境によっては 動かない可能性もあります。適宜修正してください。 バグに関してはお伝えいただければ幸いです。 void setupの冒頭でアナログ電圧の読み取り用の基準電圧を決定しています。 今回は1.1 vを用いましたが、お使いのセンサーの最大値に併せて 3.3 Vや外部基準などに変更してください。

Arduinoを用いた日照計、温度計のスケッチ(プログラム)

手順2:AVR インシステムプログラマーを用いてクロック用のビットを変更する

以下の写真のようにコネクターを作製し、 ブレッドボード上のAVRプログラマー mkIIとATmega328を接続します。


コネクターの作製。通常の2.54 mmピッチのピンを はんだ付けして作製します。
L字型を用いるのはソケットの幅と合わせるためです。



L字とI字のコネクターをはんだ付けします。


ブレッドボードに差しこんだ様子。 配線は以下の通りです。ICに3 Vの電源が 必要です。プログラマーのコネクタに関しては矢印が一番端子です。

以下、ATmega328のみ 以下、プログラマーからの接続
配線の回路図はこの図の通りです。


電源が入ると緑のパイロットランプが点灯します。

クロック用のビットを変更する

クロックを内部125 kHzに変更するのは簡単です。

1、AVR Studioを立ち上げます。

2、tool-program AVR-Auto Connectを選択します。


3、うまくいかないときには接続方法を確認します。 Platform: AVRISP mkII, Port:USBです。


4、通信の周波数を100 Hzに落とします。 main-ISP mode-Settingsで変更できます。 128 kHzに設定しますと32 kHz程度でしか 通信が出来なくなります。元に戻したいときに エラーが発生することを防ぐため通信のクロックを下げておきます。 数ビットの書き換えですから100 Hzでも全く気になりません。


5、SUT_CKSELで、Int. RC Osc. 128 kHzに変更します。


ここまでで、@マイコンはプログラムが書き込まれ、 A外部の水晶発振子なしで128 kHzで動作する状態になっています。 続いてセンサー類を接続します。

手順3:温度、照度センサーの接続

下記の回路図のように配線します。 単純ですのでブレッドボード上でも十分ですね。 ここでは小型のブレッドボードを2枚使っています。 照度センサーは照度に比例した電流を流しますので 100Ω程度の抵抗で電圧に変換して読み取ります。


ブレッドボード上でセンサーを接続したATmega328


配線図。ブレッドボード内では縦方向に 接続があります(abcde内およびfghij、klmnoはそれぞれつながっています)。


動作中。消費電流量を測定しています。
1 mA以下ですので、単三電池2本で2000時間ほどもちます。

動作チェック

実際に、一週間連続して照度と温度を計測しました。 この間、電池は交換しておりません。 直射日光は浴びませんが、設置しだ台(エアコンの室外機)が 日光を浴びていますので、計測された温度は気温でありません。 単純にセンサーの温度となります。 内臓RC動作はやはり水晶発振子と比べて 安定度にかけ、時間の変動が大きいことがわかります。 (24時間を正確に測定で来ていません。)今回は 日の出と日の入り時刻で補正できるので大きな問題はありませんが、 正確な時間が必要な用途には不向きですね。


照度(明るさ)を一週間連続測定したデータ
夜はほぼ照度0となっています。
最大値の2000ルックスは直射日光の近くですので
悪くない値かと思割れます。
明確な値が必要な場合いは電球を使って補正が必要かもしれません。
96-120時間は曇りの日です。


温度(センサー温度、直射日光あり)を一週間連続測定したデータ


一冊本を買って参照すると、ネットで検索するより楽です。
Arduinoの入門書
戸田システムウェア

ここで公開するアイデア/装置は安全性を保障しておりません。 用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。 本サイトの情報の営利目的での利用はご遠慮ください。 本サイトの内容の無断転載を禁じます。© 2011 TYK