2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ichigojamで簡易照度計を作る

Last updated at Posted at 2020-03-01

#始めに

ある日ふと照度計を作ってみようとなり、検討を開始しました。調べてみると、作るのにIchigoJamが向いているということがわかり、眠っていたIchigoJamで作ってみました。何か工作の参考になればと思い、その過程を公開します。

#参考サイト

フォトトランジスタ データシート

照度計 参考回路

ボクにもわかるIchigoJam用I2Cキャラクタ液晶LCDの接続方法

IchigoJam BASIC

LPC1114 データシート

#目次

  • 回路の検討
  • 回路の作成
  • ソフトの検討
  • プログラム

#回路の検討

 照度計のメインとなる部品は、光センサーです。調べてみるとNJL7502Lというフォトトランジスタの作例が多いので、これを使用することにしました。見てくれはLEDそっくりなのですが、ダイオードでなくトランジスタです。レンジが1lux~10万luxと幅が広いのが特徴です。薄暗い室内が数から数十luxで、晴天の屋外が10万lux程度となるため、これぐらいのレンジが必要です。データシートを見てみると、入力光の強さにほぼ比例して電流を流します。よって、電流も最大1倍から10万倍流れることになります。
 NJL7502Lでの測定回路を示します。今回は簡単な抵抗器でのIV変換を行います。
shoudokei_genri.png
NJL7502Lに測定抵抗として直列抵抗を接続して、その測定抵抗に流れる電流によって生じる電圧を測定することで、電流値を測定します。このとき、10万倍の電流を測定するためには、測定抵抗値を変更して、測定レンジを変更する必要があります。例えばレンジその1であれば1-100 lux、レンジ2では100-1000lux。つまり、測定回路は、測定抵抗を動的に切り替える機能が必要となります。
 ここでアナログスイッチなどの部品が増えるのが嫌だなー、と調べていると、このようなページに行き当たりました。ここでは、GPIOの3値状態機能(VCC/GND/Hi-Z)をうまく使っていました。抵抗の切り替えには、抵抗のグランド側をGPIOに接続し、GNDとHi-Zを切り替えることで可能となります。なるほど、GPIOって、スイッチですもんね。
 そこで、複数ピンGPIOがあり、電圧測定に使うADコンバータが付属しており、簡単にプログラミングができるものを検討してみると、IchigoJamがいいのではということになりました。(arduinoという選択肢もあったのですが、今回は見送りました)IchigoJamは、外に出ているピンは、INとOUTの信号になっていますが、中身はGPIOであり、OUTの命令に-1を入力するとHi-Zとなります。

 工作にあたりもう1つ条件があります。ディスプレイ無しで動作させたい。照度計なので、いろいろな場所に持ち込んで測定したいと考えました。電源はIchigoJamならモバイルバッテリで十分すぎるくらい動いてくれるのですが、ディスプレイも持ち運ぶわけにはいきません。そこで、AQM0802という8列×2行のキャラクタLCDを取り付けることにしました。I2Cのインターフェースで動作します。IchigoJamはI2Cのインターフェース持っているので、果たしてIchigoJamで動かすことができるかと調べると、このページでばっちり表示ルーチンを公開してくれていました。素晴らしい。ということで、全条件をクリアしているIchigoJamを使うことにしました。

#回路の作成
稚拙ながら、接続図を作成しました。
shoudokei_kairo.png
 左のNJL7502Lが接続している部分が測定部で、100,1k,10,100kΩの抵抗を切り替えて使用します。IN2はADC(2)に接続します。
真ん中はAQM0802の接続図で、電源、GNDとI2CのSCL,SDAに接続します。I2Cは2線ながらバス接続のため、出力値Hi-Zと0という変わった出力(オープンドレイン)のため、プルアップ抵抗が必要となります。
右端の10kΩは、IchigoJamの電源オン動作モードのためのプルアップになります。

 これくらいの回路であれば、ブレッドボード上で組めば、そんなに時間かからずに動作すると思います。ユニバーサル基板に作る場合は、亀の子基板にするとコンパクトになると思います。
IMG_20200301_113806.jpg

#ソフトの検討
 ソフトでは、直列抵抗を選択しながら、ADコンバータの数値を照度のlux値に変換し、AQM0802に表示をします。

###lux値変換

 データシートにあるI-luxグラフから、変換式を抽出してみました。グラフを拡大印刷して、数値を読み取り、エクセルでフィッティング。以下の式を得ました。

