大好きArduino

Arduino総合情報サイト

Arduinoプログラミング基礎

2.Arduinoのピン使用の基本を押さえよう

2016/08/16

1.Arduinoのピンの種類

Arduinoのピンの使い方は基本的に、1.Digital  2.Analog 3.PWM/PULSEIN 4.Serial  5.I2C の5あります。
この5つの基本機能が一体どんなもので何をするのか?どんな時に使うのか?を押さえておくことが基本として大事です。

1.Digital

●説明
D0,D1,,,,D13などのように示され、UNOなどのボードでは数字のみが表記されています。
指定したピンに対して0Vか5Vに設定(出力)または、指定したピンが0Vなのか5Vなのかを判断するときに使用します。
Arduinoにおいては、0VLOW5VHIGHとして指定します。
digitalWrite(ピン番号,LOW または HIGH) と記述することで、指定したピン番号を0Vか5Vに設定(出力)します。
digitalRead(ピン番号)によって指定したピン番号の現在が0Vなのか5Vなのかを判断します。
この命令を使用する前には、かならず、使用するピンを出力とするのか入力とするのかを指定しておかなくてはなりません。
pinMode(ピン番号,モード)によって指定します。モードにOUTPUTを指定すると出力に、INPUTを指定すると入力となります。
組み込み機器では、ピンにはLEDやスイッチなどを固定で接続します。
そのため、ピンに接続されたものが、入力や出力にころころと変わることはほとんどないため、Arduinoのプログラムでは、1度しか呼ばれない、setup関数の中でpinModeをセットします。

●どんな時に使用するのか
digitalWriteはピンに接続されたLEDを点灯させたり消灯させたり、外部機器に信号を送る場合に使用します。
digitalReadはピンに接続されたスイッチの状態や外部の機器からの信号を読むときに使用します。
※具体的な説明は今後の制作記事に記述します。

2.Analog

●説明
A0,A1,,,などのように示され、ほとんどのボードではA0,A1と表記されています。
ArduinoにおけるAnalogは、ほとんど入力として使用されることが多いのですは、実はアナログ出力という制御もできますが、それは主にPWMとして記述されますので、ここでも、3.PWM/PLUSEで説明をします。
Analogピンについては、digitalのようにあらかじめピンをAnalogで使用するという設定命令が必要ありません。
プログラム中でいきなり命令を使うことができます。
analogRead(ピン番号)によって指定のピンの状態がどんな状態なのかを読み取ります。
状態は、5Vまたは3.3V(使用しているArduinoが動作している電圧)または、使用者が設定した電圧を分解能の最大値として読み取ることができます。
analogReadに接続する信号は、この動作電圧を超えてはいけません。
たとえば、現在のボードが5Vで動作しているときに、0V~5Vのが変化するセンサーを取り付けた場合、0~5Vを0~1023の数字に変換して入力することが可能です。
また、analogReferenceによって基準電圧をソフト的に設定することが可能です。

●どんな時に使用するのか
センサーというのはほとんどがその変化を電圧で出力します。
光を検知するセンサーや音を検知するセンサー、そしてデジタルの温度計など、ほとんどのセンシング部品は、部品そのものからの値を電圧で返してきます。
その電圧をここで拾い、単なる数字から逆算した数値を出せば、目的のデータが得られることになります。

3.PWM/PULSEIN

●説明
デジタルのHIGHとLOWの信号をパルス周期として出力したいとき、またパルス周期として入力したい場合に使用します。
ArduinoのボードではPWMと記述されているデジタルピンがこれに該当します。
出力の場合、analogWriteという関数を使います。
入力の場合には、pulseInという命令を使います。

●どんな時に使用するのか
たとえばLEDの明るさを変えたいとき、モータの速度を変えたいとき、通常の電池に接続していれば、電池の本数を変えたり、なにがしかの抵抗をいれたりして、電圧をコントロールすることで、明るくなったり暗くなったりさせることは可能ですが、このようにマイコンの場合には、事本的にピンから0Vか5Vしか出力できません。その中間がないからデジタルなのです。
そのような場合、実は、すごく細かい周期で0Vと5Vの幅を変えて出力してやるのです。
停止する場合は、ずっと0Vで、最高の場合はずっと5Vを出力します。
ゆっくり、もしくは薄暗くしたい場合には、0Vの出力時間を長く、5Vの出力時間を短くして、ポートからすごい周期のパルスを出力します。
反対に、早くもしくは明るくしたい場合には、0Vの出力時間を短く、5Vの出力時間を長くして、ポートからすごい周期のパルスを出力します。

4.Serial

●説明
外部機器との通信にはRS232C(Serial)を使用します。
Arduinoでは、ハードウエアシリアルとソフトウエアシリアル という2種類のシリアルが用意されています。
ハードウエアシリアルは、CPU内部にハードとしてもともともつシリアル機能を利用する方法で、当然使用できるピンは限られていて、Arduinoのボードの種類によっては、1つしかない場合、2つある場合などがあります。
ソフトウエアーシリアルは、基本的にはどのピンでもソフト的に割り当てて制御できます。

5.I2C

●説明
外部機器との通信のメインはSerialですが、Arduinoのハード的・部品的な接続をSerialと同じように2本線で行うことが可能なのがI2Cバスといいます。
マイコンは限られたピンしか持っていないため、機能を増やしたい場合、どんどんピンを使ってしまい、ピン数がたりなくなる場合があります。
その問題を解決してくれるのがI2Cバスです。
ボード内で、たったの2本の信号線で様々な機能の部品やモジュールをつなぎ合わせることで、たったの2本線でどんどんマイコンシステムを拡張していくことができる活気的な機能です。
しかし、Arduinoでは、I2Cバスに使用できる2本の信号ピンと、デジタルもしくはアナログのピンのいずれか2本が共用なため、いずれにしても2本のピンは削られてしまいます。
同時に使用できません。

●どんな時に使用するのか
LCDなどの表示機器の場合は、結構たくさんの数のピンを使用したりします。
こんな場合、I2Cバスを搭載しているLCD機器を選ぶと便利です。
また、サーボモータやLED....複数・多数使用したい場合、I2Cを使用した専用コントロールボードをさがしてくれば便利です。

I2Cバス接続LCDモジュール例
Arduino I2Cバス仕様の拡張EEPROM
Adafrut I2Cバス接続PWM拡張ボード

2.同時に全部が使えないピン

もっとも気を付けておかなければいけないポイントです。
Arduinoのボードには、ピンがたくさんつながるように便利に作られています。
ですから、沢山の機器を同時に使っていろいろな制御ができる思いを持ちますが、実は落とし穴があります。
これはArduinoに限らず、この手の多くのマイコンにある、もともとの仕様なのですが、じつは、マイコンの内部やざまざまなライブラリーで、見えないところで見えないポートを制御用に使っていたりします。
例えば、Arduinoにはタイマーという時間を刻む機能があるのですが、このタイマーの周期を作るために、●番ピンを使用してパルスを作っている! など...
ですので、最初のうち、全部のポートにいろいろな部品をぶら下げて機器を作ってみようとすると、プログラムでは決して制御していないLEDが急に光りだしたり、いきなりモータが回りだしたりとします。

このことはあまりどこの記事にも触れられていませんし、ボードや命令、使い方によって異なるので、ここですべて列挙するわきにはいきませんが、おいおい各記事の中に表記したり、いずれは、ちょっとまとめてみたいと思います。

 

-Arduinoプログラミング基礎