로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 응용소스
작성자 avrtools™        
작성일 2016/01/31
첨부#1 ads1115.zip (7KB) (Down:92)
첨부#2 FFT-Anlayzer-2013.12.19.zip (2,552KB) (Down:31)
ㆍ추천: 0  ㆍ조회: 351   
  Ardunio 16비트 ADC Data Logger
제목 : Ardunio 16비트 ADC 자료수집기(Data Logger)
참조 :
Elektor project 130485 ADS1115 ADC board.
 

16-bit Data Logger
아듀이노의 아날로그(ADC) 모듈은 자연환경이나 센서류의 측정에 사용할 수 있다.
당신이 필요한 정밀 전압측정기를 만들려면 좋은 분해능의 아날로그/디지털(A/D) 변환 칩이 필요하다.
Elektor Lab에서는 4개의 채널의 16비트 아날로그 칩을 탑재한 기판을 개발했다.
ADS1115와 4 채널 조각 기판의 고분해능 아날로그 변환기는 어떤 MPU 프로젝트에도 완벽하다.
 
이 기판은 전원과 2~5V의 논리신호로 작동할 수 있다.
역시 이들은 3.3V와 5V의 처리에 공통으로 호환된다. 
16 단일 혹은 8 차동 입력채널을 제공하면서 동일한 2선식 I2C bus로 제어될 수 있다.
(single-ended는 1개의 접지로 전환기(MUX)의 수만큼 여러개의 단일 입력 채널들을 쓸 수 있다)  

가변 증폭기는 작은 신호를 위해 16 배의 이득(gain) 설정기능(programmable)을 제공한다.
이 두개의 기판들은 매우 단순하고, 분해능과 속도가 상이하다.
ADS1115는 높은 분해능을 보유하고, ADS1015는 높은 샘플성능을 보유한다.
(ADS1115는 16 비트로 분해능이 높고, ADS1015는 12 비트 분해능으로 변환이 빠르다) 

ADS1115의 특징(Features):
• 분해능(Resolution): 16 비트
• 가변 샘플링 속도(Programmable Sample Rate): 8 ~ 860sps
• 전원과 논리신호 (Power Supply/Logic Levels): 2.0V to 5.5V
• 저 소비전류(Low Current Consumption): 연속 작동: 150µA, 단일작동 방법: 자동 절전(shut-Down)
• 낮은 변동(Low-Drift)의 기준 전압 (Voltage Reference) 내장 
• 발진기(Oscillator) 내장 
• 가변 이득 증폭기(PGA) 내장 :  x16 까지 
• I2C Interface: 4-Pin-Selectable Addresses
• 4 개의 단일(Single-Ended) 혹은  2 개의 차동(Differential) 입력
• 설정식 비교기(Comparator)

ADS1015 특징(Features):
• 분해능(Resolution): 12 비트
• 가변 샘플링 속도(Programmable Sample Rate): 128 ~3300 sps
• 전원과 논리신호 (Power Supply/Logic Levels): 2.0V to 5.5V
• 저 소비전류(Low Current Consumption): 연속 작동: 150µA, 단일작동 방법: 자동 절전(shut-Down)
• 낮은 변동(Low-Drift)의 기준 전압 (Voltage Reference) 내장 
• 발진기(Oscillator) 내장 
• 가변 이득 증폭기(PGA) 내장 :  x16 까지 
• I2C Interface: 4-Pin-Selectable Addresses
• 4 개의 단일(Single-Ended) 혹은  2 개의 차동(Differential) 입력
• 설정식 비교기(Comparator)

Elektor의 140169-1 BoB 
     
 
Elektor BoB 140169-1 회로도
   
 
Adafruit의 ADC1115 BoB : USD 14.95 
 

Aliexpresss의 ADS1115 I2C BoB : USD 2.99
  

조립과 연결
ADS1115는 I2C로 연결하는 4 채널 16 비트 아날로그-디지털 변환기(AD-converter)다.
이것은 1KHz  미만의 상대적으로 느린 일반적인 전방 처리기(front end)의 설계에 완벽하다.
우리의 BoB는 작은 조각 기판으로 쉬운 납땜을 지원한다.
그러므로 납땜과 확대경이 없어도 이 조각 기판을 쓸 수 있다.  

