マイコンボードArduinoシリーズの新型であるArduino UNO R4が発売されました。
Arduinoシリーズはシンプルさが特徴のマイコンボードで、ボードと開発環境の使いやすさや基板自体の拡張性の高さから、電子工作などのホビー用途からIoTや産業利用まで幅広い人々に利用されています。
一番最初に触るマイコンボードがArduinoシリーズという方も多いかと思います。
今回は基本的なモデルであるArduino UNO R4 Minimaについて、従来モデルのArduino UNO R3(以下R3)との違いを比較しながらレビューしていきます。
Arduino UNO R4 WiFiというESP32を搭載してWiFiやBluetoothにも対応したモデルもありますが、本記事作成時点(2023年7月)では日本国内の技適を取得していないようでした。機会があれば触ってみようと思います。
価格
Arduino UNO R4 Minima(以下R4)はDigiKeyでの価格が3000円前後と、マイコン入門機として手が出しやすい価格になっています。先代のR3が4000円前後ですので、現行モデルのほうが安くなっています。
ちなみにDigiKeyでは6000円以上の購入で送料が無料になります。例えばArduino UNO R4を2台と一緒に細々とした部品を購入して6000円にすることで送料を無料にできます。
Digi-Key以外ではスイッチサイエンスや秋月電子通商、Amazonなどで購入できます。
ハードウェア構成
AVRマイコンからルネサスマイコンに変更された
Arduino UNO R3 | Arduino Uno R4 Minima | |
---|---|---|
CPUメーカー | AVR® ATmega | Renesas Electronics America Inc |
動作クロック | 16MHz | 48MHz |
プログラムメモリ | 32KB | 256KB |
データRAM | 2KB | 32KB |
データROM | 1KB | 8KB |
R4最大の変更点はCPUです。R3まではAVRマイコンを搭載しているのに対して、R4にはルネサス製のマイコンが搭載されています。動作クロックもR3は16MHz、R4は48MHzとかなりの差があります。
また、それに加えてプログラムメモリは従来の8倍の256KB、データRAMは16倍の32KB、データROMは8倍の8KBにそれぞれ増加しています。
このようにCPUのアーキテクチャが変わり性能が大幅に向上していますが、従来と同じ開発環境を使うことができます。後ほど詳しく解説します。
外観を詳しく
基板の形状は変わっていません。
Arduino の特徴の一つとして、シールドと呼ばれるドータボードのような基板を重ねることで機能を拡張することができます。R4にもシールド接続用のピンソケットがありピン配置も同一なので、既存のシールドがそのまま使用できる可能性が高いです。
おそらくJTAGデバッグ用と思われるSWDと書かれたピッチの異なるピンヘッダがあります。これはCPUのレジスタを直接読み書きするような低レイヤでのデバッグを行うためのものです。ただ、JTAGのデバッグデバイスは非常に高価なため、個人の電子工作に用いられることの多いArduinoにこの端子が必要かと言われると微妙な気がします。
更新点としてはUSBコネクタがTypeCになったことも嬉しい点です。コネクタの全高が低くなり、また、コネクタのすぐ近くにあったAnalog Referenceピンヘッダも無くなっているので、自作のシールドを設計しようとしたときについうっかり基板裏面と干渉してしまうというリスクが低くなりました。
なお、電源のDCジャックの形状は変更されておらず、従来どおりピンソケットよりも高さがある点には注意が必要です。
回路図
次はR4の回路図を見ていきます。
電源ICにはスイッチングレギュレータが使用されています。また、DCジャックから電源ICまでの間に直列にショットキーバリアダイオードが入っていて、もし電源を逆接続しても壊れないようになっています。
こちらのスイッチングレギュレータのICもルネサス製でした。
R4の電源入力は公称24Vまで対応しており、このレギュレータでマイコンの動作電圧である5Vまで降圧します。レギュレータのデータシートを参照すると、入力電圧は最大40Vまで対応しています。また、R4の回路図でもVinに接続されたコンデンサは耐圧25Vのものが二つ直列になっているため、実際のところ40Vまで入力可能かと思われます。
R4のUSB入力部分には「ESD Protection」と表記があり、静電気保護用のダイオードが付いていることがわかります。一方で、R3ではバリスタが2つ付いていただけでした。電源の安定性にも気を遣っていることがわかります。
現物を見てみます。R3は基板上にレギュレータと入出力部の電解コンデンサが実装されています。
一方で、R4はスイッチングレギュレータICとインダクタ、そして電圧平滑用の積層セラミックキャパシタがあります。
R3に比べてR4は寿命の長い部品で構成されています。ただし、スイッチングレギュレータを使用しているため、インダクタや積層セラミックキャパシタなどの部品点数は増加しています。
R3に搭載されているリニアレギュレータは低ノイズであるという長所がありますが、効率が非常に悪いという短所もあります。例えば12Vを入力した場合には出力が5Vであることから効率はおよそ40%程度になります。これに対してR4に搭載されているスイッチングレギュレータは、データシートによると全域で70~90%程度あります。
動作実験
ここからは従来のArduino UNO シリーズと同じように使えるのかを検証していきます。開発環境にはArduino IDEを使用しており、それに伴って以降のコード類はArduino言語での書き方になります。
本記事ではプログラムの紹介と簡易的なまとめのみ記載しています。検証の様子などはYouTubeの動画を参考にしていただけますと幸いです。
AD変換とPWM制御の実験
まず、AD変換の性能を評価するプログラムを作成しました。
可変抵抗から出力されるアナログ出力の電圧を読んでそれに応じてPWM制御を行い、LEDの明るさを変化させます。(参考にしたコード : Arduino.cc/built-in-examples)
//AD_TEST
int ledPin = 9; //LEDのピンを指定
void setup() {
//Serial.begin(9600); //UART開始
}
void loop() {
int sensorValue = analogRead(A0); //A0の数値を取得する
float voltage = sensorValue * (5.0 / 1023.0); //sensorValueに0-1023の読み取った数値を代入
analogWrite(ledPin, sensorValue>>2); //2ビットシフト。1024→256
//Serial.println(voltage); //デバッグ用数値の送信
}
I2Cを使ったセンサとの通信
6軸のジャイロ・加速度センサモジュールMPU-6050の出力をI2Cで読み取り、その値に応じたパルスをサーボモータに出力するプログラムです。
センサーの値をもとにサーボホーンを問題なく動かせることがわかりました。(参考にしたコード : メカトロDIYチャレンジ(Mechatro DIY Challenge))
//SERVO_TEST
#include <Wire.h>
#include <Servo.h>
Servo myServo; //Servoオブジェクトを生成
volatile uint8_t data[14]; //データ読み込み
volatile int16_t ax = 0; //出力するデータ
void setup() {
myServo.attach(9); //サーボのPWM信号
Serial.begin(9600); //UART開始
Wire.begin(); //I2C開始
Wire.beginTransmission(0x68); //送信処理を開始する(0x68がセンサーのアドレス)
Wire.write(0x6b); //レジスタ「0x6b」(動作状変数)を指定
Wire.write(0x00); //0x00を指定(ON)
Wire.endTransmission(); //送信を終了する
}
void loop() {
MPU_DATAGET();
Serial.print("ax: ");
Serial.println(ax);
myServo.write(ax + 20);
}
void MPU_DATAGET() {
Wire.beginTransmission(0x68);
Wire.write(0x3b);
Wire.endTransmission();
Wire.requestFrom(0x68, 14); //0x3bから14バイト分の数値を要求
uint8_t i = 0;
while (Wire.available()) {
data[i++] = Wire.read(); //データを読み込む
}
ax = (data[0] << 8) | data[1]; //LowとHighを連結して、値を取得する
ax = abs(ax);
ax = ax >> 7;
}
動作クロック比較
次に動作クロックと命令実行時間をR3/R4で比較するため、loop関数内でデジタル出力の1/0を交互に切り替えるプログラムを作成しました。(参考にしたコード : Arduino.cc/built-in-examples)
int ledPin = 11;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(ledPin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
}
タイマ割り込みなどは使用せず、ループ周期は純粋にCPUの命令実行時間のみに依存しています。オシロスコープでそのデジタル出力の波形を取得し、周期を計測します。
その結果、R4は509KHz、R3は111KHzとなりました。
動作クロックが上がったことで、その分R4の方が高速に動作していることが分かりました。
計算能力の比較
最後に、計算能力を比較するためのベンチマークを行いました。
それぞれで同一のプログラムを実行し、その実行時間を計測します。計算内容は整数計算と浮動小数点計算それぞれについて行いました。条件と結果については以下のとおりです。
1. フィボナッチ数列(整数計算)
値が100,000を超えるまでのフィボナッチ数列を生成する作業を500,000回繰り返すのに要した時間を計測する。5回連続で計測し、その平均を取る。
2. 素数探索
0~5000までの整数値を素数判定するのに要した時間を計測する。5回連続で実行し、その平均を取る。
3. 三角関数
度数で与えられた角度を弧度法に変換し、それをsin, arcsin, cos, arccos, tan, arctanの順で三角関数の計算を行い、それを0~359°まで反復する。それをさらに50回繰り返す。
結果グラフ
いずれの条件においても、R3よりR4の方が5~50倍程度速く実行できています。
純粋な計算を行う試験の場合、CPUの処理能力やクロック周波数はもちろん、メモリの容量増加なども高速化の要因の一つであると考えられます。
まとめ
というわけで、Arduino UNO R4 Minimaを実際に使ってみた感想とレビューでした。
Arduino UNO R3が発売されてから世代交代が行われないまま10年近くが経過しています。今回のR4ではそれだけ多くの点で進歩していることがわかりました。その一方で、マイコンボードとしてのシンプルさや使い勝手の良さはそのままであるという点は好印象です。
価格の面でもかなりお手頃になりましたので、これからマイコンを使った電子工作を始めようという方にもおすすめできる1台です。
YouTube上でわかりやすい解説動画も公開していますので、是非こちらもあわせてチェックしてみて下さい。
それでは最後までお付き合い頂きありがとうございました。
コメント
コメント一覧 (1件)
R4からはADCが最大14ビットに対応した(Dueは12ビット)ので、是非その試験もお願いしたいです!R3までは10ビットだったので厳しかった面がありましたがR4なら処理能力とADC性能を活かして簡易オシロスコープを作れそうですね。