Arduinoの圧力測定とロギング
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
このプロジェクトは、機械式コンプレッサーの効率をチェックするために、貯水池に組み込まれた空気圧を記録したいという結果でした。
ジョージ・コンタクシスからの助け
https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be
バールとPSIで日付と圧力を示すディスプレイ
Arduino圧力計。 3つの圧力を読み取る
コード
- SKU237545液晶リアルタイムクロックとデータロギングを備えた圧力センサー
- リアルタイムクロックの設定
SKU237545液晶リアルタイムクロックとデータロギングを備えた圧力センサー C / C ++
// 2018年8月12日に作成されたPhilipBlayney&Jack Davidsonは、Georgeのコードを使用して// SKU237545圧力センサーのKontaxis // https://www.youtube.com/watch?v =AB7zgnfkEi4&feature =youtu.be #include " LiquidCrystal_PCF8574.h "#include" RTClib.h "//リアルタイムクロック#include// sdカード#defineLCD_ADDRESS 0x27 // LCD特性を定義#defineLCD_ROWS 2#define LCD_COLUMNS 16#define SCROLL_DELAY 150#defineバックライト255 //オブジェクトの初期化LiquidCrystal_PCF8574lcdI2C; RTC_DS1307 RTC; //リアルタイムクロックオブジェクトを定義しますintn =1; int val; // Arduinoアナログピン用のシンプルなデータロガー#defineLOG_INTERVAL 1000 //エントリ間を移動します(より多くの/より高速なデータを取得するために削減します)//ログに記録されたデータをディスクに永続的に書き込むまでのミリ秒数// LOG_INTERVALに設定します毎回書き込む(最も安全)// 10 * LOG_INTERVALに設定して、10回のデータ読み取りごとにすべてのデータを書き込みます。//電力が失われると、最後の10回の読み取りが失われる可能性がありますが、消費電力が少なく、はるかに高速です!#define SYNC_INTERVAL 10000 // flush()の呼び出し間でミル-カードにデータを書き込む600000 =10 minutesuint32_t syncTime =0; //最後のsync()の時刻const int chipSelect =10; //データロギングシールドには、SDcsラインにデジタルピン10を使用しますFilelogfile; void error(char * str){Serial.print(F( "error:")); Serial.println(str);} void setup(void){Serial.begin(9600); //シリアルポートを開始Serial.println(F( "圧力読み取りSKU237545 SENSOR")); // F =動的メモリを保存するマクロ関数lcdI2C.begin(LCD_COLUMNS、LCD_ROWS、LCD_ADDRESS、BACKLIGHT); lcdI2C.print(F( "SKU237545 SENSOR")); lcdI2C.setCursor(0,1); lcdI2C.print(F( "bar and psi"));遅延(2000); // SDカードを初期化しますSerial.print(F( "Initializing SD card ...")); //使用しない場合でも、デフォルトのチップセレクトピンが//出力に設定されていることを確認します。pinMode(10、OUTPUT); if(!SD.begin(chipSelect)){//カードが存在し、初期化できるかどうかを確認します:error( "カードが失敗したか、存在しません"); } Serial.println(F( "カードが初期化されました。")); char filename [] ="LOGGER00.CSV"; //(uint8_t i =0; i <100; i ++){filename [6] =i / 10 + '0';の新しいファイルを作成しますfilename [7] =i%10 + '0'; if(!SD.exists(filename)){//新しいファイルが存在しない場合にのみ開くlogfile =SD.open(filename、FILE_WRITE);壊す; //ループを離れます! }} if(!logfile){error( "couldnt create file"); } lcdI2C.clear(); lcdI2C.setCursor(0,0); lcdI2C.print(F( "ファイル番号")); lcdI2C.print(ファイル名); Serial.print(F( "ログ記録先:")); Serial.println(ファイル名); // RTCに接続if(!RTC.begin()){logfile.println( "RTC failed"); #if ECHO_TO_SERIAL Serial.println(F( "RTC failed")); #endif // ECHO_TO_SERIAL} logfile.println( "Date / Time、pressure、bar、reading、psi、reading"); delay(5000); lcdI2C.clear(); // LCD画面をクリアします。} void loop(void){int SensorVal =analogRead(A1); // Serial.print( "Sensor Value:"); // Serial.print(sensorVal); float Voltage =(sensorVal * 5.0 )/1024.0; // Serial.print( "ボルト:"); // Serial.print(電圧);フロート圧力_パスカル=(3.0 *((フロート)電圧-0.475))* 1000000.0; //ここでキャリブレーションしますfloatpressure_bar =pressure_pascal / 10e5;フロートpressure_psi =pressure_bar * 14.5038; Serial.print( "Pressure ="); Serial.print(pressure_bar); Serial.print( "バー"); Serial.print( "psi"); Serial.print(pressure_psi); Serial.println(); DateTime now; now =RTC.now(); //時間遅延をフェッチします((LOG_INTERVAL -1)-(millis()%LOG_INTERVAL)); // sdカードの読み取りの間に必要な時間の遅延intH =now.hour(); //今すぐ時間を取得し、h int M =now.minute();という整数に格納します。 //今すぐ議事録を取得し、m int S =now.second();という整数に格納します。 //今すぐ秒を取得し、s logfile.print(now.year()、DEC);という整数に格納します。 logfile.print( "/"); logfile.print(now.month()、DEC); logfile.print( "/"); logfile.print(now.day()、DEC); logfile.print( ""); if(H <10){//必要に応じて、上記のようにゼロを追加しますlogfile.print(0); } logfile.print(now.hour()、DEC); logfile.print( ":"); if(M <10){//必要に応じて、上記のようにゼロを追加しますlogfile.print(0); } logfile.print(now.minute()、DEC); logfile.print( ":"); if(S <10){//必要に応じて、上記のようにゼロを追加しますlogfile.print(0); } logfile.print(now.second()、DEC); // logfile.print( '"'); Serial.println(); Serial.print(now.year()、DEC); Serial.print(" / "); Serial.print(now.month()、DEC ); Serial.print( "/"); Serial.print(now.day()、DEC); Serial.print( ""); if(H <10){//必要に応じて、上記のようにゼロを追加しますSerial.print(0);} Serial.print(now.hour()、DEC); Serial.print( ":"); if(M <10){//必要に応じて、上記のSerialのようにゼロを追加します。 print(0);} Serial.print(now.minute()、DEC); Serial.print(F( ":")); if(S <10){//必要に応じて、上記のようにゼロを追加しますSerial .print(0);} Serial.print(now.second()、DEC); Serial.println(); lcdI2C.setCursor(0,0); lcdI2C.print(pressure_bar); //最初に文字列をLCDに出力行lcdI2C.print( "bar"); lcdI2C.print(pressure_psi); lcdI2C.print( "psi"); lcdI2C.setCursor(0,1); //lcdI2C.print(now.year()、DEC);// lcdには年を表示するのに十分な文字スペースがありません//lcdI2C.print( "/"); lcdI2C.print(now.day()、DEC); lcdI2C.print( "/"); lcdI2C.print(now.month()、DEC); lcdI2C.print( ""); if(H <10){//上記のように、必要に応じてゼロを追加しますlcdI2C.print(0); } lcdI2C.print(now.hour()、DEC); lcdI2C.print( ":"); if(M <10){//必要に応じて、上記のようにゼロを追加しますlcdI2C.print(0); } lcdI2C.print(now.minute()、DEC); lcdI2C.print( ":"); if(S <10){//上記のように、必要に応じてゼロを追加しますlcdI2C.print(0); } lcdI2C.print(now.second()、DEC); logfile.print( "、"); logfile.print( "Pressure ="); logfile.print( "、"); logfile.print(pressure_bar); logfile.print( "、"); logfile.print( "bar"); logfile.print( "、"); logfile.print(pressure_psi); logfile.print( "、"); logfile.print( "psi"); logfile.println(); if((millis()-syncTime) リアルタイムクロックの設定 C / C ++
// tronixstuffによるコード#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 //通常の10進数を2進化10進数に変換decToBcd(byte val){return((val / 10 * 16)+(val%10) );} //バイナリコード化された10進数を通常の10進数に変換するbytebcdToDec(byte val){return((val / 16 * 10)+(val%16));} void setup(){Wire.begin(); Serial.begin(9600); //ここで初期時刻を設定します:// DS3231秒、分、時間、日、日付、月、年setDS3231time(00,43,14,3,14,8,18); //ここで必要な時間を設定します} void setDS3231time(byte second、byteminute、byte hour、byte dayOfWeek、bytedayOfMonth、byte month、byte year){//時刻と日付のデータをDS3231に設定しますWire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); //次の入力を秒レジスタで開始するように設定しますWire.write(decToBcd(second)); //秒を設定しますWire.write(decToBcd(minute)); //分を設定しますWire.write(decToBcd(hour)); //時間を設定しますWire.write(decToBcd(dayOfWeek)); //曜日を設定します(1 =日曜日、7 =土曜日)Wire.write(decToBcd(dayOfMonth)); //日付を設定します(1から31)Wire.write(decToBcd(month)); //月を設定しますWire.write(decToBcd(year)); //年(0〜99)を設定Wire.endTransmission();} void readDS3231time(byte * second、byte * minutes、byte * hour、byte * dayOfWeek、byte * dayOfMonth、byte * month、byte * year){Wire。 beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // DS3231レジスタポインタを00hに設定Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS、7); //レジスタ00hから始まるDS3231から7バイトのデータを要求します* second =bcdToDec(Wire.read()&0x7f); *分=bcdToDec(Wire.read()); *時間=bcdToDec(Wire.read()&0x3f); * dayOfWeek =bcdToDec(Wire.read()); * dayOfMonth =bcdToDec(Wire.read()); *月=bcdToDec(Wire.read()); * year =bcdToDec(Wire.read());} void displayTime(){byte second、minute、hour、dayOfWeek、dayOfMonth、month、year; // DS3231からデータを取得しますreadDS3231time(&second、&minute、&hour、&dayOfWeek、&dayOfMonth、&month、&year); //シリアルモニターに送信しますSerial.print(hour、DEC); //表示時にバイト変数を10進数に変換しますSerial.print( ":"); if(minute <10){Serial.print( "0"); } Serial.print(minute、DEC); Serial.print( ":"); if(second <10){Serial.print( "0"); } Serial.print(second、DEC); Serial.print( ""); Serial.print(dayOfMonth、DEC); Serial.print( "/"); Serial.print(月、12月); Serial.print( "/"); Serial.print(年、12月); Serial.print( "曜日:"); switch(dayOfWeek){ケース1:Serial.println( "Sunday");壊す;ケース2:Serial.println( "Monday");壊す;ケース3:Serial.println( "Tuesday");壊す;ケース4:Serial.println( "Wednesday");壊す;ケース5:Serial.println( "Thursday");壊す;ケース6:Serial.println( "Friday");壊す;ケース7:Serial.println( "Saturday");壊す; }} void loop(){displayTime(); //リアルタイムクロックデータをシリアルモニターに表示します、delay(1000); //毎秒}LiquidCrystal_PCF8574.h
必要なライブラリ、スケッチの下にライブラリを含め、.zipを追加してから、zipがダウンロードされた場所を選択しますhttps://github.com/mathertel/LiquidCrystal_PCF8574RTClib.h
ライブラリ、リアルタイムクロック、最初にzipを解凍します。次に、残りのzipファイルをライブラリに追加しますhttps://github.com/mechasolution/RTClib.h
回路図

A4からSDA
VCCに対して5ボルト
GNDからGND

GNDへの黒いワイヤー
5ボルトへの赤いワイヤー



製造プロセス