質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

組み込み開発

組み込み開発とは、スマートフォンや家電、自動車などに組み込まれているコンピューターシステムの開発のことです。特定の用途に特化しており、限られた機能のための開発を指します。組み込み開発で作られた機器を組み込み機器と呼び、近年ではPCのオペレーションシステム(OS)にも採用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

受付中

M5Stackで自動車のバッテリー電圧を計測したいが思ったように動作しない

flds
flds

総合スコア1

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

組み込み開発

組み込み開発とは、スマートフォンや家電、自動車などに組み込まれているコンピューターシステムの開発のことです。特定の用途に特化しており、限られた機能のための開発を指します。組み込み開発で作られた機器を組み込み機器と呼び、近年ではPCのオペレーションシステム(OS)にも採用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

2回答

0評価

0クリップ

326閲覧

投稿2022/01/13 05:46

よろしくお願いいたします。
M5stackを用いて自動車のバッテリー電圧を計測するコードを書いていますが、思ったように動作してくれなくて困っています。

回路は分圧回路を構成しており、ハードウェアに問題はなさそうです。
分圧回路の構成は

Vcc(12v~16v)→ 1k2Ω → Vout → 300Ω → GND

です。

ソフトウェアはいくつかのパターンのコードを試してみましたので下記に記します。

C言語

#include <M5Stack.h> #include <M5StackUpdater.h> #include "BluetoothSerial.h" BluetoothSerial SerialBT; const int ADCPin = 36; const float VCC = 3.3; const int ADC = 4096; const int R1 = 1200; const int R2 = 300; float ADCVolF = 0; float ADCRaw = 0; void setup() { // put your setup code here, to run once: M5.begin(); M5.Power.begin(); Wire.begin(); Serial.begin(9600); SerialBT.begin("M5Stack"); pinMode(ADCPin, INPUT); M5.Lcd.setTextColor(BLACK); M5.Lcd.setTextSize(3); } void loop() { M5.Lcd.fillScreen(WHITE); M5.Lcd.setCursor(0,0); ///////ADC入力値を補正/////// ADCRaw = analogRead(ADCPin); ADCVolF = ADCRaw * (VCC/ADC)/(R2*(R2+R1)); M5.Lcd.printf("%2.2f", ADCVolF); M5.Lcd.println("mV"); M5.Lcd.println(ADCRaw); delay(2500); // put your main code here, to run repeatedly: }

以上のコードを実行すると、LCD画面には

0.00mv(固定。一切変動なし)
3200(おおよそ3000~3300の間で変動が見られます)

と、表示されます。

実現したいこととしては、Lcd画面とシリアル通信先のロガー(teratarmなど。使い方については大体理解しています)に現在の電圧をVで上位2桁、小数点3桁で表示したいです。
ほかにもコードを変更してトライ&エラーしたところ、以下のような結果になりました。

■変更行
以下のコードを二段目の数値に置き換え

C言語

ADCVolF = ADCRaw * (VCC/ADC)/(R2*(R2+R1));

置き換え後

C言語

ADCVolF = ADCRaw *  2.23609

これは上段の置き換え前のコードで分圧回路の電圧を復号している計算式を手計算して代入しています。
この結果、LCDの電圧値の値が

781400.0123mV(観測写真を撮り損ねましたが、こんな不明な桁数で表示されました)

というようになりました。
久々のコーディングで四苦八苦といったところです。

長々と書いてしまい申し訳ありません。
ご回答御指南よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

組み込み開発

組み込み開発とは、スマートフォンや家電、自動車などに組み込まれているコンピューターシステムの開発のことです。特定の用途に特化しており、限られた機能のための開発を指します。組み込み開発で作られた機器を組み込み機器と呼び、近年ではPCのオペレーションシステム(OS)にも採用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。