概要
前回、分圧回路を使って 1 つのアナログピンで複数の値を読み込みました
その際に同じ値の抵抗を使っていたので分割した電圧が二次関数的な増え方をしてしまいました
今回は各電圧が均一なるような抵抗値を求めてみました
環境
- Mac OS X 10.11.3
- Arduino IDE 1.6.7
抵抗値を求めるためのスクリプト
電源電圧と基準となる抵抗値が分かればある規則で計算できることがわかったのでスクリプトにしました
- vim resistor_divider.rb
SW=10
R0=ARGV[0].to_i
VIN=ARGV[1].to_f
VOUTS = 0.step(VIN, VIN / SW).to_a
VOUTS.shift
VOUTS.pop
puts "R0: #{R0}, VOUT: 0"
rp = 0
VOUTS.each_with_index {|v, i|
r = (R0 * v) / (VIN - v.round(2))
puts "R#{i + 1}: #{(r - rp).round(1)}, VOUT: #{v.round(2)}"
rp = r
}
- ruby resistor_divider.rb 470 3.3
とすると以下のように必要な抵抗と得られる電圧がわかります
単位はそれぞれオームとボルトです
R0: 470, VOUT: 0
R1: 52.2, VOUT: 0.33
R2: 65.3, VOUT: 0.66
R3: 83.9, VOUT: 0.99
R4: 111.9, VOUT: 1.32
R5: 156.7, VOUT: 1.65
R6: 235.0, VOUT: 1.98
R7: 391.7, VOUT: 2.31
R8: 783.3, VOUT: 2.64
R9: 2350.0, VOUT: 2.97
第一引数に基準となる抵抗を指定して、第二引数に電源電圧を指定します
このスクリプトは 10 個のスイッチからの電圧を取得することを想定しているため、電源電圧を 10 等分した電圧を取得するようになっています
これで 10 個のスイッチの情報を 1 つのアナログピンで読み込むために必要な抵抗値がわかりました
E24系の抵抗値に変換すると
E24系とは抵抗の値として使われる推奨値のラインナップです
取得できた抵抗値をこの E24 系の抵抗を使って最小限の数の抵抗を使って変換してみると
- R0: 470 -> 470オーム抵抗 x 1
- R1: 52.2 -> 51オーム抵抗 x 1
- R2: 65.3 -> 33オーム抵抗 x 2
- R3: 83.9 -> 33オーム抵抗 x 1 + 51オーム抵抗 x 1
- R4: 111.9 -> 100オーム抵抗 x 1 + 10オーム抵抗 x 1
- R5: 156.7 -> 150オーム抵抗 x 1 + 4.7オーム抵抗 x 1
- R6: 235.0 -> 240オーム抵抗 x 1
- R7: 391.7 -> 390オーム抵抗 x 1
- R8: 783.3 -> 750オーム抵抗 x 1 + 33オーム抵抗 x 1
- R9: 2350.0 -> 2.2kオーム抵抗 x 1 + 200オーム抵抗 x 1
こんな感じの抵抗を使って実現することができます
複数の抵抗を組み合わせても OK です
もっと極端に言えば、例えば 1 オームの抵抗しかもっていないのであれば、R8 とかであれば 783 個直列に 1 オームの抵抗を接続しても OK です ( 普通はやりませんが )
一応今回は秋月さんの 1/4W カーボン抵抗の一覧で購入できる抵抗を使って構成してみました
もちろん、これ以外にも抵抗はあるのでご自身の環境に合わせてお好きな抵抗を使って構成してもらえれば OK です
最高 2 本の抵抗を使って実現しているので、もう少し余裕があれば 1 オームの抵抗を使って誤差を埋めてもいいと思います
最後に
紹介は以上です
いろいろと試行錯誤しながら算出したので的はずれなことを言っている可能性もあるので、間違いがあれば指摘してほしいです
分圧回路で一番大変なのは指定の抵抗を手に入れることですかね、、、
あと、自分は今回紹介した組み合わせの抵抗を実際に手に入れることができていないので試せていません
実際は回路を組んで電圧を測定してみて、予想した出力の電圧が得られているかちゃんと確認しながら抵抗値の調整をしたほうがいいと思います
0 件のコメント:
コメントを投稿