◆M5Stackを使い音声と7セグ表示で測定値を教えてくれる
 「トーキングテスター」を作ってみました。(その1)

S__44556302



◆測定項目は、ボタンBにて、操作し、
 電圧、電流、抵抗、ロジックを切り替え、
 音声出力と7セグ表示させます。
 その1は、電圧測定のみ)

◆測定モードは、ボタンCにて操作し、
 手動測定、自動測定、リピート測定としました。
 ①手動測定・・・・ ボタンAを押したとき測定し出力。
 ②自動測定・・・・ 値の変化があった時、測定し出力。
 ③リピート測定・・ 3,5,7,15,31秒間隔でリピート測定し出力。

◆ハードは、出来る限りシンプルにしました。
 (その1は、抵抗2本とコンデンサ1個、ピンヘッダ)

1.準備
①まず最初に、M5Stackで喋らせるためには、音声合成機能を準備します。
  下記URLを参考に、導入し、
  サンプル発生までが出来ていること前提としています。
 *デモ版の為、ナ、マ行が「ヌ」と発音します。

 ダウンロード:SampleTTS.zip

②トーキングテスターは、上記「SampleTTS.ino」を改造します。

③M5Stackの標準のアナログ入力を使って、(GPIO36,35,26)
  電圧、電流、抵抗測定及びロジックテスター作ります。

④アナログ入力については、色々誤差などが有り大変でした。

⑤詳しくは、下記URLが大変参考になり、ありがとうございました。


①ADコンバータのアッテネータの設定を選びます。
 ブログのの内容と実際試してみて、「ADC_11db」を選びました。

以下ブログより抜粋(先人の方に感謝です。)
***********************************************************
  //  analogSetAttenuation(ADC_0db); //アッテネーターを設定
  //  analogSetAttenuation(ADC_2_5db);
  //  analogSetAttenuation(ADC_6db);
  //  analogSetAttenuation(ADC_11db);
***********************************************************
  データーシートのリンクがすぐに出てこないのですが、
  ADCのキャリブレーション方法について書いてある資料には、
  誤差が少ない範囲として、
  Atten0 (0dB)は、  100-950mV
  Atten1 (-2.5dB)は、100-1250mV
  Atten2 (-6dB)は、  150-1750mV
  Atten3 (-11dB)は、 150-2450mV
  となっていて、下の方もダメと書いてありましたorz
************************************************************

②上記より電圧測定範囲を1.2V~27V未満としました。

③電圧測定の入力部分は、抵抗分圧で10倍としました。
 手持ち部品の関係で2MΩと220KΩとしましたが、
 出来れば割り切れる1.8MΩと200KΩが良いです。

 入 力◎-----2MΩ----+->GPIO36(ADC)
              l
    GND◎-+-220KΩ--+
               l         l
               +-0.1uF----+-->GND

④AD変換後の電圧値の算出に
  「(float)ad*3.3/4096.0*10.0」
  ・最後の10.0は、入力抵抗の分圧の分です。
  の式を使って測定値を出していましたが、
  テスター値との乖離があまりにもあり、使えませんでした。

⑤採用したのは、大まかな実測値と計算にて電圧値を算出しました。
 結果、ほぼテスターと同じ様な値となりました。
 ・実測は、2V~27Vまで、1V間隔でAD変換値を記録し、vtblという
  配列に保存しました。2V以下は0.1V間隔でltblに保存しました。
 ・基本値は、配列の位置とし、1Vの間は、1V間の差分を10で割り、
  加算しました。

    計算式の概略
   ad=analogRead(AD_IN);
           for (i=0;i<28;i++) {
             if ((vtbl[i]<=ad)&&(ad<vtbl[i+1])) break;
           }
           v2=vtbl[i+1];
           v1=vtbl[i];
           v3=((ad-v1)/((v2-v1)/10.0))/10.0;
          adt=i+v3;

  シリアル出力
   ad=1076 i=10 v1=1060 v2=1182 v3=0.131148 adt=10.13 
   10.13ボルト.

   ad :AD変換値
   adt:測定電圧値(計算結果)

  以上により、ほぼテスター値とほぼ同じくらいの制度となりました。

3.電流測定、抵抗測定、ロジック測定について

  その1は、抵抗2本とコンデンサ1個の簡易版とし
  電圧測定のみとします。

4.測定値の7セグ表示について

①LCDの表示は、7セグメント表示が、かっこいいかなと色々検索してみましたら

    M5.Lcd.drawString("V",140,200,4);
    M5.Lcd.drawString(String(dt,2),x,80,7);     <--の最後の数値を「7」にすることで
                     7セグ表示出来ました。隠しコマンドかな

*ライブラリの使用例ではサイズとなっている。
  M5.Lcd.drawString("文字列", X, Y, {size}) 指定位置に文字列を表示

5.スケッチについて
 
**整理中

以上