Arduino Unoのピン配置:デジタル、PWM、アナログ、電源ピンを解説
Arduino Unoのピン配置を1つの表で:デジタルピン0〜13、PWMの~3、5、6、9、10、11、アナログA0〜A5、Vin、5V、3.3V、I2C、SPI、割り込みピン、ピンあたり20 mAの上限。
Arduino Unoのピン配置は、ボードの2つの長辺に沿って並ぶ黒いメスのピンヘッダーにある32の接続点で構成されています。14本のデジタル入出力ピン(0〜13)とそのうちPWMを出力できる6本(~3、5、6、9、10、11)、6本のアナログ入力(A0〜A5)、そしてボードに給電したりほかの部品に電源を供給したりする電源ピン(Vin、5V、3.3V、GND、IOREF、AREF、RESET)です。どのピンにもおもな役割がありますが、多くのピンは2つ目の役割も持っています。A4とA5はI2Cバスでもあり、10〜13はSPIバスを構成し、2と3は割り込みピン、0と1はパソコンと通信するシリアル線です。
正しいピンを選べるかどうかで、一度で動くプロジェクトになるか、何時間もデバッグすることになるかが決まります。この記事の表を見れば、サーボをつないだとたんに9番と10番のPWMが止まる理由、Bluetoothモジュールをつないでいるとスケッチが書き込めない理由、数個のLEDでボードに負担がかかる理由も簡単にわかります。最後には、すべての種類のピンを一度に試すテスト用スケッチ、ピン割り当ての例、Uno R3とR4のピンの違いも紹介します。

