Arduinoの基礎 - ペリフェラル

提供:MochiuWiki : SUSE, EC, PCB
2024年12月9日 (月) 13:18時点におけるWiki (トーク | 投稿記録)による版 (→‎SPI)
ナビゲーションに移動 検索に移動

ピン配置

Arduino UNO R3

下表に、Arduino UNO R3の全IOピンの機能を示す。

Arduino UNO R3のピン配置
ピン 種類 説明
D0 デジタル UART受信 (RX)
D1 デジタル UART送信 (TX)
D2 デジタル デジタル入出力
D3 デジタル デジタル入出力, PWM (~)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D4 デジタル デジタル入出力
D5 デジタル デジタル入出力, PWM (~)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D6 デジタル デジタル入出力, PWM (~)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D7 デジタル デジタル入出力
D8 デジタル デジタル入出力
D9 デジタル デジタル入出力, PWM (~)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D10 デジタル デジタル入出力, PWM (~), SPI (SS)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D11 デジタル デジタル入出力, PWM (~), SPI (MOSI)

(~)は、デジタルのON / OFF (0 / 1) だけでなく、PWMによる擬似的なアナログ出力が可能であることを示している。
Arduino UNO R3では、0-255の範囲で出力の強さを制御できる。
D12 デジタル デジタル入出力, SPI (MISO)
D13 デジタル デジタル入出力, SPI (SCK), 内蔵LED
A0 アナログ入力 アナログ入力
A1 アナログ入力 アナログ入力
A2 アナログ入力 アナログ入力
A3 アナログ入力 アナログ入力
A4 アナログ入力 アナログ入力, I2C (SDA)
A5 アナログ入力 アナログ入力, I2C (SCL)


Arduino UNO R4 WiFi

下表に、Arduino UNO R4 WiFiの全IOピンの機能を示す。

Arduino UNO R4 WiFiのピン配置
ピン 種類 説明
D0 デジタル UART受信
D1 デジタル UART送信
D2 デジタル GPIOピン, 割り込み
D3 デジタル GPIOピン, 割り込み, PWM
D4 デジタル GPIOピン
D5 デジタル GPIOピン, PWM
D6 デジタル GPIOピン, PWM
D7 デジタル GPIOピン
D8 デジタル GPIOピン
D9 デジタル GPIOピン, PWM
D10 デジタル SPI (CS), GPIOピン, PWM
D11 デジタル SPI (COPI), GPIOピン, PWM
D12 デジタル SPI (CIPO), GPIOピン
D13 デジタル SPI (SCK), GPIOピン, ビルトインLED
A0 アナログ Analog入力, DAC出力

UNO R4 WiFiは、最大12ビットの分解能を持つDACを搭載しており、PWMピンよりも高性能なアナログ出力ピンとして機能する。
A1 アナログ入力 Analog入力, OPアンプ +

RA4M1には内蔵OPAMPがある。
A2 アナログ入力 Analog入力, OPアンプ -

RA4M1には内蔵OPAMPがある。
A3 アナログ入出力 Analog入力, OPアンプ出力

RA4M1には内蔵OPAMPがある。
A4 アナログ入力 Analog入力, SDA

A4ピンとA5ピンは同じI2Cバスに接続されている。
A5 アナログ入力 Analog入力, SCL

A4ピンとA5ピンは同じI2Cバスに接続されている。



各部詳細

Arduino UNO R3の各部詳細は下図の通りである。

Arduino UNO R3 01.jpg

図の左上のUSBコネクタの近くに、ICSP2(6ピンのピンヘッダ)が無いArduinoは、
USB - シリアル変換にATmega16U2が使用されていない(恐らくCH340Gが使用されている)と思われるので避けたほうがよい。

Arduino UNO R3 02.jpg


GPIO

14本のデジタルIOピン(D0 - D13)、6本のアナログINピン(A0 - A5)、6本のアナログOUTピン(D3, D5, D6, D9, D10, D11)がある。

・デジタルIOピン(D0 - D13)
 Arduino IDEのソースコード上で入出力(INPUT, OUTPUT)として設定する。
 センサから読み取る時は入力、アクチュエータに接続するときは出力である。
 このピンで扱う電圧値は、HIGHとLOWの2値のみである。

・アナログINピン(A0 - A5)
 アナログセンサを読み取る時に使用する。
 このピンで扱う電圧値は、0 - 1023である。

