i2c 통신을 이용하여 조도센서, 가변저항 등의 아날로그 신호를 입력받을 수 있는 외장 adc 모듈입니다. i2c 통신이 가능한 MCU에 연결하면 4채널의 아날로그 입력 핀을 사용할 수 있습니다.
이 제품의 특징은 ADDR 핀에 VCC, GND, SCL, SDA 핀 중 어떤 핀을 연결하는지에 따라서 i2c 주소를 변경하여 사용할 수 있기 때문에 하나의 MCU에 최대 4개의 모듈을 장착할 수 있는 점과, 게인(Gain)을 조정하여 큰 신호부터 작은 신호까지(최대 범위 : 6.144V, 최소 범위 : 0.256V)를 입력받을 수 있는 점입니다.
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채널 신호 입력핀
연결도와 핀 구성
모듈의 동작을 확인하기 위해서 아날로그 전압을 출력할 수 있는 10k가변저항을 이용한 회로를 사용했습니다. 아래 가변 저항을 연결한 그림을 참고하세요.
핀 연결 구성
아두이노
|
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);
}
코드 실행 결과는 아래와 같습니다.
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 사용하기
'개발자 > Arduino' 카테고리의 다른 글
가변저항 두 개로 시간을 보여주는 코드 (1) | 2023.10.13 |
---|---|
nano 33 IoT 보드 ADC 12bit 설정 (0) | 2023.10.05 |
0부터 1023 까지 숫자를 12시간중 어떤 구간인지 알아내는 코드 (1) | 2023.10.05 |
PIR 센서를 이용한 보안 경보 시스템 (0) | 2023.08.28 |
전류 전압 컨버터 4~20mA 전류 측정 (0) | 2023.05.02 |
Arduino 기반 LM35 온도 센서 데이터 수집 시스템(.csv 파일) (0) | 2023.04.25 |
아두이노 라이브러리 설치 안될 때 access is denied 오류 해결 (0) | 2023.04.13 |
mkdir c:\program files\arduino ide\libraries: access is denied. 해결 (0) | 2023.04.11 |
더욱 좋은 정보를 제공하겠습니다.~ ^^