Help us understand the problem. What is going on with this article?

5V Arduino+3.3V I2Cデバイス+双方向ロジックレベルコンバータを試す

More than 3 years have passed since last update.

電子工作でセンサー類やその他デバイスを入手すると、インターフェースがI2Cとなっているものがあります。これは電子部品のバス接続でよく用いられるインターフェースで、2線接続で複数デバイスを制御できるのが特徴です。

これらのI2Cデバイスは3.3V動作のものが多い印象があります。一方でArduinoは5V動作のものが多いので、電子工作初心者のうちは両者をどう接続したものか悩んでしまいます。

そこで、5V動作のArduino Nanoから、双方向ロジックレベルコンバータを介して3.3V動作のI2Cデバイスに接続してみました。その内容をまとめます。

双方向ロジックレベルコンバータとは

ロジック電圧が異なるデバイスを接続する場合、電圧を適切に変換してやる必要があります。特に、5VのHigh出力を3.3Vデバイスに入れるとデバイスが壊れてしまうかもしれません。

このようなときに、ロジックのHigh/Lowのタイミングを維持しながら電圧を適切に変換してくれるのがロジックレベルコンバータ(レベルシフタとか電圧レベル変換モジュールなどと呼ばれることもあるようです)と呼ばれる部品です。SPIやUARTであれば一方向のみの電圧変換を行う「単方向ロジックレベルコンバータ」で十分なこともあるのですが、I2Cのように1つの信号線が入出力両方に使われる場合は双方向ロジックレベルコンバータが必要になります。

筆者はBSS138を使った4chのモジュールをeBayで1.12豪ドル(約97円)で買いましたが、秋月で販売されているPCA9306利用 2chロジックレベルコンバータ(150円)も良いと思います。

bi-llc.jpg

準備

  • Arduino Nano 互換ボード
  • 双方向ロジックレベルコンバータ
  • 気圧モジュール(BMP180利用、I2C接続)
  • 気温・湿度モジュール(SHT21利用、I2C接続)

実行例

DSC01530.JPG

Arduino NanoのA4/A5ピンをロジックレベルコンバータ経由でI2CデバイスのSDA/SDLに接続しています。3.3V動作のI2Cデバイスを2個(右下)接続してみましたが、両方のデバイスから値を取得できました。

実験に使ったソースコードは下記のようなものです。動作には下記ライブラリが必要です。

#include <Wire.h>
#include <SHT2x.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup()
{
  Serial.begin(9600);

  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }
}

void loop()
{
  Serial.print("Humidity(%RH): ");
  Serial.print(SHT2x.GetHumidity());
  Serial.print("     Temperature(C): ");
  Serial.println(SHT2x.GetTemperature());

  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.print(" *C");

  Serial.print("     Pressure = ");
  Serial.print(bmp.readPressure());
  Serial.println(" Pa");

  Serial.println();
  delay(5000);
}

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away