1 マイコンボードの概要(端⼦(ピン)と LED とリセットスイッチ)
マイコンボードには USB mini B の端⼦、AC アダプタをつなぐ端⼦と、他の回路や電⼦部品とつなぐための横に並んだ端⼦の列が４つあります。端⼦の列はそのまま挿せるシールドと呼ばれる基板（市販されています。⾃作もできます。）を挿したり、ジャンプワイヤーとよばれる電線を挿してほかの回路や電⼦部品とつなぎます。端⼦の列の各端⼦の役割は基板上に印刷されています。
各端⼦はマイコンのピン（⾜）につながっているので、ピンとよぶことがあり、以下でもそう呼びます。
マイコンボードには 4 つの LED があります。PWR とあるのは電源が⼊っていると点灯するLED です。USB 端⼦で PC とつなぐと点灯します。TX, RX と表記のある LED は PC とマイコンが通信をしているときに点滅する LED です。AREF の近くにある LED はプログラムから点灯/消灯できる LED です。
マイコンボード上にあるスイッチはリセットスイッチです。マイコンのプログラムを電源を⼊れたときと同じように最初から実⾏するときに使います。
表１ DIGITAL と表⽰のある側のピンの機能とプログラム上での番号
プログラム上での番号
基板上の表記機能/表記0R

デジタル⼊⼒/デジタル出⼒/シリアルポート

01T

デジタル⼊⼒/デジタル出⼒/シリアルポート

12デジタル⼊⼒/デジタル出⼒

23デジタル⼊⼒/デジタル出⼒/PWM

34デジタル⼊⼒/デジタル出⼒

45デジタル⼊⼒/デジタル出⼒/PWM

56デジタル⼊⼒/デジタル出⼒/PWM

67デジタル⼊⼒/デジタル出⼒

78デジタル⼊⼒/デジタル出⼒

89デジタル⼊⼒/デジタル出⼒/PWM

910デジタル⼊⼒/デジタル出⼒/PWM

1011デジタル⼊⼒/デジタル出⼒/PWM

1112デジタル⼊⼒/デジタル出⼒

1213

デジタル⼊⼒/デジタル出⼒

13GND

グラウンド(電源のマイナス側)

なし

AREF

A/D 変換の基準電圧なし
1

表 2 POWER, ANALOG IN と表⽰のある側のピンの機能とプログラム上での番号
プログラム上での番号
基板上の表記機能/表記⽅法

RESET

マイコンのリセットピン

なし

3V3

3.3V 電源

なし

5V

5V 電源

なし

Gnd

グラウンド (電源のマイナス側)

なし

Gnd

グラウンド (電源のマイナス側)

なし

Vin

USB の 5V または AC アダプタのプラス側なし

0

デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A01デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A12デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A23デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A34デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A45デジタル⼊⼒/デジタル出⼒/アナログ⼊⼒

A5各ピンの基板上での表記と機能、プログラム上での番号は表１と表２のようになっています。
表から分かるようにデジタル出⼒に使えるピンには 0〜13 番のピンと ANALOG IN(アナログ⼊⼒)にある 0〜5 の合計 19 本あります。０番１番とアナログ⼊⼒のピンは少し注意がいるので最初は 2番から 13 番のピンを使うとよいでしょう。また 13 番のピンは基板上の LED(AREF の近くのLED)につながっています。

2 ピンの機能の切り替え (pinMode)
マイコンの電源が⼊った直後やリセットした直後には各ピンはデジタル⼊⼒またはアナログ⼊⼒になっています（つないだ回路がマイコンに信号を出⼒する回路で、マイコン側も出⼒になっていると信号の衝突が起きてマイコン⼜は回路を壊す危険があるため）。デジタル出⼒に切り替えるにはプログラムでpinMode(<ピン番号>, OUTPUT);
デジタル⼊⼒に切り替えるにはプログラムでpinMode(<ピン番号>, INPUT);と書きます。デジタル⼊⼒で内蔵プルアップを有効にするには
pinMode(<ピン番号>, INPUT_PULLUP);

2

と書きます。<ピン番号>のところには直接数値を書いたり、変数や計算式を書きます。2〜13 ピンでデジタル⼊⼒を使う場合と、アナログ⼊⼒ピン A0〜A5 でアナログ⼊⼒を使う場合は pinModeを書かなくて構いません。
例1)