ADS1115는 4개의 하위 주소(slave address)로 된 I2C 부품(decie)이다.
따라서 0Ω으로 존재하는 설정 저항 R5 - R8 저항 중에서 하나는 결정되야 한다. 초기(defualt)는 R5 이다. 
선택하는 하위 주소의 정보는 ADS1115의 칩 자료에서 찾을 수 있다.
 
기판의 전원 전압은 2.0 부터 5.5V 사이를 허용한다.
여기서 복사하는 16 비트 자료 저장 프로젝트 소스에서, 
공용자료(library)를 연결하는 아듀이노의 기본 코드를 설명한다.
 
전원 (Power)
처음에는 VDD와 GND로 전원을 연결한다. 모듈은 3.3V 혹은 5V에서 작동될 것이다.
 
신형 아듀이노 I2C 연결
I2C는 2 핀의 연결이 요구된다. 다른 여러개의 I2C 연결도 함께 연결할 수 있다.
아듀이노 R3, Mega, DUE도 SDA는 SDA로, SCL은 SCL로 연결한다.
 
 

기존 아듀이노 I2C 연결
SDA와 SCL 핀의 표시만 없는 아듀이노의 연결은 다음과 같다.
A4는 SDA로 연결, A5는 SCL로 연결한다. (Arduino Mega의 SDA와 SCL은 핀 20과 21)
 
 

I2C Addressing 
ADS1115 칩은 기본 7-bit I2C 주소 0x48 (1001000)와 1 조(clave)의 준비된(scheme)  주소가 있다.
 
ADR 핀은 네개의 다른 주소중 에서 오직 하나만 사용한다.   
주소 설정은 BoB 기판에 있는 ADDR 핀의 연결 방법에 따른다.
(ADS1115의 ADR 핀은 다음 4 가지 연결 중에서 하나를 선택하여 연결해야 한다)
•0x48 (1001000)은 ADDR 핀을 -> GND로 연결 
•0x49 (1001001)은 ADDR 핀을 -> VDD로 연결
•0x4A (1001010)은 ADDR 핀을 -> SDA로 연결
•0x4B (1001011)은 ADDR 핀을 -> SCL로 연결


다음 그림은 탑재 기판이 0x48로 지정된(addressed) 것을 보여 준다.
(ADS1115 기판의 ADDR 핀을 (노란색 전선) GND와 연결한다)


I2C 칩의 다중(multi) 연결
여러개의 I2C 칩들은 같은 I2C 버스에 공통으로 연결하지만,
각 I2C의 주소는 ADDL 핀(노란색)을 다르게 연결한다. 
 

아날로그 신호입력 핀의 단일입력과 차동입력의 비교 (Single Ended vs. Differential Inputs):
I2C 제어신호의 연결은 아듀이노 기판과 ADS1115 칩과의 제어가 목적인 연결이고,
아날로그 입력 핀의 연결은 측정하려는 아날로그 신호원을 받는 연결이다.
 
ADS1x15 조각 기판은 4개의 단일채널 혹은 2개의  차동채널을 지원한다.
단일채널은 GND를 공용으로 4개의 입력채널을 4개의 A0~A3 아날로그 신호원에 연결한다.
단일입력에서 아날로그 신호는 반드시 GND 공통으로 단일입력 핀을 연결해야 한다.
 
차동입력은 GND와 관계없이 2개의 아날로그 신호원에 A0과 A1, A2와 A3으로 2개씩 차동입력 핀을 연결한다.
차동입력에서 아날로그 신호원은 GND 공통일 수도 있고, 전원전압 이내의 floating된 전압일 수도 있다.
차동입력에서는 아날로그 신호원에 연결되는 2개의 차동입력 핀은 서로 바꾸어 연결할 수도 있다.

어느 것을 써야 하나? 단일 입력은 2배로 많은 입력 채널을 지원한다.
그러면 어째서 차동입력을 원하는가? 단일 입력은 오직 +전압을 측정할 수 있다.
극성 비트를 버린다면, 15 비트 분해능의 효과로 읽을 수도 있다.
추가로 - 전압 측정 능력과 16 비트의 분해능을 지원한다.  

전기자기 잡음을 피하려면 차동 측정이 요구된다.
이 방법은 긴 신호선을 사용할 때 혹은 전기잡음이 있는 환경에서 사용된다.
역시 작은 신호에서 요구되는 높은 gain일 때 바람직 하다.
잘 알려진 신호의 잡음은 증폭기의 gain 만큼 증폭된다.

