9 Analog Input
講義日: 2016.11.30 今週は、アナログ入力について勉強します。 目次 I. Basics of Analog Input II. Potentiometer III. CdS IV. Accelerometer V. Practical Work I. Basics of Analog Input デジタル入力は、端子にある一定以上の電圧がかかっているか、かかっていないかという2状態を入力として識別することでした。アナログ入力は、端子にかかる電圧の変化を複数の状態として識別します。 ここでは例として、部屋の明るさを光センサーで測定している場面を考えましょう。部屋の明るさは、太陽の位置等によって滑らかに変化していきます。光センサーは、その変化を電圧の変化に変換します。この時、光センサーからの出力も滑らかに変化します。しかし、マイコンの中では、受け取った明るさデータをデジタルデータとして保持することになります。音楽データも、写真データも、動画データも、コンピュータの中では全てデジタルデータですよね。それと同じことです。つまり、アナログからデジタルへの変換が必要になるということです。マイコンの中でそれを行なってくれるのが、Analog to Digital Convertor(ADC)と呼ばれるデバイスです。一般的には、ADコンバータと呼ばれます。 マイコンでアナログ入力といったときには、端子から入力されるアナログデータをADコンバータを使ってデジタルデータへ変換して、それを入力として扱うということを意味します。F303K8は12ビットの解像度を持つADコンバータを備えているので、4096段階で電圧の変化を表現します。0.0から1.0の間の数値で考えると、4096の各段階の幅は1.0 / 4096 = 0.000244くらいになります。 Analog Input on F303K8 それでは、実際にF303K8を使って実験してみましょう。まず、以下のような回路を作ります。3.3Vから抵抗を介して直接A5に接続しています。こうすることで、A5に3.3Vかかった時にアナログ入力で得られる値が実験できるはずです。 以下に示すプログラムを転送しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include "mbed.h" AnalogIn myInput(A5); Serial pc(USBTX, USBRX); int main() { while(1) { pc.printf("%f\n", myInput.read()); wait(1); } } |
PCに出力を送っていますから、MacのTerminalを開きcatコマンドでシリアルポートを開いてください。すると、以下のようになっているはずです。 ほぼ、1.0ですね。これがアナログピンで計測できる最大の電圧です。3.3Vよりも大きな電圧をかけてはいけません。 それでは、プログラムの説明をしましょう。AnalogInは、端子をアナログ入力として使うためのクラスです。アナログピンA5を指定しています。pc.printf()の中で、myInput.read()というAnalogInのread()メソッドが呼び出されていますね。このread()メソッドを呼び出すと、端子の状態を読み取ってくれます。返値は実数で、0.0から1.0の範囲です。F303K8の場合、アナログ入力で読み取れる最大の電圧は3.3Vまでなので、もし、A5に3.3Vがかかっていれば1.0になります。回路を良く見て、実際に3.3VがA5にかかっていることを確認しましょう。 AnalogInには、端子の状態を読み取るためのメソッドがread()の他にもう1つ用意されています。read_u16()を使うと、端子の状態を16ビット符号なし整数として読み取ります。こちらも試しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include "mbed.h" AnalogIn myInput(A5); Serial pc(USBTX, USBRX); int main() { while(1) { pc.printf("%d\n", myInput.read_u16()); wait(1); } } |
結果は、以下のとおりです。 16ビット符号なし整数の最大値は65535ですから、おおよそ最大の値が読み取れていることがわかります。 II. Potentiometer 可変抵抗(potentiometer) とは、抵抗値を変えることができる抵抗器です。典型的なものとしては、以下の写真に示すようなボリュームつまみのようなものが挙げられます。 このつまみを、回すことによって、抵抗値を小さくしたり大きくしたりすることができます。通常、可変抵抗には3つの端子があります。両端がVccとGNDで、真ん中の端子をその先の電子部品に繋ぎます。 可変抵抗の原理は、抵抗の分圧則によって説明されます。以下の回路図を見てください。 2つの抵抗はそれぞれxΩ、yΩです。このとき、アナログピン(A5)にかかる電圧はyΩの抵抗にかかる電圧と等しくなります。yΩにかかる電圧は以下のように計算されます。 Vout […]