抵抗分圧回路
抵抗分圧回路とは
直列した複数の抵抗によって、電源電圧を分割する回路です。
物理現象の変化に対して抵抗値が変化するセンサをマイコンに接続するとき、抵抗分圧回路がよく使用されます。主な理由は以下の通りです。
回路による抵抗値から電圧に変換
抵抗変化するセンサが検出した値を電圧に変換するための回路を以下に示します。可変抵抗はセンサと同等の機能があるので、センサを可変抵抗に置き換えて考えます。
直列に接続した抵抗(R1とR2)は、電圧降下が発生します。この電圧降下は、抵抗の大きさに比例します。その結果、直流電源の電圧(Vcc)は、抵抗(R1)と可変抵抗(R2)の大きさにしたがって分割されます。マイコンに入力する電圧(Vout)は、可変抵抗(R2)による電圧降下と同等で、可変抵抗の大きさに比例します。また、R1が10 KΩから100 kΩを使うのが一般的のようです。
ソフトウェアによる電圧から抵抗値に変換
マイコンが計測した電圧(Vout)から、可変抵抗(R2)を以下の公式で求めます。
マイコンを使った実験
抵抗値をマイコンに入力する実験を説明します。 可変抵抗に直接に計測した抵抗値が、Micro:bitが計測した抵抗値と等しいとき、サンプルコードは正しいと確認できます。
Micro:bitとMicropython
実験回路とサンプルコードを以下に示します。
実験回路
実験回路を以下に示します。 Win PCのモニターにMicro:bitが計測した抵抗値を表示します。
サンプルコード
可変抵抗の抵抗値を計測するサンプルコードを以下に示します。 float型で計算できるように、データ型を明確に定義しています。
from microbit import * # Micro:bitを初期化 display.clear() # LEDディスプレイを初期化 # 抵抗値の計測に必要な値 Vcc_value = 3.3 R1_value = 10 * 1000 # 10kΩ while True: pin2_value = pin2.read_analog() Volt_value = (float(pin2_value) / 1024.0) * 3.3 R_value = (Volt_value / (Vcc_value - Volt_value)) * R1_value print('D:%d V:%.05f R:%f' % (pin2_value, Volt_value, R_value)) sleep(100)
実験結果
実験結果の一部を以下に示します。 誤差が大きい過ぎるような気もしますが、それについては今後の課題にしたいと思います。
アナログ入力 | 電圧 | 可変抵抗値 |
---|---|---|
1 | 0.00322 | 9.775169 |
5 | 0.01611 | 49.067688 |
10 | 0.03223 | 98.619261 |
15 | 0.04834 | 148.661985 |
20 | 0.06445 | 199.203119 |
31 | 0.09990 | 312.185287 |
35 | 0.11279 | 353.892683 |
40 | 0.12891 | 406.503915 |
46 | 0.14824 | 470.347404 |
50 | 0.16113 | 513.346910 |
55 | 0.17725 | 567.595195 |
59 | 0.19014 | 611.398935 |
64 | 0.20625 | 666.666507 |
70 | 0.22559 | 733.752441 |
76 | 0.24492 | 801.687526 |
80 | 0.25781 | 847.457218 |
85 | 0.27393 | 905.218029 |
91 | 0.29326 | 975.347900 |
96 | 0.30937 | 1034.482359 |
101 | 0.32549 | 1094.257831 |
Arduino
【未調査】
Raspberry Pi
【未調査】
STM32 Nucleo
【未調査】