Arduino Uno R4 WiFiとMinimaの違い:R3との比較と最初のプロジェクト
Arduino Uno R4 MinimaとWiFiはR3から何が変わったのでしょうか。32ビットのRA4M1、12ビットDAC、ピンあたり8 mAの制限、ライブラリの互換性、LEDマトリクスを使うWi-Fiプロジェクトを紹介します。
Arduino Uno R4は、世界で最も広く使われている開発ボードUnoの第4版で、8ビットのAVRではなく32ビットプロセッサを採用した初めてのUnoです。モデルは2種類あり、シンプルで安価なUno R4 Minimaと、Wi-Fi、Bluetooth、12x8のLEDマトリクスを備えたUno R4 WiFiです。どちらもR3と同じ大きさ、同じピン配置、同じ5 Vの動作電圧を保っているので、ほとんどのシールドや回路はそのまま挿して使えます。一方で、プログラムメモリは8倍、プロセッサの速度は3倍になり、本物のアナログ出力(DAC)、CANバス、内蔵時計(RTC)、USBキーボード・マウス機能が加わりました。
このガイドでは、R4がR3とどこが違うのか、MinimaとWiFiをどう選ぶか、どの古いスケッチやライブラリが問題なく動き、どれがコンパイルできないのか、そしてピンあたり8 mAの制限を守らなければならない理由を詳しく説明します。最後に、R4 WiFiのLEDマトリクスとWi-Fiを組み合わせ、スマホから操作する最初のプロジェクトを作ります。

