Arduinoその他工作

Arduino電子工作の基本⑥ スイッチの状態を読み取る

本連載では、ここまでLEDやモータをArduinoから制御してきました。

連載第3回:Arduino電子工作の基本③ デジタル出力でLEDを点灯制御しよう
連載第5回:Arduino電子工作の基本⑤ モータを動かす

この場合に利用したのが、デジタル出力です。デジタル出力を使うことでデジタル出力端子をHIGH(5V)、LOW(0V)のふたつの状態に切り替えられ、LEDやモータの制御に活用できました。

また、電子部品の状態を確認することも可能です。デジタル出力端子は、デジタル入力に切り替えることができます。こうすると、端子にかかっている電圧を調べ、「LOW」と「HIGH」の2通りで入力されます。この入力値によって他の電子部品を制御するといった活用ができます。例えば、デジタル入力がHIGHの状態の場合はモータを動かし、LOWの場合はモータを止めるなどです。

01

実際には、スイッチなどの電子部品を利用して、デジタル入力端子の状態を0Vや5Vに切り替えることとなります。
今回は、そんなスイッチを利用したデジタル入力の方法について説明します。

[目次]
・Arduinoでのデジタル入力
・タクトスイッチを使って入力を切り替える
・タクトスイッチで入力する
・Arduinoに内蔵するプルアップを使う
・スイッチを押したらLEDを点灯する

Arduinoでのデジタル入力

Arduino Unoでは、デジタル出力に利用していたD0からD13までの端子をデジタル入力として利用できます。プログラムでデジタル入力モードに切り替えることで、端子の状態を確認することが可能となります。

入力は、0Vの状態であれば「LOW」、5Vの場合は「HIGH」となります。なお、プログラムではLOWは「0」、HIGHは「1」という値として読み込まれます。この入力値を確認して条件分岐するなどして動作を変化させるのに利用できます。

11

実際にArduinoでデジタル入力を試してみましょう。ここでは、デジタル5番端子にジャンパー線を使って、5V電源、GNDに接続した変化を確認してみます。以下のプログラムを作成してArduinoへ転送します。

4行目では、pinMode()で「INPUT」と指定することで、今回利用するデジタル7番端子を入力モードに切り替えています。これで、端子の状態をプログラムから確認できるようになります。

11行目のdigitalRead()で指定した端子の状態を取得し、valuie変数に格納しています。もし、0Vであれば「0」、5Vであれば「1」が格納されます。

取得した状態を確認したい場合には「シリアルモニタ」を利用します。Arduinoでは、パソコンからプログラムの転送に利用したUSBケーブルを使ってArduino側からパソコンに向かってデータを送ることができます。このデータのやりとりにはシリアル通信を利用しています。デジタル入力で取得した状態を、シリアル通信を使えば、状態をパソコンに送って確認できるようになります。

プログラムでシリアル通信を使いたい場合は、5行目のSerial.begin()で初期化します。この際、通信速度を指定しておきます。あとは、12行目のSerial.println()で値を指定することでパソコン側にデータを送信できます。今回は、デジタル入力の状態を格納したvalue変数の内容を送っています。

シリアル通信でArduinoから送られてきたデータを確認するには、Arduino IDEに搭載する「シリアルモニタ」を利用します。シリアルモニタを利用するには、Arduino IDEの右上にある「シリアルモニタアイコン」(虫眼鏡のアイコン)をクリックします。すると、シリアルモニタの画面が表示されます。右下にある通信速度をプログラムのSerial.begin()で指定した通信速度(ここでは9600)と同じにします。すると、画面上に0または1が表示されます。

12

次にジャンパー線を、デジタル7番端子に差し込みます。もう一方をGNDに接続するとシリアルモニタの表示が「0」となります。つまり、デジタル端子が0Vになっていれば「0」(LOW)の状態とわかります。同様にデジタル7番端子と5V電源に接続すると、表示が「1」(HIGH)に切り替わるのがわかります。

13

これで、端子の状態によって入力が変化するのが確認できました。

タクトスイッチを使って入力を切り替える

では、スイッチを使って、デジタル入力の端子をHIGH、LOWの状態に切り替えられるようにしてみましょう。ここでは、押しボタンスイッチの「タクトスイッチ」を利用します。

21

タクトスイッチは、上部のボタンを押下すると内部の回路が接続し、電気が流れる状態になります。離すと切断され、電気が流れなくなります。一般的に四隅に端子を搭載しており、上の図のように配置した場合に、右側と左側の端子の間がスイッチとして働くようになっています。なお、右側の上下の端子および左側の上下の端子は常につながっています。

