logo1.gif(8567 byte)

 数年前にイタリアで教育用に開発されたハード・ソフト共にオープンソースのマイコンボードArduinoを用いた電子工作に挑戦した。Arduinoは約7×5.5cmの基板中に基本的な機能がほとんど詰め込まれており,何らかの表示器とセンサーを接続すれば単独で計測器として利用することができる。表示機として8×8LEDマトリクスを用い,電圧,電流,明るさ,気温,湿度等の測定を行った。8×8ドット表示ではあるが,オシロスコープ的利用も紹介する。オープンソースであるハード・ソフト設計が充実していて,私のような趣味の電子工作挑戦者にとっても取り組みやすく,面白いように次から次へとアイデアを実現することができた。 

現在以下の様なものになってる(2011.6.6 )。

1 Arduinoについて

 ハードウェア仕様は以下の通りである。

マイクロコントローラ:ATmega328P
動作電圧:5V     入力電圧:7〜12V
デジタルInput/Output:14ポート
アナログ入力:6ポート(分解能10ビット)
デジタル出力最大電流:40mA
フラッシュメモリ:32kB(2kBはブートローダー)
SRAM:2kB  EEPROM:1kB 
クロック周波数:16MHz(本体価格は3200円程度)

arduino1.jpg(30925 byte)  arduino2.jpg(20409 byte)

 ソフトウェア開発はC言語を踏襲したArduino言語で行い,パソコン上で記述・コンパイルした後,USBを通してArduinoのフラッシュメモリに転送される。一連の操作は図のようなIDEが用意されており,非常に簡便にできる。プログラムが蓄えられたArduinoは以後単独で動作可能で,電源のON/OFFでリセットが行われる。13番ピンに接続されたLEDを0.5秒間隔で点滅させるプログラム例を下記に示す。

int LED_Pin=13; //13pin使用
void setup(){ //初期設定開始
   pinMode(LED_Pin,OUTPUT); //13pin出力設定
}  //初期設定終了
void loop(){   //繰返しの開始
   digitalWrite(LED_Pin,HIGH); //13pinを5V
   delay(500); //500ms待機(LED点灯)
   digitalWrite(LED_Pin,LOW); //13pinを0V
   delay(500); //500ms待機(LED消灯)
}              //繰返しの開始に戻る

2 測定利用例

 表示装置としては8×8LEDマトリックスを用いたが,小型液晶ディスプレイを用いれば,より詳細なデータを表示することも可能である。写真左はブレッドボード上にLEDマトリックスを組み込んだ試験回路,右は2行液晶キャラクタディスプレイを接続した例である。

arduino3.jpg(23110 byte)  arduino4.jpg(30755 byte)

3 実際の使用

 実際の使用に当たっては,小型ユニバーサル基盤上にデータ表示用に8×8LEDマトリクス,リセットスイッチ,圧電スピーカー,小型のブレッドボードを取付け,コンパクトにArduino本体上に積重ねる形にした。小型ブレッドボードは側面にも縦に取り付けた。

arduino001.jpg(33406 byte) arduino003.jpg(28854 byte)

 ブレッドボードには,温度センサとしてLM35DZ,光センサとしてCdSセル,音の出力用に小型スピーカ,メロディICと増幅用トランジスタ,電流測定用の基準抵抗,オシロスコープ用に電圧増幅と電圧レベルシフトに用いる単電源2個入りのオペアンプLM358等を搭載した。

arduino002.jpg(76144 byte)

 8×8LEDマトリックスはLEDディスプレイドライバICのMAX7219を用いてドライブすることにした。Arduinoで直接接続してのドライブも試みたが,デジタル出力に16ピンを必要とし,センサーを接続するピンが数個に制限されてしまうため,現実的でないと判断した。MAX7219を用いれば,そのコントロールには4ピンで済ますことができ,他の空いた端子を余裕を持ってセンサーや他の接続素子のコントロールに使うことが出来る。直接接続の場合は,数字・文字等のデータの表示のためのプログラムも煩雑である。ArduinoにはMAX7219を用いたマトリクスLEDドライブ用のライブラリが用意されているので,それを用いればプログラムもよりコンパクトにすることが出来るのもメリットである。Arduino用汎用基板にコンパクトにMAX7219,LEDマトリックス,小型ブレッドボードを載せるため,MAX7219とLEDマトリックスは2段重ねにすることにした。下の写真のように切断したICソケットを2段重ねに用いてLEDマトリックスの下にMAX7219,圧電スピーカ等を収納した。

