SDカードShield V2.0でロガーを収集する方法

こんにちは、Habr!



画像 私は緊急に、古い産業用ガス分析計のシンプルなデータロガーを収集する必要がありました。これは、紙レコーダーへの現在の出力しか持っていませんでした。 簡単な作業のようですが、特に面白かったです。 カットの下でこの物語の詳細。 結論。







実際、このタスクは最も簡単でした。 しかし、いつものように、すべてが緊急です。 産業用ロガーにお金をかけたくありませんでしたが、Arduino UNOショールは在庫がありました。 質問を5分間グーグルで検索し、このタスクに最適な適切な銘板を見つけました。 ロガーに接続する必要があったDOG-4産業用ガス分析器は、紙のレコーダーに関する結論しかありません。 結論は、分析された各ガス(NOおよびSO2)の電流0..5 mAです。

ちなみに、光学式ガス分析装置は優れた信頼性の高い設計ですが、内部の道徳的に古い電子機器は全体を台無しにします。 タスクは、1週間のデータを要約し、技術者が計算できるように電子的に記録することでした。 詳細は提供されていません。

インターネットで見つかった銘板は、 この (非常に良い)店で注文され、翌日ノボシビルスクからトムスクに届けられました。 説明ラベルは非常に便利で、プロトタイピング用のプラットフォームがあり、この単純なプロジェクトで使用したいと考えていました。 たとえば、グラウンドに引き込まれた1kΩの抵抗器にレコーダーの電流出力をロードするだけで十分であり、測定範囲全体にわたってデバイスからデジタルデータを受信します。 10ビットArduinoのADCビットは技術者に非常に満足していました(紙テープからデータをカットする方がはるかに楽しいでしょう)。 パッケージが届いた、美しいパッケージング、オンラインストアでの方法の説明。 プロトタイピングパッドの存在が示されており、その上に2つの抵抗のみをはんだ付けする必要がありました。







しかし、剖検により、ネームプレートが説明と一致しないことが示されました。 これが実際に箱に入っていたものです。 プロトタイピング用のプラットフォームの代わりに、5-3.3 V電源スイッチがありましたが、その目的は私には明確ではありませんでした.Arduinoボードから3.3 Vの電源を取り、カードを焼くリスクなしでSDカードに電源を入れる方が最初はより合理的だったからです。 スイッチを5 Vに切り替えると、すぐにカードに5ボルトの電力が供給されるため、将来的には無効になります。 楽しい中国の電子機器。 すぐに正しい電源が3.3 Vに供給されたことは明らかです。デバイスを操作するためにメーカーの公式ページからダウンロードしたライブラリもハイライトであることが判明しました。 彼女はただ働かなかった。

この表によると、ネームプレートはArduinoの4つのピンを使用します。 ここで、神に感謝します、何も台無しにされていません。







このデバイスの正しい操作を自分でプログラムし始めることをすでに考えていたので、Arduino IDE 1.0+開発者のバージョンでは、何らかの理由で#include "WProgram.h"の代わりに#include "Arduino.h"の定義を使用し始めました。 「したがって、古いライブラリは、Arduino IDEの以降のバージョンで動作しなくなりました。 メーカーのウェブサイトから図書館に戻ると、この理由で「入手」できなかったことがわかりました。 状況は非常に単純に扱われます。 拡張子が.hおよび.cppのファイルでは、#include "WProgram.h"という行をこのような構造に置き換える必要があります



#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif
      
      







その後、ライブラリはArduino IDEのどのバージョンでも動作します。 自分で実行することも、このリンクから既に修正されたバージョンのライブラリをダウンロードすることもできます。



ガスアナライザー用のロガーの最終的なコードは、この投稿にとって興味深いものではありませんが、レビューのために簡単な例を示します。 これは、データをSDカードに書き込むための作業コードのように見え、5秒ごとに「Hello、Habrahabr!」というフレーズがファイルに書き込まれます。



 #include "FileLogger.h" //     3,3   8  #define MEM_PW 8 void setup(void) { pinMode(MEM_PW, OUTPUT); //   8      digitalWrite(MEM_PW, HIGH); } void loop(void) { byte buffer[] = "Hello, Habrahabr! \r\n"; unsigned long length = sizeof(buffer)-1; // ! int result = FileLogger::append("data.log", buffer, length); delay(5000); //  5  }
      
      







いくつかの重要なポイント。 記録を開始する前に、カード(FAT16)をフォーマットし、プログラムで使用される名前の空のファイルを開く必要があります。 この例では、これはdata.logです。 カードをネームプレートから「ホット」プレートに引っ張らないでください。 digitalWriteコマンド(MEM_PW、LOW)でソフトウェアの電源をオフにすることをお勧めします。

データが可変長の場合、文字列の長さの計算を使用します。 例では、これは符号なしlong length = sizeof(buffer)-1です。 フレーズの長さが不正確な場合、録音プロセスが誤動作し、データの代わりに破損したファイルを取得する可能性があります。



結論



ネームプレートは非常に機能していることが判明しました。 優れたデータ書き込み速度。 もちろん、説明が真実ではないのはあまり楽しいことではありませんが、面白いだけでなく、ちょっとした脳みそを与えることもできます。 ちなみに、同じネームプレートはミニSDにも使用できます。 このようなカードのコネクタは背面にあります。



みなさん、良い一日を!



All Articles