タクトスイッチの一方の端子をデジタル端子に接続し、もう一方の端子をGNDに接続しておけば、スイッチを押すことで内部の回路が接続され、端子がGNDに直結します。こうすることで、スイッチを押せば、デジタル入力が「HIGH」になると判断ができます。

22
しかし、スイッチを押していない状態では、デジタル端子に何も接続されていないこととなります。この状態では、端子にかかる電圧が不安定になってしまいます。不安定であると端子を手で触ったり、電池などが近づくなどすると入力が変化してしまうことがあります。
そこで、スイッチを利用する場合には「プルアップ」または「プルダウン」という回路を接続するようにします。これは、デジタル端子に抵抗を介して電源またはGNDに接続して状態を安定化させる方法です。電源側に接続した場合をプルアップ、GND側に接続した場合はプルダウンといいます。ここでは、プルアップを使った例で説明しますが、プルダウンでも原理は同じです。

23

プルアップをした場合、スイッチを押していない状態では、抵抗を介して電源に接続した状態になります。こうなると、デジタル端子は電源に接続されたと同じ状態になり、入力は5V(HIGH)に安定することとなります。また、スイッチを押すと、デジタル端子はGNDと直結した状態となるので、入力は0V(LOW)に切り替わります。
なお、電源とGNDが接続された状態になりますが、抵抗(一般的に10kΩ程度)を挟んでいるため少量の電流が流れる程度となるため、ショートするような恐れはありません。

タクトスイッチで入力する

では、実際にタクトスイッチを利用して入力してみましょう。以下のような電子部品を利用するので用意しておきます。

タクトスイッチ
31
タクトスイッチは、さまざまな色が販売されています。好きな色を選択して問題ありません。

抵抗10kΩ(1/4W)
32
プルアップに利用する抵抗です。10kΩの抵抗には、「茶黒橙金」とカラーコードが印刷されています。

各部品が準備できたら、次のように接続します。タクトスイッチは、ブレッドボード中央にある溝をまたぐようにして差し込みます。

33

次に、前述したデジタル7番端子の入力をシリアルモニタで確かめるプログラムをArduinoに転送します。すると、スイッチを離した状態では「1」(HIGH)と表示され、スイッチを押すと「0」(LOW)と変化します。

Arduinoに内蔵するプルアップを使う

Arduino Unoでは、デジタル端子に「プルアップ」機能が搭載されており、プログラムから有効化することが可能となっています。内蔵のプルアップを使うことで、外部に抵抗を接続することが必要なくなります。スイッチだけを接続するだけでよいため、手間も少なくなります。

41

プルアップをプログラムで有効にするには、次のようにします。

4行目のデジタル端子のモードの設定で「INPUT_PULLUP」と指定するだけです。これで内蔵のプルアップが有効化され、ボタンが押されていない状態でもHIGHの入力を安定化させます。なお、プルダウンは搭載していないので注意しましょう。

スイッチを押したらLEDを点灯する

スイッチの入力は、他の電子部品の制御にも活用できます。そこで、Arduinoに搭載するLED(デジタル13番端子)を利用して、スイッチを押すとLEDが点灯し、スイッチを離すとLEDを消灯させてみましょう。利用する回路は、前述したスイッチだけをデジタル端子に接続するのと同じです。プログラムは次のように作成します。

14行目でデジタル入力した値が「1」であるかを確認します。Arduinoのプログラムでは、「1」を「HIGH」、「0」を「LOW」と記載しても同じです。意味がわかりやすい「HIGH」や「LOW」を利用するようにしましょう。

もし、入力がHIGH(ボタンを押していない)ならば、15行目が実行され13番端子をLOWに切り替えてLEDを消灯します。入力がHIGHでない(ボタンを押している)ならば、17行目が実行され13番端子がHIGHに切り替わりLEDが点灯します。プログラムをArduinoに転送し、タクトスイッチを押すとLEDが点灯するのが確認できます。

* * *

これでスイッチを使った入力についてできるようになりました。次回は、ボリュームなどの状態の読み込みが可能なアナログ入力について説明したいと思います。

——————————————————————————————————————–

※抵抗器に関する基礎知識をもっと知りたいならローム「エレクトロニクス豆知識」をチェック!

smartwatch_ebook_banner_580-230
福田和宏

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