・アナログOUTピン(D3, D5, D6, D9, D10, D11)
 デジタルIOピンの6本のみアナログ出力として使用できる。
 このピンで扱う電圧値は、0 - 255である。
 どのピンをアナログ出力とするかは、Arduino IDEのソースコード上で設定する。

電源

USB電源、ACアダプタ等を電源として使用できる。(ACアダプタは9[V] 2.1[mm]センタープラス型を推奨)
ACアダプタとUSB電源を同時に接続しても構わないが、その場合は、ACアダプタが電源となる。


SPI

Arduino UNO R3 / R4のSPI用のピンは、D10 - D13である。
ICSP端子を使えば、他ボードとピン互換にできる。(SSは除く)

Arduino UNO R3 03.jpg
UNO R3 /R4 LEONARDO MEGA 2560
SCL D13 / ICSP3 ICSP3 D52 / ICSP3
MISO D12 / ICSP1 ICSP1 D50 / ICSP1
MOSI D11 / ICSP4 ICSP4 D51 / ICSP4
SS D10 (TX LED) D53



I2C

I2C用のピンは、A4 / A5である。
Arduino UNO R3で拡張されたSCL / SDAピンを使用すれば、他ボードとピン互換にできる。

I2C UNO R3 / R4 LEONARDO MEGA 2560
SCL A5 / SCL D3 / SCL D21 / SCL
SDA A4 / SDA D2 / SDA D20 / SDA


Arduino UNO R3 04.jpg



DAC

Arduino UNO R4 WiFiのDACピンのデフォルトの書き込み分解能は8ビットである。
これは、このピンに書き込まれる値が0~255の間であることを意味する。

ただし、この書き込み分解能を12ビットまで変更することができ、ピンに書き込まれる値は0~4096の間となる。

 analogWriteResolution(12);



Timer

Arduino UNOには、Timer0 / Timer1 / Timer2の3つのタイマーがある。

Timer0 Timer1 Timer2
D5 / D6 D9 / D10 D3 / D11


Timerを使用する関数やサードパーティ製ライブラリを使用する場合は、以下に示す事柄に注意する必要がある。

  • delay関数、millis関数、micros関数等を使用する場合、Timer0およびDピン、D6ピンをPWMに使用するとデューティ比が高めになる。
  • ServoライブラリはTimer1を使用するため、D9ピンおよびD10ピンでPWMが使用できない。
  • ToneライブラリはTimer2を使用するため、D3ピンおよびD11ピンでPWMが使用できない。
  • SPIを使用する場合は、D11ピンでPWMが使用できない。



RTC

リアルタイムクロック (RTC) は、時刻を計測するために使用される。
これは、時刻追跡アプリケーション等に使用することが多い。

Arduino UNO R4 WiFiにはVRTCピンがあり、電源が遮断されてもオンボードRTCを動作させ続けることができる。
これを使用するには、VRTCピンに1.6~3.6[V]の範囲の電圧を印加する必要がある。

以下の例では、RTCから日付と時刻を取得している。

 #include "RTC.h"
 
 void setup()
 {
    Serial.begin(9600);
 
    RTC.begin();
    RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
 
    RTC.setTime(mytime);
 }
 
 void loop()
 {
    RTCTime currenttime;
 
    // RTCを使用して現在時刻を取得
    RTC.getTime(currenttime);
 
    // DD/MM//YYYY形式で出力する場合
    Serial.print(currenttime.getDayOfMonth());
    Serial.print("/");
    Serial.print(Month2int(currenttime.getMonth()));
    Serial.print("/");
    Serial.print(currenttime.getYear());
    Serial.print(" - ");
 
    // HH/MM/SS形式で出力する場合
    Serial.print(currenttime.getHour());
    Serial.print(":");
    Serial.print(currenttime.getMinutes());
    Serial.print(":");
    Serial.println(currenttime.getSeconds());
 
    delay(1000);
 }


Arduinio UNO R4 WiFiのRTC機能の詳細を知りたい場合は、公式ドキュメントを参照すること。


Arduino言語マニュアル

言語リファレンスは [ヘルプ] - [リファレンス]で閲覧できる。(Arduino IDEのインストールフォルダのreferenceフォルダにある)
Arduino日本語リファレンス(Arduino Wiki)