NS-SD04 온습도센서 데이터 로깅 (with 아두이노)
안녕하세요!
새로 리뉴얼된 NS-SD04 제품의 사용방법 중 데이터 로깅에 대한 사용 방법을 알아봅니다!
온습도 측정 위치는 사무실 입니다.
매일 출근할 때마다 사무실이 굉장히 더운데요!
온도의 변화가 궁금해서 측정해봤습니다.
목적
1. 온습도를 측정하여 microSD Card에 기록
2. 기록 주기는 1분마다 1회
3. 총 24시간 기록
준비물
1. 아두이노 (호환 제품도 가능)
2. 온습도센서 SHT31 (데이터 로깅용 센서 다른 것도 가능)
3. NS-SD04
4. microSD Card - 8GB
NS-SD04 와 온습도센서 연결
점퍼선을 통해 NS-SD04를 연결합니다. (SPI)
점퍼선을 통해 온습도센서를 연결합니다. (I2C)
NS-SD04
5V : 5V
GND : GND
MOSI : D11
MISO : D12
CLK : D13
CS : D4
SHT31
VCC : 5V (5V가 부족하여 ISP 쪽 5V에 연결)
GND : GND
SCL : SCL
SDA : SDA
아두이노 프로그램
소스는 사용하는 센서 모듈에 따라 달라집니다.
해당 소스는 아두이노에서 제공하는 기본 라이브러리를 사용했습니다.
NS-SD04의 통신을 위한 SD 라이브러리(SPI)와
온습도센서 통신을 위한 Wire 라이브러리(I2C)를 사용합니다.
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
const int chipSelect = 4;
void setup()
{
Wire.begin();
if (!SD.begin(chipSelect))
{
while (1);
}
}
unsigned char buffer[6];
unsigned int temp_buf;
unsigned int humi_buf;
float temperature;
float humidity;
unsigned long min;
void loop()
{
String dataString = "";
Wire.beginTransmission(0x45); // 온습도센서 Address
Wire.write(0x2C); // 온습도센서 온습도측정 요청 Reg1
Wire.write(0x06); // 온습도센서 온습도측정 요청 Reg2
Wire.endTransmission();
delay(15); // 측정대기
Wire.requestFrom(0x45, 6); // 측정된 데이터 요청 (6 Byte)
while (Wire.available())
{
for(int i = 0; i < 6; i++)
buffer[i] = Wire.read(); // 6 Byte 를 차례대로 저장
}
Wire.endTransmission();
temp_buf = ((uint16_t)buffer[0] << 8) | buffer[1];
temperature = 175.0f * (float)temp_buf / 65535.0f - 45.0f; // 온도 계산
humi_buf = ((uint16_t)buffer[3] << 8) | buffer[4];
humidity = 100.0f * (float)humi_buf / 65535.0f; // 습도 계산
dataString += min; // 파일에 기록할 데이터형식 생성
dataString += ",";
dataString += temperature;
dataString += ",";
dataString += humidity;
File dataFile = SD.open("temp.txt", FILE_WRITE); // 저장할 파일 Open
if (dataFile)
{
dataFile.println(dataString); // 데이터 기록
dataFile.close();
}
else { }
delay(60000); // 60초 대기
min++; // 1분 카운트
}
소스의 주요 흐름을 살펴보면 아래와 같습니다.
1. (아두이노 -> 온습도센서) 측정 요청
2. (온습도센서) 측정 대기
3. (아두이노 -> 온습도센서) 측정 데이터 요청
4. (온습도센서 -> 아두이노) 측정 데이터 수신
5. (아두이노) 측정된 온습도 데이터 변환
6. (아두이노) 기록할 데이터 생성
7. (아두이노 -> NS-SD04) temp.txt 파일 생성 또는 열기
8. (아두이노 -> NS-SD04) temp.txt 파일에 생성된 데이터 기록
9. 60초간 대기
설치
창문가에 위치한 곳으로 설치(?)를 했습니다.
해당 위치는 아침마다 따사로운 햇살이 반기는(?) 곳인데요!
이 근처의 온도 변화를 측정해보려 합니다~
(A few hours later)
약 24시간이 지난 후 많이 힘들어하는 모습입니다.
데이터 확인
설렘이 가득한 마음으로 전원을 Off 하고 microSD Card를 회수했습니다.
PC와 연결하여 데이터를 확인해봅니다.
데이터는 약 25KB가 기록되었네요!
파일을 열어보니
시간(분) , 온도 , 습도
원하는 대로 기록이 잘 되었습니다!
이제 데이터를 가지고 차트를 그려봅니다.
위의 빨간 선은 습도에 대한 데이터이고, 아래의 파란선은 온도에 대한 데이터입니다.
온도 데이터만 따로 차트를 그려서 확대해보니
더 확실한 온도 변화가 보이네요!
측정을 시작한 (D-1) 18:30에서 약 22도의 온도가 측정되었고
(D) 7:30까지 온도가 19도 근처까지 떨어집니다.
(오... 생각보다 온도가 많이 떨어지지 않네요! 사무실에서 자도 될 듯..)
그러다가 (D) 7:30부터 온도가 급격하게 올라갑니다.
아마 이때부터 사무실에 햇빛이 들어오기 시작하는 시점 같습니다.
그럼 결과적으로 (D-1)18:30 부터 (D)7:30 까지 자다가 도망치면 꿀잠 잘 것 같네요!!!ㅎ
다만 습도가 건조한 편이라 자기 전에 마스크를 착용하든지 수건을 널어놓던지 해야겠습니다! 읭?
결론
NS-SD04를 사용하여 온습도 데이터를 기록하는 것을 알아봤습니다.
이런 식으로 마이크로프로세서에 저장이 힘든 데이터들을 기록하는 용도로 사용이 가능한 모듈입니다.
또한 파일 기록 방식이어서 전원이 차단돼도 기존에 저장된 데이터들은 소실 없이 획득이 가능한 것이 장점입니다.
(마이크로프로세서에 직접 데이터를 저장하는 방법을 사용하면 전원 OFF 시 데이터가 소실됩니다..ㅠㅠ)
이번 포스팅에는 온습도센서를 사용해서 기록을 해봤지만
다른 센서를 사용하여 의미 있는 데이터를 기록할 수 있는 용도로도 사용이 가능합니다!
"18:30 부터 다음날 7:30 까지 자면 꿀잠 잔다!"
라는 결과를 도출해내어 기쁘네요!!ㅎ
궁금하신 점은 댓글로 남겨주시면 답변드리도록 하겠습니다!
읽어주셔서 감사합니다 ^-^/
행복하세요~!