バッテリーは現代のバイクにとってはエンジン以外で最も重要な部分の一つと言っても過言ではないと思う。
エンジンの始動からセルモーターを回すのに電力が必要だ。もっともカブにはキックペダルもついているので、セルなしでもエンジン始動はおこなえるのだが…。
今回はそんなバッテリーの電圧を監視するための簡易な電圧計を、マルチメーターに備えようというものである。
バッテリー電圧の話
昔、車のバッテリーは12V、バイクのバッテリーは6Vが普通だったのだが、いつ頃からそうなったのか、今はバイクのバッテリーも12Vになっているらしい。
もちろんスーパーカブに搭載のバッテリーも12Vだ。
電圧を測るのだからこの12VをSeeeduino XIAOにぶち込んで測定すればいいのだけれど、そうは簡単にことは運ばない。Seeeduino XIAOのピン入力の限界値は3.3Vになっているからだ。
12Vから3.3V以下に電圧を下げなければいけない。そうやって測定した電圧を一定の係数を乗じて12V換算で求めることになる。冒頭「簡易な」と書いた理由はここにある。素直に12Vを計測しているのではないということだ。
12V → 3.3V
電圧を下げるにはいろいろな方法があるのだが、今回は下げた電圧を計測して12V換算するという目的があるので、抵抗器による分圧をおこなう。
抵抗分圧回路
抵抗分圧とは、要は電気が直列に繋いだ抵抗を通るとき抵抗値によって電圧が分割されるというもの。分割される電圧は接続される抵抗値の割合に応じることになる。
詳しいことは以下のサイトで。
参考サイト電子回路設計 入門サイト(抵抗分圧回路)
https://www.kairo-nyumon.com/resistor_divider.html
つまり今回の場合は12Vを大体3Vくらいにするわけだから1:3くらいの比率になるような抵抗器を用意すれば良いということになる。しかしギリギリに設定してバッテリー電圧が上がってしまった時にSeeeduino XIAOの入力限界を超えてしまうと破壊することになってしまうので、少し余裕を持たせた設計にした方がいいということで、200Ωと1kΩの2つを使った。
電圧の分割は比率に依存するので、抵抗値については今回使ったパターンに限らない。それこそいろいろなパターンが考えられうるので、手持ちの抵抗器があるなどそれぞれに応じて考えてほしい。その際に参考になるネット上のツールを一つご紹介しておく。
参考サイト系列抵抗の選定ツール
https://www.kairo-nyumon.com/resistor_divider.html
ブレッドボード上の接続
実際の接続は下の写真のようになる。ちなみに12V電源はその辺にあった何かのAC-DCアダプターを利用した。
電圧を計測するスケッチ
接続ができたところでスケッチ(プログラム)を書いていこう。今回はとても簡単だ。
void setup() {
Serial.begin(9600);
#ifndef ESP8266
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
pinMode(3, INPUT);
}
void loop() {
float rawvoltage = analogRead(3);
// 電圧の計算
// 入力を電圧に変換、3.3V max が 0〜1023 の1023段階で入力されるので、
// 3.3 ÷ 1023 = 0.0032258065
// 分圧回路に使用した抵抗器が 1000kΩ+200kΩ なので
// 降圧時の係数が
// 200 ÷ 1200 = 0.1666666667
//
float volt = rawvoltage * 0.0032258065;
float v = volt / 0.1666666667; // 12Vになるように
Serial.print(v);
Serial.print(" V");
Serial.println();
delay(1000);
}
Seeeduino XIAOに入力された電圧は0〜1023の段階で表現されるので、それを3.3Vの電圧表現に変換したのち、さらに12V換算するということになる。
シリアルモニタでのモニタリング
この実験段階では12V電源とSeeeduino XIAOの電源が異なるので、シリアルモニタでモニタするときはSeeeduino XIAOのGNDと12V電源のGNDを繋いでやる必要がある。
コメント
[…] Arduino互換機を使ったマルチメーターの制作〜その4〜バッテリー電圧を測る […]