部品 · 読了まで21分

Arduino Nanoのピン配置:ピン図、A6/A7、電源、Old Bootloader

Arduino Nanoのピン配置を1つのガイドで。D0〜D13、A0〜A7(A6/A7はアナログ専用)、PWMピン、VIN/5V/3V3、CH340ドライバ、Old Bootloader、UnoからNanoへのピン対応表を解説します。

Arduino Nanoのピン配置は、45 × 18 mmの基板の長い2辺に並んだ30本のピンでできています。14本のデジタル入出力ピン(D0〜D13、うち6本はPWM出力が可能:~3、5、6、9、10、11)、8本のアナログ入力(A0〜A7)、そして電源と制御のピンであるVIN、5V、3V3、AREF、2本のGND、2本のRSTです。NanoはArduino Unoと同じATmega328Pプロセッサーを使っているので、ピン番号と機能も同じです。Uno用に書いたスケッチは、ボードのメニューでNanoを選ぶ以外は何も変えずに動きます。

それでも、NanoにはUnoと違う重要な点がいくつかあり、初心者がつまずくのはまさにそこです。A6とA7はアナログ専用で、DCジャックがなく、3V3ピンが供給できる電流はごくわずかで、互換品はCH340チップでUSBを扱い、コードを書き込むのにATmega328P (Old Bootloader)を選ぶ必要があることがよくあります。このガイドでは、すべてのピンを知り、Nanoをブレッドボードに正しく挿す方法、UnoからNanoへのピン対応、そしてNano EveryとNano ESP32が従来のNanoとどう違うかを学びます。

Arduino Nanoの基板とピン
純正のArduino Nano:片側にミニUSBソケット、反対側に2×3のICSPヘッダー、中央にリセットボタンがあります。D13、3V3、AREFのピンはUSB側に、VINとTX1は反対側にあります。

Arduino NanoとはUnoとどう違う?

Arduino Nanoは、Unoの主要な機能をすべて45 × 18 mm、重さ約7グラムの基板に詰め込んでいます。ピンが下向きなのでそのままブレッドボードに挿せ、ジャンパーワイヤーが少なくて済みます。回路が完成したら、箱の中や常設の基板にも簡単に移せます。中身はUnoと同じ16 MHzのATmega328Pで、ロジックレベルは5 V、同じライブラリがそのまま使えます。純正のNanoでは、USBシリアル通信をFT232RLチップが担当しています。市販の安価な互換品のほとんどは、代わりに基板の裏にCH340GかCH340Cを載せています。ロボットカー、ウェアラブル、リモコンなど、箱に収める必要があるあらゆる回路で、NanoはUnoより実用的な選択です。

項目Arduino Nano(V3)
マイコンATmega328P、8ビット、16 MHz(TQFP-32パッケージ)
ロジック(動作)電圧5 V
VINの入力電圧推奨7〜12 V
デジタル入出力14本(D0〜D13)、A0〜A5を含めると20本
PWM出力6本:D3、D5、D6、D9、D10、D11
アナログ入力8本(A0〜A7)、10ビット(0〜1023)
1ピンあたりの電流推奨20 mA、絶対最大定格40 mA
メモリフラッシュ32 KB(IDEで使えるのは30,720バイト)、SRAM 2 KB、EEPROM 1 KB
USBMini-B。FT232RL(純正品)またはCH340(互換品)
大きさと重さ45 × 18 mm、約7 g

Arduino Nanoのピン図:どのピンがどこにある?

Nanoの30本のピンは15本ずつ向かい合う2列に並び、列の間隔は15.24 mm(0.6インチ)です。ミニUSBソケットを手前にして基板を置くと、ソケットのすぐそばに向かい合う2本のピン、D12とD13が見えます。D13のある列には3V3、AREF、A0〜A7、電源のピンが、D12のある列にはD11からD2までのデジタルピン、続いてGND、RST、RX0(D0)、TX1(D1)が並びます。USBから最も遠い2列の端では、VINとTX1が向かい合っていて、2×3のICSPヘッダーもこちらの端にあります。中央のリセットボタンの周りには、電源LED(POWかON)、D13につながったL LED、書き込み中に点滅するTXとRXのLEDがあります。

位置(USBから)アナログ・電源の列デジタルの列備考
1D13(SCK、L LED)D12(MISO)USBソケットのすぐそば
23V3~D11(MOSI)3V3が供給できる電流はごくわずか
3AREF~D10(SS)-
4A0~D9-
5A1D8-
6A2D7-
7A3~D6-
8A4(SDA)~D5I2Cのデータ線
9A5(SCL)D4I2Cのクロック線
10A6~D3(INT1)A6はアナログ専用
11A7D2(INT0)A7はアナログ専用
125VGND5VとGNDが向かい合う
13RSTRSTどちらも同じリセット線
14GNDD0(RX0)D0はUSBシリアル変換チップにつながっている
15VIND1(TX1)ICSPヘッダーはこちらの端
マニュアルや回路図では、Nanoのピンに物理的な順番で1〜30の番号を付けていることがあります。1番ピンがTX1(D1)、30番ピンがVINです。この番号はコードでは使いません。コードでは常に基板に印刷された名前を使います。D7なら7、A3ならA3と書きます。基板の表示が読みにくい場合は、スマホでピン配置ツールを開いておきましょう。

デジタルピン(D0〜D13)、PWM、特殊な機能

各デジタルピンはpinMode()で入力か出力に設定します。出力では、HIGHで約5 V、LOWで0 Vになります。入力を浮かせたままにしないよう、INPUT_PULLUPでチップ内部の20〜50 kΩの抵抗をオンにできます。1ピンあたりの安全な電流は20 mAです。220 Ωの抵抗を付けた赤のLEDは約13 mAを消費します。適切な抵抗はLED抵抗計算ツールで求められます。一部のピンには追加の機能があり、前もって知っておけば、プロジェクトが大きくなったときの競合を防げます。

ピン追加の機能注意点
D0(RX)、D1(TX)ハードウェアシリアルポート(Serial)1 kΩの抵抗を介してUSBシリアル変換チップにつながっている。書き込み中は空けておく
D2、D3外部割り込みINT0、INT1attachInterrupt()はこの2本でしか使えない
~D3、~D11PWM、Timer2(約490 Hz)tone()で音を鳴らしている間、このピンのPWMは乱れる
~D5、~D6PWM、Timer0(約980 Hz)millis()やdelay()と同じタイマー
~D9、~D10PWM、Timer1(約490 Hz)Servoライブラリがこの2本のPWMを無効にする
D10〜D13SPI:SS、MOSI、MISO、SCKSPIを使うときはD10を出力のままにしておく
D13基板上のL LEDLEDとその抵抗がピンに直接つながっている

NanoとUnoを分ける小さいながら重要な違いがD13にあります。Uno R3ではL LEDをオペアンプを介して駆動していますが、NanoではLEDとその抵抗がピンに直接つながっています。D13をINPUT_PULLUPでボタンの入力に使うと、LEDがピンを引き下げ、ボタンを押していなくてもLOWを読むことがあります。このピンは出力かSPIに使いましょう。PWMの仕組みとanalogWrite()の値の意味はPWMとは?で、割り込みはArduinoの割り込みで解説しています。

アナログピンA0〜A7:A6とA7はなぜ違う?

Nanoの8本のアナログ入力は、0〜5 Vの電圧を10ビットの分解能で測ります。analogRead()は0〜1023の数を返し、1ステップは約4.9 mVです。必要に応じてA0〜A5は普通のデジタルピンとしても使え(A0 = 14 … A5 = 19)、A4とA5はI2CバスのSDAとSCLも兼ねます。UnoにはないA6とA7は、ATmega328Pの表面実装(TQFP)パッケージにある2つの追加のADCチャンネルです。この2つのチャンネルはアナログ・デジタル変換器にしかつながっておらず、背後にポートレジスタも出力ドライバもプルアップ抵抗もありません。そのため、この2本ではpinMode()、digitalRead()、digitalWrite()、INPUT_PULLUPが動きません。

コンパイラーはdigitalRead(A6)に文句を言いませんが、結果は意味がなく、ボタンがまったく動かないように見えます。A6とA7は、ポテンショメーター、LDR、土壌水分センサーのようなアナログの信号源に使ってください。ボタンをつなぎたい場合は、ピンから5Vへ外付けの10 kΩのプルアップ抵抗を追加し、analogRead()で読みます。値が300を下回ったらボタンが押されたとみなします。

A6とA7がアナログ専用なのは欠点に見えるかもしれませんが、うまく活用できます。複数のボタンを値の違う抵抗を通して1本のアナログピンにつなぐと、ボタンごとに違う電圧が出ます。こうすれば1本のピンで4つのボタンを読め、デジタルピンをモーターやディスプレイ用に空けておけます。回路では、A6を10 kΩの抵抗を通して5Vにつなぎ、1つ目のボタンをA6とGNDの間に直接、残りの3つのボタンをそれぞれ2.2 kΩ、4.7 kΩ、10 kΩの抵抗を通してGNDにつなぎます。

C++ (Arduino IDE)
1// A6'da 4 buton: 10 kΩ pull-up + farklı seri dirençler / 4 buttons on A6: 10 kΩ pull-up + different series resistors
2const byte LADDER_PIN = A6;    // yalnız analog pin / analog-only pin
3
4byte readButton() {
5  int v = analogRead(LADDER_PIN);
6  if (v < 92)  return 1;       // 0 Ω      -> yaklaşık 0 / about 0
7  if (v < 256) return 2;       // 2,2 kΩ   -> yaklaşık 184 / about 184
8  if (v < 419) return 3;       // 4,7 kΩ   -> yaklaşık 327 / about 327
9  if (v < 767) return 4;       // 10 kΩ    -> yaklaşık 512 / about 512
10  return 0;                    // basılı değil -> 1023 / not pressed -> 1023
11}
12
13void setup() {
14  Serial.begin(9600);
15}
16
17void loop() {
18  static byte lastButton = 0;
19  byte b = readButton();
20  if (b != lastButton) {
21    delay(20);                 // kontak sıçramasını bekle / wait out contact bounce
22    b = readButton();          // değeri doğrula / confirm the value
23    if (b != lastButton) {
24      lastButton = b;
25      if (b != 0) {
26        Serial.print(F("Buton / Button: "));
27        Serial.println(b);
28      }
29    }
30  }
31}
ボタンGNDへの直列抵抗予想されるanalogReadコードで受け付ける範囲
ボタン10 Ω(直結)00〜91
ボタン22.2 kΩ約18492〜255
ボタン34.7 kΩ約327256〜418
ボタン410 kΩ約512419〜766
なし-1023767〜1023

値はanalogRead = 1023 × R / (10 kΩ + R)という式から求まり、各しきい値は隣り合う2つの値のちょうど中間にあります。プルアップ抵抗とADCは同じ5 Vのラインから給電されるので、電源が4.7 Vに下がっても値は変わりません。これをレシオメトリック測定と呼びます。2つのボタンを同時に押すと、抵抗が並列になって値が下がります。コードは番号の小さいボタンだと判断し、3と4を同時に押すと2として読まれることさえあります。そのため抵抗ラダーは、一度に1つのキーしか押さないメニューに向いています。分圧の計算は分圧回路の計算ツールで試せ、アナログの読み取りについてはADCの記事で詳しく読めます。

電源ピン:VIN、5V、3V3、GND

ピン役割制限と注意点
VIN7〜12 Vでボードに給電する。レギュレーターが5 Vに下げる互換品のAMS1117は最大15 Vまでしか耐えられず、12 Vではすぐに熱くなる
5Vボードの5 Vライン。出力としてセンサーに給電し、入力として安定化された5 Vを受け付けるUSBでは約4.7 V。外部から5 Vを超える電圧を絶対に入れない
3V33.3 V出力純正品はFT232RLから、互換品はCH340から来ている。電流はごく限られる
GND(2本)共通グランドすべての外部電源のGNDをここにつなぐ必要がある
RST(2本)LOWにするとボードが再起動する外付けのリセットボタン用。どちらも同じ線
AREFアナログ測定用の外部基準電圧の入力使う前にanalogReference(EXTERNAL)を呼ぶ

Nanoには3つの方法で給電できます。USBで給電すると、5 Vはショットキーダイオードを通ってパソコンから来ます。ダイオードで約0.3 V落ちるので、5Vピンでは通常4.6〜4.8 Vが測れます。純正の基板のMBR0520ダイオードの定格は最大500 mAです。VINピンに7〜12 Vを入れると、裏のレギュレーター(純正品はLM1117、互換品はたいていAMS1117)が5 Vに下げます。レギュレーターは余分な電圧を熱に変えます。消費する電力は(VIN − 5 V) × 電流なので、12 Vの入力から150 mAを引くと、小さなレギュレーターは約1 Wを消費して触れないほど熱くなります。そのためVINには7〜9 Vが理想です。3つ目の方法は、外部から安定化された5 Vを5Vピンに入れることです。この場合レギュレーターは使われず、USB側のダイオードが電流がパソコンに逆流するのを防ぎます。12 Vの電源で動かすなら、LM2596降圧コンバーターで5 Vを作って5Vピンに入れるほうが、ずっと発熱の少ない解決法です。給電の選択肢はすべてArduinoへの給電方法で解説しています。

3V3ピンは、Nanoで最も誤解されているピンです。Unoではこのピンは別のレギュレーターから来ていますが、従来のNanoには独立した3.3 Vのレギュレーターがありません。純正のNanoでは、3.3 VはFT232RLチップ内部の小さなレギュレーター(最大50 mA)から来ていて、Arduinoの古いドキュメントによると、ボードをUSBで給電していないときはこの出力は使えません。ほとんどの互換品では、このピンはCH340自身の内部レギュレーターにつながっていて、数mAの負荷にしか安全ではありません。ですから、nRF24L01、ESP-01、RC522のような3.3 Vのモジュールをこのピンから給電しないでください。5Vピンから給電する別のAMS1117-3.3レギュレーターを使います。また、Nanoの5 Vの出力を3.3 Vのモジュールの入力につなぐときは、間にレベル変換モジュールか分圧回路を入れてください。

9 V電池や12 Vのアダプターを5Vピンにつなぐと、Nanoは一瞬で壊れます。このピンはレギュレーターの出力で、ATmega328Pが耐えられるのは最大6 Vです。電池やアダプターは必ずVINピンにつないでください。極性にも注意してください。ほとんどのNanoはVINに逆接続保護がありません。

USBで5Vピンが約4.7 Vになることは、アナログ測定にも影響します。analogRead()は電源電圧を上限として使うので、計算に5.0 Vを入れると結果が4〜6パーセントずれます。ATmega328Pの約1.1 Vの内部固定基準電圧を測れば、実際の電源電圧を求められます。下の最初のテスト用スケッチはまさにそれを行い、8本のアナログ入力をすべて実際の電源電圧を使ってボルトに換算し、D13のL LEDを点滅させます。

C++ (Arduino IDE)
1// Arduino Nano: A0-A7'yi ve gerçek besleme gerilimini oku / read A0-A7 and the real supply voltage
2const byte ANALOG_PINS[8] = {A0, A1, A2, A3, A4, A5, A6, A7};
3
4long readVccMillivolts() {
5  // Referans AVcc, ölçülen kanal dahili 1,1 V / reference AVcc, measured channel internal 1.1 V
6  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
7  delay(2);                                // referansın oturmasını bekle / let the reference settle
8  ADCSRA |= _BV(ADSC);                     // dönüşümü başlat / start the conversion
9  while (bit_is_set(ADCSRA, ADSC)) {}      // bitmesini bekle / wait until it finishes
10  unsigned int raw = ADC;                  // 10 bit sonuç / 10-bit result
11  return 1125300L / raw;                   // 1,1 V x 1023 x 1000 / 1.1 V x 1023 x 1000
12}
13
14void setup() {
15  Serial.begin(9600);
16  pinMode(LED_BUILTIN, OUTPUT);            // D13'teki L LED'i / L LED on D13
17}
18
19void loop() {
20  long vcc = readVccMillivolts();
21  analogRead(A0);                          // kanal değişti, ilk okumayı at / channel changed, discard the first reading
22  Serial.print(F("Vcc: "));
23  Serial.print(vcc);
24  Serial.print(F(" mV |"));
25  for (byte i = 0; i < 8; i++) {
26    int raw = analogRead(ANALOG_PINS[i]);  // A6 ve A7 de okunur / A6 and A7 are read too
27    Serial.print(F(" A"));
28    Serial.print(i);
29    Serial.print(F("="));
30    Serial.print(raw * (vcc / 1000.0) / 1023.0, 2);   // gerçek Vcc ile volta çevir / convert to volts using the real Vcc
31  }
32  Serial.println();
33  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));   // L LED'ini çevir / toggle the L LED
34  delay(1000);
35}

書き込んだら、シリアルモニタを9600ボーで開きます。Vccの値は、USBでは約4600〜4800 mV、VINから給電すると約5000 mVになるはずです。何もつないでいないアナログピンはでたらめな値を示します。A0にポテンショメーターをつないで回すと、値が0からVccまでなめらかに変わるのがわかります。内部基準電圧はチップごとに±10%ばらつくことがあります。より正確な結果を得るには、テスターで5Vピンを測り、コードの1125300という定数に測った値 / コードが表示した値の比を掛けてください。このスケッチはATmega328Pのレジスタを直接使っているので、Nano EveryやNano ESP32では動きません。

ミニUSB、CH340、ドライバのインストール

従来のNanoにはMini-B USBソケットがあり、スマホ用のMicro-USBやUSB-Cのケーブルは合いません。新しい互換品にはMicro-USBやUSB-Cのソケットを持つものもありますが、ほとんどはまだミニUSBです。ボードがポートの一覧にまったく現れない最もよくある原因は、データ線のない充電専用ケーブルです。電源LEDは点きますが、パソコンはボードを認識しません。ケーブルに問題がなければ、ボードを裏返してUSBソケットの近くのチップを見てください。FT232RLと書かれていれば純正のNanoで、ドライバはたいていOSにすでに入っています。CH340GかCH340Cと書かれていれば互換品です。

Windows 10と11は、多くの場合Windows UpdateでCH340のドライバを自動でインストールし、ボードはデバイスマネージャーにUSB-SERIAL CH340 (COM3)のような名前で表示されます。ほかのデバイスの下に黄色い感嘆符付きのUSB2.0-Serialが見える場合は、チップメーカーのWCHからCH341SERドライバをインストールし、ボードを抜いて挿し直してください。最近のmacOSにはドライバが含まれていて、ポートは/dev/cu.usbserial-…として表示されます。古いドライバを上からインストールすると競合が起きることがあります。Linuxではドライバがカーネルに組み込まれています。Ubuntu 22.04以降でボードを挿した途端にポートが消える場合は、スクリーンリーダーのパッケージbrlttyがCH340を横取りしています。使っていなければsudo apt remove brlttyで削除できます。ポートとドライバの問題はすべてArduinoに書き込めないで、USBシリアル変換チップの違いはUSB-TTL変換モジュールで解説しています。

コードの書き込み:ATmega328PかOld Bootloaderか?

  1. Arduino IDEで「ツール」>「ボード」>「Arduino AVR Boards」>「Arduino Nano」を選びます。
  2. ボードを挿し、「ツール」>「ポート」で新しく現れたポート(WindowsならCOM3、macOSなら/dev/cu.usbserial-…など)を選びます。
  3. 「ツール」>「プロセッサ」で、まずATmega328Pを選んでBlinkのスケッチ例を書き込んでみます。
  4. 出力にprogrammer is not responding(書込装置が応答しない)やnot in sync(同期していない)が10回繰り返し表示されたら、プロセッサをATmega328P (Old Bootloader)にして書き込み直します。
  5. それでも失敗する場合は、別のUSBポートを試し、D0とD1の配線を外し、リセットボタンを押したときにL LEDが速く点滅するか確認します。
  6. どの選択肢でうまくいったかをメモしておきます。同じ販売店のほかのNanoも、おそらく同じ設定が必要です。

この混乱の原因は、2018年に行われた変更です。ArduinoはNanoの古い2 KBのブートローダー(ATmegaBOOT)を、Unoで使われている512バイトのOptibootに置き換えました。Optibootは115200ボーでコードを受け取りますが、古いブートローダーは57600ボーを期待します。速度が合わないと、ボードがまったく応答しないように見えます。互換品のメーカーは何年も古いブートローダーのボードを出荷し続けたので、IDEには両方の選択肢があり、間違ったほうを選んでもボードが傷むことはありません。必要なら、2台目のArduinoをArduinoISPとして使い、新しいブートローダーをNanoに書き込めます。書き込みが速くなり、ウォッチドッグリセットのあとに古いブートローダーで起きるリセットの無限ループもなくなります。

