반응형

안녕하세요, 츄르 사려고 코딩하는 집사 코집사 입니다.

2019년 1월 16일날 작업을 했던 아두이노에 비접촉식 적외선 온도측정 센서를 추가해보려고 합니다.

비접촉식 적외선 온도측정 센서는 아래와 같이 생겼습니다.



대략 높이가 1.7cm, 너비는 약 1cm 정도의 크기를 가지고 있습니다. 제 손 크기로 엄지손가락 한 마디 크기네요.

이렇게 엄청나게 작은 센서가 온도를 측정한다고 하네요. 


비접촉식 적외선 온도측정 센서란??

비접촉식 적외선 온도 센서(GY-906, MLX90614)는 가까이 있는 물체에서 방출하는 적외선을 저 가운데 센서를 통하여 온도를 측정하는 센서입니다. 설명서를 보니까 -70도 ~ 380도의 온도 범위를 0.02도 단위로 측정을 한다고 합니다.

어제 포스팅한 인체감지 센서의 원리랑 비슷하다고 생각하면 됩니다. 어제 포스팅한 링크는 아래에 있습니다.

https://yongku.tistory.com/entry/%EC%A0%81%EC%99%B8%EC%84%A0-%EC%9D%B8%EC%B2%B4%EA%B0%90%EC%A7%80-%EC%84%BC%EC%84%9CPIR%EC%84%BC%EC%84%9C-Passive-Infrarted-Sensor



비접촉식 적외선 온도측정 센서의 원리

적외선 인체감지 센서도 사람에게서 나오는 적은 적외선을 렌즈를 통해 센서로 들어와 인체를 감지 하는 원리를 가지고 있습니다. 이와 마찬가지로, 비접촉식 적외선 온도 센서도 물체에서 나오는 적외선을 센서로 받아들여 온도를 측정합니다. 거의 비슷한 원리라고 할 수 있죠. 이제, 비접촉식 적외선 온도측정 센서는 적외선 인체감지 센서와 다르게 아날로그 신호를 받아들입니다. 적외선 인체감지 센서는 0과 1로만 표현될 수 있는 디지털 신호를 INPUT 하지만, 온도는 대체적으로 아날로그 신호의 예라고 많이 표현을 합니다. 그래서, 비접촉식 적외선 온도측정 센서는 디지털 핀이 아닌 아날로그 핀에 연결을 해야 합니다.



비접촉식 적외선 온도측정 센서 연결

원래는 핀헤더를 가지고 저 구멍에 넣고 납땜을 해야하는데 인두기가 없어서 그냥 빵판에 꽂았습니다.







- VCC : 5V PIN

- GND : GND PIN

- SDA : A5

- SCL : A4  

  * SCL : SCL은 Serial CLock이라고 하며, 클럭 시그널을 전송하는 핀입니다.

  * SDA : SDA는 Serial DAta 라고 하며, 데이터 전송을 위한 핀입니다.
  * 두 개의 핀으로 나눠진 이유는 양방향 전송을 할 경우에는 속도가 느려질 수 있습니다. 

  * 통상적으로 SDA 는 Analog 4번 PIN에 연결을 하고, SCL은 Analog 5번 PIN에 연결을 합니다.

  * 이 VCC / GND / SDA / SCL 을 가지고 있는 기기들은 I2C(Inter-Integrated Circuit) 통신을 하기 때문에, 전용 라이브러      리를 사용을  해야 합니다. 


그래서, 먼저 전용 라이브러리를 설치하겠습니다.


1) https://github.com/adafruit/Adafruit-MLX90614-Library 으로 접속을 하여 "Clone or download" 를 눌러 Download ZIP을 받아줍니다.






2) 다운로드를 한 ZIP 파일의 경로를 알아두고, 아두이노(Arduino) sketch에서 

   [스케치] -> [라이브러리 포함하기] -> [.ZIP 라이브러리 추가하기]를 하여 다운로드 한 ZIP 파일을 추가합니다.




3) 라이브러리를 넣어줍니다.

   [스케치] -> [라이브러리  포함하기] -> [Adafruit MLX90614 Library]





4) 그러면, 아래와 같이 #include <Adafruit_MLX90614.h>라는 라이블러리 불러오기가 생깁니다.





이제, 라이브러리 설치도 끝났으니 코딩을 할 차례가 되었습니다.

코드는 아래와 같습니다. 설명은 주석을 달아놨으니 이해하기 쉬울 것이라고 생각됩니다.

오류나 이해가 안되는 게 있으면 댓글 부탁드립니다.

#include <Wire.h> // I2C 통신을 위한 라이브러리

#include <Adafruit_MLX90614.h> // 비접촉식 온도측정센서 라이브러리

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

#include <Servo.h> //Servo를 사용

Servo servo; //Servo를 servo로 사용


//Servo motor

int SERVO_PIN = 7; // 서보 모터의 제어 신호를 디지털 7번 핀에 꽂음

int FIRST_ANGLE = 0; // 초기 각도를 0도로 맞춤


//PIR 센서(인체감지센서)

int PIR = 2; // PIR 센서 2번핀으로 연결


//LED 

int LED = 13;


void setup() {

  //Servo motor

  servo.attach(SERVO_PIN); // 디지털 7번 핀 서보모터 초기화

  

  //PIR 센서

  pinMode(PIR, INPUT); //PIR 센서 INPUT -> 출력 값을 받아오기 위함


  //LED

  pinMode(LED, OUTPUT); //LED 핀 OUTPUT 설정

  

  //Serial 통신

  Serial.begin(9600); // Serial 통신 속도 설정


  mlx.begin();

  

}


void loop() {

  //Servo motor 작동

  for(int i=0; i<180; i++)

  {

    servo.write(i);

    delay(20);

  }

  

  // PIR 센서

  int PIR_input = digitalRead(PIR); // PIR 센서 값 읽기

  

  // PIR 센서 값 시리얼 통신

  Serial.println(PIR_input); // 센서 값 시리얼 모니터에 출력

  if(PIR_input==1) //PIR 센서 값이 1이면 LED 키고 작동 확인

  {

    digitalWrite(LED,HIGH);

  }

  else

  {

    digitalWrite(LED,LOW);

  }

  // 비접촉식 적외선 온도측정 센서

  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 

  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");

  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 

  Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");

  

}



이상으로 츄르 사려고 코딩하는 집사 코집사였습니다!


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기