旅を楽しくするArduino端末を作る。その3-電圧測定器を作る-

第3回からは実際にArduinoと各種センサーを用いて、一つ一つ動作を確認していきます。
第3回はバイクの電圧を図るための電圧計を自作します。
第2回はこちらからどうぞ

分圧回路を用いない方法も第9回で紹介していますのでこちらも参考に

そもそも「センサー」って何?

センサーの厳密な言葉の意味はここでは述べませんが、電子工作で一般的にセンサーと言ったら、あらゆる物理現象を電気信号に変換できるものを指します。
電気信号とは、これまた厳密な話をすると違うのですが、大まかにここでは「電圧」のことを指していると考えていただいて問題ありません。
例えば、温度センサーなどは気温の変動を電圧の変化で表現し、それを人間が理解できる単位(°C)に変換して表示させます。

なのでもともと電気信号である「バッテリーの電圧」は、センサーを用意しなくても測定が可能です。
ではArduinoのアナログ端子に、そのまま繋げば測定できるのかというと、Arduinoは12V発生させるバイクの電圧に耐えられませんので、一工夫が必要です。

Arduinoでバイクのバッテリー電圧を測定するには

Arduino(ここではArduino Unoを指します)のアナログ端子は0Vから5Vの間を1024分割して電圧を測定します。
(5[V]/1024なので最小測定単位は0.0049V)
しかしバイクのバッテリー電圧は12V~15Vほどまでありますので、測定範囲をオーバーしています。
なので測定できる範囲まで電圧を降圧させる必要があります。そこで利用するのが分圧回路というものです。

分圧回路

抵抗を2つ利用することで入力した電圧を欲しい電圧値まで、降圧させることができます。
回路図は以下の通りになります。

Vinから入った電圧が、Voutから降圧された電圧に変換されます。
計算式は以下の通りです。

Vout = R2÷(R1+R2)×Vin

今回はバイクのバッテリー電圧を5V以下に降圧させるのでR2÷(R1+R2)が0.25ほどになればいいです。
手持ちの抵抗値からそれぐらいになるものを探します。
今回はR1=1kΩ,R2=330Ωがありました。
これは、0.2481…ぐらいなのでこれを採用します。
※分圧回路は正確な電圧を図ることにはあまり向いていません。Arduinoも電圧の分解能が悪いので、誤差は多少あります。

これを適応すると、最大で20Vを5Vまで降圧できるので、通常のバイク電圧10~15Vを図るには十分ですね。

では実際に回路を組んでみます。電源は今回はバッテリーからではなくACアダプターでAC100VをDC12Vに降圧させ利用しています。

※本物のバイクにつなぐ際はヒューズ等での安全対策を忘れずに

今回はArduinoUNOの互換機である
「ELEGOO Arduino用UNO R3コントロールボード」
を使用しています。
Arduinoは一種のオープンソースハードウェアを適応していますので、このような互換機がたくさん出ています。
元々のArduinoの機能を強化した拡張互換機などもありますが、今回紹介している互換機機は元々のArduinoUNOの互換になってますので、使い勝手が良いです。
Amazonを検索するといろいろな互換機が出てきますが、この「ELEGOO Arduino用UNO R3コントロールボード」は他の互換機をいろいろと検証した結果、ほかの互換機より品質高いと考えております。

トラブルシューティングのため、純正のArduinoUNOも一個は持っておいたほうがいいとは思いますが、試作や壊れてもそこまで問題がないものに関しては、互換機で十分でしょう。

コード

const int analogInPin = A0;
double RawVoltage = 0;
double Voltage = 0 ;

void setup() {
  Serial.begin(9600);
}

void loop() {
  RawVoltage = analogRead(analogInPin);
  Voltage = RawVoltage*0.0196;
  Serial.print("生値 = ");
  Serial.print(RawVoltage);
  Serial.print("\t 変換値 = ");
  Serial.println(Voltage);

  delay(500);
}

アナログPinは今回はA0を使用していますのでA0。
電圧は今回小数以下の数字が欲しいので変数の型はdoubleで計算させます。
アナログPinから取得した値はRawVoltageに格納し、これに係数をかけて元の電圧に戻します。

係数:0.0196はRawVoltage=1に対しての測定電圧であり、数字は以下の計算式を用いて算出します。

(5÷1024)÷(330×(330+1000))

かっこの割り算の前項は、5Vを1024等分した値でありこれを分圧回路で発生した係数で割っています。これを計算し、丸めると0.0196になります。

これをArduinoに書き込むとシリアルモニターから以下が出力されます。

「んーちょっと誤差がある」

本来は12.20Vほど出力があります。シリアルモニターでは11.88Vを示していますので0.32Vほど誤差が生じています。最大20V測定できるとすると0.32Vは1.6%の誤差なのでまあ、現実的な数字なのですが、ここでは実測に寄せようと思います。

Arduinoに取り込まれている電圧は電圧計で測定すると、3.02Vとなってますから

5/1024×12.20÷3.02・・・(入力/出力)比での計算

を計算すると0.0197になります。
これでもまだ誤差が出ます。Arduino取り込み時に電圧降下が起きてるのでしょうか?それとも抵抗の誤差?

実測に寄せるには0.00201に係数を変更すればできますので、とりあえずは係数はこの値で実装してみたいと思います。

まとめ

誤差については少し腑に落ちないところがありますが、一応電圧の測定はできるようになりました。
今回はバッテリーからの電源ではなくACアダプターを12Vに降圧させ使用しているため、安定した電圧を得られていますが、これがバイクになったときはどのような動きをするのかは要観察です。まあ、トラブルに巻き込まれないように日々点検するのが一番ですが・・・
また、電子工作及びDIYは自己責任でお願いいたします。

旅を楽しくするArduino端末を作る。リンク集

その1-不満点を挙げよう- 
その2-不満点をまとめよう-

その3-電圧測定器を作る-
その4-温湿度計を作る-
その5-気圧計を作る-
その6-方位・高度計をGPSで-
その7-12Vバッテリーから電力供給
その8-Ver1作成-
その9-電圧計の誤差とその代替案-
その10-Ver2へアップデート-
その11-LCDをI2Cで制御しよう-
その12-LCDをI2C化-
その13-Ver3へアップデート-
その14-USB充電の仕様に関して-
その15-Arduino言語を用いながらBluetoothで通信できるESP32-
その16-旅Arduino Ver4 スマホアプリ化-

関連記事一覧

  1. LCD

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP