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とは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 |
| USB | Mini-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から) | アナログ・電源の列 | デジタルの列 | 備考 |
|---|---|---|---|
| 1 | D13(SCK、L LED) | D12(MISO) | USBソケットのすぐそば |
| 2 | 3V3 | ~D11(MOSI) | 3V3が供給できる電流はごくわずか |
| 3 | AREF | ~D10(SS) | - |
| 4 | A0 | ~D9 | - |
| 5 | A1 | D8 | - |
| 6 | A2 | D7 | - |
| 7 | A3 | ~D6 | - |
| 8 | A4(SDA) | ~D5 | I2Cのデータ線 |
| 9 | A5(SCL) | D4 | I2Cのクロック線 |
| 10 | A6 | ~D3(INT1) | A6はアナログ専用 |
| 11 | A7 | D2(INT0) | A7はアナログ専用 |
| 12 | 5V | GND | 5VとGNDが向かい合う |
| 13 | RST | RST | どちらも同じリセット線 |
| 14 | GND | D0(RX0) | D0はUSBシリアル変換チップにつながっている |
| 15 | VIN | D1(TX1) | ICSPヘッダーはこちらの端 |
デジタルピン(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、INT1 | attachInterrupt()はこの2本でしか使えない |
| ~D3、~D11 | PWM、Timer2(約490 Hz) | tone()で音を鳴らしている間、このピンのPWMは乱れる |
| ~D5、~D6 | PWM、Timer0(約980 Hz) | millis()やdelay()と同じタイマー |
| ~D9、~D10 | PWM、Timer1(約490 Hz) | Servoライブラリがこの2本のPWMを無効にする |
| D10〜D13 | SPI:SS、MOSI、MISO、SCK | SPIを使うときはD10を出力のままにしておく |
| D13 | 基板上のL LED | LEDとその抵抗がピンに直接つながっている |
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が動きません。
A6とA7がアナログ専用なのは欠点に見えるかもしれませんが、うまく活用できます。複数のボタンを値の違う抵抗を通して1本のアナログピンにつなぐと、ボタンごとに違う電圧が出ます。こうすれば1本のピンで4つのボタンを読め、デジタルピンをモーターやディスプレイ用に空けておけます。回路では、A6を10 kΩの抵抗を通して5Vにつなぎ、1つ目のボタンをA6とGNDの間に直接、残りの3つのボタンをそれぞれ2.2 kΩ、4.7 kΩ、10 kΩの抵抗を通してGNDにつなぎます。
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 | コードで受け付ける範囲 |
|---|---|---|---|
| ボタン1 | 0 Ω(直結) | 0 | 0〜91 |
| ボタン2 | 2.2 kΩ | 約184 | 92〜255 |
| ボタン3 | 4.7 kΩ | 約327 | 256〜418 |
| ボタン4 | 10 kΩ | 約512 | 419〜766 |
| なし | - | 1023 | 767〜1023 |
値はanalogRead = 1023 × R / (10 kΩ + R)という式から求まり、各しきい値は隣り合う2つの値のちょうど中間にあります。プルアップ抵抗とADCは同じ5 Vのラインから給電されるので、電源が4.7 Vに下がっても値は変わりません。これをレシオメトリック測定と呼びます。2つのボタンを同時に押すと、抵抗が並列になって値が下がります。コードは番号の小さいボタンだと判断し、3と4を同時に押すと2として読まれることさえあります。そのため抵抗ラダーは、一度に1つのキーしか押さないメニューに向いています。分圧の計算は分圧回路の計算ツールで試せ、アナログの読み取りについてはADCの記事で詳しく読めます。
電源ピン:VIN、5V、3V3、GND
| ピン | 役割 | 制限と注意点 |
|---|---|---|
| VIN | 7〜12 Vでボードに給電する。レギュレーターが5 Vに下げる | 互換品のAMS1117は最大15 Vまでしか耐えられず、12 Vではすぐに熱くなる |
| 5V | ボードの5 Vライン。出力としてセンサーに給電し、入力として安定化された5 Vを受け付ける | USBでは約4.7 V。外部から5 Vを超える電圧を絶対に入れない |
| 3V3 | 3.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のモジュールの入力につなぐときは、間にレベル変換モジュールか分圧回路を入れてください。
USBで5Vピンが約4.7 Vになることは、アナログ測定にも影響します。analogRead()は電源電圧を上限として使うので、計算に5.0 Vを入れると結果が4〜6パーセントずれます。ATmega328Pの約1.1 Vの内部固定基準電圧を測れば、実際の電源電圧を求められます。下の最初のテスト用スケッチはまさにそれを行い、8本のアナログ入力をすべて実際の電源電圧を使ってボルトに換算し、D13のL LEDを点滅させます。
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か?
- Arduino IDEで「ツール」>「ボード」>「Arduino AVR Boards」>「Arduino Nano」を選びます。
- ボードを挿し、「ツール」>「ポート」で新しく現れたポート(WindowsならCOM3、macOSなら/dev/cu.usbserial-…など)を選びます。
- 「ツール」>「プロセッサ」で、まずATmega328Pを選んでBlinkのスケッチ例を書き込んでみます。
- 出力にprogrammer is not responding(書込装置が応答しない)やnot in sync(同期していない)が10回繰り返し表示されたら、プロセッサをATmega328P (Old Bootloader)にして書き込み直します。
- それでも失敗する場合は、別のUSBポートを試し、D0とD1の配線を外し、リセットボタンを押したときにL LEDが速く点滅するか確認します。
- どの選択肢でうまくいったかをメモしておきます。同じ販売店のほかのNanoも、おそらく同じ設定が必要です。
この混乱の原因は、2018年に行われた変更です。ArduinoはNanoの古い2 KBのブートローダー(ATmegaBOOT)を、Unoで使われている512バイトのOptibootに置き換えました。Optibootは115200ボーでコードを受け取りますが、古いブートローダーは57600ボーを期待します。速度が合わないと、ボードがまったく応答しないように見えます。互換品のメーカーは何年も古いブートローダーのボードを出荷し続けたので、IDEには両方の選択肢があり、間違ったほうを選んでもボードが傷むことはありません。必要なら、2台目のArduinoをArduinoISPとして使い、新しいブートローダーをNanoに書き込めます。書き込みが速くなり、ウォッチドッグリセットのあとに古いブートローダーで起きるリセットの無限ループもなくなります。
| プロセッサの選択肢 | ブートローダー | 書き込み速度 | コード用の容量 |
|---|---|---|---|
| ATmega328P | Optiboot(2018年以降) | 115200ボー | 30,720バイト |
| ATmega328P (Old Bootloader) | ATmegaBOOT(旧) | 57600ボー | 30,720バイト |
| ATmega168 | ATmegaBOOT(旧) | 19200ボー | 14,336バイト |
ブレッドボードへの挿し方とはんだ付け

Nanoをブレッドボードに挿すときは、2列のピンが中央の溝の両側に来るように置きます。こうすれば各ピンがそれぞれ別の列に入り、その列の空いた穴からそのピンに配線をつなげます。基板が溝とピンの間の穴を覆うので、各ピンの横に残る穴はわずかです。一般的な830穴のブレッドボードでは、基板を溝の中央に置くと、片側に2つ、もう片側に3つの空き穴ができます。USBソケットをブレッドボードの短い辺に向けると、ケーブルを挿しやすくなります。次にNanoの5VとGNDのピンをブレッドボードの赤と青の電源レールにつなぎ、そこからセンサーに給電できるようにします。ブレッドボードの内部の配線を確認したい場合はブレッドボードとは?を参照してください。
- ピンヘッダーのはんだ付け:ピンがばらで付いてくる互換品では、まずオスのピンヘッダーをブレッドボードに挿し、その上にNanoを置いてそのままはんだ付けします。ブレッドボードがピンヘッダーをまっすぐ、ちょうど0.6インチの間隔に保ってくれます。手順ははんだ付けのやり方にあります。
- 取り外し:片側から基板を持ち上げるとピンが曲がります。両端を少しずつ持ち上げるか、マイナスドライバーを下に差し込んで均等に引き抜いてください。
- 接触不良:古いブレッドボードや安いブレッドボードではばねがへたり、Nanoがときどきリセットされたり、センサーがたまに途切れたりします。ブレッドボードの別の場所にボードを移してみてください。
- Nano拡張ボード:常設のプロジェクトでは、ネジ端子や、各ピンに信号、5V、GNDを出す3ピンのヘッダーが付いたNano I/Oシールドを使うと、配線の混乱が大きく減ります。
- ミニブレッドボード:小さな170穴のブレッドボードには電源レールがありません。5VとGNDを別々の列に引き出し、配線の色で区別してください。
Arduino UnoからNanoへのピン対応表
| 機能 | Arduino Uno R3 | Arduino Nano | 備考 |
|---|---|---|---|
| デジタル入出力 | D0〜D13 | D0〜D13 | 番号も機能も同じ |
| PWM | ~3、5、6、9、10、11 | ~3、5、6、9、10、11 | 周波数もタイマーも同じ |
| アナログ入力 | A0〜A5 | A0〜A7 | A6とA7はNanoだけにあり、アナログ専用 |
| I2C SDA / SCL | A4 / A5(AREFの横にも同じもの) | A4 / A5 | Nanoには独立したSDA/SCLピンがない |
| SPI SS / MOSI / MISO / SCK | 10 / 11 / 12 / 13 | 10 / 11 / 12 / 13 | どちらもICSPヘッダーにもある |
| 外部割り込み | D2、D3 | D2、D3 | 同じ |
| 内蔵LED | D13(オペアンプでバッファ) | D13(ピンに直接接続) | NanoでD13を入力に使うときは注意 |
| 電源入力 | DCジャックとVin、7〜12 V | VINピンのみ、7〜12 V | NanoにはDCジャックがない |
| USB | USB-B。ATmega16U2またはCH340 | Mini-B。FT232RLまたはCH340 | ケーブルが違う |
| 3.3V出力 | 独立したレギュレーター、50 mA | USBチップから、ごく限られる | 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 Every | Nano ESP32 |
|---|---|---|---|
| プロセッサー | ATmega328P、8ビット、16 MHz | ATmega4809、8ビット、IDEでは16 MHz(最大20 MHz) | ESP32-S3、デュアルコア、32ビット、240 MHz |
| フラッシュ / SRAM | 32 KB / 2 KB | 48 KB / 6 KB | 16 MB / 512 KB(+8 MBのPSRAM) |
| ロジック電圧 | 5 V | 5 V | 3.3 V(5 Vには耐えられない) |
| USB | Mini-B | Micro-B | USB-C |
| VINの範囲 | 推奨7〜12 V | 7〜21 V | 6〜21 V |
| PWMピン | D3、D5、D6、D9、D10、D11 | D3、D5、D6、D9、D10(D11にはない) | ほぼすべてのデジタルピン |
| A6 / A7 | アナログのみ | アナログとデジタル | アナログとデジタル |
| 外部割り込み | D2、D3のみ | すべてのデジタルピン | すべてのピン |
| D0 / D1のシリアル線 | USBと共有(Serial) | USBとは別(Serial1) | USBとは別(Serial0) |
| 無線 | なし | なし | Wi-FiとBluetooth LE |
| IDEのボードパッケージ | Arduino AVR Boards | Arduino megaAVR Boards | Arduino 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を内部プルアップ付きのボタン入力として使います。
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のように常に名前でピンを書けば、コードはどちらのモードでも正しく動きます。
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に移す |
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を点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

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

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

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

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

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

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

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

