LoginSignup
0
0

wio terminal でアナログ信号入力(電圧値に変換)

Last updated at Posted at 2023-09-24

アナログ信号入力

wikiを見ても,電圧値に対してどんな数値が得られるのかわからなかったので,テストしてみました

ソースコードはwikiそのまま

void setup() {
    Serial.begin(115200);
    pinMode(A0, INPUT);
}
void loop() {
    int loudness = analogRead(A0);
    Serial.print("Loudness: ");
    Serial.println(loudness);
    delay(50);
}

適当なPINとアナログ信号入力用PINのA0をつないでみると,

  • GND接続 : loudness = 0
  • 3V3接続 : loudness = 1023
  • 5V接続 : loudness = 524

となり,おそらく0~1023の間の数値として得られます.
また,3.3Vを超えるとオーバーフローするみたいです.

線形性の確認

5Vの入力値を,オーバーフローを考慮して loudness = 524 + 1024とすると,
image.png
線形になり,単純な変換で電圧値を得られそうです.
今回必要な電圧は3.3V以下だったので,とりあえず以下のような関数を作成しました.

double AIN2V(double AIN){
  // V is 0[V] <= V <= 3.3[V]
  // 3.3[V] -> AIN = 1023
  // 5.0[V] -> AIN = 524 = (1023 + 524) - 1023

  double V = 3.3/1023 * AIN;
  return V;
}

入力値AINと電圧値Vの関係は以下の通り.

\begin{align}
3.3 : 1023 &= V : AIN \\
V &= \frac{3.3}{1023} \times AIN
\end{align}

電圧測定

最終的なソースコードは以下の通り.

double AIN2V(double AIN){
  // V is 0[V] <= V <= 3.3[V]
  // 3.3[V] -> AIN = 1023
  // 5.0[V] -> AIN = 524 = (1023 + 524) - 1023

  double V = 3.3/1023 * AIN;
  return V;
}

void setup() {
    Serial.begin(115200);
    pinMode(A0, INPUT);
}
void loop() {
    double loudness = analogRead(A0); //型を int から double に変えている
    double V = AIN2V(loudness);
    // serial output
    Serial.print("Loudness: ");
    Serial.println(loudness);
    Serial.print("V: ");
    Serial.println(V);
    delay(50);
}

適切に出力できています.

Loudness: 232.00
V: 0.75

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0