CdSセルとマイクロビットのAD変換で明るさを測定してみよう

マイクロビットに内蔵されているAD変換を使ってみます。

AD変換とはセンサー等から得られたアナログ値をマイクロビットで扱えるようなデジタル値に変換する回路を指し、マイクロビットに内蔵されています。


AD変換に入る前に、アナログ値とデジタル値について触れておきます。

個人的には体温計を例にするとわかりやすいと思っていますので、体温計で話を進めます。


体温計には、



アナログの体温計と、



デジタルの体温計があります。


アナログの方の体温計では、



温度によって体積が変化する水銀を用いて、膨らんだ水銀がメモリのどこを指しているか?で測定した体温の数値を把握します。



一方、デジタルの体温計では明確な数字が表示されます。


アナログの方では、37℃と判断をしても、実際のところは、37.01℃であるかもしれないし、37.001℃であるかもしれないしと上の写真からでも明確な数字はわかりません。

一方デジタルの方では、36.8℃と明記され、一つ小さい数字であれば36.7℃と0.1℃単位で体温を表します。


再びアナログの方の数値を見ると、37.0℃から37.1℃の間には小数点第二位以下に無数に数字が存在して、値が連続している事になります。

一方デジタルでは、0.1℃単位で数値を表示し、これは連続していない値として扱います。


値が連続しているかどうかがアナログとデジタルの違いです。




アナログとデジタルに違いを踏まえた上で、今回は明るさの測定を行ってみます。



明るさを測定するためのセンサーはCdSセルを用いる事にします。

CdSセル 5mmタイプ: パーツ一般 秋月電子通商-電子部品・ネット通販


難しい話は省略しますが、CdSセルは明るさによって抵抗値が変化するという特徴があり、抵抗値の変化 = 明るさとして扱うことで周囲の明るさを数値化します。

※詳細に触れるにはオームの法則についてを読んでおく必要があります。

※CdSセルは明るいところ程抵抗値が小さくなり、たくさんの電流が発生する事になります。




早速、マイクロビットとCdSセルを繋いでみます。



3V(赤)とCdSセルの間に10kΩの抵抗を入れることが大事です。

10kΩの抵抗がなければ、マイクロビットのAD変換に電流が流れ過ぎて、読み取った値に差が生じません。


次にコードを作成します。

MakeCodeでは、

のようなコードにし、MicroPythonでは、

from microbit import *

while True:
	v = pin0.read_analog()
	print(v)
	sleep(1000)

にして、シリアル通信で値を出力できるようにしてフラッシングします。



CdSセルに光を当てたり、何かで覆ったりして、数値が変わることを確認しましょう。




マイクロビットに搭載されているAD変換は10ビットの分解能を持っています。

分解能というのは、センサーから得られた値をどれだけ細かく数値化できるか?を示したもので、10ビットの分解能であれば、210 = 1024の範囲(0〜1023)でアナログ値をデジタル値に変換できることを示しています。

今回の回路であれば、暗ければ数値が 0 になり、明るくなるに従って数値が大きくなり、上限は1023になります。


より細かく数値を取り扱い場合、分解能のビット数が高いAD変換を利用しましょう。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。