pinMode(2, OUTPUT); // 2 番ピンを出⼒モードにする

例2)

pinMode(i, OUTPUT);

例3)

for (int i=2; i<=13; i ++) { // 2 番ピンから 13 番ピンを出⼒モードにする// 変数 i の値が指すピンを出⼒モードにする

pinMode (i, OUTPUT);}
例4)

for (int i=0; i<10; i ++) { // 2 番ピンから 10 個(11 番ピンまで)を出⼒モードにする
pinMode (i+2, OUTPUT);}

3 デジタル⼊⼒
デジタル⼊⼒を使うとマイコンはピンの電圧が⾼い(HIGH または 1 で表す)か低い(LOW または 0 で表す)を知ることができます。おおよそ電源電圧である 5V の半分(2.5V)より⾼いと HIGH、低いと LOW となります。デジタル⼊⼒を使うには digitalRead 関数を使います。2 番ピンの電圧を知って電圧が低いときに基板上の 13 番ピンにつながった LED を点灯するプログラムはプログラム
リスト 1 のようになります。ジャンプワイヤの⽚側を 2 番ピンに挿し、反対側をグラウンド(GNDまたは Gnd)あるいは電源(5V)に挿して LED が点灯/消灯する様⼦を確認してみましょう。またデ
ジタル⼊⼒ピンになにもつながないと LOW になるか HIGH になるかは電気的なノイズによって決まります。ジャンプワイヤの⽚側を 2 番ピンに挿したまま、反対側を⼿で触ると LOW になるときも HIGH になるときもあることが分かります。

プログラムリスト 1 ⼊⼒で LED が点滅するプログラム
void setup() {pinMode(13, OUTPUT);}
void loop() {if (digitalRead(2) == LOW) {digitalWrite(13, HIGH);} else {digitalWrite(13, LOW);}}3

4 デジタル出⼒
デジタル出⼒を使うとマイコンから電圧を出⼒することができます。電圧の状態は LOW（または 0）と HIGH(または 1)で表します。正確には少し違いますが図１のように LOW に設定すると電源のグラウンド側（マイナス側）に HIGH にするとプラス側(このマイコンボードでは電源が5V なので 5V)にスイッチが切り替わると思って下さい。つまりデジタル出⼒はプログラムから制御できる電源になります。デジタル出⼒を電源として使う場合は、マイコン内のスイッチや配線が扱える電流に制限があるため、1 ピンあたり 10mA までにしておくのが無難です。そのため LEDを点灯することはできますが、模型⽤のモータを直接つなぐことはできません。
LED を点灯する回路(図 2)を例に考えてみましょう。図 2 のように抵抗と LED と電源とスイッチをつなぐとスイッチで LED の点灯/消灯ができます。図 2 では電源に⼿動のスイッチが付いていますが、これをマイコンのピンに置き換えます(図 3)。図 3 ではマイコンの 2 番ピンに抵抗と LEDをつないでいます。電源のグラウンドと GND の端⼦はマイコンボード内でつながっていますので、プログラムからスイッチを HIGH 側につなぐと LED に電流が流れて点灯し、LOW 側につなぐと消灯します。プログラムでは
pinMode(2, HIGH);
またはpinMode(2, LOW);と書きます。マイコンの 13 番ピンにはボード上で図 3 のように LED がつながっているので配線することなくプログラムの動作を確かめられます。また図 3 の回路は図 4 のように書きます(別の表記をすることもあります)。

図 1 デジタル出⼒の概念図

図 2 LED をスイッチで点滅する回路4

図 3 マイコンの 2 番ピンに LED つなぎ点灯制

図 4 マイコンの 2 番ピンに LED をつなぎ御する回路（概念図）

点灯制御する回路

4.1 デジタル出⼒の初期設定 (pinMode)
デジタルの 2 番から 13 番のピンを使うときには、まずpinMode(<式>, OUTPUT);とすることでピンを出⼒モードにします。式のところには数字を書いても構いませんし、変数や式を使っても構いません。

4.2 プログラムからデジタル出⼒を制御する (digitalWrite)
デジタル出⼒の値を変えるには
digitalWrite(<式>, HIGH);
⼜はdigitalWrite(<式>, LOW);と書きます。⼀度 digitalWrite の⽂を実⾏すると次に実⾏するまでピンの値はそのままです。式のところには数字を書いても構いませんし、変数や式を使っても構いません。
例5)