Arduino Unoのピン配置図:各ピンはどこにある?
USBソケットと電源ジャックを左にして、ボードを手前に置きます。上の辺の2つのヘッダーにはデジタルピンがあり、番号は右から左へ増えていくので、一番右のピンが0(RX)、一番左のデジタルピンが13です。下の辺では、左のヘッダーに電源ピン、右のヘッダーにアナログ入力があります。番号の横の~(チルダ)は、そのピンがPWMを出力できることを示します。ボードの右の辺にある2×3のオスピンのまとまりがICSPヘッダーです。
| ヘッダー | ピン(左から右) | 用途 |
|---|---|---|
| 上の左(10ピン) | SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8 | I2Cの複製、アナログ基準電圧、SPIとデジタルピン |
| 上の右(8ピン) | 7, ~6, ~5, 4, ~3, 2, TX→1, RX←0 | デジタルピン、割り込みピン、シリアル線 |
| 下の左(8ピン) | 未使用(NC)、IOREF、RESET、3.3V、5V、GND、GND、Vin | 電源ピン |
| 下の右(6ピン) | A0, A1, A2, A3, A4, A5 | アナログ入力(A4/A5はI2Cも兼ねる) |
| 右の辺(2×3) | 1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GND | ICSP書き込み用ヘッダー |
| 項目 | Arduino Uno R3 |
|---|---|
| マイコン | ATmega328P、16 MHz |
| 動作(ロジック)電圧 | 5 V |
| 入力電圧(ジャック / Vin) | 推奨7〜12 V、限界6〜20 V |
| デジタル入出力 | 14ピン(D0〜D13) |
| PWM出力 | 6ピン:3、5、6、9、10、11 |
| アナログ入力 | 6ピン(A0〜A5)、10ビット(0〜1023) |
| ピンあたりの電流 | 推奨20 mA、絶対最大40 mA |
| 合計の電流(VCC/GND) | 200 mA |
| 3.3Vピンの電流 | 最大50 mA |
| メモリ | フラッシュ32 KB(ブートローダー0.5 KB)、SRAM 2 KB、EEPROM 1 KB |
ピンの一覧表:D0〜D13とA0〜A5
| ピン | ポート | おもな機能 | 追加の機能 | メモ |
|---|---|---|---|---|
| D0(RX) | PD0 | デジタル入出力 | UART RX(Serial) | USBシリアル変換チップにつながっている。空けておく |
| D1(TX) | PD1 | デジタル入出力 | UART TX(Serial) | USBシリアル変換チップにつながっている。空けておく |
| D2 | PD2 | デジタル入出力 | 外部割り込みINT0 | ボタン、エンコーダー、回転数の計測 |
| D3 ~ | PD3 | デジタル入出力、PWM 490 Hz | 外部割り込みINT1、Timer2 | tone()の再生中はPWMが乱れる |
| D4 | PD4 | デジタル入出力 | - | 追加の機能なし、自由に使える |
| D5 ~ | PD5 | デジタル入出力、PWM 980 Hz | Timer0 | millis()と同じタイマー |
| D6 ~ | PD6 | デジタル入出力、PWM 980 Hz | Timer0 | millis()と同じタイマー |
| D7 | PD7 | デジタル入出力 | - | 追加の機能なし、自由に使える |
| D8 | PB0 | デジタル入出力 | - | 追加の機能なし、自由に使える |
| D9 ~ | PB1 | デジタル入出力、PWM 490 Hz | Timer1 | ServoライブラリがPWMを無効にする |
| D10 ~ | PB2 | デジタル入出力、PWM 490 Hz | SPI SS、Timer1 | SPIを使うときは出力のままにする |
| D11 ~ | PB3 | デジタル入出力、PWM 490 Hz | SPI MOSI、Timer2 | ICSPヘッダーにもある |
| D12 | PB4 | デジタル入出力 | SPI MISO | ICSPヘッダーにもある |
| D13 | PB5 | デジタル入出力 | SPI SCK | ボード上のLのLEDがこのピンにある |
| A0 | PC0 | アナログ入力 | デジタル14 | - |
| A1 | PC1 | アナログ入力 | デジタル15 | - |
| A2 | PC2 | アナログ入力 | デジタル16 | - |
| A3 | PC3 | アナログ入力 | デジタル17 | - |
| A4 | PC4 | アナログ入力 | I2C SDA、デジタル18 | I2Cの使用中はアナログの読み取り不可 |
| A5 | PC5 | アナログ入力 | I2C SCL、デジタル19 | I2Cの使用中はアナログの読み取り不可 |
デジタルピン(0〜13)のしくみ
各デジタルピンはpinMode()で入力か出力に設定します。出力では、digitalWrite(pin, HIGH)でピンが約5 Vに、LOWで0 Vになります。入力では、digitalRead()が電圧をしきい値と比べます。ATmega328Pが5 Vで動いているとき、3.0 Vより上は確実にHIGH、1.5 Vより下は確実にLOWで、その間は不定です。そのため、3.3 Vのセンサーの出力はUnoではふつうHIGHとして読めます。ただし、Unoの5 Vの出力を3.3 Vのモジュールの入力に直接つないではいけません。間にレベル変換モジュールが必要です。
何もつながっていない入力ピンは浮いた状態で、手を近づけるだけでもHIGHとLOWがでたらめに読めます。解決策は、抵抗でピンを決まった電圧に引っぱることです。pinMode(pin, INPUT_PULLUP)でチップ内部の20〜50 kΩの抵抗がオンになり、ボタンはピンとGNDの間に入れます。詳しくはArduinoに押しボタンをつなぐ方法をご覧ください。13番ピンはボード上のLのLEDにつながっています。純正品のR3ではこのLEDはオペアンプのバッファを通して駆動されるので、ピンを入力として使っても問題ありませんが、一部の互換品ではLEDと抵抗がピンに直接つながっていて、内部プルアップでのボタンの読み取りを乱すことがあります。
PWMピン(~3、5、6、9、10、11)とタイマー
Unoは本物のアナログ出力を出せません。その代わり、この6本のピンでは、とても速くオン・オフを繰り返す方形波であるPWMが使えます。analogWrite(pin, value)で、波がオンになっている長さを0〜255で設定します。0は完全にオフ、127はおよそ半分、255は完全にオンです。LEDの明るさ、モーターの速度、ファンの回転は、すべてこの方法で制御します。6本のPWMピンは2本ずつ3つのハードウェアタイマーに結びついていて、これが一部のライブラリとの競合の原因です。PWMの考え方とデューティ比の計算方法はPWMとは?で解説しています。
| タイマー | PWMピン | 周波数 | このタイマーを使うもの |
|---|---|---|---|
| Timer0(8ビット) | 5, 6 | 約980 Hz | millis()、delay()、micros() |
| Timer1(16ビット) | 9, 10 | 約490 Hz | Servoライブラリ |
| Timer2(8ビット) | 3, 11 | 約490 Hz | tone()やIRremoteなどのライブラリ |
アナログピン(A0〜A5)とAREF
アナログピンは0〜5 Vの電圧を10ビットの分解能で測り、analogRead()は0〜1023の数値を返します。1ステップは約4.9 mVです。数値を電圧に直すには電圧 = 値 × 5.0 / 1023を使うので、512なら約2.5 Vです。6本のピンは1つのADCを順番に共有し、1回の読み取りに約100 µsかかるので、1秒に約10,000回読み取れます。正確な結果を得るには、センサーの出力インピーダンスが10 kΩを超えないようにします。それより高いと、2本のピンを続けて読んだときに値が互いに混ざることがあり、最初の値を捨てて2回目の値を使うと解決します。5 Vを超える電圧を測るには、分圧回路の計算ツールで適切な抵抗を選びましょう。
AREFピンを使うと、アナログ測定の上限を変えられます。analogReference(DEFAULT)は5 Vを、analogReference(INTERNAL)はチップ内部の1.1 Vの基準電圧を、analogReference(EXTERNAL)はAREFピンに加えた電圧(0〜5 V)を範囲の上限として使います。0〜1 Vを出力するセンサーなら、1.1 Vの基準電圧で1ステップが約1.1 mVに縮み、測定が約4.5倍細かくなります。ポテンショメーター、LDR、土壌水分センサーなどの部品はこれらのピンにつなぎます。アナログ・デジタル変換について詳しくはADCの記事を、実際の例はポテンショメーターの記事をご覧ください。
電源ピン:Vin、5V、3.3V、GND、IOREF、RESET
| ピン | 役割 | 上限と注意点 |
|---|---|---|
| Vin | ジャックから来る電圧を出す、または7〜12 Vでボードに給電する | 逆接続防止ダイオードを通らないので極性に注意 |
| 5V | レギュレーターかUSBからの5 V出力 | USBには500 mAのヒューズ。外から入れるのは安定化した5 Vのみ |
| 3.3V | ボード上のレギュレーターからの3.3 V出力 | 最大50 mA。RC522のような小さなモジュール用 |
| GND | 共通GND(下に2本、上に1本) | 外部電源のGNDはすべてここにつなぐ |
| IOREF | ボードのロジック電圧をシールドに知らせる | Unoでは5Vにつながっている。給電用ではない |
| RESET | LOWにするとボードが再起動する | シールドのリセットボタンが使う |
| AREF | アナログ読み取り用の外部基準電圧の入力 | 0〜5 V。先にanalogReference(EXTERNAL)を呼ぶ |
| NC(表示のないピン) | R3では将来のために予約 | どこにもつながっていない |
Unoへの給電方法は3つあります。USBでは、ボードはパソコンから5 Vを直接受け取り、500 mAの復帰型ヒューズがパソコンのポートを守ります。DCジャックかVinから7〜12 Vを入れると、ボード上のレギュレーターが5 Vに下げます。両方つながっている場合、Vinが約6.6 Vを超えると、ボードは自動で外部電源に切り替わります。レギュレーターは余分な電圧を熱に変えるので、12 V入力で5Vピンから数百mAを取り出すとすぐに熱くなります。最も健全なのは、サーボ、モーター、LEDテープなどの負荷を別の電源から給電し、GNDだけをつなぐ方法です。電池の選び方と動作時間は電池寿命の計算ツールで、すべての給電方法はArduinoの電源の取り方で確認できます。
0番と1番のピンを空けておくべき理由
0番(RX)と1番(TX)のピンはATmega328Pの唯一のハードウェアシリアルポートで、ボード上では1 kΩの抵抗を通してUSBシリアル変換チップ(ATmega16U2)につながっています。パソコンは、コードを書き込むときとシリアルモニタに文字を送るときにこの2本のピンを使います。Bluetoothモジュールなどの信号のTX線が0番ピンにつながっていると、2つの信号源が同じ線を奪い合い、書き込みがavrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00(同期できない)で止まります。さらに、Serial.print()が実行されるたびに1番ピンが細かく切り替わるので、そこにつないだLEDやリレーがでたらめに動きます。
そのため、ほかのピンが足りなくなるまでは0番と1番を空けておきましょう。HC-05、GPS、MP3プレーヤーなどのシリアルモジュールをつなぐ必要があるなら、SoftwareSerialライブラリでほかの2本のピンに2つ目のシリアルポートを作れます。下のスケッチはモジュールを8番(RX)と7番(TX)のピンにつなぎ、シリアルモニタで入力した文字をモジュールへ、モジュールが送った文字をパソコンへ転送します。HC-05のような3.3 Vロジックのモジュールでは、UnoのTX出力(7番ピン)を分圧回路を通してモジュールのRXピンにつなぎます。書き込みのトラブルの対処法はArduinoにコードが書き込めないときに、シリアル通信のしくみはUARTシリアル通信にまとめています。
1#include <SoftwareSerial.h>
2
3SoftwareSerial moduleSerial(8, 7); // RX = 8, TX = 7; 0 ve 1 boş kalır / 0 and 1 stay free
4
5void setup() {
6 Serial.begin(9600); // USB üzerinden bilgisayar / computer over USB
7 moduleSerial.begin(9600); // HC-05 veri modu hızı / HC-05 data mode baud rate
8 Serial.println(F("Seri kopru hazir / Serial bridge ready"));
9}
10
11void loop() {
12 if (moduleSerial.available()) {
13 Serial.write(moduleSerial.read()); // modülden bilgisayara / module to computer
14 }
15 if (Serial.available()) {
16 moduleSerial.write(Serial.read()); // bilgisayardan modüle / computer to module
17 }
18}通信用のピン:I2C(A4/A5)、SPI(10〜13)、割り込みピン(2、3)
I2Cを使うと、わずか2本の線(SDAとSCL)で同じバスに何十ものデバイスをつなげます。LCDディスプレイ、OLED、RTC時計モジュール、BME280などのセンサーはどれもI2Cを使います。Unoでは、SDA = A4、SCL = A5です。R3のボードでAREFの横にあるSDAとSCLのピンは別のバスではなく、内部でA4とA5につながっているので、I2Cを使っている間はA4とA5をアナログの読み取りに使えません。Wireライブラリは初期設定で100 kHzで動き、Wire.setClock(400000)で400 kHzまで上げられます。アドレス、プルアップ抵抗、I2CスキャナーのスケッチはI2Cとは?で、実際の例はI2C LCDディスプレイの使い方で紹介しています。
SPIはより高速ですが、線が多く必要です。MOSI = 11、MISO = 12、SCK = 13、SS(CS) = 10です。SDカードモジュール、RFIDリーダー、TFTディスプレイはSPIを使います。複数のデバイスでバスを共有でき、MOSI、MISO、SCKは共通で、デバイスごとに専用のCSピンを割り当てます。大切な点として、SPIがマスターモードの間は、10番ピンを出力のままにしておく必要があります。10番ピンを入力にしてLOWに引っぱられると、ATmega328Pは自分でスレーブモードに切り替わり、SPIが止まります。MISO、MOSI、SCKはICSPヘッダーにもあり、そこからSPIにつなぐシールドもあります。詳しくはSPIとは?とRFID RC522をご覧ください。
割り込みを使うと、loop()がその瞬間に何をしていても、ピンの変化をすぐにとらえられます。Unoの外部割り込みは2番(INT0)と3番(INT1)のピンにしかありません。attachInterrupt(digitalPinToInterrupt(2), function, FALLING)のように書き、トリガーのモードはLOW、CHANGE、RISING、FALLINGから選べます。エンコーダー、回転数センサー、水流センサー、決して見逃してはいけないボタンはこれらのピンにつなぎます。ほかのピンにも「ピン変化割り込み」(PCINT)がありますが、同じポートのピンが1つの割り込み関数を共有するため、どのピンが変化したかはコードで調べる必要があります。ルールと例はArduinoの割り込みで紹介しています。
| 機能 | Arduino Uno | ESP32(DevKit) | Raspberry Pi Pico |
|---|---|---|---|
| I2C SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| SPI MOSI / MISO / SCK / CS | 11 / 12 / 13 / 10 | GPIO 23 / 19 / 18 / 5 | GP19 / GP16 / GP18 / GP17 |
| UART TX / RX | 1 / 0 | GPIO 1 / 3(USBにつながっている) | GP0 / GP1 |
| 外部割り込み | 2と3のみ | すべてのGPIO | すべてのGPIO |
| PWM | 6ピン | 出力できるほぼすべてのピン | すべてのGPIO |
| アナログ入力 | 6ピン、10ビット | ADC1:GPIO 32〜39、12ビット | GP26、GP27、GP28。12ビット |
| ロジックレベル | 5 V | 3.3 V(5 Vトレラントではない) | 3.3 V(5 Vトレラントではない) |
| ピンあたりの電流 | 20 mA(最大40 mA) | 推奨は約20 mA | 初期設定で4 mA、最大12 mA |
ESP32やPicoに移るときの最大の違いは電圧です。どちらのボードも3.3 Vで動き、ピンは5 Vトレラントではないので、Unoに直接つないでいた5 Vのモジュールにはレベル変換が必要になることがあります。一方、これらのボードはほぼすべてのピンで割り込みとPWMが使え、I2CとSPIのバスもほかのピンに移せます。ボードを比べるにはArduinoとESP32の違いは?を、ピンの配置図を見るにはピン配置ツールを使いましょう。ボードそのものについてはESP32とは?とRaspberry Pi Picoとは?で解説しています。
ICSPヘッダーは何のためにある?
ICSP(In-Circuit Serial Programming)は、USBやブートローダーを使わず、SPIの線で直接マイコンにプログラムを書き込むための2×3のヘッダーです。ボードの右の辺にあるICSPはATmega328P用で、USBソケットの横にある小さなICSP1はUSBシリアル変換チップ(ATmega16U2)用です。ふだんの使い方では触れませんが、ブートローダーが壊れたとき、新しいATmega328Pにブートローダーを書き込むとき、USBaspなどの書込装置でコードを書き込むときにICSPを使います。ArduinoISPのスケッチ例で2台目のUnoを書込装置にする場合は、書込装置側の10、11、12、13番ピンをターゲットのボードのRESET、MOSI、MISO、SCKの線につなぎ、書込装置のUnoのRESETとGNDの間に10 µFのコンデンサを入れて自動リセットを防ぎます。ボードが壊れていないか調べるには、Arduinoが壊れたかどうかの確認方法をご覧ください。
| ICSPのピン | 信号 | Unoでの対応ピン |
|---|---|---|
| 1 | MISO | D12 |
| 2 | VCC(+5 V) | 5V |
| 3 | SCK | D13 |
| 4 | MOSI | D11 |
| 5 | RESET | RESET |
| 6 | GND | GND |
ピンあたり20 mA、合計200 mA:電流の上限
Unoのピンを安全に使えるのは20 mAまでです。ATmega328Pのデータシートにある40 mAは絶対最大定格で、それを超えるとチップが永久に壊れることがある値であり、動作させる値ではありません。チップのVCCとGNDピンを流れる合計の電流は200 mAを超えてはいけません。データシートではピンをグループにも分けています。電流を出す(HIGH)ときは、D0〜D4とA0〜A5の合計、D5〜D13の合計をそれぞれ150 mA未満に、電流を吸い込む(LOW)ときは、D0〜D4、D5〜D13、A0〜A5の各グループを100 mA未満に保ちます。赤のLEDを5 Vから220 Ωの抵抗で駆動すると、電流は(5 − 2) / 220 ≈ 13.6 mAです。10個のLEDを同時に点けると合計136 mAで、200 mAは下回りますが、すべて同じグループにあると、グループの上限150 mAにかなり近づきます。LEDがピンのLOWで点く配線(5Vからピンへ抵抗)で、ほとんどが同じグループにあると、100 mAの上限を超えてしまいます。LEDをグループに分散させるか、抵抗を330〜470 Ωに上げましょう。適切な抵抗はLEDの抵抗の計算ツールかオームの法則の計算ツールで求められます。
- モーター:小さなDCモーターでも数百mAを流し、電圧スパイクを生みます。L298Nなどのモータードライバかトランジスタを使いましょう。
- リレーのコイル:5 Vリレーのコイルは約70〜90 mAを流します。トランジスタとダイオード付きのリレーモジュールを使いましょう。
- サーボモーター:信号線はピンにつないでかまいませんが、サーボの電源は5Vピンではなく別の電源から取ります。詳しくはサーボモーターの記事をご覧ください。
- LEDテープとハイパワーLED:12 Vのテープや1 WのLEDには、ロジックレベルのMOSFETが必要です。
- ショート:HIGHになっている出力をGNDに直接つなぐと、ピンから40 mAをはるかに超える電流が流れ、ピンが二度と使えなくなります。
テスト用スケッチ:デジタル、PWM、アナログ、割り込みのピンをまとめて試す
- 220 Ωの抵抗を通して9番ピンにLEDをつなぎます。長い足を抵抗へ、短い足をGNDへつなぎます。
- ポテンショメーターの両端の足を5VとGNDに、中央の足をA0につなぎます。
- 2番ピンとGNDの間にボタンをつなぎます。内部プルアップを使うので、抵抗は不要です。
- スケッチを書き込み、シリアルモニタを開いて9600ボーに設定します。
- ポテンショメーターを回すと、9番ピンのLEDの明るさが変わり、電圧が2.5 Vを超えるとボード上のLのLED(13番ピン)が点き、ボタンを押すたびにカウンターが1つ増えます。
1const byte BUTTON_PIN = 2; // kesme pini INT0 / interrupt pin INT0
2const byte PWM_LED = 9; // ~9: PWM çıkışı / PWM output
3const byte STATUS_LED = 13; // kart üzerindeki L LED'i / onboard L LED
4const byte POT_PIN = A0; // analog giriş / analog input
5
6volatile unsigned int pressCount = 0; // ISR içinde değişir / changed inside the ISR
7
8void onButton() {
9 static unsigned long lastPressMs = 0;
10 unsigned long now = millis();
11 if (now - lastPressMs > 50) { // 50 ms sıçrama filtresi / 50 ms debounce
12 pressCount++;
13 lastPressMs = now;
14 }
15}
16
17void setup() {
18 Serial.begin(9600); // 0 ve 1 numaralı pinleri kullanır / uses pins 0 and 1
19 pinMode(STATUS_LED, OUTPUT);
20 pinMode(PWM_LED, OUTPUT);
21 pinMode(BUTTON_PIN, INPUT_PULLUP); // dahili pull-up direnci / internal pull-up resistor
22 attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), onButton, FALLING);
23}
24
25void loop() {
26 int raw = analogRead(POT_PIN); // 0-1023 arası ham değer / raw value 0-1023
27 float volts = raw * 5.0 / 1023.0; // volta çevir / convert to volts
28 analogWrite(PWM_LED, raw / 4); // 0-255 arası PWM / PWM from 0 to 255
29 digitalWrite(STATUS_LED, volts > 2.5 ? HIGH : LOW); // 2,5 V eşiği / 2.5 V threshold
30
31 noInterrupts(); // sayacı güvenle kopyala / copy the counter safely
32 unsigned int presses = pressCount;
33 interrupts();
34
35 Serial.print(F("A0: "));
36 Serial.print(raw);
37 Serial.print(F(" V: "));
38 Serial.print(volts, 2);
39 Serial.print(F(" Buton / Button: "));
40 Serial.println(presses);
41 delay(200);
42}このスケッチでは、Unoの4種類のピンを同時に使っています。analogRead(A0)は0〜1023の値を読み、raw / 4でanalogWrite()が受け付ける0〜255の範囲に縮めます。チャタリングを数えないように、割り込み関数は前回の押下から50 ms以内に来た信号を無視します。割り込みの中で変わるカウンターはvolatileで宣言し、loop()では割り込みを一瞬止めている間にコピーします。8ビットのUnoは16ビットの数値を2回に分けて読むため、その間に割り込みが来ると間違った値になることがあるからです。0番と1番のピンはSerialだけに使い、ほかには何もつないでいません。
ピン割り当ての例:どの部品をどのピンにつなぐ?
部品の多いプロジェクトでピンを適当に割り当てると、競合が起きます。まず特別な役割(I2C、SPI、割り込み、PWM)を持つ部品を専用のピンに置き、それから単純なデジタルの役割を空いているピンに割り当てます。下は、RFIDカードのドアロックの例です。RC522リーダー、I2C LCD、サーボ、ブザー、ボタン、LED 2個を使います。サーボとtone()を一緒に使うので、3、9、10、11番のPWMは最初から使えず、割り当てではそれを考慮しています。
| 部品 | Unoのピン | このピンにした理由 |
|---|---|---|
| RC522のSDA(SS) | 10 | SPIのSSピン。出力のままにする必要がある |
| RC522のSCK / MOSI / MISO | 13 / 11 / 12 | ハードウェアSPIのピンは変えられない |
| RC522のRST | 9 | どのデジタルピンでもよい。9番のPWMはサーボのためどのみち使えない |
| RC522のVCC | 3.3V | モジュールは3.3 Vで動き、電流も上限の50 mA未満 |
| I2C LCDのSDA / SCL | A4 / A5 | Unoの唯一のI2Cバス |
| サーボの信号 | 6 | Servoライブラリはどのピンでも動く。電源は外部の5 Vから |
| ブザー | 8 | tone()はどのピンでも動くので、PWMピンをむだにしない |
| ボタン | 2 | 割り込みピン。INPUT_PULLUPなら抵抗は不要 |
| 緑 / 赤のLED | 4 / 7 | 追加の機能のない普通のデジタルピン |
| 空けておく | 0, 1, 3, 5, A0–A3 | シリアル線は空けておく。3は2つ目の割り込み、5はPWM、A0〜A3はセンサー用 |
Arduino Uno R3とR4のピンの違い
| 項目 | Uno R3 | Uno R4(Minima / WiFi) |
|---|---|---|
| マイコン | ATmega328P、8ビット、16 MHz | Renesas RA4M1、32ビット、48 MHz |
| ピン配置 | 標準のUno | 同じ。シールドが使える |
| ピンあたりの電流 | 20 mA | 8 mA |
| アナログの分解能 | 10ビット | 初期設定で10ビット、最大14ビット |
| 本物のアナログ出力(DAC) | なし | A0に12ビットDAC |
| 0番と1番のピン | USBと共有(Serial) | USBとは別(Serial1) |
| Vinの範囲 | 推奨7〜12 V | 6〜24 V |
| USB | USB-B、ATmega16U2経由 | USB-C。Minimaはプロセッサに直接、WiFiはESP32-S3のブリッジ経由 |
まとめると、R4でもピン番号と機能は同じですが(PWMは~3、5、6、9、10、11、I2CはA4/A5、SPIは10〜13、割り込みは2、3)、ピンあたりの電流が8 mAに下がります。R3でピンから直接駆動していたLEDは、R4ではより大きな抵抗(たとえば約3 mAになる1 kΩ)かトランジスタが必要です。詳しい比較はArduino Uno R4にあります。もっと小さなボードを探しているなら、Arduino Nanoのピン配置とどのArduinoを買えばいい?が役に立ちます。
よくある失敗と対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| スケッチが書き込めない、「not in sync」エラー | 0番か1番のピンにモジュールがつながっている | 書き込み中はモジュールを外すか、SoftwareSerialでほかのピンに移す |
| サーボを追加したらLEDの明るさが変わらなくなった | Servoライブラリが9番と10番のPWMを無効にした | LEDを3、5、6、11番に移す |
| ブザーが鳴っている間、モーターの速度がおかしくなる | tone()がTimer2を使い、3番と11番に影響する | PWMを5、6、9、10番に移す |
| アナログの値が勝手に変わる | ピンが浮いている、または信号源のインピーダンスが高すぎる | センサーをしっかりつなぎ、必要なら2回読む |
| ボタンがでたらめに押されたように見える | 入力ピンが浮いている | INPUT_PULLUPを使うか、10 kΩの抵抗を入れる |
| I2Cディスプレイをつなぐと、A4/A5の値がおかしくなる | A4/A5はI2Cバスと共有されている | アナログセンサーはA0〜A3につなぐ |
| SPIモジュールが応答しない | 10番ピンを入力にした、またはCSが違う | 10番ピンは出力のままにし、デバイスごとに専用のCSを割り当てる |
| ボードが熱くなる、または勝手にリセットする | ピンや5Vピンから電流を取りすぎている | 負荷は別の電源から給電し、GNDをつなぐ |
Arduino Unoのピンがわかれば、部品をどこにつなぐかを暗記する必要はありません。部品に何が必要かを見て、正しいピンを自分で選べるようになります。基本をもう一度おさらいしたいなら、Arduinoとは?から始めましょう。BlueGraysアプリには、LEDの点灯、ボタンの読み取り、LDRでの明るさの測定、PWMでのRGB LED、I2C LCD、RFID、シリアル線で通信する2台のArduinoなどのプロジェクトがあり、それぞれ各ピンを選んだ理由がわかる回路図とすぐに使えるコード付きで、ステップごとに学べます。
よくある質問
Arduino Unoにはピンが何本ありますか?
Arduino Uno R3には、14本のデジタル入出力ピン(0〜13)と6本のアナログ入力(A0〜A5)があります。アナログピンはデジタルピンとしても使えるので、信号用のピンは合計20本です。デジタルピンのうち6本はPWMが使えます。さらに、Vin、5V、3.3V、GND、IOREF、AREF、RESETなどの電源・制御ピンと、6ピンのICSPヘッダーがあります。
Arduino UnoのPWMピンはどれですか?
PWMピンは3、5、6、9、10、11番で、ボード上では番号の横に~が付いています。5番と6番は約980 Hz、ほかは約490 Hzで動きます。Servoライブラリを使うと9番と10番のPWMが、tone()を使うと3番と11番のPWMが影響を受けます。
Arduinoのアナログピンはデジタルピンとして使えますか?
はい。UnoのA0〜A5のピンは、pinMode、digitalWrite、digitalReadで普通のデジタルピンと同じように動き、14〜19番に対応します。そのため、A0にLEDを、A3にボタンをつなげます。唯一の例外は、I2Cを使っている間はA4とA5がバス専用になることです。
Arduino Unoのピンはどのくらいの電流を流せますか?
1本のピンから安全に取り出せるのは20 mAです。40 mAは絶対最大定格で、それを超えるとピンが永久に壊れることがあります。全ピンの合計は200 mAを超えてはいけません。そのため、LEDは抵抗を通してつなぎ、モーターやリレーなどの負荷はトランジスタ、MOSFET、ドライバモジュールで駆動します。
Arduino Unoの0番と1番のピンは使えますか?
使えますが、おすすめしません。これらのピンはUSBシリアル変換チップにつながっていて、パソコンはコードの書き込みやシリアルモニタの使用にこの線を使います。0番ピンにモジュールがつながっていると、書き込みが「not in sync」エラーで失敗することがあるので、これらのピンは最後に使うか、SoftwareSerialでほかのピンに切り替えましょう。
Arduino UnoのSDAとSCLのピンはどれですか?
Unoでは、I2CバスのSDA線がA4ピン、SCLがA5ピンです。R3のボードにはAREFの横にSDAとSCLと書かれた2本のピンもありますが、内部でA4とA5につながっていて、別のバスではありません。ESP32の初期設定のI2CピンはGPIO 21と22です。Raspberry Pi PicoではI2Cを多くのピンに移せますが、GP4(SDA)とGP5(SCL)が最もよく使われます。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
LEDの点滅
電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

