Arduino UNO R4のAnalogReadで14bit階調 | 技プログ
Youtubeでも活動中

チャンネル登録してくれたら喜びます。

このボタンで簡単にチャンネル登録!
PR
ご注意

本ブログには、アフィリエイトを用いた広告が掲載された記事が含まれる場合があります。

ご注意

本ブログには、アフィリエイトを用いた広告が掲載された記事が含まれる場合があります。

Arduino UNO R4のAnalogReadで14bit階調

analogread-powered-up-to-14-bit-grayscale-eyecatch

 今回は、2023年に発売されたArduino UNO R4で進化した
Analogピンの機能について解説します。

 Arduinoシリーズには昔からAnalogピンがついており、
そのピンにつながっている電圧を測定することができます。
そんなAnalogPinですが、ArduinoUNO R4になったことで、
10bit階調から、14bit階調へと進化しています。

 10bit⇨14bit階調に変更されたことで、
どれくらい分解能が上がったのかについても解説していきます。

この記事を読むことでわかること

Arduino UNO R4でAnalogReadを使って
14bit階調で電圧が測定できるようになる。

自己紹介

サラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

 

PR

10bit⇒14bitとなることでどれくらい分解能が上がるのか?

 それでは、今回Arduino UNO R3からR4にリビジョンが変わったことで、
10bitから14bitの階調になったとお伝えしましたが、
具体的に何がどれくらい良くなったのか?具体的に解説していきます。

 ↓↓↓Arduino UNO R4は通販でも購入可能です。↓↓↓

従来の10bitが表せる分解能は?

 まず従来(Arduino UNO R3まで)の10bitの階調とは、
何をどれくらいで表現できたのでしょうか?

 前提として、AnalogReadという機能は、
Analogピンと呼ばれるピンに入ってくる電圧を読みます。

 Arduinoは基本的にはDC5V駆動で、
中身も5Vですから、0~5Vの間の電圧を読み取って、
それを数値として吐き出します。

 つまり、従来のArduinoでは、
0~5Vを10bit階調で表現することができた。ということになります。

 ここで10bitの解説です。
10bitとは、簡単に言うと、0or1の並びが10桁数字のことを指します。
つまり、00 0000 0000~11 1111 1111の範囲で表現します。

 0or1で表現なので当然2進数なわけですが、
これを10進数に変換してあげると、0~1023で、
1024分割ということになります。5Vを1024分割ですね。

 分解能として計算してあげると、
5/1024 = 0.00488…となりますので、
およそ1の差で、0.005Vの差が見える。ということになりますね。

14bitになると表せるようになった分解能は?

 続きまして、Arduino UNO R4で搭載された14bitの
分解能ですが、こちらも10bitと同様、0~5Vを14bit階調で表現できます。

 14bitですから、00 0000 0000 0000~11 1111 1111 1111の範囲で表現されます。
10進数に直すと、0~16,383となり、16,384の分解能となります。

 5Vを16,384で分割するので、
5/16384 = 0.000305….となります。
およそ1の差で、0.0003Vの差となります。

 10bitの時と14bitの時でどれくらい分解能に差が出ているか分かったと思います。

分解能変化量1あたりのV
10bit約0.005V
14bit約0.0003V
10bitと14bitの場合の分解能の差について

Arduino UNO R4でAnalogReadできるピンは?

 さて、14bitで精度よく電圧が測定できるのはいいことですが、
実際AnalogReadできるピンはどこでもいいわけではありません。
具体的には、Arduino UNO R4には、ANALOG INと記載があります。

arduino-uno-analog-pin

 このA0~A5の6本のみAnalogReadが可能です。
間違ってもDigitalピンでAnalogReadしても無駄ですのでここは覚えておきましょう。

AnalogReadするだけでは従来の10bitのまま。

 接続するところもわかったところで、
AnalogReadする方法ですが、実はただAnalogReadするだけでは、
従来の10bitの分解能しか出せません。※1024階調ですね。

void setup() {
  Serial.begin(115200);
  pinMode(A0,INPUT);
}

void loop() {
  int getLuminus = 0;
  getLuminus = analogRead(A0);
  Serial.println(getLuminus);
}

 これがサンプルコードです。↑↑↑
A0にフォトダイオードを接続して、analogReadしています。
一見何も違和感はないと思います。これで実行すると10bitで数値が吐き出されます。

14bitで指定してanalogReadする方法

 それでは、14bitで指定してanalogReadする方法をお伝えします。
実は1行setup関数の中に追加するだけでOKです。
その一行がこちら。↓↓

  analogReadResolution(14);

 analogReadResolution();を指定することで、
analogReadの分解能を14bit階調と指定することができます。簡単ですね!

 ですから、先ほどのフォトダイオードをA0につないで
電圧をシリアルで吐き出すスケッチは、分解能を14bitで指定してあげるとこうなります。

void setup() {
  Serial.begin(115200);
  pinMode(A0,INPUT);
  analogReadResolution(14);
}

void loop() {
  int getLuminus = 0;
  getLuminus = analogRead(A0);
  Serial.println(getLuminus);
}

 1行追加しただけで14bitの分解能に変わったのがわかると思います。

今回のまとめ:14bitが使えるようになって分解能アップ!

 今回は、Arduino UNO R4になってパワーアップした
analogReadの分解能についてご紹介しました。

 analogReadするときに10bitだとあんまり精度良くないな….
なんて思う場面もあったかと思います。

 その場合は16bitの分解能を持つ外付けのモジュールを使って
分解能を上げたりするわけですが、元から14bitの分解能を持っていれば、
結構そのまま使える気がしますね。※当然時と場合によるとは思いますが…

 次回は、このArduino UNO R4で進化したanalogReadを使って、
光の強さを数値化する実験にチャレンジします!

コメント

タイトルとURLをコピーしました