====== 7-3 Arduino Uno R4とR3の違い ======
Arduino UNO R4と、そのひとつ前のバージョンである、Arduino UNO R3には様々な違いがあり注意が必要です。
それらの違いについてまつはちさんが詳しくまとめてくださいましたので掲載します(感謝!!)
===== 初心者向けの話 =====
ちなみにですが、2024/6現在Arduino公式から出ているマイコンは…
* R4系のArduino → Arduino Uno R4 Minima と Arduino Uno R4 WiFi の二機だけが該当します
* R3系のArduino → それ以外のだいたいのArduino(Uno R3はもちろん、小型機のNanoやNano Every等、大半のArduino)
であることを頭の隅に置いておくといいかと思います。
(たぶんこれからR4系の小型Arduinoも出てくるのかな…)
==== ハードウェアシリアルポートの違い ====
* ソフトウェアシリアルも通信速度の速いハードウェアシリアルですが、R4とR3では数が違います。
* 非常にわかりづらいのですが、R4でもR3でも、UARTポートの位置は0番ソケットと1番ソケットです
* R4は、**USBポートがSerial、0番&1番ソケットはSerial1**、という別のハードウェアシリアルポートになっています
* UARTが増えることによって、PCでシリアルプリントしながら、もう1つ何らかのUART通信ができます。UART接続のセンサとか使うときに便利です。
* R3は、**USBポートと0番&1番ソケットのUARTがどちらもSerialで共用**になっています。
* プログラムの書き込み時に0番&1番ソケットに部品を繋いでいると、書き込みに失敗することもあります。
このシリアルポートの違いにより、[[gimmickkouza:electronic_basic:6:2_dfplayer_uart#6-2-2_DFPlayer_UART_SoftwareSerial|]]ではR3とR4では異なる対応を求められましたね…
==== ソケットに流せる電流の違い ====
* I/Oソケットで流せる電流容量が、**R3では、20mA**でしたが、**R4では8mA**とかなり少なくなっています。
* 2024/6現在、世の中に出回っているサンプルはR3想定のものが多いです。
* LEDやトランジスタを介して電流を増幅するタイプの回路は特に注意が必要です。**最悪焼けます。**
* モータードライバや、FET、トランジスタなどをいれましょう
[[gimmickkouza:electronic_basic:5:1_digitalwrite|]]で出てきました
==== 入力電圧の違い ====
* DCジャックやVinソケットへの入力電圧が異なります
* **R4では、6~24V**ですが、**R3では、7~12V** とかなり小さくなります。
* もしR4向けに電源を買って、R3にも使う場合は、**電源の電圧をよく確認してから繋ぎましょう**
==== プログラムの違い ====
* 2024/6月現在、R4はまだ登場したばかりのマイコンです
* R4向け対応が進んでいないライブラリも多くあります
*** R4でサンプルコードですらコンパイルが通らない場合は、ボードをR3に変えてみて、コンパイルが通るか試してみましょう**
[[gimmickkouza:electronic_basic:6:4_lcd_spi|]]とか[[gimmickkouza:electronic_basic:8:3_ledstrip|]]で盛大に煮え湯を飲まされましたね……(しろめ)
**2024/6現在、R4についてはとにかくまだまだネット上に情報がない**ことを念頭に置いて、ライブラリを使っていてエラーが出るようであれば、R4未対応である可能性を疑ってみていいと思います
==== 嬉しい話 ====
* R3よりR4のほうが安いです!
* プログラム書き込み用のUSBポートが、R3ではType-Bだったのが、R4ではType-Cになっています
* R3に比べて、書き込み容量や、スペックなどが、大幅に向上しています!
これは本当にそう。
講師も今回の資料作成で両方とも触りましたが、R4はR3から正当にアップグレードされていると感じました。
ただ繰り返しですが、現時点ではR4はまだネットに情報が少ない(R3が名機すぎてネット上に情報があふれかえっており、相対的にR4の情報にたどり着きにくいという事情もありそう…)ので、その辺りはちょっと頑張る必要があるかなと思います。
===== 中級者以上向けの話 =====
==== マイコンのbit数の違い ====
* R3のMCUは、8bitマイコンのATMega328Pですが、R4では32bitマイコンのRA4M1が採用されています
* これにより、R3のint型が2byteなのに対し、R4のint型では4byteとなっています
* 2byteと4byteで何が違うの?というと、**格納できる値の最大値・最小値**が違います
* 2byteだと-32768~32767
* 4byteだと-2147483648~2147483647
* めちゃくちゃ違います
* このため、R4前提のint型で最大値最小値を扱うと、R3に移植した際に、上手く動かなくなります。
* また、加速度センサのような、I2C通信でデータを読み出し、シフト演算で整形するようなプログラムの場合に、上手く動かなくなります。こちらの記事がわかりやすいです。
https://note.com/electric_mecha60/n/nc5a69a06959e
[[gimmickkouza:electronic_basic:3:5_variable#変数のデータ型について|]]でちょっと書いていますが、これによりR4ではintで扱える数値の桁数が増大しています。
便利ではありますが、__実際にきぐるみの実装に使うマイコンはNanoやNano Every等のR3系である可能性が高い__です。
なので互換性の観点から、個人的には当面はR4でもR3と同じ基準でintを使った方が無難かな…と思います。
==== スペックの向上 ====
* R3からR4では、様々な部分のスペックが向上しています
* 動作周波数、PWMやADコンバータの解像度、メモリ容量の向上、消費電流の低下…などなど。
==== 機能の追加 ====
* R4はR3に比べてできることがかなり増えています。
=== HID機能の追加 ===
* Arduinoをキーボードやマウスといった、USB接続のコントローラとして扱うことができる機能です
* HIDはHuman Interface Deviceの略です
* Keyboard.hをインクルードすれば使えるのでお手軽に試せます
=== SWD/JTAGデバッグが可能に ===
* 高度な開発になってくると、1行ずつ挙動を見たり、プログラムの実行を止める箇所を作ったりして、どこでトラブルが起きているのかを調べる必要が出てきます。
* これにはデバッガというものをつないで行うのですが、R4にはそのデバッガをつなぐためのピンが生えているのです。
* 正直めちゃくちゃ待ってた機能です
=== DACの追加 ===
* R4のA0ソケットには、デジタルをアナログに変換する機能が入っています
* DACはDigital-to-analog Converterの略です
* それ以外のピンや、R3では、PWMで疑似的にアナログ電圧が出ています
* 精密なアナログ出力ができるようになるので、サイン波のような滑らかで連続性のある波形を出せたり、音楽を鳴らせるようになったりします
* こちらのサイトのサンプルを見てみると面白いと思います
https://garretlab.web.fc2.com/arduino.cc/docs/tutorials/uno-r4-wifi/dac/
https://docs.sunfounder.com/projects/elite-explorer-kit/ja/latest/new_feature_projects/07_dac.html
[[gimmickkouza:electronic_basic:6:1_servo_pwm#6-1-2_Servo_library|]]で出現しました