ボタンでLEDを点灯(押している間のみ)
呼び鈴のように、押している間は点灯し、離すと消灯します。Arduinoはボタンの状態を常に読み取り、押されている間はLEDを点灯させ、指を離した瞬間に消灯させます。このシンプルな回路で、ボードが外部からの操作を検知する仕組みを学べます。

LDRで光の強さを測定
部屋の明るさを数値で見てみませんか?光に反応する小さな部品、LDRで周囲の光を測定し、Arduinoが0.5秒ごとにその値をコンピューターの画面に表示します。手で覆うと数値が変わる様子を確認できます。自動で点灯する常夜灯などのプロジェクトへの第一歩です。

HC-SR04で距離を測定(シリアルモニタ表示)
HC-SR04センサーは、コウモリが暗闇で道を見つけるのと同じ仕組みで動作します。人には聞こえない音を出し、その反響を捉えて前方の物体までの距離を測ります。Arduinoは0.5秒ごとに距離をセンチメートル単位でコンピューターの画面に表示し、3〜100センチメートルの測定値を示します。駐車センサーや障害物を避けるロボットなどのプロジェクトの基礎になります。

RGB LEDで滑らかに色を変える
1つのRGB LEDが赤から緑、緑から青、そして再び赤へとゆっくり変わり、虹色のサイクルを繰り返します。1回の色の変化には約2.5秒かかり、色が混ざることで、その間に黄色、ターコイズ、紫が自然に現れます。光が滑らかに暗くなったり明るくなったりする様子を、自分の目で確かめられます。

I2CでLCDディスプレイを使う
Arduinoにディスプレイを接続し、最初のメッセージを表示します。2行のLCDディスプレイは数本の配線だけで接続できます。まず上の行にあいさつを表示し、次に下の行にもう1つのメッセージを表示します。その後、表示を消去して最初から繰り返します。温度や時刻、スコアを表示するプロジェクトは、すべてこのステップから始まります。

RFIDの値の読み取り
建物のキーフォブや入館カードには、見えない識別番号が保存されています。このプロジェクトでは、その番号を読み取ります。カードをRFIDリーダーに近づけると、Arduinoがカードの番号をコンピューターの画面に表示します。カード式のドアや錠のプロジェクトで、どのカードに解錠を許可するかを決めるための第一歩です。

2台のArduinoで一方向通信
2台のArduinoを1本のワイヤーで通信させます。一方のボタンを押すともう一方のLEDが点灯し、もう一度押すと消灯します。送信側のボードがボタンの押下を短いメッセージで伝え、受信側のボードはそのメッセージを受け取るとLEDの点灯と消灯を切り替えます。機器同士が情報を伝える仕組みを、最もシンプルな形で確かめられます。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

