エンジニア/開発者として、私たちは常にシステムを設計または改善するために収集されたデータに依存しています。データの記録と分析はほとんどの業界で一般的な方法です。ここでは、特定の時間間隔でデータをログに記録する方法を学習するArduinoデータロガープロジェクトを構築しています。Arduinoボードを使用して、いくつかのデータ(ここでは温度、湿度、日付と時刻)を読み取り、SDカードとコンピューターに同時に保存します。
保存されたデータは、Excelシートで簡単に開いてさらに分析することができます。日付と時刻を維持するために、有名なRTCモジュールDS3231を使用し、温度と湿度を取得するために、DHT11センサーを使用します。プロジェクトの終わりにあなたは学びます
- 日付、時刻、センサー値を使用してデータをSDカードに記録する方法。
- シリアル通信を介してPC上のExcelシートに直接データを書き込む方法。
必要な材料:
- ブレッドボード
- Arduino UNO(任意のArduinoボード)
- DHT11温度センサー
- DS3231RTCモジュール
- SDカードモジュール
- SDカード
- 接続線
- コンピューター/ラップトップ
回路図:
このArduino温度ロガープロジェクトの回路図を以下に示します。
回路図に示されているように、接続は非常に単純です。モジュールとして使用しているため、ブレッドボード上に直接構築できます。接続は、以下の表でさらに分類されます
Arduinoピン |
モジュールピン |
温度センサー– DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
アウト |
ピン7 |
RTCモジュールDS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
ピンA5 |
SDA |
ピンA4 |
SDカードモジュール |
|
Vcc |
5V |
Gnd |
Gnd |
味噌 |
ピン12 |
MOSI |
ピン11 |
SCK |
ピン13 |
CS |
ピン4 |
DHT11温度センサーは、値を記録する必要のある任意のセンサーと交換できます。ArduinoでLM35をチェックして温度を読み取ることができます。
RTCモジュールDS3231はI2C通信(SCL、SDA)を使用してArduinoとインターフェースされ、SDカードモジュールはSPI通信(MISO、MOSI、SCK、CS)を使用してインターフェースされます。ピン4と7は、ArduinoプログラムによってCSピンと出力ピンとして定義されています。必要に応じて他のピンに変更できます。以前、ミュージックプレーヤープロジェクトでSDカードをArduinoに接続しました。
Arduinoプログラムの説明:
次のことができるArduinoプログラムを作成する必要があります。
- DTH11センサーからデータ(またはログに記録したいその他のデータ)を読み取ります。
- I2Cバスを初期化して、RTCモジュールからデータを読み取ります。
- SPIバスを初期化して、SDカードモジュールをArduinoに接続します。
- 日付、時刻、温度、湿度をSDカードに保存します。
- 日付、時刻、温度、湿度をコンピューター/ラップトップで実行されているExcelシートに保存します。
上記の手順は複雑に聞こえるかもしれませんが、私たちのために大変な仕事をするライブラリがあるので、非常に簡単です。次の2つのライブラリをダウンロードする必要があります
- GitHubのDHT11センサーライブラリ
- Rinky-DinkElectronicsのDS3231RTCモジュールライブラリ
ライブラリをダウンロードしたら、次の方法でArduinoIDEに追加します。
スケッチ->ライブラリを含める->。ZIPライブラリを追加
Arduinoからのデータをコンピューター上のExcelシートに活発にフィードするには、Parallax Incが提供するPLX-DAQと呼ばれるソフトウェアもインストールする必要があります。リンクをたどってファイルをダウンロードし、オペレーティングシステムに基づいてインストールします。これにより、デスクトップにPLS-DAQという名前のフォルダーが作成されます。後の作業セクションで処理します。
これで、両方のライブラリを追加し、ソフトウェアをインストールした後、完全なコード(チュートリアルの下部に記載)を使用して、それらをArduinoにアップロードできます。コードをできるだけシンプルに保つように最善を尽くしました。説明はコメントセクションでも行われます。さらに、以下の重要なセグメントについて説明します。
1. DS3231からのデータの読み取り:
DS3231はRTC(リアルタイムクロック)モジュールです。これは、ほとんどのエレクトロニクスプロジェクトの日付と時刻を維持するために使用されます。このモジュールには独自のコイン型電源があり、主電源が切断された場合やMCUがハードリセットされた場合でも日付と時刻を維持します。したがって、このモジュールで日付と時刻を設定すると、常にそれを追跡します。
Arduinoが提供するライブラリがあるため、このモジュールの使用は非常に簡単です。
//ハードウェアインターフェイスDS3231を使用してDS3231を初期化しますrtc(SDA、SCL); void Initialize_RTC(){// rtcオブジェクトを初期化しますrtc.begin(); // ####次の行のコメントを解除して、初めて日付と時刻を設定できます### / * rtc.setDOW(FRIDAY); //曜日を日曜日に設定しますrtc.setTime(18、46、45); //時刻を12:00:00(24時間形式)に設定しますrtc.setDate(6、30、2017); //日付を2014年1月1日に設定します* /}
注:このモジュールを初めて使用するときは、日付と時刻を設定する必要があります。上記のようにコメントを削除し、日付と時刻を書き込むだけで実行できます。必ずコメントしてアップロードしてください。そうしないと、ボードを実行するたびに日付と時刻が再設定されます。Arduinoで時間を読み取るためにRTCICDS1307を使用することもできます。
2. DHT11からのデータの読み取り:
DHT11は、温度が来る湿度センサーです。モジュールの出力ピンを介して、温度と湿度の値を8ビットデータとしてシリアルに送信します。ライブラリは、Arduinoのソフトウェアシリアル機能を使用してこのデータを読み取ります。
#define DHT11_PIN 7 //センサー出力ピンはピン7に接続されていますdhtDHT; // DHTという名前のセンサーオブジェクトvoidRead_DHT11(){int chk = DHT.read11(DHT11_PIN); }
ここでは、出力ピンをピン7に接続しました。例として、ソフトウェアシリアルをサポートする任意のピンを選択できます。 DHT.read(ピン番号);を 呼び出す 温度と湿度の値を読み取り、それをそれぞれパラメータ DHT.temperature と DHT.Humidityに保存し ます。このDHT11ベースのArduino温度測定も確認してください。
3. SCカードモジュールの初期化:
void Initialize_SDcard(){//カードが存在し、初期化できるかどうかを確認します。if(!SD.begin(chipSelect)){Serial.println( "カードが失敗したか、存在しません"); //これ以上何もしません:return; } //ファイルを開きます。 //一度に開くことができるファイルは1つだけなので、別のファイルを開く前にこのファイルを閉じる必要があることに注意してください。ファイルdataFile = SD.open( "LoggerCD.txt"、FILE_WRITE); //ファイルが利用可能な場合は、次のように書き込みます。if(dataFile){dataFile.println( "Date、Time、Temperature、Humidity"); // Excelファイルの最初の行を書き込みますdataFile.close(); }}
Arduino IDEにデフォルトで追加されるSDカードライブラリがあるため、ArduinoでSDカードを使用するのは簡単です。SDカードの初期化関数で、「LoggerCD.txt」という名前のテキストファイルを作成し、コンテンツの最初の行を書き込みます。ここでは、区切り文字として「、」を使用して値を区切ります。カンマが配置されている場合は、Excelシートの次のセルに移動する必要があることを意味します。
4.SDカードへのデータの書き込み
void Write_SDcard(){//ファイルを開きます。 //一度に開くことができるファイルは1つだけなので、別のファイルを開く前にこのファイルを閉じる必要があることに注意してください。ファイルdataFile = SD.open( "LoggerCD.txt"、FILE_WRITE); //ファイルが利用可能な場合は、次のように書き込みます。if(dataFile){dataFile.print(rtc.getDateStr()); // SDカードに日付を保存dataFile.print( "、"); // "、"を使用して次の列に移動しますdataFile.print(rtc.getTimeStr()); // SDカードに日付を保存dataFile.print( "、"); // "、"を使用して次の列に移動しますdataFile.print(DHT.temperature); // SDカードに日付を保存dataFile.print( "、"); // "、"を使用して次の列に移動しますdataFile.print(DHT.humidity); // SDカードに日付を保存dataFile.print( "、"); // "、"を使用して次の列に移動しますdataFile.println(); //行の終わりは次の行に移動しますdataFile.close();//ファイルを閉じます} else Serial.println( "OOPS !! SDカードの書き込みに失敗しました"); }
先に述べたように、私たちの意図は、日付、時刻、温度、湿度をSDカードに保存することです。DS3231ライブラリとDHT11ライブラリの助けを借りて、Arduinoはこれら4つのパラメータすべてを読み取り、以下の表に示すように次のパラメータに保存することができます。
日付 |
rtc.getDateStr()); |
時間 |
rtc.getTimeStr()); |
温度 |
DHT。温度 |
湿度 |
DHT。湿度 |
これで、これらのパラメータを直接使用して、印刷行を使用してSDカードに保存できます。
dataFile.print(パラメータ);
各パラメーターは、読みやすくするためにコンマで区切られ、 dataFile.println();で あることが わかります。 行の終わりを示すために使用されます。
5.PLX-DAQへのデータの書き込み
PLX-DAQは、ラップトップまたはPC上のExcelファイルにArduinoから直接値を書き込むのに役立つMicrosoftExcelプラグインソフトウェアです。これは2つの理由から私の個人的なお気に入りです:
1.データの書き込みと監視を同時に行うことができ、グラフとしてプロットする方法を提供します。
2.日付と時刻を追跡するためにDS3231のようなRTCモジュールは必要ありません。ラップトップ/コンピューターで実行されている日付と時刻を使用して、Excelに直接保存するだけです。
このソフトウェアをArduinoで使用するには、シリアルモニターに値を表示するのと同じように、特定のパターンでデータをシリアルに送信する必要があります。キーラインを以下に説明します。
void Initialize_PlxDaq(){Serial.println( "CLEARDATA"); //以前のプロジェクトから残っているデータをすべてクリアしますSerial.println( "LABEL、Date、Time、Temperature、Humidity"); //常にLABELを書き込んで、最初の行として示します} void Write_PlxDaq(){Serial.print( "DATA"); //常に "DATA"を記述して、以下をData Serial.print( "、");として示します。 // "、" Serial.print( "DATE");を使用して次の列に移動します//日付をExcelに保存Serial.print( "、"); // "、" Serial.print( "TIME");を使用して次の列に移動します//日付をExcelに保存Serial.print( "、"); // "、" Serial.print(DHT.temperature);を使用して次の列に移動します//日付をExcelに保存Serial.print( "、"); // "、"を使用して次の列に移動しますSerial.print(DHT.humidity);//日付をExcelに保存Serial.print( "、"); // "、" Serial.println();を使用して次の列に移動します//行の終わりは次の行に移動します}
ソフトウェアは、LABEL、DATA、TIME、DATEなどのキーワードを認識できます。Initialize関数に示されているように、キーワード「LABEL」は、Excelシートの最初の行を書き込むために使用されます。後の書き込み関数では、キーワード「DATA」を使用して、次の情報をDATAと見なす必要があることを示します。次の行に移動する必要があることを示すには、コンマ(“、”)を使用する必要があります。行の終わりを示すには、 Serial.println(); を送信する必要があります 。
前述のように、上記のようにキーワード「DATE」と「TIME」をそれぞれ送信することで、システムの日付と時刻を記述できます。
注: このPLX_DAQソフトウェアを使用する場合は、シリアルモニターを使用しないでください。
作業説明:
ワーキングArduinoのデータロガーは簡単です。ハードウェアとソフトウェアの準備ができたら、プログラムをArduinoボードに焼き付けます。プログラムがアップロードされるとすぐに、温度と湿度の値がSDカードに保存され始めます。PLX-DAQがコンピューターのExcelシートにログインできるようにするには、以下の手順に従う必要があります。
ステップ1:インストール中にデスクトップに作成された「Plx-DaqSpreadsheet」ファイルを開きます。
ステップ2:セキュリティブロックがある場合は、[オプション] -> [コンテンツを有効にする]-> [完了]-> [OK ]をクリックして、次の画面を表示します。
ステップ3:ボーレートを「9600」として選択し、Arduinoが接続されているポートを選択して、[接続]をクリックします。次の図に示すように、値がログに記録され始めるはずです。
このExcelシートを開いたままにして、ログに記録される値を監視できます。これが起こっているので、私たちのSDカードも同じ値を保存しているでしょう。それが機能していることを確認するには、SDカードを取り外してコンピューターで開きます。その中に 「LoggerCD.txt」 という名前のテキストファイルがあります。開くとこんな感じになります。
このファイルにはデータが含まれていますが、メモ帳で分析するのは困難です。したがって、ExcelでCSV(カンマ区切り値)ファイルとして開くことができるため、より効果的になります。エクセルで開くには
1.Excelを開きます。[ファイル]-> [開く]をクリックして、右下隅にある[すべてのファイル]を選択し、SDカードから[LoggerCD]ファイルを選択します。これにより、テキストインポートウィザードが開きます。
2.「次へ」をクリックし、区切り文字としてコンマを選択します。もう一度「次へ」をクリックします。その後、終了します。
3.これで、以下に示すように、値がExcelファイルで開かれます。
5秒ごとに値を記録しました。プログラムの遅延機能を変更することで、任意の時間ログに記録できます。動作の詳細については、以下のビデオをご覧ください。
あなたがプロジェクトを気に入ってくれたことを願っています。疑問がある場合は、以下のコメントセクションに書いてください。私がお手伝いします。
ボーナスの改善-Arduinoを使用したワイヤレスデータロギング:
この時点まで成功したら、少し進歩し、数行のコードを追加するだけで、ワイヤレスでデータをログに記録できます。
HC-05などのBluetoothデバイスを接続し、シリアルではなくBluetooth経由でPLX-DAQにデータを書き込むだけです。つまり、 Serial.print(parameter);を 置き換え ます。 BluetoothName.print(パラメータ)。 ラップトップをBluetoothモジュールに接続し、ラップトップのBluetoothが接続されているCOMポートとTaadaaaを選択します……すぐにワイヤレスデータロギングシステムが機能します。