ESP32, 온도측정(DS18b20), PLX_DAQ

DS18b20 온도센서

DS18b20 온도 센서를 이용하여 온도를 측정한다.

  • one-wire 버스 통신
  • 공급전압: 3.0V ~ 5.5V
  • 작동온도: -55ºC ~ +125ºC
  • 오차: +/-0.5 ºC (-10ºC ~ 85ºC 범위에서)

Pinout


schematic

DS18b20 센서는 두 가지 연결방법을 제공하는데, 하나는 VCC를 5V에 연결하는 Normal Mode이고 다른 하나는 VCC를 GND에 연결하는 Parasite Mode이다. 두가지 방법 모두 지원되지만 (경험상) Normal를 추천하며 (원인은 잘 모르겠지만) Parasite Mode에서는 온도센서가 작동이 되지 않는 경우도 가끔 있었다. 회로 구성을 위해 4.7㏀ 저항 1개가 필요하며 Normal Mode 구성을 위해 다음 그림과 같이 연결한다.

  • 3가닥의 선에 브레드보드에 연결할 수 있는 핀을 납땜하고, 노란색선과 빨간색선의 연결부위에 4.7㏀ 저항을 추가로 납땜하여 연결한다.

  • 수축튜브를 사용하여 연결부위를 절연한 뒤,

  • 구경이 조금 더 큰 수축튜브를 사용하여 3가닥을 하나로 감싸 마무리한다.


Normal Mode



라이브러리 준비하기

Sketch> Include Library> Manage Libraries>

  • OneWire (by Jim Studt etc.)
  • DallasTemperature (by Miles Burton)

sketch

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
#include <OneWire.h>
#include <DallasTemperature.h>

#define TEMP_PIN 4

OneWire oneWire(TEMP_PIN);
DallasTemperature sensors(&oneWire);

void setup() {
Serial.begin(115200);
Serial.println("DallasTemperature IC Control");

// Start up the library
sensors.begin();
}

void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
float temperatureF = sensors.getTempFByIndex(0);
Serial.print(temperatureC);
Serial.println("*C");
Serial.print(temperatureF);
Serial.println("*F");
delay(2000);
}


PLX-DAQ

ESP32를 사용하여 센서데이터를 Excel로 보내고 실시간 그래프를 그려주는 Excel 매크로 파일이다. Parallax에서 만든 것이지만, 현재 공식적인 업데이트는 중지되어 있다. 이런 이유로 Parallax 홈페이지에서 다운로드 받을 수 있는 PLX-DAQ는 최신 버전의 Excel에서 활용이 불가능하며, ESP32에서의 활용도 불가능하다. 현재는 아두이노 포럼 등에서 최신 버전의 Excel과 ESP32 등에서 활용 가능하도록 업데이트를 진행하고 있으므로 Parallax 홈페이지가 아닌, 아두이노 포럼에서 다운로드 받도록 한다.


download

PLX-DAQ version 2 - now with 64 bit support! (and further new features) - Using Arduino / Interfacing w/ Software on the Computer - Arduino Forum)


sketch

  • void setup()

    • Excel Sheet Clear
    1
    Serial.println("CLEARDATA");
    • Label 만들기 (콤마(,)로 구분)
    1
    Serial.println("LABEL,Date,Time,Millis,SensorValue");
  • void loop()

    • Data 출력
    1
    2
    Serial.println( (String) "DATA,DATE,TIME," + millis() + "," + SensorValue );
    delay(200);

    (혹은, 아래와 같이 라인을 구분하는 것도 좋은 방법이다.

    1
    2
    3
    4
    5
    6
    Serial.print("DATA,DATE,TIME,");
    Serial.print(millis());
    Serial.print(",");
    Serial.print(i);
    Serial.print(",");
    Serial.println(SensorValue);
    • DATA 출력시작은 Serial.print(“DATA,”); 로 하며, DATA 출력종료는 println을 통해 개행한다.
    • delay를 500이상 주어야 안정적으로 데이터를 수신한다.
  • 전체 sketch

    GPIO4 데이터를 엑셀 파일에 기록한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int i = 0;
    const int SensorPin = 4;
    float SensorValue;

    void setup() {
    Serial.begin(115200);
    Serial.println("CLEARDATA");
    Serial.println("LABEL,Date,Time,Millis,Times,SensorValue");
    }

    void loop() {
    SensorValue = analogRead(SensorPin)/100.00;
    Serial.print("DATA,DATE,TIME,");
    Serial.print(millis());
    Serial.print(",");
    Serial.print(i);
    Serial.print(",");
    Serial.println(SensorValue);
    i++;
    delay(5000); // 5초마다 1번씩 측정
    }


온도센서의 온도값 기록하기

sketch

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
31
32
33
34
35
#include <OneWire.h>
#include <DallasTemperature.h>

int i = 0;
const int SensorPin = 4;
float temperatureC;
//float temperatureF;

OneWire oneWire(SensorPin);
DallasTemperature sensors(&oneWire);

void setup() {
Serial.begin(115200);
Serial.println("DallasTemperature IC Control");

// Start up the library
sensors.begin();
Serial.println("CLEARDATA");
Serial.println("LABEL,Date,Time,Millis,Times,SensorValue");
}

void loop() {
sensors.requestTemperatures();
temperatureC = sensors.getTempCByIndex(0);
// temperatureF = sensors.getTempFByIndex(0);

Serial.print("DATA,DATE,TIME,");
Serial.print(millis());
Serial.print(",");
Serial.print(i);
Serial.print(",");
Serial.println(temperatureC);
i++;
delay(5000); // 5초마다 1번씩 측정
}

PLX-DAQ 엑셀파일 실행

  • 다운로드 받은 PLX-DAQ 엑셀 매크로 파일을 더블 클릭하여 불러들인다.

  • Settings에서 ESP32가 연결된 Com port와 Baud rate 설정

    • Port: 6 (장치 관리자> 포트> 에서 확인)
    • Baud: 115200 (ESP32의 경우 115200, 아두이노는 9600으로 셋팅)
  • 스케치를 업로드 한 뒤, Connect를 누르면 실시간으로 데이터를 받아서 기록함

  • 기본적으로 셋팅되어 있는 차트가 실시간으로 그려진다. 단, 차트가 그려지지 않거나 잘못된 형태로 표현되는 경우, 엑셀 차트의 데이터 범위를 재설정하여야 한다.



Microsoft Data Streamer

PLX-DAQ와 비슷한 역할을 하는 Microsoft Data Streamer가 있으나, 현재 아두이노만 지원하며 ESP32에서는 데이터를 전송받지 못하는 문제가 있음.

Author

chemidot

Posted on

2021-09-17

Updated on

2021-11-17

Licensed under

댓글