단일 입력 연결
각 신호의 출력을 아날로그 입력 채널 A0~A3으로 연결한다.
각 신호의 GND를 ADS1115의 GND와 연결해야 한다.
 
ADS1115 단입입력 채널 AD0 시험 회로

차동 입력 연결
차동 입력은 2개의 입력 채널 A0와 A1 혹은 A2와 A3을 쌍으로 사용한다.
 
응용 소스 예:
저자 : Gravaar Image BILL EARL
Adafruit_ADS1x15의 library는 ADS1015와 1115의 단일 입력과 차동입력 두개의 작동을 지원한다.

library는 I2C 통신을 위한 wiring library를 사용한다. 반드시 wiring.h를 첨부(include) 한다.
I²C driver 소스를 어떻게 사용하는가를 보여주는 간단한 아듀이노의 예를 첨부하였다.
이 예는 모든 가능한 ADC를 읽은 다음, 결과를 전압으로 변환하여 직렬 포트에서 출력한다.

// 참조 : Elektor project 130485
// ADS1115 ADC 기판을 구동하는 시험 프로젝트
// 저자 : CPV

// Include the bit-banged I2C driver.
#include "soft_i2c.h"

// Include the driver definition file.
#include "ads1x1x.h"

// Create an ADC object.
ADS1x1x_config_t my_adc;

int sda_pin = A4;
int scl_pin = A5;

// You must provide this function.
void soft_i2c_delay(void){
  delayMicroseconds(5);
 }

// You must provide this function.
 void soft_i2c_sda_mode(uint8_t value){
  if (value==0) pinMode(sda_pin,INPUT); // Use pull-ups on bus.
    else pinMode(sda_pin,OUTPUT);
}

// You must provide this function.
void soft_i2c_sda_write(uint8_t value){
  digitalWrite(sda_pin,value);
}

// You must provide this function.
uint8_t soft_i2c_sda_read(void){
  return digitalRead(sda_pin);
}

// You must provide this function.
void soft_i2c_scl_write(uint8_t value){
  digitalWrite(scl_pin,value);
}

// You must provide this function.
uint8_t ADS1x1x_i2c_start_write(uint8_t i2c_address){
  return soft_i2c_start_write(i2c_address);
}

// You must provide this function.
uint8_t ADS1x1x_i2c_write(uint8_t x){
  return soft_i2c_write(x);
}

// You must provide this function.
uint8_t ADS1x1x_i2c_start_read(uint8_t i2c_address, uint16_t bytes_to_read){
  return soft_i2c_start_read(i2c_address,bytes_to_read);
}

// You must provide this function.
uint8_t ADS1x1x_i2c_read(void){
  return soft_i2c_read();
}

// You must provide this function.
uint8_t ADS1x1x_i2c_stop(void){
  soft_i2c_stop();
  return 0;
}

void setup(void){
  Serial.begin(115200);
  Serial.println("130485 ADS1115 ADC board");
  Serial.println("(c) Elektor, 29/04/2014");
  Serial.println("");

// Setup bit-banged I2C pins.
  pinMode(sda_pin,OUTPUT);
  pinMode(scl_pin,OUTPUT);

// Initialise ADC object.
  if (ADS1x1x_init(&my_adc,ADS1115,ADS1x1x_I2C_ADDRESS_ADDR_TO_GND,MUX_SINGLE_0,PGA_2048)==0) {
    Serial.println("Could not initialise ADC structure.");
  }
}

void loop(void){
ADS1x1x_start_conversion(&my_adc);
// Default sample rate is 128 samples/s, i.e. one sample every 7.8 ms.
  delay(8); 
  Serial.println(ADS1x1x_read(&my_adc)); // print raw value
}


ADS1x1x library :
ADS1115의 공용소스(library)인 4 개의 파일은 다음 그림과 같이 소스가 있는 폴더 안에 있어야 한다.
 
 
ads1x1x 공용소스(library)는 6개의 다른 ADC 칩들과 호환된다.
ADS1013, ADS1014, ADS1015, ADS1113, ADS1114, ADS1115.
차이는 입력 채널의 수와 변환 분해능이다.
ADS101x는 12 비트 변환기, ADS111x는 16 비트 분해능이 있다.
공용소스(library)는 모든 ADC 칩을 작동(handle)할 수 있다. 
그러나 반드시 초기화 동안 칩에 맞추어 설정해야 한다.
 
