ArduinoでSDカードとDS3231 RTCを使ったデータロギング - ステップバイステップチュートリアル
このArduinoチュートリアルでは、SDカードモジュールの使い方を学びます。さらにDS3231リアルタイムクロック(RTC)モジュールと組み合わせて、温度センサのデータをSDカードに記録し、Excelに取り込んでグラフ化するデータロギングの例を作成します。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。 標準的なMicroSDカード(動作電圧3.3V)に対応。モジュールには電圧レギュレータとレベルシフタが搭載されており、Arduinoの5Vピンで直接使用できます。 ピン構成:VCC, GND(電源)、およびSPI通信用の4ピン(MISO, MOSI, SCK, CS)。ArduinoボードごとにSPIピンが異なるため、適切に接続してください。 シンプルな読み書きテストコードです。 アップロード後、シリアルモニタに以下のように表示されれば成功です。 PCでSDカードを開くと より実用的な例として、DS3231 RTCモジュール(内蔵温度センサ付き)を使って温度データを定期記録します。DS3231の接続・使用法詳細は前回のチュートリアルを参照してください。 2つのモジュールをArduinoに接続したら、以下のコードを使用します。 コードアップロード後、Arduinoは3秒ごとに温度を記録します。しばらくしてSDカードをPCで開くと、以下のようなデータが得られます。 以上でこのチュートリアルは終了です。ご質問はコメント欄でお気軽にどうぞ。概要
仕組み
SDカードモジュール



必要なコンポーネント
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())ループで全文取得
test.txtファイルと内容が確認できます。Arduino SDカード データロギング(温度記録)
/*
* 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()(温度)を取得int()で整数化delay(3000)で3秒間隔記録
Excelでグラフ作成
test.txtを指定
製造プロセス
- Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
- Arduinoで作る高精度エナジーモニター&データロガー – Dr. Wattsonボード活用
- Arduino UNOで作るLCDアニメーション&ゲーム入門
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
- Arduino Nanoと指紋センサーで作るバイオメトリクス認証システム – 完全チュートリアル
- Arduino UNOで作るミニピアノ - ステップバイステップチュートリアル
- Raspberry Pi 3とArduinoで作る自作ノートPC:ステップバイステップガイド
- Arduino初心者チュートリアル01: 最初のプロジェクトを始めよう
- IXON Cloud:機械(PLC)データロギングとダッシュボードを数分でマスター