Arduinoの動く環境はATMEL社(今はMicrochip社)8bitマイコンであり、AVRシリーズが開発されたのが
1996年なので、かなり古いと言えます。
電源電圧は1.8Vから5Vまで対応可能になっていますが、電源電圧が低くなるにつれて動作可能な最大周波数が
低くなり、5V電源では16MHzなのが、3.3V電源では8MHzとなってしまうので、だったら5V電源で動かした
ほうがパフォーマンスに優れていてよい、ということで巷のArduinoボードの大半は5Vで動作となっています。
AVRシリーズが古いと言っても需要はまだまだあるようで、ATMELを買収したMicrochipは、縮小を否定しています
eetimes.jp
。
しかしながら、最近のセンサ・デバイスの多くは3.3V電源で動くものが多いです。
5V系のArduinoと3.3V系のセンサを接続しようとすると、異なる電圧のため、2つの点に注意が必要でる。
1つは電源です。5V系のArduinoですが、基板上に3.3V供給用のレギュレータを持っていることが多いです。
画像はUno R3の場合ですが、囲み部分がTIの3.3Vレギュレータであり、Uno基板のPower部分に3.3Vピンを持っています。ちなみにUno基板の中では、この3.3Vを使っている回路は存在しません。もっぱら外部供給用となっています。
電源の配慮とともに大事なのは、Arduinoとセンサを接続する入出力信号の電圧差です。
例えば気圧・温度・湿度センサのBME280は最大3.6Vまでで動作させることが推奨されています。上の段が電源電圧、下の段が入出力信号電圧の最大値です。
センサデバイスなどのデバイスには推奨電圧の他に絶対定格というのが決められており、「何があっても超えてはならない値」
であり、この値で使うことは勧められません。Arduinoの出力は負荷が軽い状態で5V近くになりますので、直接接続するとセンサが破壊されます。
運が良ければ破壊されない場合もあるし、すぐに破壊されない場合もありますが、それはたまたま壊れなかっただけと
考えてください。
5V系のArduinoと3.3V系のセンサの信号を接続する際には、間に何かを入れる必要があります。
例えば、PCA9306のようなレベル変換素子を入れます。秋月電子でモジュール化されており便利です。ちなみにPCA9306を5V-3.3Vの変換に使う場合には、REF1側が3.3V、REF2側が5Vとなります。
I2Cインターフェースの場合には1本の線を双方向に使うので、PCA9306のような双方向の回路が必要となりますが、SPIインターフェースの場合には、それぞれの線の信号方向が一方向なので、トレラントのあるバッファを用いることも可能です。
標準ロジックの74シリーズのLVCとかVHC(メーカーによってタイプ名が異なりますが、3.3V電源で使えて、「入力トレラント」とか
「5V入力を許容」とあるものがそれです)を使えば解決できます。