入門者向け

Arduino(アルディーノ)電子工作の基本⑦ アナログ入力で電圧を読み取る

第1回:電子部品を動かそう!
第2回:Arduinoの準備
第3回:デジタル出力でLEDを点灯制御しよう
第4回:LEDの明るさを調節する
第5回:モータを動かし自動制御する
第6回: スイッチの状態を読み取る

 

※この記事は2019年10月21日に公開した記事を再編集し、2022年3月25日に再度公開しました。

前回はスイッチなど、オン、オフの二通りを切り替えられる電子部品の状態を、デジタル入力を利用してArduinoで読み取りました。

 

デジタル入力では、5VをHIGH、0VをLOWとして読み取ることができ、どちらの状態であるかで、スイッチがオンになっているかを判断できます。しかし、電気は5Vや0Vの二通りではなく、さまざまな電圧となっています。例えば、単3電池1本であれば1.5V、家庭用コンセントであれば100Vなどです。

Arduinoでは、このようなさまざまな電圧を読み取るためにアナログ入力ができるようになっています。アナログ入力を利用することで、段階的に変化するような電子部品の状態を読み取れるようになります。例えば、ボリュームを使えば、明るさや音の大きさを調節したり、温度センサから現在の温度を取得することもできます。

01

連載最終回となる今回は、ボリュームを利用したアナログ入力について説明します。

 

目次

  1. アナログ値をデジタル値への変換
  2. Arduinoでのアナログ入力
  3. 電圧を調節できる「ボリューム」
  4. ボリュームでアナログ入力する

 

アナログ値をデジタル値への変換

実際の電圧は1Vや5Vのようにちょうどの値ではなく、5.01342…Vのように小数点以下の数値がいつまでも続く無理数となっています。このような値をコンピュータで直接扱うことはできません。そこで、電子回路では、ADコンバータという仕組みを利用してアナログ値をデジタル値に変換してコンピュータで扱えるようにしています。ArduinoでもADコンバータを標準で搭載しており、アナログ電圧を読み込んでデジタル値に変換することが可能となっています。

ADコンバータでは、対象の電圧を数等分に分けます。Arduino Unoの場合は、0〜5Vの電圧の範囲で読み込みが可能です。この0~5Vの電圧を1023等分にします。ADコンバータで読み込んだアナログの電圧は、等分した一番近い値に変換します。例えば、3Vであれば、「614」が最も近い値となります。この値をArduinoに送り利用できるようにしています。

11

プログラムでは、読み込んだ1023までの整数値をプログラムの処理に利用します。ただし、入力した値は電圧値ではありません。もし、電圧値を知りたい場合は以下のような計算をすることで求めることができます。

12

例えば、ADコンバータからの値が「614」であった場合、1023で割り、5を掛け合わせると、約3Vと求めることができます。

 

Arduinoでのアナログ入力

Arduino Unoでデジタル入力するには、A0からA5までの6端子を利用できます。ここに電子部品などを接続して入力することで、どの程度の電圧がかかっているかを読み取ることができます。ただし、A4、A5はI2Cと呼ばれるデジタル通信にも利用します。センサやディスプレイなどI2Cでのデジタル通信を利用する電子部品を接続する場合は、この端子をアナログ入力として利用できないので注意しましょう。

21

 

電圧を調節できる「ボリューム」

音量や照明の明るさの調節などに使われる電子パーツとして「ボリューム」があります。ボリュームは内部に抵抗素子が配置されており、その抵抗素子上を動く端子が用意されています。この端子を動かすことで抵抗を変化させることができます。

ボリュームは一般的に三つの端子を搭載しています。左右の端子は抵抗の両端に取り付けられています。中央の端子は抵抗素子の上を動くようになっています。右側に中央の端子を動かせば左と中央の端子間の抵抗は大きくなり、逆に左に動かすと抵抗が小さくなります。

31

なお、上の図では抵抗素子を直線状にしていますが、回転式のボリュームは内部の抵抗素子が円形に配置されています。形状が異なっていてもボリュームの基本的な動作は同じです。

Arduinoのアナログ入力では電圧の変化を入力に利用します。しかし、ボリュームは抵抗が変化するのでそのままArduinoにつないでのボリュームの変化を読み込むことができません。そこで、抵抗の変化を電圧の変化に変換します。抵抗の左右の端子に電源とGNDをつなぎます。すると、中央の端子の電圧が端子の位置によって電圧が変化するようになります。例えば、左の端子にGND、右の端子に電源(5V)を接続したとします。中央の端子が右に動けば電圧が上昇し、左に動かせば電圧が下降します。また、左端が0V、右端が5Vとなるため、0から5Vの範囲を変化させることができます。

この中央の端子をArduinoのアナログ入力端子に接続すれば、ボリュームを動かすことで入力が変化できることとなります。

32

 

ボリュームでアナログ入力する

では実際にボリュームを利用してアナログ入力をしてみましょう。以下のような電子部品を利用するので用意しておきます。

ボリューム
41

ボリュームは変化できる範囲の抵抗値が記載されています。Arduinoの入力として利用する場合は10kΩのボリュームを利用すると良いでしょう。また、ボリュームの回転軸につまみを取り付けると動かしやすくなります。

みの虫クリップジャンパー線
42
ボリュームを接続するのに役立ちます。クリップ状のコネクタをボリュームの端子に挟み込んで使います。リンク先の商品は赤2本、黒2本セットです。

各部品が準備できたら、次のように接続します。ボリュームはブレッドボードに差し込めないため、みの虫ジャンパー線を使ってArduinoへ直接接続します。この際、みの虫クリップの金属部分が、隣のクリップ部分と触れないように注意します。

43

プログラムは次のように作成します。

アナログ入力端子に接続した状態を確認するには、11行目の「analogRead()」に対象の端子を指定します。すると、端子の電圧を0から1023の値で入力します。もし電圧を知りたい場合は、13行目のように計算して電圧に変換しています。

プログラムをArduinoへ転送し、シリアルモニタを表示します。シリアルモニタの表示方法については、第6回の記事を参照ください。

すると、「Value:」の後にADコンバータでデジタル化した値を、「Volt:」の後に計算で電圧に変換した愛が表示されます。ボリュームを動かすと、値が変化することがわかります。

44

* * *

今回までの7回の連載でArduinoの基本となる使い方を紹介しました。この連載で説明した内容を基本としてさまざまな電子部品を動かしたり、作品制作をしてみてください。半年に渡る連載を最後までお読みいただき、ありがとうございました!

 

今回の連載の流れ

第1回:電子部品を動かそう!
第2回: Arduinoの準備
第3回:デジタル出力でLEDを点灯制御しよう
第4回:LEDの明るさを調節する
第5回:モータを動かし自動制御する
第6回:スイッチの状態を読み取る
第7回:アナログ入力で電圧を読み取る(今回)
まとめ:Arduino電子工作のまとめ! マイコンを使った電子工作基礎の基礎編

smartwatch_ebook_banner_580-230
アバター画像

札幌在住のライター。電子工作やパソコン、Linux、スマートフォンなどの記事を執筆。「ラズパイマガジン」や「日経Linux」へ記事の執筆。著書として「これ1冊でできる!ラズベリー・パイ 超入門 」(ソーテック社)、「電子部品ごとの制御を学べる!Arduino 電子工作 実践講座」(ソーテック社)、「Arduino[実用]入門」(技術評論社)など。 現在、ものづくりをしたいメンバーを集めて電子工作を利用した作品などを制作する「サッポロ電子クラフト部」を主催(https://sapporo-elec.com/)。誰でも参加可能ですので、ご参加をお待ちしています。

IRKitではじめるIoT