プロセッサの選択肢ブートローダー書き込み速度コード用の容量
ATmega328POptiboot(2018年以降)115200ボー30,720バイト
ATmega328P (Old Bootloader)ATmegaBOOT(旧)57600ボー30,720バイト
ATmega168ATmegaBOOT(旧)19200ボー14,336バイト
Nanoでは、コンパイルの出力にMaximum is 30720 bytes(最大30720バイト)と表示されます。Unoを選ぶと、同じスケッチが32,256バイトの上限で測られます。新しいブートローダーが入っていても、IDEは古いボードとの互換性のためにNanoで2 KBを確保しています。スケッチがこの上限に近づいたら、使っていないライブラリや不要なSerial.print()の行を削り、大きな表を簡素化するか、48 KBのフラッシュを持つNano Everyに移ってください。

ブレッドボードへの挿し方とはんだ付け

ブレッドボードと中央の溝
ブレッドボード中央の溝は2つの半分を分けています。Nanoがこの溝をまたぐと、各ピンがそれぞれ別の列に入ります。

Nanoをブレッドボードに挿すときは、2列のピンが中央の溝の両側に来るように置きます。こうすれば各ピンがそれぞれ別の列に入り、その列の空いた穴からそのピンに配線をつなげます。基板が溝とピンの間の穴を覆うので、各ピンの横に残る穴はわずかです。一般的な830穴のブレッドボードでは、基板を溝の中央に置くと、片側に2つ、もう片側に3つの空き穴ができます。USBソケットをブレッドボードの短い辺に向けると、ケーブルを挿しやすくなります。次にNanoの5VとGNDのピンをブレッドボードの赤と青の電源レールにつなぎ、そこからセンサーに給電できるようにします。ブレッドボードの内部の配線を確認したい場合はブレッドボードとは?を参照してください。

  • ピンヘッダーのはんだ付け:ピンがばらで付いてくる互換品では、まずオスのピンヘッダーをブレッドボードに挿し、その上にNanoを置いてそのままはんだ付けします。ブレッドボードがピンヘッダーをまっすぐ、ちょうど0.6インチの間隔に保ってくれます。手順ははんだ付けのやり方にあります。
  • 取り外し:片側から基板を持ち上げるとピンが曲がります。両端を少しずつ持ち上げるか、マイナスドライバーを下に差し込んで均等に引き抜いてください。
  • 接触不良:古いブレッドボードや安いブレッドボードではばねがへたり、Nanoがときどきリセットされたり、センサーがたまに途切れたりします。ブレッドボードの別の場所にボードを移してみてください。
  • Nano拡張ボード:常設のプロジェクトでは、ネジ端子や、各ピンに信号、5V、GNDを出す3ピンのヘッダーが付いたNano I/Oシールドを使うと、配線の混乱が大きく減ります。
  • ミニブレッドボード:小さな170穴のブレッドボードには電源レールがありません。5VとGNDを別々の列に引き出し、配線の色で区別してください。
Nanoをユニバーサル基板(ストリップボード)にはんだ付けする場合は、向かい合うピンが同じ銅のストリップに乗らないようにしてください。2列のピンの間でストリップを切っていないと、12番目の位置の5VとGND、15番目の位置のVINとTX1がショートし、USBを挿した瞬間にボードとパソコンのポートの両方に負担がかかります。2列の間のストリップはドリルの刃で切ってください。詳しくは常設の回路の記事にあります。

Arduino UnoからNanoへのピン対応表

機能Arduino Uno R3Arduino Nano備考
デジタル入出力D0〜D13D0〜D13番号も機能も同じ
PWM~3、5、6、9、10、11~3、5、6、9、10、11周波数もタイマーも同じ
アナログ入力A0〜A5A0〜A7A6とA7はNanoだけにあり、アナログ専用
I2C SDA / SCLA4 / A5(AREFの横にも同じもの)A4 / A5Nanoには独立したSDA/SCLピンがない
SPI SS / MOSI / MISO / SCK10 / 11 / 12 / 1310 / 11 / 12 / 13どちらもICSPヘッダーにもある
外部割り込みD2、D3D2、D3同じ
内蔵LEDD13(オペアンプでバッファ)D13(ピンに直接接続)NanoでD13を入力に使うときは注意
電源入力DCジャックとVin、7〜12 VVINピンのみ、7〜12 VNanoにはDCジャックがない
USBUSB-B。ATmega16U2またはCH340Mini-B。FT232RLまたはCH340ケーブルが違う
3.3V出力独立したレギュレーター、50 mAUSBチップから、ごく限られるNanoではここからモジュールに給電しない
IOREFありなしシールドとの互換性のため
コード用の容量32,256バイト30,720バイトIDEはNanoで2 KBを確保している
シールドの装着そのままアダプターか拡張ボードで-

表のとおり、Uno用に作った回路をNanoに移すには、同じ番号のピンに配線をつなぎ直すだけです。UnoのD9につないだサーボはNanoでもD9に、A4/A5につないだI2CディスプレイはやはりA4/A5につなぎます。コードで変えるのは、「ツール」>「ボード」でArduino Nanoを選ぶことだけです。ただし、Unoに直接挿すシールドはNanoには合いません。そのためにNanoをUnoのピン配置に変換するアダプター基板があります。Unoの各ピンの詳しい役割はArduino Unoのピン配置で、ボード選びの助けはどのArduinoを買えばいい?で見つかります。

Nano EveryとNano ESP32:従来のNanoとの違い

