본문 바로가기

개발자/Arduino

아두이노 ADC 모듈 ADS1115 ADS1015

반응형

 

 

 

i2c 통신을 이용하여 조도센서, 가변저항 등의 아날로그 신호를 입력받을 수 있는 외장 adc 모듈입니다. i2c 통신이 가능한 MCU에 연결하면 4채널의 아날로그 입력 핀을 사용할 수 있습니다.

 

이 제품의 특징은 ADDR 핀에 VCC, GND, SCL, SDA 핀 중 어떤 핀을 연결하는지에 따라서 i2c 주소를 변경하여 사용할 수 있기 때문에 하나의 MCU에 최대 4개의 모듈을 장착할 수 있는 점과, 게인(Gain)을 조정하여 큰 신호부터 작은 신호까지(최대 범위 : 6.144V, 최소 범위 : 0.256V)를 입력받을 수 있는 점입니다.

 

ads1115와 ads1015는 거의 대부분이 동일하게 제작되어 있지만, ads1115는 해상도가 더 높고, ads1015는 초당 샘플링이 더 높은 것으로 구분이 됩니다. 

 

 

ADS1115와 ADS1015

 

 

Specification

 

  • ads1115 해상도(분해능) : 16bit (0~65535)
  • Programmable Sample Rate : 8~860 Samples/s
  • 동작 전압 : 2.0V ~ 5.5V
  • 동작 전류 : 컨티뉴어스 모드 : 150µA, 싱글 샷 모드 : 자동 셧다운
  • Internal Low-Drift Voltage Reference
  • 내장 오실레이터(발진기)
  • 내장 PGA(Programmable Gain Amplifier) : 최대 x16
  • i2c 인터페이스(i2c 주소 변경 가능)
  • 4채널 신호 입력핀 

 

연결도와 핀 구성

 

 

ADS1115 연결도

 

모듈의 동작을 확인하기 위해서 아날로그 전압을 출력할 수 있는 10k가변저항을 이용한 회로를 사용했습니다. 아래 가변 저항을 연결한 그림을 참고하세요.  

 

 

ADS1115와 가변저항 연결도

 

핀 연결 구성

 

아두이노
ADC 모듈
VCC
VDD
GND
GND
A4
SDA
A5
SCL

 

코드를 입력하기 전에 아두이노 환경에 adc 라이브러리를 설치해야 합니다. adafruit / Adafruit_ADS1X15 라이브러리 주소를 참고하세요. 설치방법 간단하게 알려드리면 위 링크는 Github 링크인데 좌측 code 를 눌러 zip 파일을 다운 받습니다. 그리고 아래 두 번째 이미지의 스케치 - include library 로 가서 add zip library를 선택 후 다운 받은 zip 파일을 선택해주면 됩니다.

 

 

 

 

 

더 간단한 두번째 방법은 아래 이미지에서 처럼 툴 - manage library로 가서 검색해서 설치합니다. 적당한 라이브러리를 설치하는 것을 잊지 마세요. 설치 후 File - Example 메뉴에서 아마도 예제를 발견하실 수 있습니다. 부디~^^ 

 

 

 

 

 

 

ADS1115 예제 소스 코드

 

#include <Wire.h>
#include <Adafruit_ADS1015.h>

//ADDR 핀에 아무것도 연결되어 있지 않을 때 기본 i2c 주소(0x48)를 사용하여 동작합니다.
Adafruit_ADS1115 ads1115; 