Arduino Uno R4とは?MinimaとWiFiの2モデル
どちらのモデルも、中心にあるのはルネサスのRA4M1(R7FA4M1AB3CFM)マイコンです。浮動小数点演算ユニット(FPU)付きのArm Cortex-M4コアを48 MHzで動かします。多くの32ビットボードと違い、このチップは5 Vで動作します。これが、ArduinoがR4にRA4M1を選んだ大きな理由です。Minimaに載っているのはこのチップだけです。WiFiモデルにはESP32-S3-MINI-1モジュールが追加されており、Wi-FiとBluetoothを担当するほか、USB経由でパソコンと通信するブリッジの役割も果たします。ESP32-S3は3.3 Vで動作するため、2つのチップの間にはレベル変換回路が入っています。
| 項目 | Uno R4 Minima | Uno R4 WiFi |
|---|---|---|
| メインプロセッサ | RA4M1、32ビット、48 MHz | RA4M1、32ビット、48 MHz |
| Wi-FiとBluetooth | なし | ESP32-S3:Wi-Fi 4(2.4 GHz)とBluetooth 5 LE |
| LEDマトリクス | なし | 12x8、赤色LED 96個 |
| Qwiicコネクター | なし | あり(Wire1、3.3 V専用) |
| USB接続 | RA4M1自身のUSB | ESP32-S3を経由 |
| CANのピン | D4(TX)、D5(RX) | D10(TX)、D13(RX) |
| デバッグ用ヘッダー | SWDコネクター | ESP32-S3用ヘッダー(3.3 V) |
| 追加のピン | なし | OFF(ボードの電源を切る)とVRTC(時計用の電池) |
| 3.3 Vピン | RA4M1内部のUSB用レギュレーターから供給、電流は小さい | 独立した3.3 Vレギュレーター |
Uno R3とUno R4の違い
| 項目 | Uno R3 | Uno R4(MinimaとWiFi) |
|---|---|---|
| プロセッサ | ATmega328P、8ビット、16 MHz | RA4M1 Cortex-M4、32ビット、48 MHz、FPU |
| フラッシュ(プログラムメモリ) | 32 KB | 256 KB |
| SRAM | 2 KB | 32 KB |
| EEPROM | 1 KB | 8 KB(データフラッシュ) |
| 動作電圧 | 5 V | 5 V |
| ピンあたりの電流 | 推奨20 mA、絶対最大40 mA | 8 mA |
| アナログ入力(ADC) | 6チャンネル、10ビット | 6チャンネル、最大14ビット(初期設定は10ビット) |
| アナログ出力(DAC) | なし | 1チャンネル、12ビット(A0) |
| オペアンプ | なし | 内蔵(A1、A2、A3) |
| CANバス | なし | あり(外付けのトランシーバーが必要) |
| リアルタイムクロック(RTC) | なし | 内蔵 |
| USB | USB-B、ATmega16U2によるブリッジ | USB-C、キーボード・マウス(HID)対応 |
| VINの入力電圧 | 推奨7〜12 V | 6〜24 V |
| シリアルポート | Serial:USBとD0/D1で共用 | Serial:USB、Serial1:D0/D1 |
この表で最も重要なのは、メモリと速度の行です。R3の2 KBのSRAMは、Stringの変数をいくつかとディスプレイ用のバッファを使うだけで埋まってしまい、OLEDディスプレイや長い配列、JSONの解析を使うプロジェクトでは、ボードがランダムにフリーズしたりリセットしたりし始めます。R4の32 KBなら、この問題はほぼなくなります。FPUのおかげで、float型の計算(センサーのキャリブレーション、PID、三角関数)はハードウェアで処理され、R3より何倍も速く動きます。電源まわりも大きく変わりました。R3のリニアレギュレーターは12 Vで熱くなりますが、R4はスイッチング方式の降圧コンバーターを使っているので、最大24 Vまで受け付け、発熱もずっと少なくなっています。
R4で加わった新しいハードウェア
- 12ビットDAC(A0):PWMと違い、本物のアナログ電圧を出力します。音声、正弦波、簡単な信号発生器に使われます。ボードパッケージに含まれるanalogWaveライブラリを使えば、正弦波、矩形波、のこぎり波を1行で生成できます。
- 14ビットADC:analogReadResolution(14)を使うと、0〜16383の値を読み取れます。5 Vを基準にすると1ステップは約0.3 mVで、R3の4.9 mVと比べてずっと細かくなります。古いスケッチが動かなくならないよう、初期設定の分解能は今も10ビットです。
- 内蔵オペアンプ:A1(+)、A2(–)、A3(出力)のピンにあり、追加のチップなしで小さなセンサー信号を増幅できます。基本はオペアンプとは?を参照してください。
- CANバス:自動車や産業機器で使われる、ノイズに強い通信バスです。SN65HVD230やTJA1050などのトランシーバーモジュールと、ボードパッケージに含まれるArduino_CANライブラリを組み合わせて使います。
- RTC:追加のモジュールなしで日付と時刻を保持します(RTC.hライブラリ)。R4 WiFiでは、VRTCピンに1.6〜3.6 Vの電池をつなぐと、ボードの電源が切れても時計が動き続けます。
- USB HID:ボードをパソコンにキーボードやマウスとして認識させられます。以前はLeonardoが必要でした(Arduino LeonardoでUSBキーボード)。
- 静電容量式タッチ:Arduino_CapacitiveTouchライブラリを使うと、一部のピンを追加のモジュールなしでタッチボタンとして使えます。
このうち2つの機能はすぐに試せます。次のスケッチは、DACから段階的に高くなる電圧を出力し、その電圧を14ビットADCで読み戻します。A0ピンとA1ピンをジャンパーワイヤーでつなぎ、シリアルモニタを115200ボーで開くだけです。
1// A0 (DAC) ile A1'i bir jumper kabloyla bağla / connect A0 (DAC) to A1 with a jumper wire
2
3void setup() {
4 Serial.begin(115200);
5 while (!Serial) {} // USB seri port açılana kadar bekle / wait for the USB serial port
6 analogWriteResolution(12); // DAC: 0–4095
7 analogReadResolution(14); // ADC: 0–16383
8}
9
10void loop() {
11 for (int value = 0; value < 4096; value += 512) {
12 analogWrite(DAC, value); // A0'dan gerçek analog gerilim / true analog voltage on A0
13 delay(10);
14 int raw = analogRead(A1); // 14 bit okuma / 14-bit reading
15 float volts = raw * 5.0 / 16383.0; // 5 V referans / 5 V reference
16 Serial.print("DAC: ");
17 Serial.print(value);
18 Serial.print(" ADC: ");
19 Serial.print(raw);
20 Serial.print(" V: ");
21 Serial.println(volts, 3);
22 delay(500);
23 }
24}出力を見ると、DACの値が512上がるたびに、読み取り値が約2048ずつ上がっていきます。12ビット出力の1ステップは、14ビット入力の4ステップに相当するからです。計算には5.0 Vを使いましたが、ボードをUSBから給電すると、保護ダイオードのために5 Vのラインは約4.7 Vまで下がります。正確に測りたい場合は、5Vピンの電圧をテスターで測り、式の5.0の代わりにその値を使ってください。while (!Serial)の行は、シリアルモニタが開く前に送った最初の数行が失われるのを防ぎます。パソコンにつながずにボードを動かす場合はこの行を削除してください。そうしないと、プログラムはそこで待ち続けます。アナログ読み取りの基本はADCとアナログ-デジタル変換の記事にまとめています。
ピンの電流制限:R4はなぜ8 mAなのか
これは、R4に移行する人が最も見落としやすい違いです。R3のATmega328Pはピンあたり20 mA(絶対最大40 mA)を余裕で流せるため、ネット上の多くの例ではLEDを220 Ωの抵抗でピンに直接つないでいます。しかしR4について、Arduinoはピンあたり8 mAを超えないように求めています。オームの法則で計算してみましょう。5 Vのピンから220 Ωを通して赤色LED(約2 V)を点灯させると、(5 − 2) / 220 ≈ 13.6 mAとなり、R4の制限のほぼ2倍です。LEDはおそらく点灯しますが、ピンは時間とともに傷む可能性があり、そのダメージはたいてい気づかないうちに蓄積していきます。