項目従来のNano(V3)Nano EveryNano ESP32
プロセッサーATmega328P、8ビット、16 MHzATmega4809、8ビット、IDEでは16 MHz(最大20 MHz)ESP32-S3、デュアルコア、32ビット、240 MHz
フラッシュ / SRAM32 KB / 2 KB48 KB / 6 KB16 MB / 512 KB(+8 MBのPSRAM)
ロジック電圧5 V5 V3.3 V(5 Vには耐えられない)
USBMini-BMicro-BUSB-C
VINの範囲推奨7〜12 V7〜21 V6〜21 V
PWMピンD3、D5、D6、D9、D10、D11D3、D5、D6、D9、D10(D11にはない)ほぼすべてのデジタルピン
A6 / A7アナログのみアナログとデジタルアナログとデジタル
外部割り込みD2、D3のみすべてのデジタルピンすべてのピン
D0 / D1のシリアル線USBと共有(Serial)USBとは別(Serial1)USBとは別(Serial0)
無線なしなしWi-FiとBluetooth LE
IDEのボードパッケージArduino AVR BoardsArduino megaAVR BoardsArduino ESP32 Boards

Nano Everyは、大きさもピン配置も同じ、従来のNanoの強化版です。中身はATmega4809で、5 Vで動き、48 KBのフラッシュと6 KBのSRAMを備えているので、従来のNanoのRAMでは苦しいOLEDやLEDテープのプロジェクトにも余裕が生まれます。USB側ではSAMD11チップが橋渡しをし、コードはUPDIインターフェースで書き込むので、Old Bootloaderの面倒はありません。ボードを使うには、ボードマネージャからArduino megaAVR Boardsパッケージをインストールします。注意すべき違いは次のとおりです。PWMはD3、D5、D6、D9、D10だけで(D11にはPWMがありません)、A6とA7はデジタルピンとしても使え、すべてのデジタルピンを外部割り込みに使え、D0とD1はUSBから独立したSerial1ポートです。「ツール」>「Registers emulation」>「ATMEGA328」の設定でPORTBのようなポートレジスタをエミュレートできますが、タイマーやADCのレジスタに直接書き込む古いコードはやはり動きません。下のスケッチはEveryの2つの違いをまとめて示しています。シリアルモニタを開いたままD0/D1のモジュールと通信し、A7を内部プルアップ付きのボタン入力として使います。

C++ (Arduino IDE)
1// Nano Every: Serial = USB, Serial1 = D0 (RX) ve D1 (TX) / Serial = USB, Serial1 = D0 (RX) and D1 (TX)
2const byte BUTTON_PIN = A7;            // Every'de A7 dijital de çalışır / A7 also works as digital on the Every
3
4bool lastState = HIGH;
5
6void setup() {
7  Serial.begin(9600);                  // Seri Monitör / Serial Monitor
8  Serial1.begin(9600);                 // D0/D1'deki modül, ör. HC-05 / module on D0/D1, e.g. HC-05
9  pinMode(BUTTON_PIN, INPUT_PULLUP);   // klasik Nano'nun A7'sinde çalışmaz / does not work on the classic Nano's A7
10}
11
12void loop() {
13  if (Serial1.available()) {
14    Serial.write(Serial1.read());      // modülden bilgisayara / module to computer
15  }
16  if (Serial.available()) {
17    Serial1.write(Serial.read());      // bilgisayardan modüle / computer to module
18  }
19  bool state = digitalRead(BUTTON_PIN);
20  if (state != lastState) {            // durum değişince bildir / report when the state changes
21    lastState = state;
22    Serial1.println(state == LOW ? "Buton basildi / Button pressed" : "Buton birakildi / Button released");
23    delay(20);                         // kontak sıçraması / contact bounce
24  }
25}

一方Nano ESP32は、同じ基板の大きさでまったく別の世界です。u-blox NORA-W106モジュールの中のESP32-S3プロセッサーが240 MHzで動き、Wi-FiとBluetooth LEを備えています。最も重要な違いは電圧です。すべてのピンが3.3 Vで動き、5 Vには耐えられないので、従来のNanoにそのままつなげる5 V出力のセンサーがNano ESP32を壊すことがあります。従来のNanoの5Vピンの位置にはVBUSピンがあり、ボードをUSBで給電している間だけ5 Vを出します。VINで給電しているときは、このピンには何も出ません。アナログ側のAREFとRSTピンの位置にはBOOT0とBOOT1があります。ボードはArduino ESP32 Boardsパッケージでプログラムし、「ツール」>「Pin Numbering」メニューには2つの選択肢があります。初期設定のBy Arduino pinでは基板に印刷されたDとAの名前が使われ、By GPIO numberではESP32のGPIO番号になります。たとえばD2は実際にはGPIO5で、GPIOモードでpinMode(2, OUTPUT)と書くと、代わりにA1のピンが設定されます。D2やA0のように常に名前でピンを書けば、コードはどちらのモードでも正しく動きます。

