読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Groveの水分センサー+ArduinoUNO+microSDカードシールドでお手軽湿り気ロガーを作る

Groveの水分センサーを買いました。

GROVE - 水分センサ

GROVE - 水分センサ

こいつを使って、10秒ごとに湿度をSDカードの記録する奴を作りました。
毎度のことながら、精度はそれほど要求されないので厳密性はポイしてます。

外観

Arduino UNOとSparkFunのmicroSDカードシールド。

スクリプト

/*
 Groveの湿度センサとSparkFunのmicroSDカードシールドを使った簡易データロガー
 2016-06-11 @shuzo_kino
 参考もと
  - http://qiita.com/kinu/items/6cd5da0415e31834e7da
  - https://www.switch-science.com/catalog/814/
  - http://arms22.blog91.fc2.com/blog-entry-502.html
*/

#include <SD.h>

File fds;
const int chipSelect = 8; //SparkFun は8
unsigned long time;

void setup() {
  Serial.begin(9600);
    while (!Serial) { ; } //動作待機

  //SDライブラリはSPIライブラリに依存しています。
  // SPIライブラリで使用するSlave Select (SS) pinをアクティブ化しないと、動作しなくなります。
  // Ref: https://www.arduino.cc/en/Reference/SPI
  pinMode(SS, OUTPUT);
  lineWrite();

  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  //書込先ファイルの存在を確認
  if (SD.exists("data.txt")) {
    Serial.println("data.txt exists.");
  } else {
    Serial.println("data.txt doesn't exist.");
  }
  
  lineWrite();
}

void lineWrite() {
  Serial.println("***********************");
}

void dataWrite(int data) {
     // ファイルの書込みオープン
     // test.txtファイルが無い場合は作成、あればファイルの最後に追記。
     fds = SD.open("data.txt",FILE_WRITE) ;
       if (fds) {
          time = millis();
          //ファイルに書く。後々の使い回しを考慮しCSV風に
          fds.write(time);
          fds.write(",");
          fds.write(data);
          fds.write("\r\n");
          //シリアルに書く。ファイルと同様の書込
          Serial.print(time);
          Serial.print(",");
          Serial.println(data);
          // ファイルのクローズ
          fds.close() ;
     } else {
          // ファイルのオープンエラー
          Serial.println("error opening") ;
     }
}


void loop() {
  // 10秒毎に値を読みだして書込。
  char sensorValue = analogRead(A0);
  dataWrite(sensorValue);
  delay(10000);
}