該範例使用UNO透過I2C連接兩片ADS1115量測電壓

分別為ADDRESS(0x48)使用單點量測模式

另一個為ADDRESS(0x49)使用差動(浮動)電壓量測模式

 

首先有兩件事情要思考一個是位址一個是電壓的最小分辨率

如果不知道位址,黨你要控制兩個以上的ADS1115的時候就會不知道要跟哪一片溝通了

而最小分辨率則是會隨著你所選用的刻度而有不同的量測範圍

 

下面是ADS1115的I2C位址

image

下面是電壓最小分辨率,請依照你要量測的電壓決定你的刻度

  GAIN_TWOTHIRDS  // 2/3x gain  +/- 6.144V  1 bit = 3mV        0.1875mV (預設模式)
  GAIN_ONE              // 1x gain      +/- 4.096V  1 bit = 2mV        0.125mV
  GAIN_TWO             // 2x gain      +/- 2.048V  1 bit = 1mV        0.0625mV
  GAIN_FOUR            // 4x gain      +/- 1.024V  1 bit = 0.5mV      0.03125mV
  GAIN_EIGHT           // 8x gain      +/- 0.512V  1 bit = 0.25mV     0.015625mV
  GAIN_SIXTEEN       // 16x gain    +/- 0.256V  1 bit = 0.125mV    0.0078125mV

 

下圖為四個全接的接線圖,由上往下數的兩個就是0x48 跟 0x49 , 也就是待會範例會用到的

image

 

程式碼 :

 

#include <Wire.h>
#include <Adafruit_ADS1015.h>  //加载ADS1015/ADS1115库

Adafruit_ADS1115 ads48(0x48);    //声明一个ads对象,设置模块地址
Adafruit_ADS1115 ads49(0x49);    //声明一个ads对象,设置模块地址

int16_t adc0;
float voltage0;
int16_t adc1;
float voltage1;
int16_t adc2;
float voltage2;
int16_t adc3;
float voltage3;
int16_t adc4;
float voltage4;     
int16_t adc5;
float voltage5;

float Scalevoltage = 0.0001875;
/*
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
*/
void setup() {
  Serial.begin(115200);
  ads48.setGain(GAIN_TWOTHIRDS); //刻度選擇
  ads49.setGain(GAIN_TWOTHIRDS); //刻度選擇
  ads48.begin();
  ads49.begin();

}

void loop() {
    
    //I2C ADDRESS 0X48
    adc0 = ads48.readADC_SingleEnded(0);  //點到GND的電壓
    voltage0 = (adc0 * Scalevoltage);    //A0讀到的類比值*解析度能量測到的最小電壓等於量測電壓
    
    adc1 = ads48.readADC_SingleEnded(1);  //點到GND的電壓
    voltage1 = (adc1 * Scalevoltage);    //A1讀到的類比值*解析度能量測到的最小電壓等於量測電壓
    
    adc2 = ads48.readADC_SingleEnded(2);  //點到GND的電壓
    voltage2 = (adc2 * Scalevoltage);    //A2讀到的類比值*解析度能量測到的最小電壓等於量測電壓
    
    adc3 = ads48.readADC_SingleEnded(3);  //點到GND的電壓
    voltage3 = (adc3 * Scalevoltage);    //A3讀到的類比值*解析度能量測到的最小電壓等於量測電壓

    //I2C ADDRESS 0X49
    adc4 = ads49.readADC_Differential_0_1();//A0-A1之間的浮動電壓
    voltage4 = (adc4 * Scalevoltage);    
    
    adc5 = ads49.readADC_Differential_2_3();////A2-A3之間的浮動電壓
    voltage5 = (adc5 * Scalevoltage);    
    
    
    Serial.print("v0: ");
    Serial.println(voltage0);
    Serial.print("v1: ");
    Serial.println(voltage1);
    Serial.print("v2: ");
    Serial.println(voltage2);
    Serial.print("v3: ");
    Serial.println(voltage3);
    
    Serial.print("v4: ");
    Serial.println(voltage4);
    Serial.print("v5: ");
    Serial.println(voltage5);

    delay(1000);
}

 

 

 

arrow
arrow
    創作者介紹
    創作者 凶王 的頭像
    凶王

    凶王的部落

    凶王 發表在 痞客邦 留言(0) 人氣()