C++ (Arduino IDE)
1// Nano ESP32: Araçlar > Pin Numbering > By Arduino pin (default)
2// Nano ESP32: Tools > Pin Numbering > By Arduino pin (default)
3bool ledOn = false;
4
5void setup() {
6  Serial.begin(115200);                // USB-C üzerinden / over USB-C
7  pinMode(LED_BUILTIN, OUTPUT);        // D13 = GPIO48
8  pinMode(LED_RED, OUTPUT);
9  pinMode(LED_GREEN, OUTPUT);
10  pinMode(LED_BLUE, OUTPUT);
11  digitalWrite(LED_RED, HIGH);         // RGB LED ters mantık: HIGH = sönük / active low: HIGH = off
12  digitalWrite(LED_GREEN, HIGH);
13  digitalWrite(LED_BLUE, HIGH);
14  analogReadResolution(12);            // 0-4095 arası / range 0-4095
15}
16
17void loop() {
18  int raw = analogRead(A0);            // 12 bit ham değer / 12-bit raw value
19  int mv = analogReadMilliVolts(A0);   // kalibre edilmiş milivolt / calibrated millivolts
20  Serial.printf("A0: %d  (%d mV)\n", raw, mv);
21  digitalWrite(LED_GREEN, mv > 1650 ? LOW : HIGH);   // 1,65 V üstünde yeşil / green above 1.65 V
22  digitalWrite(LED_RED, mv > 1650 ? HIGH : LOW);     // altında kırmızı / red below
23  ledOn = !ledOn;
24  digitalWrite(LED_BUILTIN, ledOn ? HIGH : LOW);     // D13 LED'ini yakıp söndür / blink the D13 LED
25  delay(500);
26}

Nano ESP32のアナログ入力は12ビットで読み取り、0〜4095の値を返します。analogReadMilliVolts()はチップのキャリブレーションデータを使い、結果を直接ミリボルトで返します。基板上のRGB LEDは反転した論理で動くので、LOWを書くと点きます。コードが書き込めず、ボードがポートの一覧から消えた場合は、リセットボタンを素早く2回押すとブートローダーモードに入れます。ESP32のWi-Fiについて学ぶにはESP32とは?を、ボードを決めるにはArduinoとESP32の違いは?を読んでください。ファミリーのほかのメンバーでは、Nano R4がUno R4と同じ48 MHzのRenesas RA4M1プロセッサーを5 VのNanoの形にしていますが、1ピンあたり8 mAしか供給できません。Nano 33 IoTとNano 33 BLEは、Nano ESP32と同じく3.3 Vのボードです。

Arduino Nanoのプロジェクトアイデア

  • ポケット温度計:DHT11で測った温度を小さなOLEDディスプレイに表示します。Nanoとディスプレイはマッチ箱に収まります。
  • ミニロボットカー:Nanoの小ささはシャシーの場所を節約します。L298Nでモーターを動かし、ロボットカーの作り方の手順に従ってください。
  • ライントレースロボット:8本のアナログ入力があれば、5個のセンサーのアレイを読むのに十分すぎるほどです。詳しくはライントレースロボットにあります。
  • Bluetoothリモコン:HC-05モジュールをSoftwareSerialでD8とD7につなぎ、スマホからLEDやリレーを操作します。D0とD1は書き込み用に空いたままです。
  • 身に着けるライト:電池で動くNanoと数個のWS2812B LEDで、バッジやバッグのライトを作ります。
  • 1本のピンでキーパッド:上の抵抗ラダーをA6とA7の両方に作って8ボタンのメニューにし、デジタルピンはディスプレイとモーター用に残します。
  • USBキーボードにしたい?従来のNanoのATmega328PはUSBを内蔵していないので、パソコンにキーボードやマウスとして認識させることはできません。それにはLeonardoやPro MicroのようなATmega32U4のボードが必要です。

よくある間違いと解決法

症状原因解決法
Nanoがポートの一覧に現れない充電専用ケーブル、またはCH340ドライバがないデータ通信用ケーブルを使い、CH341SERドライバをインストールする。Linuxではbrlttyを削除する
書き込みが「not in sync」(同期していない)エラーで止まるボードに古いブートローダーが入っている「ツール」>「プロセッサ」>「ATmega328P (Old Bootloader)」
A6やA7のボタンがまったく反応しないこれらのピンにはdigitalReadも内部プルアップもない外付けの10 kΩのプルアップを追加し、analogReadでしきい値を使う
D13のボタンが常に押されたと読まれるL LEDとその抵抗がピンを引き下げているボタンを別のピンに移す
3V3から給電したモジュールが不安定か動かない3V3ピンが供給できる電流はごくわずか5Vから給電する別の3.3 Vレギュレーターを使う
アナログ値が数パーセント高いUSBでは5Vピンが約4.7 V実際のVccを測るか、VINからボードに給電する
VINに12 Vを入れるとボードがとても熱くなるレギュレーターが(12 − 5) × 電流を熱として消費しているVINに7〜9 Vを入れるか、降圧モジュールで5Vピンに給電する
サーボをつなぐとD9/D10のLEDが暗くならないServoライブラリがTimer1を使っているLEDをD3、D5、D6、D11に移す
Nanoのプロジェクトを始める前に、ピンの計画を書き出しましょう。まずI2C(A4/A5)、SPI(D10〜D13)、割り込み(D2/D3)、PWMが必要な部品を配置し、アナログセンサーをA0〜A3とA6〜A7に振り分け、ボタンを残りのデジタルピンに置き、D0とD1は最後に回します。ボードが予期せず再起動する場合は、Arduinoがリセットを繰り返すのトラブルシューティングの手順が役に立ちます。

