導入
Arduino MicroでLチカ(その1)では、Arduino Microに実装されているLEDを使ってLチカをしたので、今回はブレッドボードに刺したLEDをArduino MicroのデジタルI/Oピンで点灯制御するのをやってみた。
前提知識
I/Oピン
マイコンにはいくつか使用可能なI/Oピンがあり、目的に応じて適切なI/Oピンを使用することで色々なことができるようになっている。
I/Oピンには5Vを出力できるピンやGNDのピンのほか、シリアル通信に使用できるピン、アナログ入出力に使用できるピン、デジタル入出力に使用できるピンなどがある。
アナログ入出力とデジタル入出力で使用できるピンをデジタル入出力用に設定した場合、このピンはアナログ入出力では使用できなくなる、といったように排他的な利用しかできないので、シリアル通信のように他のピンでは代用できないものからピンを割り振っていって、余ったピンを自由に使うといった感じで使用するようだ。
Arduino Microのピン配置は以下のURLのところがわかりやすい。
http://www.pighixxx.com/test/portfolio-items/micro/
今回はデジタルI/OピンでLEDを制御したいので、デジタルI/Oピン→LED(と抵抗)→GNDと接続する。従って、Port Pinとなっているピンのうち適当なもの1つと、2つあるGNDのいずれか1つの2つのピンが使用できればよい。
デジタルI/Oピンは、入力に設定するとピンにかかる電圧がHIGHなのかLOWなのかを読み取ることができる。また、出力に設定するとHIGHまたはLOWの電圧をかけることができる。
今回はデジタルI/Oピンを出力に設定して利用する。出力をHIGHにするとGNDとの電位差が生じるのでLEDに電流が流れて点灯し、LOWにすると電位差がなくなるのでLEDに電流が流れなくなって消灯する、といった仕組み。
定格
https://store.arduino.cc/usa/arduino-micro のDOCUMENTATION -> Input and Outputに
Each of the 20 digital i/o pins on the Micro can be used as an input or output, using pinMode(),digitalWrite(), and digitalRead() functions. They operate at 5 volts. Each pin can provide or receive 20 mA as recommended operating condition and has an internal pull-up resistor (disconnected by default) of 20-50 k ohm. A maximum of 40mA is the value that must not be exceeded to avoid permanent damage to the microcontroller.
とあるように、Arduino Microには5Vで動作するデジタルI/Oピンが20個ある。推奨動作条件は各ピン20mAまでの入出力となっている。
Arduino MicroのマイコンであるATmega32u4のデータシートによると、絶対最大定格に
DC Current per I/O Pin . . . . . . . . . . . . . . . . . . 40.0mA
DC Current VCC and GND Pins . . . . . . . . . . 200.0mA
とあるので、各ピンは40mA、マイコン全体では200mAを超えてはいけないようだ。従って、デジタルI/Oピン1個あたり20mAでも10個使うとアウト。
使用するLEDの特性はLEDのデータシートによると電流20mAにおける順電圧が標準値1.85V、最大値2.0Vとのことなので、20mA流すとしても
\frac{5V - 1.85V}{20mA\times\frac{1}{1000}} = 157.5\Omega
くらいの抵抗を用意すれば良さそう。ただし、20mAも流すとLEDは相当明るいので適当に1kΩの抵抗を使うことにした。
LEDの特性上、電流が少なくなると電圧が少し下がるので正確ではないが、
\frac{5V - 1.85V}{1000\Omega} \fallingdotseq 3mA
と3mA程度なら十分明るいので良しとする。
接続
使用したデジタルI/Oピンは11。使用したジャンパワイヤが届くちょうどの位置にあったデジタルI/Oピンが11だったという理由なのでどれでもよい。
ピン11→1kΩの抵抗→LEDのアノード(+)→LEDのカソード(-)→GNDと接続した。
なお、電源はArduino MicroのMicro USBを使用してPCから供給する。
余談だが、
- LEDを使う時は抵抗を使うのが当たり前
- LEDには極性がある
という話があるが、逆向きの2つのLEDを内蔵しているため極性がないLED、定電流素子を内蔵していて電流量を自動調節してくれる定電流LED、といったものがあるので一概には言えないようだ。
スケッチ
ピン11をpinMode()で出力に設定しておき、digitalWrite()でHIGHにして1秒待ち、LOWにして1秒待つというのを繰り返す。
const int LED_PIN = 11;
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
}
スケッチをArduino Microに書き込むまでは以前書き込んだスケッチのまま動作しているので、意図しない出力でマイコンを壊さないように配線する前にスケッチを書き込んでおくか、配線したままスケッチを書き込む場合でも配線の一部を外しておくなどの対策を取っておくといいようだ。