Arduinoでデータロガーを作る【温度センサ+SDカード】 [Arduino]
前回までで、
・SDカードにファイルを読み書きする #ArduinoでSDカードにファイルを読み書きする
・温度を測定する #Arduinoで温度を測る【温度センサ】
ことができましたので、これを組み合わせて温度データをSDカードに書き込むデータロガーを作りたいと思います。
【配線図】
【スケッチ】
ネットも参考にすると、もう少しスマートな記述もありますが、今の自分の理解レベルと少々乖離している感もあったので、まずはベタな書き方ですが載せてみます。
今後スキルが上がれば、改版したいと思っています。
①float(浮動小数点)形式、②String(文字列)形式の両方を記述していますが、下記では①をコメントアウトして、②を有効にしています。
上記でもデータは保存できたのですが、少々残念なことに、データを取得したタイムスタンプが無いんですねー。。。
なので、次はRTCを使ってタイムスタンプとセットでデータを保存できるようにしたいと思います。
・SDカードにファイルを読み書きする #ArduinoでSDカードにファイルを読み書きする
・温度を測定する #Arduinoで温度を測る【温度センサ】
ことができましたので、これを組み合わせて温度データをSDカードに書き込むデータロガーを作りたいと思います。
【配線図】
【スケッチ】
ネットも参考にすると、もう少しスマートな記述もありますが、今の自分の理解レベルと少々乖離している感もあったので、まずはベタな書き方ですが載せてみます。
今後スキルが上がれば、改版したいと思っています。
①float(浮動小数点)形式、②String(文字列)形式の両方を記述していますが、下記では①をコメントアウトして、②を有効にしています。
/******************************************************************************* SDカードデータロガー ++++++ note ++++++ ・測定した温度をコンソール画面に表示およびSDカードにデータ保存するプログラム ・Arduino Pro Mini(3.3V, 8MHz) ・温度センサ LM61BIZ(測定範囲:-25℃~+85℃) ・①float(浮動小数点)形式でも②String(文字列)形式でも出力結果は同じ *******************************************************************************/ #include#include File myFile; const float Vcc = 3.3; //電源電圧(定数) float temp_volt; //出力電圧 float temp_data; //温度 // the setup routine runs once when you press reset:初期化(電源投入/リセット時1回のみ実行) void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); //9600bpsでシリアルポートを開く while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } //SDカードの初期設定 Serial.print("Initializing SD card..."); if (!SD.begin(10)) { //4→10に変更 Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); } // the loop routine runs over and over again forever: main loop void loop() { int sensorValue = analogRead(A0); //read the input on analog pin 0: temp_volt = Vcc * sensorValue / 1023; //アナログピンから読み取った値を元の出力電圧値に戻す // 出力電圧から温度データを作成 temp_data = (temp_volt - 0.6) / 0.01; //【データシート】T[℃] = (Vo - 0.6) / 0.01 // 温度データをコンソール画面に表示 ※2種類記載 /* ①float(浮動小数点)形式で表示 Serial.print(temp_data); //温度を表示 Serial.println("[℃]"); //単位は℃ */ // ②String(文字列)形式で表示 String dataString = ""; dataString += String(temp_data); dataString += "[℃]"; Serial.println(dataString); //温度を表示、単位は℃ // SDカードに書き込む // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. myFile = SD.open("tempdata.txt", FILE_WRITE); //"tempdata.txt"ファイルを書き込み用に開く //戻り値がファイル情報になり、myFile に受け渡す // ファイルに温度データを書き込み ※2種類記載 // if the file opened okay, write to it: if (myFile) { /* ①float(浮動小数点)形式で書き込み myFile.print(temp_data); myFile.println("[℃]"); */ // ②文字列(String)で書き込み myFile.println(dataString); // close the file: myFile.close(); //ファイルを閉じる } else { // if the file didn't open, print an error: Serial.println("error opening tempdata.txt"); } delay(1000); //1秒単位 ※delay():単位ms }
上記でもデータは保存できたのですが、少々残念なことに、データを取得したタイムスタンプが無いんですねー。。。
なので、次はRTCを使ってタイムスタンプとセットでデータを保存できるようにしたいと思います。