digitalWrite(2, HIGH); // 2 番ピンを HIGH にする

例6)

digitalWrite(i, LOW);

例7)

for (int i=2; i<=13; i ++) { // 2 番ピンから 13 番ピンを HIGH にする// 変数 i の値が指すピンを LOW にする

digitalWrite (i, HIGH);}
例8)

for (int i=0; i<10; i ++) { // 2 番ピンから 10 個(11 番ピンまで)を HIGH にする
digitalWrite (i+2, LOW);}
5

4.3 マイコンボード上の LED を点滅するプログラム
マイコンボード上の LED(13 番につながっている)を 1 秒点灯、1 秒消灯することを繰り返すプ
ログラムはプログラムリスト 2 のように書けます。このプログラムは Arduino IDE のファイルメニ
ューから「スケッチ例」→「01 BASICS」→「Blink」をクリックして開く例と同じ動作をします。
Blink スケッチ(プログラムリスト 3 は Blink スケッチからの抜粋)では最初に led という名前の値を変更できない変数を宣⾔して 13 を代⼊しています。プログラム内で led と書くと変数の値が 13なので直接 13 を書いたのと同じことになります。わざわざ宣⾔しているのは、13 ではなく led と書くことで意味をわかりやすくし、必要なら 1 カ所を書き換えれば別の数字にできるようにするためです。たとえば基板上の LED ではなく 2 番ピンにつないだ LED を点滅したくなったときにプログラムリスト 2 では 3 カ所書き換える必要がありますが、プログラムリスト 3 では 1 カ所だけ書き換えればよいのでミスを防げます。

プログラムリスト 2 基板上の LED を点滅

プログラムリスト 3 基板上の LED を点滅するプログラム(1)void setup() {pinMode(13, OUTPUT);するプログラム(2)const int led = 13;
void setup() {}pinMode(led, OUTPUT);}

void loop() {}void loop() {digitalWrite(13, HIGH);

digitalWrite(led, HIGH);

delay(1000);delay(1000);

digitalWrite(13, LOW);

digitalWrite(led, LOW);

delay(1000);delay(1000);}6

4.4 ブレッドボード上の LED を点滅する
図 5 の回路を実際に作ってみましょう。配線するときはマイコンボードにつながった USB ケーブルを PC から抜いておきます。ブレッドボードとジャンプワイヤ 2 本、抵抗(1kΩ程度、300Ω〜4.7kΩ程度ならよい)、LED（⾊は何でもよい）を⽤意して配線します。ブレッドボードの⽳は縦 5つがつながっています。図通りの位置に配線する必要はありませんが、LED の⾜とジャンプワイ
ヤ、LED の⾜と抵抗の⾜、抵抗の⾜とジャンプワイヤが同じ縦 5 つのところに挿します。またLED には向きがあります。2 番ピン側（抵抗側）に LED の⾜の⻑い側を挿します。プログラムリ
スト 2 または 3 を書き換えて 2 番ピンを初期化して、digitalWrite で HIGH/LOW を切り替えるようにしてみましょう。

図 5 マイコンの 2 番ピンに LED をつなぐ回路の実体配線図74.5 マイコンボードとブレッドボードの LED を点滅させる
マイコンボード上(13 番ピン)とブレッドボード上(2 番ピン)の LED を点滅させるにはどうしたらいいでしょうか。図 5 の配線のまま、プログラムを変えてみます。プログラムリスト 4 をみてください。2 番ピン⽤と 13 番ピン⽤の pinMode と digitalWrite の⽂が並んでいます。プログラムは⼗分に速く動くので、２つの⽂は順番に実⾏されますが LED は同時に点滅して⾒えます。細かなタイミングを気にする必要がなければ、2 番と 13 番のどちらの⽂が先にあっても⼤丈夫です。
ではプログラムリスト 5 のプログラムはどのような動作をするでしょうか。2 番ピンが HIGHのとき 13 番ピンを LOW に、2 番ピンが LOW のとき 13 番ピンを HIGH にするプログラムです。
このプログラムの場合は 2 つの LED が交互に点滅します。

