圧力レコーダー (データ・ロガー)
私は圧力を制御し、プログラムを開発し、ファイルに記録しますヘルプに頼まれました.
プロジェクトがあります 何らかの形の組立 アルドゥイーノ 正しい結果を実証するために、 プログラム, C青梅 里尋ね.
説明
これがあることを意味していません デザインカンプ年, 私はプログラムのテストだけを言うだろう. 私は一緒に4つのモジュールを入れています それはすることができ 関連 A Arduinoのナノ またはArduinoのUNO, 私の友人のような.
私 モジュールは、液晶ディスプレイであります, SDメモリー用のリーダ, DS3231と1のクロックモジュール 以下のために ブルートゥース. プログラムはまた、SDカードリーダーとDS1307 RTCを含有するシールドと異なる構成を提供します.
私oreoverそれがために分周器を含み’ エントリー 通信 HCモジュール-06, との互換性のために 3,3 モジュールが使用するボルト ブルートゥース.
プログラムは、設定可能の程度が大きいことができます, それは時に決定された「の#defineの行に元の開始, 私は、下記の詳細を説明します.
様々な困難がありました, 非常に特別な彼は、メモリにファイルを書き込めませんでした理由を理解することでした. 実際には、など 引用 サイトから, 名前は形式で留まっ 8.3. このため、ファイル名は形式でダイヤルした連番です ggmma私II, これ
GG 私は日付の日です
ミリメートル それは月に報告されました
A それは年のためであります
II私 連番です, ファイルが存在する場合すでにSSE これは、新しいものが追加されます
このプロジェクトは、いくつかの特別な機能が含まれています:
-
ディスプレイの明るさの自動制御.
-
ファイル記録プログラム可能な期間を提供, 時間間隔と、ファイル名の変更の頻度を書いたサンプルの両方のために.
-
シリアル経由またはBluetooth経由でレポートを読みます. 明らかにそれが配置された接続に依存します.
-
ファイルが維持され、上書きされません. これは、以前の記録の損失を防ぐためです.
-
プログラムは、ハードウェアの2つのバージョンを可能に, I2Cを介して接続するためのパラレル一つに接続されたディスプレイのための1つ. 後者の私の友人は、「クロックおよびSDリーダーが含まれている種類と1つのシールドを持っているので、. 絵として.

-
シリアル通信を介したシンプルな実装. のレベルにアルドゥイーノまたはTX脚モニターとの古典的なタイプ 5 V, またはpartioreでBluetoothモジュールを接続します.
![]() |
などと一緒にここで見ることができます スマートフォン経由の接続, プログラム シリアルBluetoothのターミナル. 良く, 日付は、プログラムを送るものではありません, それはむしろ、Androidのプログラムに含まれています. |
電気スキーム