arduino004.jpg(33943 byte) arduino005.jpg(29456 byte)

 湿度測定用の湿球温度計の役目を果たす温度センサーLM35DZは次の写真のようにセッテングした。ジャムの小瓶の水で常に湿らせておくという古典的アナログ的方法であるが,これが非常に安定していて,数週間に一度少量の水を供給すれだけで湿り気が途切れたことはない。センサーを固定している太く赤いワイヤーのようなものは愛嬌で,子供の捨てられた玩具を利用した。

arduino006.jpg(30222 byte) arduino007.jpg(22532 byte)

 次の左写真は電圧計モードで,電池の電圧を測定している。バッテリーチェッカーのモードもあり,この場合は1.5Vの単3電池を想定し,10Ωの負荷抵抗をつなぎ百数十mAの電流を流したときの電池の端子電圧を測定している。1.0V以下なら使用不可,1.2V以上なら使用可の表示が出るよう設定した。右写真はオシロスコープモードでの使用である。ラジオの音をマイクで拾い,波形をほぼリアルタイムに8×8ドット表示ではあるがLEDマトリックスで表示している。(^_^;) 実用にはならないが,レベルメーター的で見ていて楽しめる。オシロスコープモードも含めて,ほぼ同様の機能を,16文字×2行のLCDキャラクタディスプレイでも実現しているので順次紹介予定である。

arduino008.jpg(30982 byte) arduino009.jpg(30659 byte)

4 回路

 Arduinoに接続した回路を,自分用の手書きのメモであるが,次に示す。あくまでも趣味の電子工作であり,専門書やデータシートで確認したものではなく,思い込みや間違った理解があるかもしれない。各ピンへの入力は保護回路を設けていないので,5Vを超えないことや,極性が逆にならないように注意して欲しい。作製は自己責任でお願いする。ArduinoとMAX7219を介したLEDマトリックスとの接続やコントロールの詳細は最後の参考サイトに詳しい。プログラムリストにもコメントを付けてある。

arduinokairo1.jpg(141766 byte)

5 動作

 YouTube動画で紹介のように,電源を入れる(リセットする)とLEDマトリクスのセルフチェックの後,1分の時間間隔でリセット後の経過時間・気温・湿度・不快指数を表示し,CdSを覆い隠すと動作メニューを表示するようにした。再度光を当てるタイミングで,各メニューを実行する。光の量でArduinoと対話していると考えて欲しい。通常は明るさに応じた波のデモンストレーションとノイズを拾うオシロスコープモードを1分毎に気温や湿度の表示を挟んで切り替えている。さらに人キャラクターが走り抜けたり,顔キャラクターが表れたりし,常時机上で通電して楽しめるようにした。ラジオと同じく脇に置いて電源を入れたくなるようにしたつもりである。供給電源電流は約40mA程度であるが,単調な机上の事務仕事のお供にどうでしょうか。

6 測定値の処理

 温度測定に関して,LM35DZは個体差もあるようである。LM35DZは手元にあった10数個中からほぼ同じ値を表示する2個を選び,乾球計・湿球計とした。また1回の測定では値にバラツキがあったので,人キャラクターのランニング時を利用して複数回測定を行った平均値を用いている。乾球温度と湿球温度から相対湿度を求める計算式や不快指数を求める計算式については,乾湿計・アウグスト乾湿計・Tetensの式・ペルンターの式・不快指数等をキーワードに検索すれば知ることができる。

 オシロスコープに関しては,あくまでも「もどき」であり,ハード・ソフトともマイク入力を前提にそれらしくの表示を目指しているだけなので,サンプル・ホールド回路やサンプリング周波数については問わないで欲しい。回路図とプログラムに表現された通りである。電圧・電流・気温・湿度についてはLEDに表示された桁数でほぼ信じられる値であるはずです。

7 プログラムリストと参考WebPage

プログラムリスト(txtで表示)
LEDマトリクスとMAX7219(建築発明工作ゼミ2008)

Arduino + 8×8LEDマトリクスでオシロスコープもどき(2)
(2)では,大気圧センサーMPL115A2を追加接続し,若干の回路整理を行った。
大気圧センサーは順調に稼動し,測定値は当地のアメダスデータとほぼ一致している。



inserted by FC2 system