lum-curr.png

I_u = 0.372lux - 0.0447 …(1)

ただし、$I_u$ : NJL7052Lの光電流(uA)
    $lux$ : 入射光の照度(lux)

電流値から照度を出したいので

lux = (I_u + 0.0447)/0.372…(2)

$V_u = I_u R$ より、$I_u = \frac{V_u}{R}$ を代入して

lux = (\frac{V_u}{R} + 0.0447)/0.372…(3)

ここでADコンバータ仕様、3.3Vで1024階調ということと、rail to railで取れていると仮定することで、$adc$をADコンバータの読み取り値とすると、

V_u = \frac{adc}{1024} * 3.3 * 10^{6}
\\= 3222 * adc…(4)

(4)式を(3)式に代入して

lux = (\frac{3222*adc}{R} + 0.0447)/0.372
lux = 9853.221*\frac{adc}{R} + 0.136…(5)

抵抗値を実測すると、
100 = 98.3Ω
1k = 985Ω
10k = 9780Ω
100k = 97600Ω
これらを(5)式に代入すると、

lux = 100.2*adc
\\lux = 10.00*adc
\\lux = 1.007*adc
\\lux = 0.1009*adc

(0.136は小さすぎるので切り捨てます)
どれも大体10.0の倍数になります。
そこで係数は10として、これにどの抵抗を選択したかで、倍率を乗じて照度値とします。

###測定抵抗の選択
 測定抵抗は4本あり、どれを使うか人がいちいち選択していては不便になります。以下の方法で選択することにしました。
(1) まずは一番大きな抵抗値で測定します。つまり一番暗い場合の測定をします。
(2) その測定でadcの値が振り切ったり、振り切る寸前だった場合は、その抵抗で測定するには明るすぎることになるので、1つ抵抗値を小さなものに変更します。振り切ってない場合は、その値が測定値です。測定終了します。
(3)抵抗値を小さなものにした場合は(2)に戻って測定します。
(4)一番小さな抵抗値で振り切った場合はもう測定できないので、振り切った値を測定値とします。
これで自動で測定抵抗を選択します。

###AQM0802表示

AQM0802に表示するルーチンは、このサイトの表示ルーチンをお借りいたしました。ありがとうございます。後に示すBasicプログラムの中で、400行以降が表示ルーチンとなります。使い方は、初期化として、プログラムの最初で400行をコールして、以降の表示の時には、440行をコールします。すると、IchigoJamの左上8列×2行のキャラクターが転送されます。とても便利です。

#プログラム
以下に照度計のプログラムを示します。ここまで読んでいただいた方は簡単に読めると思います。

照度計プログラム
10 GOSUB 400
20 OUT 1,0:OUT 2,-1:OUT 3,-1:OUT 4,-1
30 A=ANA(2)*10
40 IF A<9800 THEN A=A/100:GOTO 200
50 OUT 1,-1:OUT 2,0:OUT 3,-1:OUT 4,-1
60 A=ANA(2)*10
70 IF A<9800 THEN A=A/10:GOTO 200
80 OUT 1,-1:OUT 2,-1:OUT 3,0:OUT 4,-1
90 A=ANA(2)*10
100 IF A<9800 THEN GOTO 200
110 OUT 1,-1:OUT 2,-1:OUT 3,-1:OUT 4,0
120 A=ANA(2)*100

200 CLS
210 LC 0,0:?A
220 LC LC 5,1:?"lux"
230 GOSUB 440
240 WAIT 30
250 GOTO 20

400 POKE#700,64,0,2,#C0,57,17,#70,86,#6C,56,12
410 IFI2CW(62,#701,1,#704,5)?"E"
420 WAIT12
430 IFI2CW(62,#701,1,#709,2)?"E"
440 IFI2CW(62,#701,1,#702,1)+I2CW(62,#700,1,#900,8)+I2CW(62,#701,1,#703,1)+I2CW(62,#700,1,#920,8)?"E"
450 RETURN

#最後に
 本来ならば、作成後にキャリブレーションを行い、出力を調整しないといけないと思いますが、簡易照度計ということで勘弁してください。計算についてもLPC114のGPIOのオン抵抗も考慮しないといけないのですが、データシートからはわかりませんでした・・・。ただ、16bit整数しか扱えないIchigoJamでもこれくらいのものはできるということで、楽しんでいただけたらと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?