| LEDの抵抗 | 電流(赤色LED、5 V) | Uno R3 | Uno R4 |
|---|---|---|---|
| 220 Ω | ≈ 13.6 mA | 問題なし | 制限を超える |
| 330 Ω | ≈ 9.1 mA | 問題なし | 制限をわずかに超える |
| 470 Ω | ≈ 6.4 mA | 問題なし | 問題なし |
| 1 kΩ | ≈ 3 mA | 問題なし | 問題なし、LEDも十分はっきり見える |
古いスケッチやライブラリはR4で動く?
結論から言うと、ほとんどは動きます。digitalWrite、analogRead、millis、Serial、Wire(I2C)、SPI、EEPROM、Servo、toneといった標準のArduino命令で書かれたスケッチは、変更なしでR4でもコンパイルできます。問題が出るのは、ATmega328Pのハードウェアを直接操作するコードです。PORTBやDDRDなどのレジスタを使った高速なピン操作、Timer1の設定、avr/で始まるヘッダーファイル、そしてそれらを使うライブラリは、R4ではコンパイルできません。たとえばPORTBを使うスケッチは'PORTB' was not declared in this scope(宣言されていない)というエラーで止まります。
| ライブラリまたはコード | R4での状況 | メモ |
|---|---|---|
| Servo、Wire、SPI、EEPROM、SoftwareSerial | 動作する | R4を公式にサポート |
| Adafruit NeoPixel、FastLED | 動作する | 最新版をインストールする |
| DHTセンサーライブラリ | 動作する | Adafruitのライブラリ |
| IRremote | 一部動作する | 4.x系ならR4で赤外線受信モジュールを読み取れる。ライブラリの説明によると、R4 WiFiでは送信は動作しない |
| LiquidCrystal I2C、MFRC522 | 動作する(警告あり) | アーキテクチャの警告は無害 |
| TimerOne | コンパイルできない | 代わりにボードパッケージのFspTimerクラスを使う |
| PORTB、DDRD、PINDのレジスタ | コンパイルできない | digitalWriteとdigitalReadを使う |
| serialEvent()(受信イベント) | 呼び出されない | loopの中でSerial.available()を確認する |
コンパイル中にWARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on renesas_uno architecture(s)(このライブラリはAVR向けで、現在のボードと互換性がない可能性がある)のような警告が出ることがあります。これはエラーではなく、ライブラリの作者が対応アーキテクチャとしてAVRだけを記載しているというだけです。スケッチが書き込めて動作するなら問題ありません。本当のエラーが出た場合は、まずライブラリの最新版をインストールし(Arduinoにライブラリを追加する方法)、それでもだめならR4に対応した代わりのライブラリを探してください。
もう1つ注意したい違いがあります。R3にはシリアルポートが1つしかなく、USBとD0/D1ピンの両方につながっています。R4ではSerialはUSB専用で、D0とD1ピンはSerial1として別に動作します。HC-05 BluetoothモジュールやGPSなどのモジュールをD0/D1につなぎ、Serialで読み取る古いスケッチは、R4では何も受信できません。次のブリッジ用スケッチは、モジュールからのデータをシリアルモニタに、シリアルモニタで入力した内容をモジュールに送ります。
1// R4'te Serial = USB, Serial1 = D0 (RX) ve D1 (TX) / on the R4, Serial = USB, Serial1 = D0 (RX) and D1 (TX)
2
3void setup() {
4 Serial.begin(115200); // bilgisayar (Seri Monitör) / computer (Serial Monitor)
5 Serial1.begin(9600); // D0/D1'e bağlı modül, örn. HC-05 / module on D0/D1, e.g. HC-05
6}
7
8void loop() {
9 if (Serial1.available()) {
10 Serial.write(Serial1.read()); // modülden bilgisayara / module to computer
11 }
12 if (Serial.available()) {
13 Serial1.write(Serial.read()); // bilgisayardan modüle / computer to module
14 }
15}Arduino IDEでUno R4を使う準備
- Arduino IDE 2をインストールまたは更新します(Arduino IDEのインストール方法)。
- 左側のボードマネージャを開き、UNO R4と入力してArduino UNO R4 Boardsパッケージをインストールします。公式のパッケージなので、追加のURLを登録する必要はありません。
- データ通信対応のUSB-Cケーブルでボードをつなぎ、「ツール」>「ボード」からArduino UNO R4 MinimaまたはArduino UNO R4 WiFiを選びます。
- 「ツール」>「ポート」でボードのポートを選び、「ファイル」>「スケッチ例」>「01.Basics」>「Blink」を開いて書き込みます。D13の内蔵LEDが点滅し始めます。
- ポートが表示されない、または書き込みが途中で止まる場合は、RESETボタンを素早く2回押してください。ボードがブートローダーモードに入り、ポートが再び表示されます。書き込みのトラブル全般についてはArduinoに書き込めないときのガイドを参照してください。
Uno R4 WiFi:ESP32-S3と12x8のLEDマトリクス
R4 WiFiのESP32-S3では、初期状態でArduinoが書き込んだファームウェアが動いており、RA4M1からの命令をWi-FiやBluetoothの処理に変換します。スケッチは今までどおりRA4M1向けに書きます。Wi-Fiにはボードパッケージに付属するWiFiS3ライブラリを、BluetoothにはArduinoBLEライブラリを使います。重要な制限が2つあります。モジュールは2.4 GHzのネットワークにしか接続できません。また、Wi-FiとBluetoothはアンテナを共有しているので、両方を同時には使えません。新しい機能の中には最新のESP32-S3ファームウェアが必要なものもあります。ファームウェアはIDEの「ツール」>「Firmware Updater」から更新できます。
ボードの表面にあるマトリクスは、8行12列に並んだ96個の赤色LEDでできています。箱から出して初めて電源を入れると、テトリスのアニメーションが流れます。LEDはチャーリープレクシングという方法でRA4M1の内部ピン11本に配線されています。これらのピンはピンヘッダーには出ていないので、マトリクスを使ってもD0〜D13やA0〜A5は1本も減りません。ボードパッケージに含まれるArduino_LED_Matrixライブラリは、フレームを2つの形式で受け付けます。8x12のバイト配列か、32ビットの数値3つです。配列のほうが読みやすく、1で描いた形をコードの中でそのまま確認できます。
1#include "Arduino_LED_Matrix.h" // kart paketiyle gelir / ships with the board package
2
3ArduinoLEDMatrix matrix;
4
5// 8 satır x 12 sütun: 1 = LED yanar / 8 rows x 12 columns: 1 = LED on
6uint8_t kalp[8][12] = {
7 { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
8 { 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
9 { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
10 { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
11 { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
12 { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
13 { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
14 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
15};
16
17void setup() {
18 matrix.begin();
19}
20
21void loop() {
22 matrix.renderBitmap(kalp, 8, 12); // kendi çizimin / your own drawing
23 delay(1000);
24 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY); // kütüphanedeki hazır kare / ready-made frame from the library
25 delay(1000);
26 kalp[7][11] = 1; // tek bir LED'i yak: satır 7, sütun 11 / turn on one LED: row 7, column 11
27}renderBitmap()は自分で描いた配列を表示し、loadFrame()はライブラリに用意されたフレームを読み込みます。LEDMATRIX_HEART_BIG、LEDMATRIX_EMOJI_HAPPY、LEDMATRIX_EMOJI_SAD、LEDMATRIX_DANGERなどがその例です。loadSequence()とplay()を使えば、LEDMATRIX_ANIMATION_TETRISやLEDMATRIX_ANIMATION_WIFI_SEARCHといった既成のアニメーションを再生できます。マトリクスに文字を書いてスクロールさせるには、ライブラリマネージャからArduinoGraphicsライブラリをインストールする必要があります。もっと大きな表示が欲しい場合は、MAX7219 LEDマトリクスやWS2812B NeoPixelの記事も見てみてください。
最初のプロジェクト:スマホからLEDマトリクスを操作する
では、2つの機能を組み合わせてみましょう。ボードが自宅のネットワークに接続している間、マトリクスにはWi-Fi検索のアニメーションが流れ、接続するとIPアドレスがスクロール表示されます。同じネットワークにつないだスマホのブラウザでそのアドレスを開くと、ボタンでハート、笑顔、悲しい顔を表示したり、IPアドレスをもう一度スクロールさせたり、マトリクスを消したりできます。ボード以外の部品は必要ありません。
- ライブラリマネージャからArduinoGraphicsライブラリをインストールします。WiFiS3とArduino_LED_Matrixはボードパッケージに付属しています。
- スケッチ内のネットワーク名とパスワードを自分のものに書き換えます。大文字と小文字に注意してください。
- ボードにArduino UNO R4 WiFiを選んでスケッチを書き込み、シリアルモニタを115200ボーで開きます。
- マトリクスにスクロール表示されたIPアドレス、またはシリアルモニタに表示されたIPアドレスを、スマホのブラウザに入力します。
- ページのボタンをタップすると、マトリクスの表示がすぐに変わります。
1#include "ArduinoGraphics.h" // Arduino_LED_Matrix'ten ÖNCE eklenmeli / must come BEFORE Arduino_LED_Matrix
2#include "Arduino_LED_Matrix.h"
3#include "WiFiS3.h"
4
5char ssid[] = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6char pass[] = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8ArduinoLEDMatrix matrix;
9WiFiServer server(80);
10
11void scrollText(String text) {
12 matrix.beginDraw();
13 matrix.stroke(0xFFFFFFFF);
14 matrix.textScrollSpeed(60); // her adım 60 ms / 60 ms per step
15 matrix.textFont(Font_5x7);
16 matrix.beginText(0, 1, 0xFFFFFF);
17 matrix.print(" " + text + " ");
18 matrix.endText(SCROLL_LEFT); // yazıyı sola kaydır / scroll the text to the left
19 matrix.endDraw();
20}
21
22void sendPage(WiFiClient &client) {
23 client.println("HTTP/1.1 200 OK");
24 client.println("Content-Type: text/html; charset=utf-8");
25 client.println("Connection: close");
26 client.println();
27 client.println("<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width'></head><body>");
28 client.println("<h2>UNO R4 WiFi</h2>");
29 client.println("<p><a href='/kalp'><button>Kalp / Heart</button></a></p>");
30 client.println("<p><a href='/mutlu'><button>Mutlu / Happy</button></a></p>");
31 client.println("<p><a href='/uzgun'><button>Uzgun / Sad</button></a></p>");
32 client.println("<p><a href='/ip'><button>IP</button></a></p>");
33 client.println("<p><a href='/kapat'><button>Kapat / Off</button></a></p>");
34 client.println("</body></html>");
35}
36
37void setup() {
38 Serial.begin(115200);
39 matrix.begin();
40
41 if (WiFi.status() == WL_NO_MODULE) { // ESP32-S3 yanıt vermiyor / ESP32-S3 not responding
42 Serial.println("WiFi modulu bulunamadi / WiFi module not found");
43 matrix.loadFrame(LEDMATRIX_DANGER);
44 while (true) {}
45 }
46
47 matrix.loadSequence(LEDMATRIX_ANIMATION_WIFI_SEARCH); // bağlanırken animasyon / animation while connecting
48 matrix.play(true);
49
50 while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
51 Serial.println("Baglaniyor / connecting...");
52 delay(5000);
53 }
54 while (WiFi.localIP() == IPAddress(0, 0, 0, 0)) { // DHCP adresini bekle / wait for the DHCP address
55 delay(100);
56 }
57
58 server.begin();
59 Serial.print("IP: ");
60 Serial.println(WiFi.localIP());
61 scrollText(WiFi.localIP().toString()); // IP adresini matriste göster / show the IP on the matrix
62 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
63}
64
65void loop() {
66 WiFiClient client = server.available();
67 if (!client) {
68 return;
69 }
70
71 String request = client.readStringUntil('\n'); // ör. "GET /kalp HTTP/1.1" / e.g. "GET /kalp HTTP/1.1"
72 while (client.available()) {
73 client.read(); // kalan başlıkları at / discard the remaining headers
74 }
75
76 bool showIp = false;
77 if (request.indexOf("GET /kalp") >= 0) {
78 matrix.loadFrame(LEDMATRIX_HEART_BIG);
79 } else if (request.indexOf("GET /mutlu") >= 0) {
80 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
81 } else if (request.indexOf("GET /uzgun") >= 0) {
82 matrix.loadFrame(LEDMATRIX_EMOJI_SAD);
83 } else if (request.indexOf("GET /kapat") >= 0) {
84 matrix.clear();
85 } else if (request.indexOf("GET /ip") >= 0) {
86 showIp = true;
87 }
88
89 sendPage(client);
90 delay(10);
91 client.stop(); // bağlantıyı kapat / close the connection
92
93 if (showIp) {
94 scrollText(WiFi.localIP().toString()); // sayfa gittikten sonra kaydır / scroll after the page is sent
95 }
96}仕組みはシンプルです。WiFi.begin()を接続できるまで繰り返し、DHCPからIPアドレスが割り当てられるのを待ってから、80番ポートでWebサーバーを起動します。スマホから届いたリクエストの1行目(たとえば「GET /kalp HTTP/1.1」、kalpはトルコ語で「ハート」)を読み取り、indexOf()でどのボタンが押されたかを判断して、対応するフレームをマトリクスに読み込みます。endText(SCROLL_LEFT)は文字がスクロールしている間プログラムを止めてしまうので、IPアドレスをもう一度スクロールさせるのは、ページを送信して接続を閉じた後にしています。マトリクスに危険マークが表示されたまま止まる場合は、ESP32-S3が応答していません。ボードのUSBケーブルを抜き差しして、ファームウェアを更新してください。どうしても接続できない場合は、ESP32がWi-Fiにつながらないときの記事にある2.4 GHzとパスワードの確認がここでも役立ちます。
電源:VIN、5V、3.3 Vのピン
R4はDCジャックまたはVINピンで6〜24 Vを受け付け、ボード上の降圧コンバーターがそれを5 Vに下げます。ArduinoのR4 WiFiのドキュメントによると、VINから給電している場合、5Vピンから約1.2 Aを取り出せます。USB給電ではボード自体は2 Aまで対応しますが、実際の上限はパソコンのUSBポートで決まります。この電流はセンサーや小さなモジュール向けで、モーターやサーボ向けではありません。Minimaの3.3 VピンはRA4M1の内部レギュレーターから供給されるので、小さなセンサーにしか使えません。ESP-01やPA+LNAアンテナ付きのnRF24L01など、電流を多く消費するモジュールをここから給電しないでください。R4 WiFiにはさらに、OFFピン(GNDにつなぐとボードの5 V電源が切れる)と、RTC用電池のためのVRTCピンがあります。電源の取り方をすべて知りたい場合はArduinoの電源の取り方を参照してください。
Uno R4で作るプロジェクトのアイデア
- Wi-Fi気象ステーション:DHT11で測った温度を、マトリクスにスクロール表示すると同時に、スマホで開くページにも表示します。
- マトリクスゲーム:12x8のマトリクスでスネークゲーム、テトリス、跳ね回るボールなどを作ります。ほかのアイデアはArduinoのゲームプロジェクトの記事を参照してください。
- インターネット時計:インターネット(NTP)から時刻を取得して内蔵RTCに書き込み、VRTCピンにつないだ電池で停電中も時刻を保持します。
- USBマクロキーパッド:4つのボタンでパソコンのショートカットを実行するキーパッドを作ります。R4のHID機能のおかげで、Leonardoは必要ありません。
- DACで音を出す:analogWaveライブラリでA0に正弦波を出力し、オーディオアンプとスピーカーを組み合わせて簡単なシンセサイザーを作ります。
- スマホから照明を操作:この記事のWebサーバーをリレーモジュールと組み合わせ、離れた場所から照明をつけます。
よくある失敗と対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| エラー:'PORTB' was not declared in this scope(宣言されていない) | コードがAVRのレジスタを直接使っている | digitalWriteとdigitalReadで書き直す |
| エラー:'class TimerOne' has no member named 'initialize'(そのメンバーがない) | TimerOneはAVRのタイマーにしか対応していない | ボードパッケージのFspTimerクラスを使う |
| エラー:'class ArduinoLEDMatrix' has no member named 'beginDraw'(そのメンバーがない) | ArduinoGraphicsがないか、マトリクスのライブラリより後でインクルードしている | ArduinoGraphicsをインストールし、Arduino_LED_Matrixより前にインクルードする |
| WiFiS3のファイル内で「'D24' was not declared」のようなエラーが出る | ボードとしてR4 Minimaが選ばれている | 「ツール」>「ボード」でR4 WiFiを選ぶ |
| D0/D1につないだモジュールからデータが来ない | R4ではSerialはUSB専用 | SerialではなくSerial1を使う |
| ポートが出ない、または書き込みが途中で止まる | 動作中のスケッチがUSBを固まらせている、またはケーブルが充電専用 | RESETを2回押し、データ通信用ケーブルを使う |
| ピンが動かなくなった | ピンに8 mAの制限を超える電流を流した | LEDには470 Ω〜1 kΩを使い、大きな負荷はトランジスタ経由で駆動する |
| Qwiicコネクターにつないだセンサーが見つからない | Qwiicは2つ目のI2Cバス(Wire1)につながっている | コードでWireではなくWire1を使う |
R3、R4 Minima、R4 WiFiのどれを買うべき?
- Uno R4 WiFi:インターネット、スマホ、Bluetoothにつなぐプロジェクトを作りたい人や、ボード上に最初から表示装置が欲しい人に最適です。コードが動く様子をマトリクスですぐに確認できるので、初心者にも楽しいボードです。
- Uno R4 Minima:無線は必要なく、より多くのメモリ、速度、DAC、USB-Cが欲しい人に向いています。SWDコネクターがあるので、外部デバッガーをつないでコードを1行ずつ実行しながら確認したい場合にも良い選択肢です。
- Uno R3または互換品:AVR専用のライブラリを使う古いプロジェクトがある場合、教科書の例をそのとおりに再現したい場合、できるだけ安く済ませたい場合には、今でも十分に意味があります。ピンは20 mAを余裕で流せます。
- ESP32:より多くのピンとWi-Fiをより安く手に入れたいなら、ESP32ボードも検討する価値があります。ただし、3.3 Vで動作することを忘れないでください(ArduinoとESP32の違いは?)。
まとめると、Uno R4はUnoのなじみ深い使いやすさはそのままに、メモリ、速度、新しいハードウェアを加えたアップグレードです。8 mAの制限とSerial1の違いだけは覚えておきましょう。ボードのピンを詳しく知りたい場合はArduino Unoのピン配置の記事を見てみてください。BlueGraysアプリには、LED、ボタン、センサー、LCD、LEDマトリクスを使うArduino Uno向けのプロジェクトが、ステップごとの回路図とコード付きで揃っています。これらのプロジェクトは標準の命令で書かれているのでR4でも動きます。必要なのは、LEDの抵抗を470 Ωに上げることだけです。
よくある質問
Arduino Uno R4とR3の違いは何ですか?
Uno R4は、R3の8ビット・16 MHzのATmega328Pの代わりに、48 MHzで動作する32ビットのRenesas RA4M1を使っています。フラッシュは32 KBから256 KBに、SRAMは2 KBから32 KBに増え、12ビットDAC、14ビットADC、CAN、RTC、USB-C、USBキーボード・マウス機能が加わりました。ボードの大きさ、ピン配置、5 Vの動作電圧は変わりません。
Arduino Uno R3のスケッチはR4で動きますか?
標準のArduino命令で書かれたスケッチやライブラリのほとんどは、変更なしで動きます。PORTBなどのAVRレジスタ、Timer1の設定、avr/のヘッダーファイルを直接使うコードはコンパイルできません。また、D0/D1につないだモジュールを読み取るスケッチでは、SerialではなくSerial1と書く必要があります。
Arduino Uno R4はWiFiとMinimaのどちらを買うべきですか?
Wi-Fi、Bluetooth、スマホからの操作が必要なプロジェクトならR4 WiFiを選んでください。内蔵のLEDマトリクスとQwiicコネクターはうれしいおまけです。無線が不要なら、Minimaのほうが安く、同じプロセッサで同じ性能が得られます。
Arduino Uno R4のピンはどのくらいの電流を流せますか?
ArduinoはUno R4のピンあたりの電流を8 mA以下にするよう推奨しています。R3では20 mAでした。そのため、LEDには220 Ωではなく少なくとも470 Ωの抵抗を使い、リレー、モーター、ブザーなどの負荷はトランジスタやMOSFETを介して駆動してください。
Arduino R3用のシールドはUno R4に合いますか?
はい。R4 MinimaとR4 WiFiは、ボードの大きさ、ピンヘッダーの配置、5 VのロジックレベルがR3と同じなので、ほとんどのモータードライバ、リレー、センサーのシールドはそのまま挿せます。シールドのライブラリにAVR専用のコードが含まれている場合だけ、ソフトウェアの更新が必要になることがあります。
Arduino Uno R4 WiFiはBluetoothに対応していますか?
はい。ボードに載っているESP32-S3モジュールはBluetooth 5 LEに対応しており、ArduinoBLEライブラリで使えます。ただし、Wi-FiとBluetoothは同じアンテナを共有しているため、同時には動かせません。HC-05のようなBluetooth Classicのシリアル接続には対応していないので、スマホのアプリはBLEを使う必要があります。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
LEDの点滅
電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

信号機
毎日道路で見かける信号機の小さな模型です。赤が2秒点灯し、黄が一瞬点灯した後、緑が2秒点灯します。その後、再び黄を経て赤に戻り、この動作を繰り返します。3個のLEDを順番に点けたり消したりしながら、タイミングの組み立て方を学びます。

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

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

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

ドットマトリクス時計とカレンダー(MAX7219、DS1307)
机や壁に置き、時刻と日付をスクロール表示する光るパネルです。8x32のLEDディスプレイには大きな数字の時計が表示され、コロンの2つの点が毎秒点滅します。毎分の初めに曜日と日付がスクロールし、その後、時計表示に戻ります。時計モジュールには専用の電池があるため、電源を抜いても時刻を保持します。

ピクセルスネーク:8x8マトリクス
定番のスネークゲームを自分の手で作って遊びましょう。カラフルな8x8のLEDマトリクスで、ジョイスティックを使って緑のヘビを動かし、赤いリンゴを食べます。リンゴを食べるたびにヘビが長くなり、少しずつ速くなって、小さな数字ディスプレイのスコアも増えます。壁や自分のしっぽにぶつかると画面が赤く3回点滅し、ボタンを押すと再び始められます。

32x8 LEDマトリクス4枚でアニメーションと文字表示
横長のLEDマトリクスモジュールを4枚上下に並べると、1,000個以上の光の点からなる正方形のディスプレイになります。まず映画のように文字が上から雨のように降り、続いてカーテンが開いて2行の文字がスクロールし、その間を波やひし形が流れていきます。一連の演出はちらつかず滑らかに動き、終わると自動で最初から繰り返します。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

