ESP32活用② アナログ入力(1)電圧と読み取りの関係をグラフ化

 ESP32のアナログ入力に、精度がよくない、使えないという記事を目にしたので、調べてみました。アナログ入力で実際の電圧を測定した場合、どのくらいの精度になるか確認します。

アナログ入力の測定

 アナログ入力の測定はESP32-DevKitC-D32、ESP32-DevKitC-VEのADC6(DI34)の開発ボードのピンに、3.3Vの電源を10kΩの半固定抵抗で分圧し加えます。3.3Vの電源は、開発ボードの3V3と表示された3.3V電圧が出力されている端子から得ています。

 A6DはESP32-DevKitC-D32のアナログ・ポートA6の、A6EはESP32-DevKitC-VE のアナログ・ポートA6の読み取り値です。Vは測定時に加えた電圧をテスタで読み取った数値です。

電圧と読み取りの関係をグラフ化
 
 EXCELの電圧は同じ列でA6DとA6E、それぞれ並べます。ただし電圧は共通なので、次に示すようにA6Dのデータの後にA6Eのデータを並べます。
 この後、電圧の欄で並び替えを昇順で行うと、データが電圧の順番に並びます。電圧の範囲を決めて検討できるようになります。


 

散布図のグラフを作る

 データの範囲を決めて、メニューバーの挿入>散布図 を選択すると、7種類の散布図のサンプルが表示されます。最初に表示されている点の表示のみのサンプルを選択すると、次のようなグラフが表示されます。青の点がESP32-DevKitC D32、橙の点がESP32-DevKitC-VE です。チップのバージョンが異なっても、ほぼ同じ結果が得られています。


 
測定値から電圧を得るのが目的

 入力値から電圧を求め、それぞれ接続されるセンサなどのデバイスに応じて電圧から目的の値を計算します。そのためには、グラフから回帰式を求めておいて、入力値から電圧を計算します。回帰式は横軸をX軸として結果をY=f(X)の関数として求めます。そのため、上記のグラフのX軸とY軸を入れ替える処理を行います。

データソースの選択

 グラフの面をマウスの右ボタンをクリックして表示されるリストから「データソースの選択」を選択すると、次の画面が表示されます。A6D、A6EのX軸、Y軸の設定を変更します。


 
A6Dを変更する場合

 A6Dを選択して編集ボタンをクリックすると、次に示す「系列の編集」の画面が表示されます。この画面でX軸、Y軸で設定された範囲を入れ替えます。 


 
 この場合は、次に示すようにX軸のEをFにY軸のFをEに変更します。


 
A6Eの場合

 A6Eの場合もY軸には電圧値がセットされているE列を設定し、X軸には入力値が設定されているG列に設定を入れ替えます。


 
 その結果は、次のように入れ替わります。今回は系列がA6DとA6Eの二つなので、デフォルトでグラフを作成すると電圧が横軸になります。グラフを作成した後にX軸とY軸を入れ替える方法が一番です。系列が一つの場合は、電圧を右側に配置すると電圧が横軸になります。


     
 A6Dの青のドットをマウスの右ボタンでクリックすると表示されるリストにある「近似曲線の書式設定(F)」を選択します。左側に「近似曲線の書式設定」のウィンドウが表示されます。その中で「線形近似」と下の方にある「グラフに数式を表示する(E)」を選択すると、次に示すようにグラフ上のA6Dの測定点を示す式、

    Y=0.0008X+0.1416

が表示されます。同様に、A6Eの測定点をマウスの右ボタンでクリックしてA6Eの次の式、

    Y=0.0008X+0.1611

が表示されます。


 
 
 上に示すように、式にマウス・ポインタを乗せると、その式の基となるデータのラベル名が表示されます。

グラフの両端が直線からずれる

 0Vから0.2Vくらいと2.8V以上では、回帰式を示す直線からずれが生じています。この部分は測定対象外として対応します。

測定対象の範囲の回帰式を求める

 A6DとA6Eの0.17Vから2.8Vの範囲のデータを選択し、グラフ化して回帰直線を次のように求めました。

   A6D Y=0.0008X+0.1334
   A6E Y=0.0008X+0.1586

 アナログ入力の読み取り値から、電圧を求める場合は上記の式が利用できます。切片に少しばらつきがあります。2.5V入力に対して0.025Vくらいの差、1%くらいの差になります。

 傾きの0.0008は変わらないので、2Vくらいの電圧を加えて、

  切片=電圧 - 0.0008 × (読み取り値)

で回帰式の切片は簡単に求められるので、実測値を利用するのも簡単です。

直線性のある部分を用いれば十分利用できる

 数は少ないのですが、ESP32-DevKitC- D32、ESP32-DevKitC-VEとバージョンが異なる個体間でも同様な回帰式で同様な範囲での直線性が認められました。ESP32のアナログ入力について否定的な記事が目につきましたが、測定器を作るわけでもない、一般的な利用で困ることはないように思います。
 次回は、繰り返し測定したときのばらつきなどの検討を行います。

(2021/4/3 V1.0)

<神崎康宏>

前へ

STEMMAで広がるArduinoの世界㉒Step1 6軸加速度センサLSM6DSOX