プログラムリスト 4 マイコンボードとブレプログラムリスト 5 マイコンボードとブレッドボードの LED を同時に点滅させる(1)ッドボードの LED を同時に点滅させる(2)void setup() {void setup() {pinMode(2, OUTPUT);

pinMode(2, OUTPUT);

pinMode(13, OUTPUT);

pinMode(13, OUTPUT);}}

void loop() {void loop() {}digitalWrite(2, HIGH);

digitalWrite(2, HIGH);

digitalWrite(13, HIGH);

digitalWrite(13, LOW);

delay(1000);delay(1000);

digitalWrite(2, LOW);

digitalWrite(2, LOW);

digitalWrite(13, LOW);

digitalWrite(13, HIGH);

delay(1000);delay(1000);}84.6 もっと多くの LED を点滅させる
もっと多くの LED を点滅させるにはどうしたらいいでしょうか。プログラムリスト 4，5 のように pinMode の⽂と digitalWrite の⽂を増やせばよいことが分かります。それでは配線の⽅はどうでしょうか。図 6 をみてください。図 6 は LED を 2 番ピンから 6 番ピンにそれぞれつないだ配線例です。LED と抵抗が 5 組並んでいます。ブレッドボードの端（図の上下）は横にすべての⽳がつながっています。これを電源(ここではグラウンド)⽤に使うと配線が分かりやすくなります。図では下のマイナスの列にグラウンド(GND)をつなぎ、その列から LED につないでいます。順番に点灯する例をプログラムリスト 6 に⽰します。点灯する LED がだんだん増えていくようにするにはどうしたらいいでしょうか。考えてみて下さい。

プログラムリスト 6 5 個の LED を順番に点滅させる
void setup() {for (int i=2; i<6; i++) {pinMode(i, OUTPUT);}}
void loop() {digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);delay(500);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
図 6 マイコンの 2 番ピンから 6 番ピンに LED

delay(500);をつなぐ回路の実体配線図

digitalWrite(6, LOW);}
95 圧電スピーカーから⾳を出す
圧電スピーカー（圧電素⼦とよばれることもある）という部品を使うと⾳を出せます。圧電ス
ピーカーには 2 つ端⼦があるので、図 7 のように⽚側をグラウンドに⽚側をデジタル出⼒のできるピン（図 7 では 8 番ピン）につなぎます。プログラムリスト 7 のように書くと電源が⼊るかリセッ
トすると 440Hz の⾳が 0.5 秒(500 ミリ秒)でます。tone で⾳を出し始めることを命令します。
tone(<⾳を出すピンの番号>, <⾳の⾼さ>);と書きます。プログラムリスト 7 では 8 ピンから 440Hz の⾳を出し始めます。そして delay で 500
ミリ秒待ち noTone で⾳を⽌めます。
noTone(<⾳を出しているピンの番号>);と書きます。noTone がないと⾳がずっとでたままです。
⾳階と⾳の周波数の関係は表 3 のようになっています。プログラムリスト 8 のように書くとドレミファソをずっと繰り返し出します。⾳を⽌めたいときは圧電スピーカーの配線を抜くか、USB ケーブルを抜いて電源を切ります。休符のように無⾳を作りたいときは⾳を出さずに delay で少し待ちます。また⾳と⾳の間を少し開けると⻭切れがよく聞こえます。⼯夫してみて下さい。

プログラムリスト 7 ⾳を出すプログラム
void setup(){tone(8, 440);
delay(500);
noTone(8);}void loop(){}

図 7 圧電スピーカーをマイコンボードにつなぐ
10

LED などと圧電スピーカを⼀緒に使うときには、LED と圧電スピーカのピンが同じにならないように決めます。例えば LED を 2 番から 6 番ピンにして圧電スピーカを 8 番ピンにします。圧電スピーカを 2 番ピンにして LED を 3 番から 6 番ピンにしても構いません。tone/noTone はデジ
タル出⼒のピンならどれでも使えます。
表 3 ⾳階と周波数の関係

プログラムリスト 8 ドレミファソを繰り返すプログラム
void setup()

音階

周波数[Hz]

ド523

レ587

ミ659

ファ698

tone(8, 523);

ソ784

delay(500);

ラ880

シ988

ド1046

{}
void loop(){noTone(8);tone(8, 587);
delay(500);
noTone(8);tone(8, 659);
delay(500);
noTone(8);tone(8, 698);
delay(500);
noTone(8);tone(8, 784);
delay(500);
noTone(8);delay(1000);}11