11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【Arduino/ 小ネタ①】アナログ入力端子はデジタル入出力端子として使うことも出来ます!

Arduino関連のブログ記事を書くようになり、ご質問や私の認識違いによる間違い等のご指摘などこれまで多くのコメントやお問い合わせメールを頂きました。

特に多く頂いた質問などは該当する記事内に【追記】という形で書き加え更新しています。
そしてArduinoに関する基本的な部分の質問は多く頂くことから、それらを数回に分けて簡単にまとめてご紹介していきたいと思います。

今回はArduinoのアナログ入力端子についてです。
Arduinoボードにはデジタル入出力端子の他にアナログ入力端子も搭載されています。
このアナログ入力端子ですが、Arduinoではデジタル入出力端子として使うことも出来ます。
これって意外と知られていないのですかね?
これまで結構ご質問を頂きました。

Arduinoのアナログ入力端子はデジタル入出力端子として使うことも出来る!

Arduinoはマイコンボードなので各種Arduinoボードにはデジタル入出力端子(I/O端子)が搭載されています。

Arduinoボードによってその数は異なりますが、例えばよく使われるArduino UnoにはD0~D13までの計14本のデジタル入出力端子が搭載されています。
デジタル信号(HIGH or LOW)でやり取りを行うので、スイッチのON/OFF判定やセンサーなどとのやり取りで使うことが出来る端子ですね。

またArduinoボードには、これらデジタル入出力端子の他にアナログ入力端子も搭載されています。
ジョイスティックやポテンショメーターなどのアナログ値を計測するのに使える端子です。

Arduino UnoではA0~A5までの計6本、またNanoやPro miniなどではA0~A7までの計8本のアナログ入力端子が搭載されています。

そしてこのアナログ入力端子ですが、デジタル入出力端子として使うことも出来ます。
Arduinoの使用用途によりデジタル端子が足りなくなった場合に簡単な設定によりデジタル端子として使うことが出来るようになります。

Arduinoにディスプレイやセンサー、スイッチなど多くのデバイスを接続するとデジタル入出力端子が足りなくなるといったご質問をこれまで何度か頂きました。
Arduinoには多くのアナログ入力端子も搭載されているので、これをデジタル入出力端子として使えば解決できる場合は多いと思います。

アナログ入力端子をデジタル入出力端子に設定する

通常デジタル入出力端子の[入力 or 出力]の設定はpinMode();関数を使って行います。
D2端子を出力端子として使いたいなら、pinMode(2, OUTPUT);
D3端子を入力端子として使いたいなら、pinMode(3, INPUT);
といったようにsetup()関数内でこれを定義します。

そしてアナログ入力端子はデジタル入出力端子として使うことも出来ます。

やり方は非常に簡単です!
デジタル入出力端子と同様にpinMode();関数を使って入力または出力を設定すればデジタル入出力端子として使えるようになります。

アナログ入力端子のピン番号について

その前に少しアナログ入力端子のピン番号について書いておきます。
デジタル入出力端子の指定は[D0端子]なら[0]、[D5端子]なら[5]といったように数字で指定しますが、アナログ端子のピン番号ってみなさんはどのように指定されているでしょうか?

これには2通りあります。
まず1つ目ですが、Arduino Unoではデジタル入出力端子のピン番号の指定は先述のようにD0~D13は[0~13]となり、そしてアナログ入力端子A0~A5は[14~19]になります。
このピン番号を使いpinMode();関数で入力/出力を指定すればデジタル入出力端子として使うことが出来ます。

アナログ入力端子A0をデジタル出力端子として使いたいならpinMode(14, OUTPUT);
アナログ入力端子A5をデジタル入力端子として使いたいならpinMode(19, INPUT);
といった感じですね。

上記はArduino Unoの例ですが、ボードによって搭載されているアナログ/デジタル端子の数は異なります。

例えばArduino nanoやPro Miniではデジタル入出力端子の数は同じですが、アナログ入力端子はA0~A7までの8本搭載されています。
A0~A7までのアナログ入力端子をデジタル入出力端子として使いたい場合のピン番号の指定は[14~21]ということになります。