図は、ピンに接続されている輝度制御の脚への接続を記述する 15 デルディスプレイ. ディスプレイライブラリーは、そのような表現を持っていないので、私はいくつかのアカウントを作りました. でもピンに接続された「I2Cインタフェースを持ちます 15 これは、この方式で取得され. ディスプレイ用のライブラリ, これは、バックライトをオンまたはオフだけの簡単な制御を提供します.
プログラム説明
プログラムはArduinoのIDEバージョンでコンパイルされました 1.8.7. ファイルには、ライブラリが含まれています, 将来のバージョンで誤解や変化の可能性を避けるために、.
以下を設定するために使用される変数:
#RSを定義します 7
#定義されました 6
#D7を定義します 2
#D6を定義します 3
#D5を定義します 4
#D4を定義します 5
表示タイプのパラレル接続のための通常の定義.
#CH1を定義します 9
明るさを調整するために割り当てられた脚.
#定義 センサー A1
それはあなたがアナログチャンネルを選択することができます センサーの読み取り値.
#LDRを定義します A3
Definisce IL チャンネル アナログ フォトレジスタ信号を取るために、そこから.
#PARMODELを定義します
これは、利用可能なハードウェア構成に応じて、コンパイルを選択することができます.
コメントマークを削除するとき, Alloraあなたはモデルを選びます パラレル (互換性が私インクルード ドライバと 日立HD44780) そして、「クロックは、DS3231を有するものです. 反対のケースでは、ディスプレイの同じタイプのPCF8574とI2Cインタフェースを使用し, 他の機能のためのピンを節約するために多くの. これによりビルドへ シールドのDS1307クロックエッジを使用して 前述の.
#DEBUGを定義します 0〜1〜2
あなたは、シリアル通信を使用する場合は、設定します. あるかもしれません 2 シリアル、ディスプレイに存在するメッセージを決定するために、」機会を与えてデバッグレベル.
それが書かれていた場合 0 代わりに、1の, その後、すべてのシリアルのは、プログラムのコンパイルには含まれていません.
#定義LCD_ROWS 2
#定義LCD_COLUMNS 16
これは、ディスプレイのサイズを定義します. これを変化させることによってものみの2行によって定義された実際のサイズで表現するために提供するプログラムで他の変更を意味するであろう.
#LOG_INTERVALを定義します 10
これは、センサのサンプリング周波数を決定します, で表現 秒. どのようなプログラムは、すべてではありません 10 秒.
#チップセレクトを定義します 10
これは、SDカードの場所をクリアするl」の活性化を決定します. ライブラリーの主張は、脚を持っているが、 10 出力として. だから、これを変更することにより、あなたは足を持っていることを意味するものではありません。 10 フリード.
#VMINを定義します 102
#VMAXを定義します 921
#MINSCALEを定義します 0
#MaxScaleの定義 160
クエストE 定義は、読み出しおよびチャネルの変換値を決定します. この場合 センサー それはの価値を持っています 0,5 ゼロにVと 4,5 Vの足 へ 対策 格言.
Q式ADC点にuindi変換
V / 5 * 1024 最小の場合と 102 そして、最大のための 921, 丸みを帯びました
例えば上記のもののセットとして.
Gそれら他の2つは機能付き変換後のディスプレイに提示する値であります アルドゥイーノ 地図(). それぞれ最小値と最大値.
#CHANGEFILEを定義します (14400 - LOG_INTERVAL)
クエストまたは単一のファイルへの書き込みに何秒の期間を定義します. イベントで 破壊 電源の, プログラムは、既存のファイルを上書きすることはありません. このために存在するファイルがあるかどうかのチェックが参照するというルーチンがあります.
私nは、この方法は、それはの倍数で正しく時間を算出し、 3600.
#BGTVMINを定義します 0
#BGTVMAXを定義します 1024
#BGTMINSCALEを定義します 20
#BGTMAXSCALEを定義します 255
クエストそしてライン, 表示輝度値のPWM制御の決定しました. 関数の変換では、必ず 地図(). すなわち、分圧器のアナログ入力」から読み取った値が最小からPWMスケールに変換され 20 A 255. 細かいものを作るにしたいです, あなたはフォトレジスタが完全に隠されているテストを行うと、何を置くことができます BGTVMAX, また、その逆も強く、それがBGTVMINを置くべき値を検出した照明した場合のために.
関数の小さな説明 sprintf():
%0?D 行方不明の数字にゼロを充填して進数を書くことが決定され. とともに ? それは表現するために桁数を決定します.
機能 newFile() その後、ファイルが既に存在するかどうかをチェックし、カウンタを増加させ.
このためには、新しいを試してみて、この名前がすでにファイルに割り当てられている場合に発生します. 例えば、システムが頻繁に再起動された場合, l「の最後のファイルは上書きされませんが、それはより価値の増大に伴って1を加えます 0 A 255. 私は16進数で番号を入れたいと思いました, おそらく、私はまだsprintfのために作成する方法を理解していません(), それは解釈するのがより複雑になるので、.
私は毎年恒例の期間descivereのためだけの図を用いることが考え, 書き込みデータを保証するために、 10 年齢, メモリからファイルを削除せず.
プログラムではその両極端の中に表現を制限する2つの条件があります:
sensorVal = (sensorVal > VMIN) ? sensorVal : VMIN;
sensorVal = (sensorVal < VMAX) ? sensorVal : VMAX;
何が限界を超えた表現に影響を与えます. これは、限界を超えた値が受け入れられないことを意味し、したがってのみ最小値または最大値が表されています, 場合によっては.
ラストノート:
プログラムは、検出SDまたは「時計の誤差を検出すると, その後、進んでクラッシュしていません. 念のためにシリアル彼は5月の通知メッセージを有効にしていません.
それは時間の」形式が失われたことを検出すると, シリアル接続を使用すると、直接時間を設定するために、さらなるコントロールを持つことができるか、接続されたコンピュータをロードできるようにします.
このオプションでは、との要求を提示します 3 選択肢:
と それはあなたが形式YY / MM / DD HHの日付と」時間を入力することができます:ミリメートル:SS. 何もありません
フォーマットの本当の制約, 1か 2 数値は違いはありません, 尊敬の唯一の価値があります
あるフィールドの区切り文字 / : そして、日付の間のスペースと「今.
とともに そのままタイムテーブル「でプログラムを待って続ける」スキップします.
H それはあなたが進むを停止することができます. リセットボタンで再起動を容易にするために、.
他のキーまたは待機のために 3 秒, それはあなたがの」時間をロードすることができます
コンピューター.
このため、選択が期間内に行われなければなりません 3 第2, それ以外の場合はプログラムが自動的に「時間をアップグレードすることを決定します. シリアルモニターIDEもD「送信ボタンを入力する必要があることを考慮すると, コマンドを取ります.
したがって、あなたは、このためにそれを有効にするか、または故障の原因を見ることができなければなりません. 従って私は、最初の試験中にシリアルアクティブを維持し、もう1つは必ず操作である場合にのみご希望の場合、このオプションを無効に助言します. 結局のところ、それはArduinoの作業期間の大半を占めていません.
表示は1秒に1回更新されます, 最小周波数限界へのサンプルリターンの理由であっても書き込み処理. 秒単位で最小値のことを思い出すデルのRTC機能を使用して書くの期間のためのデル・レスト.
サンプルは、少なくとも取るする機能を有しています 10 測定値と平均へ. 最大することができ 64, それはソース線に直接介入しなければなりません. それは、変数を使用していますので、 2 その後、バイト 64 これは、上限であります.
プログラムは、圧力変換のために、ここで使用されています, しかし、それはその特定のケースに限定されるものではなく、. 実際には、構成可能な値は、ADCコンバータアルドゥイーノで読み取ることができる応じてアナログ電圧を有する多くの種類のセンサの読み取りを可能にします.
あなたは私からダウンロードできるパッケージ ドライブ.
私は上のビデオを置きます ユーチューブ.


Bluetoothは、ハードウェアのシリアルArduicosoに直接接続されています, その図で知られています. あなたが新しいファームウェアを書きたいときは、少し音を作ることができます. スケッチを書くときには取り外し可能なジャンパーを置くことをお勧めします何のため.
私は非常に確信していないですか、多分私は読み違えます: 誰がbluetoohを管理します ? スケッチでは、私はそれを見ていないようです.
残りのために私はより良いスケッチを読んでするつもり: 最初の読書は納得していないました.
ご挨拶