엔지니어 / 개발자로서 우리는 항상 시스템을 설계하거나 개선하기 위해 수집 된 데이터에 의존합니다. 데이터를 기록하고 분석하는 것은 대부분의 산업에서 일반적인 관행입니다. 여기서는 특정 시간 간격으로 데이터를 기록하는 방법을 배울 수있는 Arduino Data Logger Project를 구축하고 있습니다. Arduino 보드를 사용하여 일부 데이터 (여기서는 온도, 습도, 날짜 및 시간)를 읽고 SD 카드와 컴퓨터에 동시에 저장합니다.
저장된 데이터는 추가 분석을 위해 Excel 시트에서 쉽게 열 수 있습니다. 날짜와 시간을 유지하기 위해 유명한 RTC 모듈 DS3231 을 사용하고 온도와 습도를 얻기 위해 DHT11 센서를 사용할 것 입니다. 프로젝트가 끝나면
- 날짜, 시간 및 센서 값을 사용하여 데이터를 SD 카드에 기록하는 방법.
- 시리얼 통신을 통해 PC의 Excel Sheet에 직접 데이터를 쓰는 방법.
필요한 재료:
- 브레드 보드
- Arduino UNO (모든 Arduino 보드)
- DHT11 온도 센서
- DS3231 RTC 모듈
- SD 카드 모듈
- SD 카드
- 전선 연결
- 컴퓨터 / 노트북
회로도:
이 Arduino 온도 로거 프로젝트 의 회로도 는 아래와 같습니다.
회로도에서 볼 수 있듯이 연결은 우리가 브레드 보드에 직접 구축 할 수있는 모듈로 사용했기 때문에 매우 간단합니다. 연결은 아래 표에서 추가로 분류됩니다.
Arduino 핀 |
모듈 핀 |
온도 센서 – DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
체크 안함 |
체크 안함 |
밖 |
핀 7 |
RTC 모듈 DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
핀 A5 |
SDA |
핀 A4 |
SD 카드 모듈 |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
핀 12 |
MOSI |
핀 11 |
SCK |
핀 13 |
CS |
핀 4 |
DHT11 온도 센서를 값을 기록해야하는 센서로 교체 할 수 있습니다. Arduino로 LM35를 확인하여 온도를 읽을 수 있습니다.
RTC 모듈 DS3231은 I2C 통신 (SCL, SDA)을 사용하여 Arduino와 인터페이스되고 SD 카드 모듈은 SPI 통신 (MISO, MOSI, SCK, CS)을 사용하여 인터페이스됩니다. 핀 4와 7은 Arduino 프로그램에 의해 CS 핀과 출력 핀으로 정의되며 필요한 경우 다른 핀으로 변경할 수 있습니다. 이전에 음악 플레이어 프로젝트에서 Arduino와 SD 카드를 인터페이스했습니다.
Arduino 프로그램 설명:
다음을 수행 할 수있는 Arduino 프로그램을 작성해야합니다.
- DTH11 센서에서 데이터 (또는 기록하려는 다른 데이터)를 읽습니다.
- I2C 버스를 초기화하여 RTC 모듈에서 데이터를 읽습니다.
- Arduino와 SD 카드 모듈을 인터페이스하도록 SPI 버스를 초기화합니다.
- 날짜, 시간, 온도 및 습도를 SD 카드에 저장합니다.
- 컴퓨터 / 노트북에서 실행되는 Excel 시트에 날짜, 시간, 온도 및 습도를 저장합니다.
위의 단계는 복잡하게 들릴 수 있지만 어려운 작업을 수행 할 라이브러리가 있으므로 매우 쉽습니다. 다음 두 라이브러리를 다운로드해야합니다.
- GitHub의 DHT11 센서 라이브러리
- Rinky-Dink Electronics의 DS3231 RTC 모듈 라이브러리
라이브러리를 다운로드했으면 다음을 수행하여 Arduino IDE에 추가하십시오.
Sketch-> Include Library->.ZIP 라이브러리 추가
Arduino의 데이터를 컴퓨터의 Excel 시트에 생생하게 공급하려면 Parallax Inc.에서 제공하는 PLX-DAQ라는 소프트웨어도 설치해야합니다. 링크를 따라 파일을 다운로드하고 운영 체제에 따라 설치합니다. 바탕 화면에 PLS-DAQ라는 폴더가 생성되었을 것입니다. 나중에 작업 섹션에서 처리하겠습니다.
이제 두 라이브러리를 모두 추가하고 소프트웨어를 설치 한 후 전체 코드 (튜토리얼 하단에 제공됨)를 사용하여 Arduino에 업로드 할 수 있습니다. 코드를 가능한 한 간단하게 유지하기 위해 최선을 다했으며 설명은 주석 섹션을 통해 제공됩니다. 또한 아래에서 중요한 부분에 대해 설명하겠습니다.
1. DS3231에서 데이터 읽기:
DS3231은 RTC (Real Time Clock) 모듈입니다. 대부분의 전자 프로젝트의 날짜와 시간을 유지하는 데 사용됩니다. 이 모듈은 자체 코인 셀 전원 공급 장치를 사용하여 주 전원이 제거되거나 MCU가 하드 리셋을 수행 한 경우에도 날짜와 시간을 유지합니다. 따라서이 모듈에서 날짜와 시간을 설정하면 항상이를 추적합니다.
이 모듈은 아두 이노에서 제공하는 라이브러리로 인해 사용이 매우 쉽습니다.
// 하드웨어 인터페이스를 사용하여 DS3231 초기화 DS3231 rtc (SDA, SCL); void Initialize_RTC () {// rtc 객체 초기화 rtc.begin (); // #### 처음으로 날짜와 시간을 설정하기 위해 다음 줄의 주석을 제거 할 수 있습니다. ### / * rtc.setDOW (FRIDAY); // 요일을 SUNDAY로 설정 rtc.setTime (18, 46, 45); // 시간을 12:00:00 (24 시간 형식)으로 설정 rtc.setDate (6, 30, 2017); // 날짜를 2014 년 1 월 1 일로 설정 * /}
참고:이 모듈을 처음 사용하는 경우 날짜와 시간을 설정해야합니다. 위에서 언급 한대로 주석을 제거하고 날짜와 시간을 작성하면됩니다. 댓글을 달고 업로드하세요. 그렇지 않으면 보드를 실행할 때마다 날짜와 시간이 다시 설정됩니다. Arduino로 시간을 읽는 데 RTC IC DS1307을 사용할 수도 있습니다.
2. DHT11에서 데이터 읽기:
DHT11은 온도 온 습도 센서입니다. 모듈의 출력 핀을 통해 온도 및 습도 값을 8 비트 데이터로 직렬로 전송합니다. 라이브러리는 Arduino의 소프트웨어 직렬 기능을 사용하여이 데이터를 읽습니다.
#define DHT11_PIN 7 // 센서 출력 핀이 핀 7에 연결됨 dht DHT; // DHT로 명명 된 센서 객체 void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
여기에서는 출력 핀을 핀 7에 연결했습니다. 예를 들어 소프트웨어 직렬을 지원하는 핀을 선택할 수 있습니다. 호출 DHT.read (핀 번호); 온도 및 습도 값을 읽고 DHT . 온도 및 DHT.Humidity 매개 변수에 각각 저장합니다. 이 DHT11 기반 Arduino 온도 측정도 확인하십시오.
3. SC 카드 모듈 초기화:
void Initialize_SDcard () {// 카드가 있고 초기화 할 수 있는지 확인합니다. if (! SD.begin (chipSelect)) {Serial.println ("Card failed, or not present"); // 더 이상 수행하지 마십시오. return; } // 파일을 엽니 다. 한 번에 하나의 파일 만 열 수 있으므로 // 다른 파일을 열기 전에이 파일을 닫아야합니다. 파일 dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // 파일을 사용할 수 있으면 여기에 씁니다. if (dataFile) {dataFile.println ("Date, Time, Temperature, Humidity"); // 엑셀 파일의 첫 번째 행 쓰기 dataFile.close (); }}
기본적으로 Arduino IDE에 추가되는 SD 카드 라이브러리로 인해 Arduino와 함께 SD 카드를 사용하는 것은 쉽습니다. SD 카드 초기화 기능에서 "LoggerCD.txt"라는 텍스트 파일을 만들고 콘텐츠의 첫 번째 행을 작성합니다. 여기서는 ","를 구분 기호로 사용하여 값을 구분합니다. 쉼표가 있으면 Excel 시트의 다음 셀로 이동해야 함을 의미합니다.
4. SD 카드에 데이터 쓰기
void Write_SDcard () {// 파일을 엽니 다. 한 번에 하나의 파일 만 열 수 있으므로 // 다른 파일을 열기 전에이 파일을 닫아야합니다. 파일 dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // 파일을 사용할 수 있으면 여기에 씁니다. if (dataFile) {dataFile.print (rtc.getDateStr ()); // SD 카드에 날짜 저장 dataFile.print (","); // ","를 사용하여 다음 열로 이동 dataFile.print (rtc.getTimeStr ()); // SD 카드에 날짜 저장 dataFile.print (","); // ","를 사용하여 다음 열로 이동 dataFile.print (DHT. temperature); // SD 카드에 날짜 저장 dataFile.print (","); // ","를 사용하여 다음 열로 이동 dataFile.print (DHT.humidity); // SD 카드에 날짜 저장 dataFile.print (","); // ","를 사용하여 다음 열로 이동 dataFile.println (); // End of Row 다음 행으로 이동 dataFile.close ();// 파일 닫기} else Serial.println ("OOPS !! SD 카드 쓰기 실패"); }
앞서 말했듯이 우리의 의도는 날짜, 시간, 온도 및 습도를 SD 카드에 저장하는 것 입니다. DS3231 라이브러리 및 DHT11 라이브러리의 도움으로 Arduino는이 네 가지 매개 변수를 모두 읽고 아래 표에 표시된대로 다음 매개 변수에 저장할 수 있습니다.
데이트 |
rtc.getDateStr ()); |
시각 |
rtc.getTimeStr ()); |
온도 |
DHT. 온도 |
습기 |
DHT. 습도 |
이제이 매개 변수를 직접 사용하여 인쇄 라인을 사용하여 SD 카드에 저장할 수 있습니다.
dataFile.print (매개 변수);
각 매개 변수는 가독성을 높이기 위해 쉼표로 구분되어 있고 dataFile.println (); 줄의 끝을 나타내는 데 사용됩니다.
5. PLX-DAQ에 데이터 쓰기
PLX-DAQ는 Arduino의 값을 노트북 또는 PC의 Excel 파일에 직접 쓸 수 있도록 도와주는 Microsoft Excel 플러그인 소프트웨어입니다. 이것은 두 가지 이유 때문에 개인적으로 가장 좋아하는 것입니다.
1. 데이터를 동시에 작성하고 모니터링 할 수 있으며 그래프로 플로팅하는 방법을 제공합니다.
2. 날짜와 시간을 추적하기 위해 DS3231과 같은 RTC 모듈이 필요하지 않습니다. 노트북 / 컴퓨터에서 실행되는 날짜와 시간을 사용하여 Excel에 직접 저장할 수 있습니다.
이 소프트웨어를 Arduino와 함께 사용하려면 직렬 모니터에 값을 표시하는 것과 같이 특정 패턴으로 데이터를 직렬로 보내야합니다. 주요 라인은 아래에 설명되어 있습니다.
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // 이전 프로젝트에서 남은 데이터를 지 웁니다. Serial.println ("LABEL, Date, Time, Temperature, Humidity"); // 항상 LABEL을 작성하여 첫 번째 줄로 표시} void Write_PlxDaq () {Serial.print ("DATA"); // 항상 "DATA"를 작성하여 다음을 Data Serial.print (","); // ","를 사용하여 다음 열로 이동 Serial.print ("DATE"); // Excel에 날짜 저장 Serial.print (","); // ","를 사용하여 다음 열로 이동 Serial.print ("TIME"); // Excel에 날짜 저장 Serial.print (","); // ","를 사용하여 다음 열로 이동 Serial.print (DHT. temperature); // Excel에 날짜 저장 Serial.print (","); // ","를 사용하여 다음 열로 이동 Serial.print (DHT.humidity);// Excel에 날짜 저장 Serial.print (","); // ","를 사용하여 다음 열로 이동 Serial.println (); // 행 끝을 다음 행으로 이동}
소프트웨어는 LABEL, DATA, TIME, DATE 등과 같은 키워드를 인식 할 수 있습니다. Initialize 기능에 표시된 것처럼 키워드 "LABEL"은 Excel 시트의 첫 번째 행을 쓰는 데 사용됩니다. 나중에 Write 함수에서 "DATA"키워드를 사용하여 다음 정보가 DATA로 간주되어야 함을 나타냅니다. 다음 행으로 이동해야 함을 나타내려면 쉼표 (“,”)를 사용해야합니다. 행의 끝을 나타내려면 Serial.println (); 을 보내야합니다 .
앞서 언급했듯이 위와 같이 키워드 "DATE"및 "TIME"을 각각 전송하여 시스템 날짜와 시간을 쓸 수 있습니다.
참고: 이 PLX_DAQ 소프트웨어를 사용할 때 직렬 모니터를 사용하지 마십시오.
작동 설명:
의 근무 아두 이노 데이터 로거하는 것은 간단합니다. 하드웨어와 소프트웨어가 준비되면 프로그램을 Arduino 보드에 구울 시간입니다. 프로그램이 업로드되는 즉시 온도 및 습도 값이 SD 카드에 저장되기 시작합니다. PLX-DAQ를 활성화하여 컴퓨터의 Excel 시트에 로그인하려면 아래 단계를 따라야합니다.
1 단계: 설치하는 동안 바탕 화면에 생성 된 "Plx-Daq 스프레드 시트"파일을 엽니 다.
2 단계: 보안 블록이있는 경우 옵션-> 콘텐츠 활성화-> 마침-> 확인 을 클릭하여 다음 화면을 표시합니다.
3 단계: 이제 전송 속도를 "9600"으로 선택하고 Arduino가 연결된 포트를 선택하고 연결을 클릭합니다. 아래 그림과 같이 값이 기록되기 시작해야합니다.
이 엑셀 시트를 열어두고 기록되는 값을 모니터링 할 수 있습니다. 이런 일이 발생하면 SD 카드도 동일한 값을 저장했을 것입니다. 확인하려면 SD 카드를 제거하고 컴퓨터에서 열기 만하면됩니다. 그 안에 “LoggerCD.txt” 라는 텍스트 파일이 있어야 합니다. 열면 다음과 같이 보일 것입니다.
이 파일에는 데이터가 있지만 메모장에서 분석하기가 어렵습니다. 따라서 Excel에서 CSV (쉼표로 구분 된 값) 파일로 열 수 있으므로 더 효과적입니다. Excel에서 열려면
1. Excel을 엽니 다. 파일-> 열기를 클릭하고 오른쪽 하단에있는 "모든 파일"을 선택하고 SD 카드에서 "LoggerCD"파일을 선택합니다. 텍스트 가져 오기 마법사가 열립니다.
2. "다음"을 클릭하고 구분 기호로 쉼표를 선택합니다. 다시 "다음"을 클릭합니다. 그런 다음 마칩니다.
3. 이제 값은 아래와 같이 Excel 파일로 열립니다.
5 초마다 값을 기록했습니다. 프로그램에서 지연 기능을 변경하여 원하는 시간 동안 기록 할 수 있습니다. 작업에 대한 자세한 이해는 아래 비디오 를 시청하십시오.
프로젝트가 마음에 드셨기를 바랍니다. 의심스러운 점이 있으면 아래 댓글 섹션에 작성해 주시면 도와 드리겠습니다.
보너스 개선-Arduino를 사용한 무선 데이터 로깅:
이 시점까지 성공하면 몇 가지 발전과 코드 몇 줄만 추가하면 무선으로 데이터를 기록 할 수 있습니다.
HC-05와 같은 블루투스 디바이스를 연결하고 시리얼 대신 블루투스를 통해 PLX-DAQ에 데이터를 쓰기 만하면됩니다. 즉, Serial.print (parameter); 함께 BluetoothName.print (파라미터); 랩탑을 Bluetooth 모듈에 연결하고 랩탑 Bluetooth가 연결된 COM 포트를 선택하고 Taadaaa…… 무선 데이터 로깅 시스템을 즉시 작동 할 수 있습니다.