デジタルピン

デジタルピンの仕組みと設定方法を紹介します。


LAST REVISION: 2022/12/08 18:58


Arduinoのピンは入力か出力に設定することができます。ここではこれらのモードでのピンの機能を説明します。このドキュメントのタイトルはデジタルピンですが、多くのArduino(Atmega)では、アナログピンもデジタルピンと同じように設定して利用することができます。

入力(INPUT)と設定されたピンの特性

Arduino(Atmega)のピンはデフォルトで入力に設定されています。入力として利用するときは、pinMode()を使って明示的に入力と設定する必要はありません。このようにして設定されたピンをハイインピーダンス状態にあるといいます。入力ピンはサンプリング回路に対する要求が非常に小さく、ピンに直列に100メガオームの抵抗が接続されているのと同等です。このため、入力ピンをある状態から他の状態にするのに必要な電流は非常に少ない。このため、静電容量式タッチセンサやLEDをフォトダイオードとして読むこと、RCTimeのような方法でアナログセンサ―読むなどの用途に利用することは有用です。

逆に、pinMode(pin, INPUT)として設定されたピンに何も接続していなかったり、他の回路に接続されていないワイヤーを接続したりした場合、周辺環境から電気ノイズを拾ったり、近くのピンの状態による静電容量により、ピンの状態がランダムに変化します。

入力(INPUT)と設定されたピンのプルアップ抵抗

入力がない場合に入力ピンを一定の状態にすることが有用なことがよくあります。これは、プルアップ抵抗を追加し5Vにしたり、プルダウン抵抗を追加し0Vにすることで実現できます。プルアップ抵抗やプルダウン抵抗は10キロオームの値が適切です。

プルアップ(INPUT_PULLUP)と設定されたピンの特性

Atmegaのチップには、ソフトウェアから利用できる20キロオームのプルアップ抵抗が内蔵されています。内蔵プルアップ抵抗はpinMode()で、INPUT_PULLUPを設定することで利用できます。これにより、HIGHがセンサーオフ、LOWがセンサーオンと、入力モードの動作を反転させます。

プルアップ抵抗の値は利用するマイクロコントローラにより異なります。多くのAVRベースのボードでは20kΩから50kΩの間となることが保証されています。Arduino Dueでは、50kΩから150kΩの間です。正確な値は、ボードのマイクロコントローラのデータシートを参照してください。

INPUT_PULLUPと設定されたピンにセンサーを接続するときは、センサーのもう一方の端子はGNDに接続する必要があります。単純なスイッチの場合、スイッチが開いているときはHIGH、押されているときはLOWとなります。

プルアップ抵抗は入力として設定されたピンに接続したLEDがほのかに光るには十分な電流を供給します。プロジェクトで利用するLEDが動作しているが暗いときには、プルアップ抵抗が影響している可能性があります。

プルアップ抵抗は、ピンがHIGHかLOWかを制御するのと同じ抵抗(内部チップ抵抗位置)で制御されています。このため、ピンがINPUTのときにプルアップ抵抗が有効になるように設定されているとき、そのピンがpinMode()でOUTPUTに切り替えられると、ピンはHIGHになります。これは逆の場合も同様で、HIGH状態の出力ピンがpinMode()でINPUTに変更した場合は、プルアップ抵抗が有効になります。

Arduino 1.0.1以前は、内蔵プルアップ抵抗を以下のように設定することができました。

1
2
pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

注意: デジタルピンの13番ピンは、多くのボードでLEDと抵抗がボードに接続されているので、他のピンに比べてデジタル入力に利用することが難しい。内部の20kΩのプルアップ抵抗を有効にすると、ボード上のLEDとそれに接続されている抵抗が電圧を下げるので、期待した5Vではなく約1.7Vにさがり、常にLOWを返します。13番ピンを入力ピンとして利用する必要がある場合は、pinMode()でINPUTにし、外部プルダウン抵抗を使用してください。

出力(OUTPUT)と設定されたピンの特性

pinMode()を使ってOUTPUTに設定されたピンはローインピーダンス状態にあるといいます。これは、他の回路に相当量の電流を供給できることを意味します。Atmegaのピンは40mAまでの電流を、他のデバイスや回路に供給、もしくは他のデバイスや回路から入力することができます。これはLEDを光らせたり(電流制限抵抗を忘れずに)、多くのセンサを動作させるには十分ですが、リレーやソレノイド、モーターを動かすにはふじゅうぶんです。

Arduinoのピンをショートさせたり、高電流が必要なデバイスを動作させようとすると、ピンの出力トランジスタや、Atmegaチップ全体を壊すかもしれません。この場合はしばしば、マイクロコントローラのピンの一部が故障しますが、残りの部分は充分機能し続けます。このため、特定のアプリケーションでピンから最大電流を引き出す必要がある場合以外は、470Ωや1kΩの抵抗を出力ピンとデバイスの間に接続することを勧めます。

参照

オリジナルのページ

https://docs.arduino.cc/learn/microcontrollers/digital-pins

最終更新日

December 10, 2022

inserted by FC2 system