今回は、2023年に発売されたArduino UNO R4で進化した
Analogピンの機能について解説します。
Arduinoシリーズには昔からAnalogピンがついており、
そのピンにつながっている電圧を測定することができます。
そんなAnalogPinですが、ArduinoUNO R4になったことで、
10bit階調から、14bit階調へと進化しています。
10bit⇨14bit階調に変更されたことで、
どれくらい分解能が上がったのかについても解説していきます。
Arduino UNO R4でAnalogReadを使って
14bit階調で電圧が測定できるようになる。
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 |
Arduino UNO R4でAnalogReadできるピンは?
さて、14bitで精度よく電圧が測定できるのはいいことですが、
実際AnalogReadできるピンはどこでもいいわけではありません。
具体的には、Arduino UNO R4には、ANALOG INと記載があります。
この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を使って、
光の強さを数値化する実験にチャレンジします!
コメント