Ethernetシールドには、マイクロSDカードが実装できるようになっておりますので、今回はそれ利用してデータを保存してみます。
前回使った装置にLCDディスプレイを追加して、データを見えるようにします。さらにSerial Monitor で各データの確認ができるスケッチにしました。
センサー部分は前回のままですが、Arduino、Ethernetシールド、LCDシールドの3階建てになります。
LCDディスプレイはEthernetのピンと重ならないように配線を変更しました。
全体の配線
スケッチ
#include <LiquidCrystal.h>
#include <SD.h>
const int chipSelect = 4;
float v = 5;
float vt = 0;
float vh = 0;
int Temp = 0;
int Hum = 0;
LiquidCrystal lcd(2,3,8,5,6,7);
float sen0 = 0;
float sen1 = 0;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear();
if (!SD.begin(chipSelect)) {
lcd.print("card failed, or not present");
return;
}
else {
lcd.print("card ON ");
}
}
void loop ()
{
sen0 = analogRead(0);
vt = sen0;
sen1 = analogRead(1);
vh = sen1;
Temp = (( vt * 0.00489 )- 0.6) * 100;
Hum = ( vh * 0.00489 * 30.855 ) -11.504;
Serial.print("Temp=");
Serial.print(Temp);
Serial.print(" , Hum=");
Serial.print(Hum);
Serial.print(" , vt=");
Serial.print(vt);
Serial.print(" , vh=");
Serial.println(vh);
lcd.clear();
lcd.print("T=");
lcd.print(Temp);
lcd.write(0xDF);
lcd.print("C");
lcd.setCursor(7,0);
lcd.print("H=");
lcd.print(Hum);
lcd.print("%");
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Temp,");
dataFile.print(Temp);
dataFile.print(",Hum=,");
dataFile.println(Hum);
dataFile.close();
lcd.setCursor(0,1);
lcd.print("SD write=");
lcd.setCursor(10,1);
lcd.print("R");
}
else {
lcd.print("error opening datalog.txt");
}
delay(60000);
}
Serial Monitor確認画面
SDカードに保存されたデータ
データをエクセルに取り込みグラフ作成