티스토리 뷰

아두이노

DS1631 온도센서

몽팡 2022. 7. 24. 22:00

ds1631 같은 비 접촉식 칩형 온도센서 같은 경우 아무래도

 

액체 같은 물질에 닿으면 쇼트등의 위험이 있으므로

 

전자제품 내부 온도 측정 같은 곳에 많이 쓰이지 않을까 라는

 

생각이 듭니다...@_@;

 

A0, A1, A2 핀을 GND에 연결해서 i2c 장치 주소를 (0x48) 맞춰 주었어요....

 

 

다이어그램을 대충 보자면....

 

설정 레지스터를 통해 adc의 분해능을 조정후

 

온도 레지스터를 통해 온도를

 

읽어 들이는 형식

 

같아요...@_@

 

설정 레지스터 (1바이트)

 

위와 같이 설정 레지스터는 1바이트의 크기를 가지고 있어요

 

설정 레지스터의 BIT3 (R1)과 BIT2 (R0)를 HIGH (1) 로 설정 해주면

 

12비트의 분해능으로 온도를 측정 할수 있고요...

 

최소 750ms 이상의 지연 시간을 주어야 하네요..@_@

 

 

 

12비트로 설정 할 경우 상위 8비트 (온도)...하위 8비트 (소수점 아래 온도)...

 

총 2바이트의 온도 데이터를 읽어 들이는데요

 

하위 8비트중 0번 부터 3번 비트까지는 항상 0이기 때문에

 

무시해도 되요....@_@

 

 

 

 

1. 설정 레지스터 접속(AC)후 설정 해주고..

 

2. 온도 데이터를 컨버전(51) 해주고....

 

3. 컨버전한 온도 데이터를 읽기(AA) 해주면 될거 같아요...@_@

 

 

#include <Wire.h>

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

  Wire.beginTransmission(0x48); 
  Wire.write(0xAC);                     // 설정 레지스터 접속
  Wire.write(0x0C);                     // 12비트 설정  
  Wire.beginTransmission(0x48);           
  Wire.write(0x51);                     // 온도 컨버전  
  Wire.endTransmission();     
}

void loop() {
  delay(1000);

  Wire.beginTransmission(0x48);        
  Wire.write(0xAA);                     // 컨버전 한 온도 읽기  
  Wire.endTransmission(false);           
   
  //Wire.requestFrom(0x48, 2);
}

 

i2c 프로토콜만 확인 하기 위해 시리얼 출력을 위한

 

별도의 디코딩 작업은 하지 않고 위와 같이

 

i2c 통신만 되게끔 간단하게 코딩 했어요

 

 

위와 같이 아날라이저를 물려주고요..

 

확인 시작!

 

이미지 클릭 - 확대

 

상위 비트 h1D...

 

하위 비트 h20...

 

총 2바이트의 데이터가 수신 되었어요

 

수신된 데이터를 가지고..

 

 별도로 간단한 c 코드로

 

검증을 해보았어요...@_@

 

 

 

현재의 온도는...

 

29.1250로 컴파일 결과가 나왔어요...@_@

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함