Arduino Nanoは、Unoで学んだことを小さな常設のプロジェクトに持ち込む最も簡単な方法です。A6/A7、3V3、ブートローダーまわりの違いさえ知っていれば、驚くことはありません。基本に戻りたい場合はArduinoとは?から始めてください。BlueGraysアプリには、LEDの点滅、ボタン付きのLED、LDRでの明るさの測定、HC-SR04での距離、DHT11での温度と湿度、RGB LED、ポテンショメーターでのサーボ、2台のArduinoのシリアル通信のプロジェクトが、回路図とすぐ使えるコード付きでステップごとに揃っています。どれも同じピン番号でNanoで動きます。

よくある質問

Arduino Nanoには何本のピンがある?

従来のArduino Nanoには2列で30本のピンがあります。そのうち14本がデジタル入出力(D0〜D13)、8本がアナログ入力(A0〜A7)で、残りはVIN、5V、3V3、AREF、2本のGND、2本のRSTのピンです。A0〜A5もデジタルピンとして使えるので、デジタルピンは20本になります。A6とA7はアナログ値しか読めません。

Arduino NanoのPWMピンはどれ?

PWMピンはD3、D5、D6、D9、D10、D11で、基板やピン配置図では番号の横に~の印が付いています。D5とD6は約980 Hz、ほかは約490 Hzで動きます。ServoライブラリはD9とD10のPWMに、tone()関数はD3とD11に影響します。

Arduino NanoのA6とA7はデジタルピンとして使える?

いいえ。A6とA7はアナログ・デジタル変換器にしかつながっていないATmega328Pの2つのチャンネルで、これらのピンではpinMode、digitalRead、digitalWrite、内部プルアップが動きません。ボタンを読むには、外付けの10 kΩのプルアップ抵抗を追加し、analogRead()の値をしきい値と比べます。ただしNano EveryとNano ESP32では、A6とA7をデジタルピンとしても使えます。

Arduino Nanoにはどの電圧を供給できる?

NanoにはUSB、VINピンへの7〜12 V、または5Vピンへの安定化された5 Vで給電できます。互換品の基板のAMS1117レギュレーターは15 Vを超えると壊れることがあり、12 Vでもすぐに熱くなるので、VINには7〜9 Vが理想です。5Vピンには5 Vを超える電圧を絶対に入れないでください。

Arduino NanoのOld Bootloaderとは?

2018年、ArduinoはNanoのブートローダーをより小さく速いOptibootに置き換えました。新しいブートローダーは115200ボー、古いものは57600ボーで通信します。市販の互換品のNanoの多くにはまだ古いブートローダーが入っているので、「ツール」>「プロセッサ」でATmega328P (Old Bootloader)を選ばないと、書き込みがnot in sync(同期していない)エラーで止まります。間違った選択肢を選んでもボードは傷まないので、両方を試せば大丈夫です。

Arduino NanoとUnoの違いは?

どちらも16 MHzのATmega328Pを使っているので、ピン番号、PWMピン、I2C(A4/A5)とSPI(D10〜D13)の線、コードは同じです。Nanoは小さく、ブレッドボードに挿せ、アナログ入力が2本多い(A6、A7)ですが、DCジャックもシールド用のヘッダーもありません。またNanoはミニUSBを使い、IDEはコード用に30,720バイトを割り当てますが、Unoの上限は32,256バイトです。

全プロジェクトを見る
LEDの点滅
#1初級

LEDの点滅

電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

4.6(188)
1127
ボタンでLEDを点灯(押している間のみ)
#9初級

ボタンでLEDを点灯(押している間のみ)

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

4.8(113)
229
LDRで光の強さを測定
#11初級

LDRで光の強さを測定

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

4.6(81)
139
HC-SR04で距離を測定(シリアルモニタ表示)
#27初級

HC-SR04で距離を測定(シリアルモニタ表示)

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

4.6(46)
71
DHT11で温度と湿度を測定
#55中級

DHT11で温度と湿度を測定

部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

4.7(47)
73
RGB LEDの使い方
#39初級
プレミアム

RGB LEDの使い方

1つのLEDに3つの色が入っています。RGB LEDが赤、緑、青の順に、それぞれ0.5秒点灯して0.5秒消灯し、このサイクルを繰り返します。ArduinoにRGB LEDを1つと抵抗を3つ接続するだけです。色とりどりの光を使うプロジェクトを、手軽に始められます。

4.9(73)
98
ポテンショメーターでサーボモーターを操作
#36初級
プレミアム

ポテンショメーターでサーボモーターを操作

ポテンショメーターのつまみを回すと、サーボモーターのアームもそれに合わせて回ります。つまみの一方の端が0度、もう一方の端が半回転に対応します。Arduinoがつまみの位置を常に読み取り、サーボモーターが動きにすぐ反応します。ロボットアームや回転式カメラ台などのプロジェクトへの第一歩です。

4.6(37)
52
2台のArduinoで一方向通信
#57中級
プレミアム

2台のArduinoで一方向通信

2台のArduinoを1本のワイヤーで通信させます。一方のボタンを押すともう一方のLEDが点灯し、もう一度押すと消灯します。送信側のボードがボタンの押下を短いメッセージで伝え、受信側のボードはそのメッセージを受け取るとLEDの点灯と消灯を切り替えます。機器同士が情報を伝える仕組みを、最もシンプルな形で確かめられます。

4.4(37)
50