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チャンネルにアクセス!! ↓↓↓

注意

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

 

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をコピーしました