ADコンバータADS1115の使い方【ESP32・Arduino】

ADコンバータADS1115の使い方【ESP32・Arduino】
ADコンバータADS1115の使い方【ESP32・Arduino】

この記事ではADコンバータADS1115をesp32で使うやり方を解説します。ADS1115は、分解能16ビットの入力が4チャンネル備わっているADコンバータです。PGAが備わっており、差動入力およびマイナス電圧も読み取ることができます。 Arduinoとの接続はI2Cで行います。ライブラリを使えば驚くほど簡単にアナログ値を読み取ることができます。

つかうもの

この記事でつかうものをご紹介いたします。

ADS1115

今まで数あるADコンバータを試してきましたが、ADS1115が一番おすすめです!I2C通信なので配線がとても楽です。4チャネル16ビットという性能も申し分ないです。プログラマブルゲインがあるので微弱信号でも読み取れます。さらには差分入力やマイナス電位まで測定できるのは魅力的です。

中華製品は安く買えるのは良いのですが、たまにはんだ不良で正常に動かない場合があります。私も経験があり、1chと2chの信号線がショートしていてトラブルを起こしたことがあります。

ESP32

WayinTopさんから販売されているESP32を使用しました。技適マークも刻印されてますので、安心して国内で使えます。GPIOの役割図は 商品ページ に詳しく掲載されてます。

▼ WiFiやBluetooth接続が必要なければ、他のArduinoでも構いません。こちらの記事で色々な種類のArduinoをご紹介してます。

その他

また、ブレッドボードやジャンプワイヤもあると便利です。

ADコンバータADS1115の使い方

それではさっそく、ADコンバータADS1115の使い方を解説していきます。

ADS1115とESP32の配線図

下図の通りADS1115とESP32を配線します。

ADS1115とESP32の配線図
ADS1115とESP32の配線図

ADS1115
ADS1115

電源電圧は2.0〜5.5Vの範囲で動作します。ADS1115はI2C通信ですので、ESP32の場合はSCLをGPIO22へ、SDAをGPIO21へ繋ぎます。ADDRピンはGNDへショートさせておきます。デフォルトのアドレスは 0x48 ですが、複数のI2Cデバイスでアドレスがバッティングしてしまう場合は、ADDRピンの接続先を次のように変更することでアドレスを変更可能なようです。

I2Cアドレスの変更

ADDR端子の接続先AddressNotes
GND0x48default
VDD0x49
SDA0x4A
SCL0x4B

アナログセンサを繋ぐ

A0、A1、A2、A3にアナログ電圧を出力する信号線を接続します。センサデバイスのGNDとESP32のGNDは共通にしてください。ADS1115のすごいところは、プラスの電圧信号だけでなくマイナス電圧も測定できるところです。 今回の配線ですとアナログ信号を±6.144Vまで測定できます。

ADS1115ライブラリのインストール

ADS1115を使ったプログラミングをするには、 RobTillaart/ADS1X15 ライブラリ を使うと便利です。

下記ライブラリをIDEへインストールしてください。 GitHub - RobTillaart/ADS1X15: Arduino library for ADS1015 = I2C 12 bit ADC and ADS1115 = I2C 16 bit ADC

私の場合は VS Code x Platform IOで開発 してますので、ADS1X15.hADS1X15.cpp ファイルを直接プロジェクトへ配置しました。次のようなディレクトリ構造でテストしてます。

shell
$ tree
.
├── include
│   └── README
├── lib
│   ├── ADS1115
│   │   ├── ADS1X15.cpp
│   │   ├── ADS1X15.h
│   │   └── examples
│   │       └── demo
│   │           └── demo.ino
│   └── README
├── platformio.ini
└── src
    └── main.cpp

4チャンネル分のアナログ値を同時に測定するプログラミング

次は4チャンネル分のアナログ値を同時に測定するプログラミングです。ADS1X15 ライブラリが初期設定を色々やってくれるので、とても簡単にプログラミングできます。

cpp
/**
 * @date 2023-3-3
 * @author Toshihiko Arai
 * @copyright https://101010.fun
*/
#include <Arduino.h>
//#include <Wire.h>

#include "ADS1X15.h"

ADS1115 ADS(0x48);

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

    Serial.println(__FILE__);
    Serial.print("ADS1X15_LIB_VERSION: ");
    Serial.println(ADS1X15_LIB_VERSION);
    ADS.begin();
}

void loop() {
    ADS.setGain(0);
    int16_t val_0 = ADS.readADC(0);  
    int16_t val_1 = ADS.readADC(1);  
    int16_t val_2 = ADS.readADC(2);  
    int16_t val_3 = ADS.readADC(3);  

    float f = ADS.toVoltage(1);  // voltage factor
    Serial.println(f, 8);

    Serial.print("\tAnalog0: "); Serial.print(val_0); Serial.print('\t'); Serial.println(val_0 * f, 3);
    Serial.print("\tAnalog1: "); Serial.print(val_1); Serial.print('\t'); Serial.println(val_1 * f, 3);
    Serial.print("\tAnalog2: "); Serial.print(val_2); Serial.print('\t'); Serial.println(val_2 * f, 3);
    Serial.print("\tAnalog3: "); Serial.print(val_3); Serial.print('\t'); Serial.println(val_3 * f, 3);
    Serial.println();

    delay(1000);
}

実行結果

実行すると次のようにアナログ値と電圧値がシリアルモニタへ標準出力されます。

0.00018751
        Analog0: 2706   0.507
        Analog1: 4757   0.892
        Analog2: 4828   0.905
        Analog3: 4818   0.903

0.00018751
        Analog0: 2707   0.508
        Analog1: 4758   0.892
        Analog2: 4827   0.905
        Analog3: 4817   0.903

PGAでプログラマブルゲインの設定

ADS1115にはPGAが備わってます。入力信号が小さい場合、プログラマブルゲインを適切に設定することで、アナログ値を読み取りやすくできます。

先のサンプルプログラム内の ADS.setGain(0); の値を次のとおり変更することで可能です。

PGAの設定値最大電圧備考
0±6.144Vdefault
1±4.096V
2±2.048V
4±1.024V
8±0.512V
16±0.256V

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容です。ほかのArduino書籍と比べて図や説明がとてもていねいで読みやすいです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事