工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

概要

このArduinoチュートリアルでは、SDカードモジュールの使い方を学びます。さらにDS3231リアルタイムクロック(RTC)モジュールと組み合わせて、温度センサのデータをSDカードに記録し、Excelに取り込んでグラフ化するデータロギングの例を作成します。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。

仕組み

SDカードモジュール

標準的なMicroSDカード(動作電圧3.3V)に対応。モジュールには電圧レギュレータとレベルシフタが搭載されており、Arduinoの5Vピンで直接使用できます。

ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

ピン構成:VCC, GND(電源)、およびSPI通信用の4ピン(MISO, MOSI, SCK, CS)。ArduinoボードごとにSPIピンが異なるため、適切に接続してください。

ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル
ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

必要なコンポーネント

  • Micro SDカードモジュール
  • Arduinoボード
  • ブレッドボードとジャンパワイヤ

Arduino SDカードモジュール コード

シンプルな読み書きテストコードです。

/*
 * Arduino SD Card Tutorial Example
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include <SD.h>
#include <SPI.h>

File myFile;
int pinCS = 53; // Arduino Unoの場合はPin 10

void setup() {
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT); // CSピンを出力に設定(SPI通信のためLowにする必要あり)

  // SDカード初期化
  if (SD.begin()) {
    Serial.println("SD card is ready to use.");
  } else {
    Serial.println("SD card initialization failed");
    return;
  }

  // ファイル作成/オープン(書き込みモード)
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
    Serial.println("Writing to file...");
    myFile.println("Testing text 1, 2 ,3...");
    myFile.close(); // データを物理的に保存するために必須
    Serial.println("Done.");
  } else {
    Serial.println("error opening test.txt");
  }

  // ファイル読み取り
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("Read:");
    while (myFile.available()) {
      Serial.write(myFile.read()); // 1文字ずつ読み取り
    }
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }
}

void loop() {
  // 空(setupで一度だけ実行)
}

コード説明

  • 標準のSD.hとSPI.hライブラリを使用
  • Fileオブジェクト作成、SPIのChipSelectピン定義(Arduino Megaの場合53、Unoは10)
  • SD.begin()で初期化。成功なら「SD card is ready to use.」
  • SD.open("test.txt", FILE_WRITE)でファイル作成/オープン。既存ファイルなら追記モードで開く
  • myFile.println()で書き込み、close()で確実に保存
  • 読み取りはSD.open("test.txt")でオープンし、myFile.read()で1文字ずつwhile(myFile.available())ループで全文取得

アップロード後、シリアルモニタに以下のように表示されれば成功です。

ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

PCでSDカードを開くとtest.txtファイルと内容が確認できます。

Arduino SDカード データロギング(温度記録)

より実用的な例として、DS3231 RTCモジュール(内蔵温度センサ付き)を使って温度データを定期記録します。DS3231の接続・使用法詳細は前回のチュートリアルを参照してください。

2つのモジュールをArduinoに接続したら、以下のコードを使用します。

/*
 * Arduino Temperature Data Logging
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>

File myFile;
DS3231 rtc(SDA, SCL);
int pinCS = 53; // Unoの場合は10

void setup() {
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);
  if (SD.begin()) {
    Serial.println("SD card is ready to use.");
  } else {
    Serial.println("SD card initialization failed");
    return;
  }
  rtc.begin();
}

void loop() {
  // シリアルモニタにも出力(カンマ区切りでExcel取り込み用)
  Serial.print(rtc.getTimeStr());
  Serial.print(",");
  Serial.println(int(rtc.getTemp()));

  // SDカードに書き込み
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
    myFile.print(rtc.getTimeStr());
    myFile.print(",");
    myFile.println(int(rtc.getTemp()));
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }
  delay(3000); // 3秒間隔で記録
}

コード説明

  • DS3231.hライブラリ追加、DS3231 rtc(SDA, SCL)でI2C接続オブジェクト作成
  • ループ内でrtc.getTimeStr()(時刻文字列)とrtc.getTemp()(温度)を取得
  • カンマ区切り(CSV形式)でシリアル出力およびファイル書き込み
  • 温度はint()で整数化
  • delay(3000)で3秒間隔記録

コードアップロード後、Arduinoは3秒ごとに温度を記録します。しばらくしてSDカードをPCで開くと、以下のようなデータが得られます。

ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

Excelでグラフ作成

  1. Excelの「データ」メニューから「テキストから」を選択し、test.txtを指定
  2. 「区切り文字」を選択し、次へ
  3. 区切り文字で「カンマ」をチェックし、完了
  4. 時刻と温度が別々の列に挿入される
  5. 両列を選択し、「挿入」メニューから「折れ線グラフ」を選択
ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル

以上でこのチュートリアルは終了です。ご質問はコメント欄でお気軽にどうぞ。

製造プロセス

  1. Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
  2. Arduinoで作る高精度エナジーモニター&データロガー – Dr. Wattsonボード活用
  3. Arduino UNOで作るLCDアニメーション&ゲーム入門
  4. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  5. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
  6. Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
  7. Arduino Nanoと指紋センサーで作るバイオメトリクス認証システム – 完全チュートリアル
  8. Arduino UNOで作るミニピアノ - ステップバイステップチュートリアル
  9. Raspberry Pi 3とArduinoで作る自作ノートPC:ステップバイステップガイド
  10. Arduino初心者チュートリアル01: 最初のプロジェクトを始めよう
  11. IXON Cloud:機械(PLC)データロギングとダッシュボードを数分でマスター