//ADDR핀을 이용하여 i2c 주소를 변경하였을 때에는 아래 소스코드를 이용합니다.
//Adafruit_ADS1115 ads1115(0x49);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
  Serial.println("Getting single-ended readings from AIN0..3");
  ads1115.begin();

  //Gain을 조정하여 최대 6.144V의 전압에대한 데이터를 출력하며, 1 bit당 0.1875mV의 전압으로 인식합니다.
  ads1115.setGain(GAIN_TWOTHIRDS); 
  Serial.println("ADC Range: +/- 6.144V (1 bit = 0.1875mV)");

  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // 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 loop(void)
{
  //입력 신호의 데이터를 저장할 변수를 선언합니다.
  float adc0, adc1, adc2, adc3; 

  //각 채널의 입력 신호를 읽고 변수에 저장합니다.
  adc0 = ads1115.readADC_SingleEnded(0); 
  adc1 = ads1115.readADC_SingleEnded(1);
  adc2 = ads1115.readADC_SingleEnded(2);
  adc3 = ads1115.readADC_SingleEnded(3);

  //각 채널에 입력된 신호의 데이터를 출력합니다.
  //신호핀에 아무것도 연결되어 있지 않으면 의미 없는 값이 출력됩니다.
  Serial.print("AIN0: "); Serial.println(adc0);
  Serial.print("AIN0 Voltage : "); Serial.println(adc0*0.1875/1000);
//  Serial.print("AIN1: "); Serial.println(adc1);
//  Serial.print("AIN1 Voltage : "); Serial.println(adc1*0.1875/1000);
//  Serial.print("AIN2: "); Serial.println(adc2);
//  Serial.print("AIN2 Voltage : "); Serial.println(adc2*0.1875/1000);
//  Serial.print("AIN3: "); Serial.println(adc3);
//  Serial.print("AIN3 Voltage : "); Serial.println(adc3*0.1875/1000);
  Serial.println(" ");
  
  delay(1000);
}

 

 

코드 실행 결과는 아래와 같습니다.

 

 

ADA1115 코드 실행 결과

 

ADS1015 사용 예제 소스 코드

 

#include <Wire.h>
#include <Adafruit_ADS1015.h>

//ADDR 핀에 아무것도 연결되어 있지 않을 때 기본 i2c 주소(0x48)를 사용하여 동작합니다.
Adafruit_ADS1015 ads1015; 

//ADDR핀을 이용하여 i2c 주소를 변경하였을 때에는 아래 소스코드를 이용합니다.
//Adafruit_ADS1015 ads1015(0x49);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
  Serial.println("Getting single-ended readings from AIN0..3");
  ads1015.begin();

  //Gain을 조정하여 최대 6.144V의 전압에대한 데이터를 출력하며, 1 bit당 3mV의 전압으로 인식합니다.
  ads1015.setGain(GAIN_TWOTHIRDS); 
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV)");

  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // 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 loop(void)
{
  //입력 신호의 데이터를 저장할 변수를 선언합니다.
  float adc0, adc1, adc2, adc3; 

  //각 채널의 입력 신호를 읽고 변수에 저장합니다.
  adc0 = ads1015.readADC_SingleEnded(0); 
  adc1 = ads1015.readADC_SingleEnded(1);
  adc2 = ads1015.readADC_SingleEnded(2);
  adc3 = ads1015.readADC_SingleEnded(3);

  //각 채널에 입력된 신호의 데이터를 출력합니다.
  //신호핀에 아무것도 연결되어 있지 않으면 의미 없는 값이 출력됩니다.
  Serial.print("AIN0: "); Serial.println(adc0);
  Serial.print("AIN0 Voltage : "); Serial.println(adc0*3/1000);
  Serial.print("AIN1: "); Serial.println(adc1);
  Serial.print("AIN1 Voltage : "); Serial.println(adc1*3/1000);
  Serial.print("AIN2: "); Serial.println(adc2);
  Serial.print("AIN2 Voltage : "); Serial.println(adc2*3/1000);
  Serial.print("AIN3: "); Serial.println(adc3);
  Serial.print("AIN3 Voltage : "); Serial.println(adc3*3/1000);
  Serial.println(" ");
  
  delay(1000);
}

 

 

 

 

 

참고

메카솔루션 i2c ADC 모듈 ADS1115와 ADS1015 사용하기  

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