またArduino Megaではデジタル入出力端子はD0~D53、アナログ入力端子はA0~A15と非常に多くなっています。
デジタル入出力端子の指定は同様に[0~53]となり、続いてアナログ入力端子のピン番号の指定は[54~69]ということになります。
同様にこのピン番号を使いpinMode();関数で指定することによりデジタル入出力端子として使うことが出来ます。

このようにArduinoのデジタル入出力端子が足りない場合に任意のアナログ入力端子をデジタル入出力端子として使うことが出来るようになります。

マクロ定義されたピン番号を使う方法が一般的

Arduinoのアナログ入力端子は、pinMode();関数で入力(INPUT)または出力(OUTPUT)に設定することによりデジタル入出力端子としても使える事が分かりました。

しかし上記のようなピン番号(数字)を指定する方法では、どの番号がどのアナログ端子に対応しているのか非常に分かりにくいですよね!

そこでArduinoではあらかじめマクロ定義されているピン番号を使ってアナログ端子の指定を行うこともできます。
この指定方法を使うのが一般的?だと思います。

例えばアナログ入力端子A0をデジタル出力端子として使いたい場合、単純にこのように記述する事が出来ます。

pinMode(A0, OUTPUT);

これは先程のようにpinMode(14, OUTPUT);と記述しても同じですが、上記のように記述した方が感覚的に分かりやすくなります。

アナログ入力端子をデジタル入出力端子として使う場合のピン番号の指定は、Arduinoボードを見れば(A0/A1/A2・・・)とプリントされているので、これをそのまま指定することが出来るという事です。

ここで注意したいのが、本来のデジタル入出力端子です。
pinMode(D2, OUTPUT);のように指定するとコンパイルでエラーとなるので、デジタル入出力端子の方はpinMode(2, OUTPUT);と指定するのをお間違いなく!

Arduinoのデジタル・アナログ端子の基本的な使い方は、こちらの記事も参考にして下さい!

【Arduino入門編⑦】ジョイスティックの制御方法!デジタル・アナログ入力の解説です!
【Arduino入門編⑥】可変抵抗を使いアナログ値を読み取る。アナログ値から実際に入力されている電圧を計算。アナログ入力端子の解説です!

デジタル入出力端子として設定できない端子もあります

Arduino NanoやPro MiniではUnoにはない[A6/A7]というアナログ入力端子があります。
この2本の端子はアナログ入力のみで使える端子となり、デジタル入出力端子として設定する事が出来ないので注意が必要です!

デジタル入出力端子として設定できるのは、Unoと同様にA0~A5までの6本のアナログ入力端子のみとなります。
ATmega328Pを使った他のArduinoボードでも同様です。

【電子工作】Arduino Nanoの基本仕様・ピン配列まとめ!
【Arduino】Arduino Pro Miniを使ってみる。小型で電子工作用途の組み込みに便利に使えそうですね!

最後に!

Arduinoの使用用途によっても変わってくるかと思いますが、アナログ入力端子が足りなくなる事は稀で、どちらかと言えばデジタル端子の方が足りなくなる事の方が多いと思います。

Arduinoには多くのアナログ端子も搭載されているので、これをデジタル端子としてうことも出来るのは便利ですね!

結構ご質問を頂く事が多い内容のものですがArduinoの基本なので知っておくと便利で、デジタル端子が足りないなんていう事態には滅多に陥らないと思います。

・・・とは言っても最近製作したこちらのArduino無線コントローラーはArduino Nanoの全てのアナログ/デジタル端子を使い切りギリギリセーフとう感じでした。

【電子工作】Arduinoを使った無線コントローラー(送信機)製作ノート①!KiCadの基板設計から基板発注(JLCPCB)までの話(nRF24L01)

どうしても物理的にArduinoのデジタル端子が足りなくなるという場合に拡張する方法はいくつかあります。
ブログでこれまで紹介したものではI/Oエキスパンダーを使う方法もあるので参考になればと思います。

【Arduino入門編㉚】マイコンのデジタル端子(I/O)不足を解消!『I/Oエキスパンダー(MCP23017)』の基本的な使い方!

【これから始めるArduino】ELEGOO Arduinoスターターキットを比較!多くの作例を試せる『Arduinoスターターキット』からArduinoに触れてみるのはオススメです!

コメントを残す