연결된 ADC 칩의 I²C 주소를 설정하고  library를 호출한다.
(이렇게 설명하면 이해하기 어렵다. library 코드가 소스에 첨부된다) 
// ADC 칩이 정의된 드라이버를 소스에 첨부한다.
#include "ads1x1x.h"

// 이어서 주소를 포함하고 공용소스(library)를 반드시 한번 호출해야 한다.

(연결된 ADC 칩의 주소를 첨부된 library를 호출하여 struct 변수에 저장한다)  
ADS1x1x_config_t my_adc; // my_adc의 초기값은 0x48 이다.

 
가능한 친숙하게 library를 만들려고 노력했었고,
기능적으로 ADC 칩의 모든 parameter의 제어를 가능하도록 지원하였다.
ADC1x1x는 모든 parameter를 유지하는 오직 1개의 설정 register를 가지고 있기 때문에.
비트 영역은 enumerated types (enum)으로 선언되었다, 마크로(#define)는 아니다. 

이 영역의 오류 점검은 번역-시간을 허용한다.
우연히 다른 parameter를 덮어 씌울수 있는지를 위해 완전히 틀린 값을 만들어 공급한다.
그러나, 최대로 제어를 하는 것 같은, 3단의 하위 레벨 기능은 잘 만들어 졌다.   
 
(한개의 주소로 4개의 주소로 확장하는 I2C 주소체계에서)
ADC 장치에서 사용자가 준 설정을 칩에 저장하는 ADC 설정 기능을 하나 더 허용한다.
장치에서 모든 ADS1x1x를 위해 strucure 변수의 검색이 필요하다. 

이 structure는 library의 모든 호출이 통과하므로써 어느 설정이 사용되는지 알고 있다.
이것은 목표 지향 C++ 언어에서 생각하는 C 언어의 종류(sort) 이다.
만일 당신이 이 이론(paradigm)을 넣을 수 있다면,
이 이론(paradigm)은 언젠가는 다중(multiple) I2C driver로서 적용될 것이다.

사용자가 제공하는 data structure와 연속된 read 에서 같은 칩의 설정을 사용하면,
ADC의 read 기능은 저장된 칩의 설정을 사용할 것이다.
library는 C와C+= 프로젝트에서 사용 가능한 C와 C++로 쓰여졌다.

비트와 부호처리에서 stdint.h를 삭제하여 애매하게 읽혀지는 그들의 크기는, 
모든 data 형식에서 libarary 자체 아니면 빌려온 정의 중에서 어느 하나가 사용된다. 

모든 platform에서 개조없이 library를 사용하려는 이 생각에 의해,
만일 compiler에 stdint.h 가 없다면, 반드시 unt8_t (부호없는 8비트 정수)를 정의해야 한다.  
또한 int16_t (16 비트 부호있는 정수)와  uint16_t (16 비트 부호없는 정수)도 정의해야 한다.

그러나 ²C bus에서 ADS1x1x와 통신을 low-level I²C driver로는 안된다.
AD1x1x를 이용하려면, 꼭 stubes 라 부르는 함수를 사용해야 한다.
그것은 당신이 무엇인가 작동을 만들려면, 꼭 연결해야 하는 칩의 핀이다.
사용자는 제공되는 I²C driver와 연결할 책임이 있다.

 I²C driver library는 연결하려는 5 개의 stubs가 반드시 있어야 한다.
uint8_t ADS1x1x_i2c_start_write(uint8_t i2c_address) // I²C 시작 주소 0x48 
uint8_t ADS1x1x_i2c_write(uint8_t x) // I²C 쓰기 (1바이트 쓰는 값을 포함)
uint8_t ADS1x1x_i2c_start_read(uint8_t i2c_address, uint16_t bytes_to_read) // I²C 읽기 시작 주소  
uint8_t ADS1x1x_i2c_read(void)  // I²C 읽기
uint8_t ADS1x1x_i2c_stop(void)
  // I²C 정지

이들 기능은 I²C 버스에서 바이트로 쓰고 읽거나 정지하기 위해 초기화가 필요하다.
2 개의 범용포트(GPIO)로 I²C를 제어하는 비트조작(bit-bang) I²C 버스 driver를 포함하여,
당신의 편의를 위해 간단한 소스를 내려받기에 포함하였다.
I²C library 소스는 사용자가 쓰려는 몇개의 GPIO 핀의 주소을 필요로 한다.   

Data Logger의 응용과 분석
토양의 유기물을 분석하기 위해 입력에 전극을 연결하여 자료를 수집할 수 있다.
기존의 PH 센서는 측정할 때 마다 전극을 세척하고 약품을 도포해야 하지만,
가상 ISFET 전극을 Degradable Bio Plastic에 삽입하면, 일정기간 토양속에서 보수없이 사용할 수 있다.
 
 
  
  

Elektor 130485-1 BoB를 사용하면 전극을 직접 연결하고 건전지로 작동된다.
측정 현장에서 필터는 신호를 주변잡음으로 부터 방해없이 측정하는데  매우 중요하다.
측정된 신호에서 직류성분을 포함하여 수집하려면 C8과 C9는 제거하고 직결할 수 있다.
증폭도의 많은 변경은 K2(S1)를 선택한다. 작은 변경은 P1을 조절한다. 
 
 
 
Elktor 130485-1 기판 (USD 16.00)
   
 
저장된 자료는 파일로 읽어내고 processing에서 graphic으로 파형분석이나 FFT 분석을 할 수 있다.
  
 
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
AVRTOOLS™
   
윗글 Arduino 정밀 전력계의 LPF
아래글 Arduino AC/DC Power Meter의 제작
    N         제목    글쓴이 작성일 조회 추천
아듀이노 응용소스 게시판 avrtools™ 2016/02/05 (금) 230 0
25 ESP8266 MQTT Relay Control avrtools™ 2016/03/03 (목) 388 0
24 2 채널 ESP8266 WiFi Switch의 제작 avrtools™ 2016/02/25 (목) 435 0
23 ESP-12E SDK 0.9.5 사용방법 avrtools™ 2016/02/18 (목) 467 0
22 ESP8266 ESP-12E WiFi 센서 서버의 제작 avrtools™ 2016/02/17 (수) 440 0
21 Arduino DS3231 RTC to 5110 LCD avrtools™ 2016/02/16 (화) 475 0
20 ESP8266 Weather Server의 제작 avrtools™ 2016/02/15 (월) 473 0
19 Arduino 온습도 센서 DHT-22 avrtools™ 2016/02/12 (금) 405 0
18 ESP8266 WiFi 펌웨어 업그레이드 avrtools™ 2016/02/11 (목) 611 0
17 Arduion ESP8266 WiFi 설정 방법 avrtools™ 2016/02/10 (수) 566 0
16 Arduino 정전용량식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 334 0
15 Arduino 전극식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 433 0
14 Arduino 정밀 전력계의 ADC avrtools™ 2016/02/02 (화) 651 0
13 Arduino 정밀 전력계의 LPF avrtools™ 2016/02/02 (화) 466 0
12 Ardunio 16비트 ADC Data Logger avrtools™ 2016/01/31 (일) 351 0
11 Arduino AC/DC Power Meter의 제작 avrtools™ 2016/01/29 (금) 601 0
10 Arduino 교류 역율계(power factor)의 제작 avrtools™ 2016/01/29 (금) 453 0
9 Arduino DUE based DDS Synthesizer avrtools™ 2016/01/24 (일) 273 0
8 QTouch ADC 근접검출 스위치 avrtools™ 2016/01/21 (목) 479 0
7 Arduino 음성인식 Speech/Voice Recognition avrtools™ 2013/09/14 (토) 1730 0
6 Arduino Uno로 만드는 3축 CNC avrtools™ 2013/09/10 (화) 2624 0
5 Arduino로 만드는 mySpectral 분광기 avrtools™ 2013/09/04 (수) 2161 0
4 8채널 12비트 ADC MCP3208 오실로스코프 avrtools™ 2012/03/29 (목) 540 0
3 교류저항 (impedance) 측정 AD5933 avrtools™ 2012/03/17 (토) 483 0
2 Arduino DMX512 수신기 제작 avrtools™ 2012/03/15 (목) 3707 0
1 TSL2561 조도 측정기의 제작 avrtools™ 2011/09/11 (일) 2701 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0