ArduinoSDカードとデータロギングのチュートリアル
このArduinoチュートリアルでは、ArduinoボードでSDカードモジュールを使用する方法を学習します。また、DS3231リアルタイムクロックモジュールと組み合わせて、温度センサーのデータをSDカードに保存し、Excelにインポートしてグラフを作成するデータロギングの例を作成します。次のビデオを見るか、以下のチュートリアルを読むことができます。
まず、SDカードモジュールを見てみましょう。動作電圧が3.3Vの標準のMicroSDカードで動作します。したがって、モジュールには電圧レギュレータとレベルシフターがあり、Arduinoボードの5Vピンで使用できます。
SDカードモジュールには6つのピンがあり、モジュールに電力を供給するための2つ、VCCピンとGNDピン、さらにSPI通信用の4つのピンがあります。 Arduinoボードに接続する方法は次のとおりです。
各Arduinoボードには異なるSPIピンがあり、それに応じて接続する必要があることに注意してください。
このArduinoチュートリアルに必要なコンポーネントは、以下のリンクから入手できます。
次に、Arduinoをプログラムする必要があります。簡単なコードは次のとおりです:
コードの説明: したがって、最初に標準のSDおよびSPIライブラリを含め、「ファイル」オブジェクトを作成し、SPIバスのChipSelectピン(私の場合はArduinoメガボードのピン53)を定義する必要があります。この例では、コードを1回だけ実行するため、すべてのコードは「セットアップ」セクションに配置され、「ループ」セクションは空のままになります。
したがって、最初にシリアル通信を開始し、ChipSelectピンを出力として定義する必要があります。モジュールとArduino間のSPI通信が機能するようにChipSelectピンを「ロー」にする必要があるため、これを行う必要があります。
次に、SD.begin()関数を使用して、SDカードを初期化します。初期化が成功すると、「if」ステートメントがtrueになり、「SDカードを使用する準備ができました」という文字列が表示されます。シリアルモニターに印刷されます。そうでない場合は、「SDカードの初期化に失敗しました」という文字列が印刷され、プログラムも終了します。
次に、SD.open()関数を使用して、「test.txt」という名前の新しいファイルを作成します。このファイルには、ファイルの読み取りと書き込みの両方ができることを意味するFILE_WRITE引数が含まれています。ファイルがすでに存在する場合、SD.open()関数はファイルを開くだけです。
したがって、ファイルが最初に正常に作成された場合は、シリアルモニターに「Writingto file」という文字列を出力し、次にmyFile.println()関数を使用して、「Testing text 1、2,3…」というテキストを出力します。ファイル。その後、close()関数を使用して、ファイルに書き込まれた以前のデータがSDカードに物理的に保存されていることを確認する必要があります。
次に、ファイルからどのように読み取ることができるかを確認します。ここでも同じ関数SD.open()を使用しますが、今回はファイル「test.txt」がすでに作成されているため、この関数はファイルを開くだけです。次に、myFile.read()関数を使用して、ファイルから読み取り、シリアルモニターに出力します。 read()関数は、実際には一度に1文字だけを読み取るため、「while」ループと関数myFile.available()を使用して、すべての文字または以前に書き込まれたデータ全体を読み取る必要があります。最後に、ファイルを閉じる必要があります。
コードをArduinoにアップロードした後、すべて問題がなければ、シリアルモニターに次のように表示されます。
ご覧のとおり、SDカードは正常に初期化されており、書き込みも成功しています。また、書き込まれたデータまたは文字列「テキスト1、2、3…のテスト」の読み取りも正常に読み取られています。コンピューターでSDカードを開くと、作成された「test.txt」ファイルとその中に書き込まれたテキストが表示されます。
次に、温度センサーを記録するデータのもう1つの興味深い例を作成しましょう。そのために、温度センサーも内蔵されたDS3231リアルタイムクロックモジュールを使用します。このモジュールを接続して使用する方法の詳細については、前のチュートリアルをご覧ください。
したがって、2つのモジュールをArduinoに接続した後、この例のコードを見てみましょう。
コードの説明: まず、両方のモジュールに必要なライブラリを含める必要があります。次に、2つのオブジェクトを作成し、セットアップセクションでそれらを初期化します。
Serial.print()関数を使用するループセクションでは、時間と温度の値をシリアルモニターに出力し、それらの間に「コンマ」文字を入れ、温度値の後に改行を入れます。簡単にインポートしてExcelでグラフを作成できるように、この形式の線が必要です。また、温度値は整数に変換されることに注意してください。
したがって、これらの同じ値は、新しく作成された「test.txt」ファイルにも書き込まれ、最後に、温度データを記録する間隔を表す遅延を追加する必要があります。
コードをアップロードした後、Arduinoは3秒ごとに温度値の保存を開始します。しばらくすると、コンピューターでSDカードを開いて結果を確認できます。
Excelでグラフを作成するには、このファイルをインポートする必要があります。その方法は次のとおりです。
データメニューから、「テキストからデータを取得」ボタンをクリックして、テキストファイルを選択する必要があります。ここで「区切り」を選択して「次へ」をクリックし、2番目のステップで区切り文字としてカンマを選択して、ウィザードを終了します。
したがって、このプロセスでは、時間と温度の値が別々の列に挿入されます。次に、両方の列を選択し、挿入メニューから「折れ線グラフの挿入」を選択する必要があります。これにより、3秒ごとの温度値を確認できるグラフが作成されます。
このチュートリアルは以上です。下のコメントセクションで質問してください。
ArduinoSDカードモジュールコード
/*
* Arduino SD Card Tutorial Example
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// SD Card Initialization
if (SD.begin())
{
Serial.println("SD card is ready to use.");
} else
{
Serial.println("SD card initialization failed");
return;
}
// Create/Open file
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.println("Writing to file...");
// Write to file
myFile.println("Testing text 1, 2 ,3...");
myFile.close(); // close the file
Serial.println("Done.");
}
// if the file didn't open, print an error:
else {
Serial.println("error opening test.txt");
}
// Reading the file
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Read:");
// Reading the whole file
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("error opening test.txt");
}
}
void loop() {
// empty
}
Code language: Arduino (arduino)
ArduinoSDカードデータロギング
/*
* 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; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// SD Card Initialization
if (SD.begin())
{
Serial.println("SD card is ready to use.");
} else
{
Serial.println("SD card initialization failed");
return;
}
rtc.begin();
}
void loop() {
Serial.print(rtc.getTimeStr());
Serial.print(",");
Serial.println(int(rtc.getTemp()));
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile.print(rtc.getTimeStr());
myFile.print(",");
myFile.println(int(rtc.getTemp()));
myFile.close(); // close the file
}
// if the file didn't open, print an error:
else {
Serial.println("error opening test.txt");
}
delay(3000);
}
Code language: Arduino (arduino)
製造プロセス