ESP32で電圧測定をしてみるも、ちょっと問題が(内臓ADコンバータをanalogReadで使用)
野暮用ですが、そろそろリポバッテリー用の電圧計を作らねば。
当面の目標は2セルか3セルのリポバッテリーの電圧状態を定期的に検知したいのですが、、、
もっとどんどん進むかと思っておりましたが、思いのほか勉強する事が多くなかなか進みませぬ。
電圧計を作るにはADコンバータの使い方からですし
わざわざマイコンを使うのですから、もっと機能を付けたくなりますし
しかし現状は、やっとこさトランジスタがどういうものかを知った程度で。
なんか前途多難ですn
なんとか気持ちを奮い立たせて、まずは低電圧でADコンバータを使ってみようと思います。
いきなり壊さない様に、まずは3.3Vからのチキンハート。
3.3Vですので、ESP32に内蔵のADコンバータにそのまま突っ込んでも大丈夫とは思いますが、、
将来的には12V以上の計測が目標ですので、分圧してやってみます。
まずは分圧
上限は3.3Vですのでどんな配分でも構わないと思いますが、、
先日Lチカした時に使った220Ωと330Ωの抵抗をそのまま使います。
抵抗の紙束から外すと見分けるのが大変ですので、なるべく再利用しようかと。
新しいの外すと、どれがどれだか判らなくなりそうですしおすし
一応テスターで計っておきます。
220Ωが217Ω(実測)、330Ωが328Ω(実測)でした。
電源を用意
電源は3.3Vを2種類用意します。
ESP32のボードから出ている3.3Vピンは3.27V(実測)
外付け電源の3.3Vは3.22V(実測)でした。
配線、回路図
適当に前回Lチカで使ったGPIO32を挿しておきます。
電源が外にあるとラクでいいですね
回路図はシンプルに、、、
330Ωと220Ωの順番で繋いでるので、GPIO32には3.3Vに対し1.32Vの電圧がかかる、、、筈
※ 220Ω / (330Ω + 220Ω) = 1.32V
たぶん、、、
何でも屠る感じの人が言ってた。
ESP32のADコンバータとスケッチを用意
さて、どんな感じで値が取れるのかさっぱりですので、とりあえずスケッチはシンプルに
#include <Arduino.h>
/*
ADコンバータで電圧計テスト
*/
uint8_t adc_pin = 32;
uint8_t width_bit = 12;
float_t R1 = 330;
float_t R2 = 220;
void setup()
{
// put your setup code here, to run once:
// シリアル通信を開始
Serial.begin(115200);
// GPIOピンモードを設定 32をANALOGに
pinMode(adc_pin, ANALOG);
}
// 電圧に変換する関数
float_t calcPartialtoV(uint16_t _adValue = 0)
{
if (_adValue == 0)
return 0;
// 3.3Vを4096階調するらしいので素直に、、、
float_t _voltage = 3.3 / 4096 * _adValue / float_t(R2 / (R1 + R2));
return _voltage;
}
void loop()
{
// analogReadで値を取得
uint16_t adc_value = analogRead(adc_pin);
// ひとまずは生の値を
Serial.print("ADC Pin Value : ");
Serial.println(adc_value);
// 電圧に変換
Serial.print("ADC Voltage : ");
Serial.println(calcPartialtoV(adc_value));
delay(1000);
}
さてじゃいきますか
外部電源をポチっと
うぇーい、、
なんぞこれ
多分ですけど
多分ですけど
GNDに落としてないので、俗に言う「浮いてる」ってやつじゃないですかねぃ
なるほど、固定しないとIOピンってのはこんなになるんですな・・・
恐ろしい
気を取り直して回路を修正
これでどうや。
再度ポチっと。
なんとなく値が安定した様な感じに。
平均で1392~1393くらいかな。
計算式はソースにありますがこんな感じ。
3.3V / 4096 * 1392 = 1.121484375
1.121484375 / ( R2 / R1 + R2 ) = 2.8037109375 V
※実測値:3.22V
んー? 0.42Vもテスターと違うンゴねぇ・・・
とりあえずこれは置いておいて、ESP32の3.3Vピンからも測ってみます。
1438~1440くらいなので1439くらいかな
3.3V / 4096 * 1439 = 1.1593505859375
1.1593505859375 / ( R2 / R1 + R2 ) = 2.89837646484375 V
※実測 3.27V
こちらもおよそ0.4V(0.38V)ほどテスターよりも低い。
何だかどちらもだいぶ低く出てますね。
ブレッドボード上の接触が悪いのもあるのでしょうけれど、ちょっと釈然としない数値。
折角ですので5Vも計測してみましたので載せておきます。
3.3V(外部) | 3.3V(ESP32) | 5V(外部) | 5V(ESP32) | |
---|---|---|---|---|
analogRead | 1392 | 1439 | 2205 | 2303 |
計算電圧 | 2.80V | 2.90V | 4.45V | 4.65V |
実測電圧 | 3.22V | 3.27 | 4.77V | 4.91V |
実測差 | 0.42V | 0.38V | 0.32V | 0.26V |
んー、なんだろう
ブレッドボードの接触が悪いのは仕方ないとしても、なんか釈然としませぬね
電圧が高くなれば少し差が減る感じですが、、
なんか係数的なものがズレてるんでしょうか
これだけの差があると、ちょっと誤差とは言えず実用は出来ないでするね。
もうちょっと調べてみます・・・
ディスカッション
コメント一覧
まだ、コメントがありません