Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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);
}