1.本体のLED
2.Bluetoothで測定温度と10秒間平均値をモニター
リアルタイムでの確認の他にはBluetooth経由でタブレットに記録を残すことはできます。
一日の動作状況を確認したいのでSDメモリーにログが残るようにしたいと思います。
今使用しているArduino_pro_minのプログラムメモリーは十分な記憶容量が残っているので、機能を追加する事にします。
Arduinoにはタイマー機能がないので外部RTCと記録用のSDアダプタをamazonで手に入れました。
(ブレッドボードで試作し動作確認を行っています)
右から、Arduino_Nano、RTC(DS3231)、SD、真ん中手前がレベル変換器
電源はPCのUSBから供給しています。
後はArduino_IDEのライブラリーからRTCとSDのスケッチを参考にして作成するだけ。
(合体するだけです。ははは・・)
RTC用スケッチの改造点はRTCの年~秒のデータをシリアルポートに垂れ流しているのを一つの文字列に合体してからシリアルポートに出力することです。
SD用のスケッチからライブラリーとファイルオープン・クローズ関係の記述をRTC用スケッチに移植します。SDへの記録データは先に作った文字列をそのまま使用しました。
実験なので途中で電源を切ってもデータが確実に残るよう、データ1個毎にファイルのオープン・クローズを行っています。
delayを1000mSとしているのでファイル処理の時間分の遅れが蓄積し7~8秒に1回取りこぼしが発生しています。
参考にさせていただいたのは↓です。ありがとうございました。
https://ht-deko.com/arduino/rtc_ds3231.html
https://qiita.com/hikoalpha/items/c7812a34182db07036ef
メモ
#include <DS3231.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
File myFile;
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
int temperature;
int das[10];
char* dat[]={"-","-"," ",":",":"," "," "};
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial) {
;
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
void ReadDS3231()
{
das[5]=Clock.getSecond();
das[4]=Clock.getMinute();
das[3]=Clock.getHour(h12, PM);
das[2]=Clock.getDate();
das[1]=Clock.getMonth(Century);
das[0]=Clock.getYear();
das[6]=Clock.getTemperature();
}
void loop() {
myFile = SD.open("test.txt", FILE_WRITE);
ReadDS3231();
String tes="20";
for (int i=0;i<=6;i++){
if (das[i]<10){tes.concat("0");}
tes.concat(das[i]); tes.concat(dat[i]);
}
Serial.println(tes);
myFile.println(tes);
delay(1000);
myFile.close();
}
0 件のコメント:
コメントを投稿