工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ティッピングバケット雨量計

コンポーネントと消耗品

>
>
Arduino Nano R3
× 1
Tiny RTC I2C DS1307
× 1
SDカードモジュール-LCスタジオ
× 1
7-12 VDC電源(またはACアダプタ)
× 1
Adafruit標準LCD-16x2白地に青
× 1
TexasInstrumentsシフトレジスタ-シリアルからパラレル
× 1
抵抗1kオーム
× 2
抵抗330オーム
× 2
コンデンサ100nF
× 1
シングルターンポテンショメータ-10kオーム
× 1
PCBモーメンタリコンタクトプッシュボタンスイッチ
× 1
リードスイッチ、SPST-NO
× 1
マグネット(外径7mm x長さ7MM)
× 1
5x10CM片面プロトタイプボード
× 1

必要なツールとマシン

>
3Dプリンター(汎用)
はんだごて(汎用)

このプロジェクトについて

これは、プロの気象学者が使用する雨量計に基づいた、転倒バケット雨量計です。この装置は、シーソーに似た転倒バケツに雨水を注ぎ込むことで機能し、両端には約2 mlの雨水を保持するバケツがあります。片側がいっぱいになると、バケツの転倒と雨水が反対側のバケツに集まり始めます。バケットが傾くたびに、リードスイッチが一時的にオンになり、Arduinoハードウェア割り込みに信号を送信します。 Arduinoは各バケットの「チップ」を追跡し、バケットの体積と収集リザーバーの表面積(16.605平方インチ)に基づいて、「チップ」を降雨量(雨のインチ)に変換します。

屋内ディスプレイユニットには、「現在の時間」、「前の時間」、「現在の日」、および「前の日」の合計を表示するためのメニュー選択があります。

バケットチップごとに、日付がスタンプされたイベントがSDカードファイルに書き込まれます。このファイルは、後で分析とグラフ化のためにExcelにインポートできます。

実際の「バケットチップ」を示すビデオはありませんが、このビデオは実際の降雨イベントを記録するゲージを示しています。

ステップ1

リストされているすべてのコンポーネントを印刷します。 PETGは、屋外でのUV露光や温度露光に適した素材であるため、すべてのコンポーネントに使用しました。上部フィルターの場合は、すべての水平シェル(上部と下部)をオフにして、多孔質の詳細を作成してください。

<図>

ステップ2

フロントパネル回路基板の組み立てを開始する前に、LCDをボード上のC-1穴の位置にあるLCDのピン1を使用してPY-5 * 10CMボード(はんだ付けなし)に挿入します。 4つのLCDボード取り付け穴の位置でパフォーマンスボードにドリルで穴を開けます。次に、後で組み立てるためにLCDを取り外します。

ステップ3

フロントパネルの回路基板を組み立てます。図のように、74HC595NシフトレジスタIC、スイッチ、および抵抗を配置します。必要なすべてのワイヤ(配線図を参照)を、LCDディスプレイに接続されるロケーションポイントと、後で2番目のボードに接続するために延長される6インチの長さに配線します。

<図>

ステップ4

印刷されたスペーサーを使用してLCDを持ち上げ、ICをクリアして、LCDをフロントパネルボードに取り付けます。 3mmx15mmのキャップネジとナットを使用して取り付けます。 (すべてのファスナーは、Fastenalおよび/またはMcMaster Carrから入手できます)

<図>

ステップ5

回路基板の穴の位置R27にピンD12のArduinoを挿入して、メイン回路基板を組み立てます。 SDおよびRTCモジュールを挿入する前に、コンデンサと抵抗を追加し、すべての配線を所定の位置に配線します。詳細については、配線図を参照してください。

<図>

ステップ6

SDリーダーを穴の位置A-3からB-10に組み立てます。 TinyRTCを穴の位置C-24からI-24に組み立てます。すべての接続をはんだ付けします。

<図>

ステップ7

室内ユニット制御エンクロージャーでは、室外ユニットに接続する2本のワイヤーのニーズに最適な場所にドリルで穴を開け、外部電源またはACアダプターからのワイヤー用の穴を開けます。ワイヤーをエンクロージャーに通し、適切な場所にはんだ付けします。メインボードをケースにスライドさせ、2本の3mm x6mmの長さのネジで取り付けます。スイッチの押しボタンをフロントカバーに挿入し、フロント回路基板を3mm x6mmの長さのネジでフロントパネルに取り付けます。注:スイッチボタンには、「感触」が気に入ったので、印刷された部分の代わりに小さな真ちゅう製の部品を使用しました。

<図>

ステップ 8

M3-0.5 x10mm長のフラットヘッドネジを使用してフロントカバーを取り付けます

ステップ9

USBをPCにプラグインし、RTCプログラムをアップロードして時間を設定します。時計を設定したら、メインプログラムをアップロードします。 SDカードを挿入します。室外機のリードスイッチにつながるリード線を短絡してユニットをテストします。降雨量の合計は、短絡(接点が閉じている)イベントごとに増加する必要があります。コンピューターのメモ帳やワードパッドなどのテキストエディターで読み取ることにより、SDカードが日付を読み取っていることを確認します。 「Text.txt」というファイルがあるはずです。ファイルには、「ヒント」イベントごとに日付スタンプが付けられます。

ステップ10

リードスイッチをサブベースに取り付けます。結束バンドを使用して所定の位置に保持します。磁石をバックに組み立て、直径1/8 "の真ちゅう製チューブ(長さ約2")の短い部分でバケットを取り付けます。組み立てる前に、バケツの穴に1/8 "のドリルをかけて掃除します。バケツは摩擦なく簡単に傾く必要があります。必要に応じて、バケツの穴に小さな丸いヤスリを使用します。小さな1/8"ワッシャーを追加します。バケットの最も外側で、間隔を少し閉じます。室外機の取り付け方法を決定します。 1インチのアルミアングルを使用しました。内側から外側に取り付けられた1 / 4-20六角ボルトを使用して、ベースをアングルまたはブラケットに取り付けます。M3-0.5x10mmネジを使用してサブベースを外側のユニットの底に取り付けます。

<図>

ステップ11

漏斗を上部エンクロージャーに挿入します。約カット長さ2インチの18ゲージ亜鉛メッキワイヤー24本。ペンチでワイヤーを持ち、トーチまたはライターで加熱し、プラスチックの上部に注意深く押し込みます。これらのワイヤーは、鳥がユニットに止まるのを防ぎます。雨の量を測定したい鳥のうんちではありません。上部を(4)M3-0.5x 6mmネジでメインエンクロージャーに取り付けます。フィルターを漏斗上部に取り付けます。このフィルターは葉を防ぎ、目詰まりを防ぎます。時々チェックし、必要に応じて清掃してください。

> <図>

ステップ12

室外機を取り付け、室内機に配線してください。室外機の上部が両方向に水平になっていることを確認してください。

ステップ 13

ユニットの電源を入れ、室外ユニットに水を加えて動作を確認します。

ステップ14(オプション)

精度を確認するために、非常にゆっくりと1カップの水を追加し、単位が0.87 "の降雨量を測定することを確認できます(1カップ=14,44立方インチ。コレクターの面積は16.605" [Rainfall =14.44 cu.in. /16.605 "=0.87"]。ユニットが私のユニットと異なる場合は、メインプログラムで補正係数を調整できます。

おめでとう!!降雨量を追跡できることをお楽しみください。

コード

  • RTCで時間を設定するArduinoコード
  • 雨量計のメインプログラムArduinoコード
RTCに時間を設定するArduinoコード Arduino
このコードを最初にロードして、RTCの時間を設定します。 Arduinoにアップロードする前に、実際の日付と時刻でコードを編集します。
 #include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // Tiny RTCbyteのI2Cアドレス秒、分、時間、dayOfWeek、dayOfMonth、月、年; / /通常の10進数を2進化10進数に変換するdecToBcd(byte val){return((val / 10 * 16)+(val%10));} // 2進化10進数を通常の10進数に変換するbytebcdToDec(byte val){return ((val / 16 * 10)+(val%16));} //現在の時刻を設定し、秒と分を正しい時刻に変更する関数void setDateDs1307(){second =00; minutes =11; hour =12; dayOfWeek =5; dayOfMonth =24; month =7; year =20; Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(decToBcd(0)); Wire.write(decToBcd(second)); // 0からビット7は、clockWire.write(decToBcd(minute)); Wire.write(decToBcd(hour));を開始します。 //午前/午後12時間にする場合は、ビット6を設定する必要があります//ビット6を変更する必要があります(readDateDs1307も変更する必要があります)Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd (month)); Wire.write(decToBcd(year)); Wire.endTransmission();} // ds1307から日付と時刻を取得し、resultvoid getDateDs1307(){//レジスタをリセットする関数pointerWire.beginTransmission( DS1307_I2C_ADDRESS); Wire.write(decToBcd(0)); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS、7); second =bcdToDec(Wire.read()&0x7f); minutes =bcdToDec(Wire.read() );時間=bcdToDec(Wire.read()&0x3f); // 12時間am / pmdayOfWeek =bcdToDec(Wire.read()); dayOfMonth =bcdToDec(Wire.read()); month =bcdToDec(Wire.read()); year =bcdToDec(Wire。 read()); Serial.print(hour、DEC); Serial.print( ":"); Serial.print(minute、DEC); Serial.print( ":"); Serial.print(second、DEC); Serial.print( ""); Serial.print(month、DEC); Serial.print( "/"); Serial.print(dayOfMonth、DEC); Serial.print( "/"); Serial.print(year、 DEC); Serial.print( ""); Serial.println(); // Serial.print( "曜日:");} void setup(){Wire.begin(); Serial.begin(19200); setDateDs1307(); //現在の時刻を設定します;} voidloop(){delay(2000); getDateDs1307(); //小さなRTCから時刻データを取得します} 
雨量計用のメインプログラムArduinoコード Arduino
雨量計のメインプログラム。プログラムをコンパイルする前に、関連するすべてのライブラリをインストールしてください。 LiquidCrystalライブラリの更新手順については、リファレンスWebサイト[https://roboindia.com/tutorials/arduino-3-pin-serial-lcd/]を参照してください。
 / * TippingBucket Rain GaugeWritten by Bob Torrence * /#include  #include  #include  #include "RTClib.h" #include  // LiquidCrystalライブラリ(特別バージョン)を含むref https://roboindia.com/ tutorials / arduino-3-pin-serial-lcd ///インターフェース用のLCDとピンの定義LiquidCrystal_SRlcd(6、5、9); //ピン6-データイネーブル/ SER、ピン5-クロック/ SCL、ピン9 -SCKRTC_DS3231 rtc; intバックライト=7; // LEDがピン7に接続されているピン(D7)//定数は変更されません。ここでは、ピン番号を設定するために使用されます:const byteinterruptPin_bucket =3; const byteinterruptPin_menu =2; //変数は変更されます:volatileint Bucket_Tip_Occurence; volatile int Menu_Select; float Bucket_tip_hour_total =0; float Bucket_tip_current_hour_total =0; float Bucket_tip_current_hour_total =0; float Bucket_; float Bucket_tip_current_day_total =0; float Bucket_tip_previous_day_total =0; int current_minute; int loop_minute; int current_hour; int loop_hour; int current_day; int loop_day; int tip_counter; float Conversion_factor =.00854; //チップあたりの雨のインチ-バケットの体積とコレクターの面積(16.605平方インチ)を測定して計算されます//バックライトが後のメニューに残る期間(ミリ秒)選択ボタンpushString print_time(DateTime timestamp){char message [120]; int Year =timestamp.year(); int Month =timestamp.month(); int Day =timestamp.day(); int Hour =timestamp.hour(); int Minute =timestamp.minute(); int Second =timestamp.second(); sprintf(message、 "%02d:%02d:%02d%02d /%02d"、Hour、Minute、Second、Month、Day);メッセージを返す;}ファイルmyFile; void setup(){lcd.begin(16,2); // LCD画面へのインターフェースを初期化し、ディスプレイの寸法(幅と高さ)を指定しますlcd.home(); //カーソルをホームに設定します。つまり0,0rtc.begin(); //リアルタイムクロック変数の使用を開始しますpinMode(10、OUTPUT); pinMode(バックライト、出力); // LEDを出力として宣言しますdigitalWrite(backlight、HIGH); //液晶バックライトをオンにしますbacklightOfftime =millis()+ backlightOnDuration; // LCDバックライトの初期時間遅延をオンに設定if(!SD.begin(4)){lcd.print( "insert SD Card");戻る; } //デジタルピンをバケットの割り込みとして設定しますpinMode(interruptPin_bucket、INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin_bucket)、count、FALLING); //デジタルピンをバケットの割り込みとして設定しますpinMode(interruptPin_menu、INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin_menu)、menu、RISING); myFile =SD.open( "test.txt"、FILE_WRITE); if(myFile){myFile.println( "Rain Gauge Ready-ユニットの電源がオンになっています"); myFile.close(); } DateTime now =rtc.now(); current_minute =now.minute(); loop_minute =now.minute(); current_hour =now.hour(); loop_hour =now.hour(); lcd.setCursor(0,0); lcd.print(print_time(now)); // LCDに「Arduino」を出力lcd.setCursor(1,1); lcd.print( "雨量計"); } void loop(){DateTime now =rtc.now(); current_minute =now.minute(); loop_minute =now.minute(); current_hour =now.hour(); loop_hour =now.hour(); current_day =now.day(); loop_day =now.day(); //ループを開始して現在の日の合計を決定しますwhile(loop_day --current_day ==0){//ループを開始して現在の合計時間を決定しますwhile(loop_hour --current_hour ==0){if(millis()> backlightOfftime){digitalWrite (バックライト、LOW); } if(Bucket_Tip_Occurence ==1){Bucket_Tip_Occurence =0; tip_counter =tip_counter + 1; DateTime now =rtc.now(); myFile =SD.open( "test.txt"、FILE_WRITE); myFile.print( "イベント"); myFile.print(now.year()、DEC); myFile.print( '/'); myFile.print(now.month()、DEC); myFile.print( '/'); myFile.print(now.day()、DEC); myFile.print( ""); myFile.print(now.hour()、DEC); myFile.print( ':'); myFile.print(now.minute()、DEC); myFile.print( ':'); myFile.print(now.second()、DEC); myFile.print( ""); myFile.print(conversion_factor、5); myFile.println(); myFile.close(); delay(200); } else {//現在の時間ステータスを確認するDateTimenow =rtc.now(); loop_hour =now.hour();} switch(Menu_Select){case 1:lcd.clear(); lcd.setCursor(0,0); lcd.print( "現在の時間"); lcd.setCursor(0,1); lcd.print(tip_counter * Conversion_factor); delay(500);壊す;ケース2:lcd.clear(); lcd.setCursor(0,0); lcd.print( "前の時間"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_hour_total); delay(500);壊す;ケース3:lcd.clear(); lcd.setCursor(0,0); lcd.print( "当日"); lcd.setCursor(0,1); lcd.print(Bucket_tip_current_day_total + tip_counter * Conversion_factor); delay(500);壊す;ケース4:lcd.clear(); lcd.setCursor(0,0); lcd.print( "前日"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_day_total); // lcd.print(print_time(now)); delay(500);壊す; }} DateTime now =rtc.now(); //次の1時間のループのカウンターをリセットしますcurrent_hour =now.hour(); loop_day =now.day(); loop_hour =now.hour(); //現在の時間の合計を合計しますBucket_tip_previous_hour_total =tip_counter * Conversion_factor; Bucket_tip_current_day_total =Bucket_tip_previous_hour_total + Bucket_tip_current_day_total; tip_counter =0; / * 1時間ごとの合計のみのオプションのファイル書き込みmyFile =SD.open( "test.txt"、FILE_WRITE); myFile.print( "時間ごとの概要"); myFile.print(Bucket_tip_previous_hour_total); myFile.print(now.year()、DEC); myFile.print( '/'); myFile.print(now.month()、DEC); myFile.print( '/'); myFile.print(now.day()、DEC); myFile.print( ""); myFile.print(now.hour()、DEC); myFile.print( ':'); myFile.print(now.minute()、DEC); myFile.print( ':'); myFile.print(now.second()、DEC); myFile.print( ""); myFile.print(Bucket_tip_previous_hour_total); myFile.println(); myFile.close(); delay(200); * /} //現在の時間の合計を合計するBucket_tip_previous_day_total =Bucket_tip_current_day_total; Bucket_tip_current_day_total =0; Bucket_tip_current_hour_total =0; tip_counter =0; / *前日の合計のみのオプションのファイル書き込みmyFile =SD.open( "test.txt"、FILE_WRITE); myFile.print( "Day Total"); myFile.print(Bucket_tip_previous_day_total); myFile.print(print_time(now)); myFile.close(); * /} //割り込みを開始するfrommバケットリードswitchvoidcount(){static unsigned long last_interrupt_time_bucket =0; unsigned long Interrupt_time_bucket =millis(); //割り込みが300ミリ秒より速く発生する場合は、それがバウンスであると想定し、無視しますif(interrupt_time_bucket --last_interrupt_time_bucket> 300){Bucket_Tip_Occurence =1; } last_interrupt_time_bucket =Interrupt_time_bucket;} //割り込みを開始するメニューからトグルswitchvoidmenu(){static unsigned long last_interrupt_time_menu =0; unsigned long Interrupt_time_menu =millis(); //割り込みが300msより速くなる場合は、バウンスであると想定し、無視しますif(interrupt_time_menu --last_interrupt_time_menu> 300){if(digitalRead(backlight)==LOW){digitalWrite(backlight、HIGH); //以前はオフだった場合はバックライトをオンにします} else Menu_Select =Menu_Select + 1; if(Menu_Select> 4){Menu_Select =1; } backlightOfftime =millis()+ backlightOnDuration; Menu_Select =Menu_Select; last_interrupt_time_menu =Interrupt_time_menu; }} 

カスタムパーツとエンクロージャー

3Dプリント用STL室外機ベース。室外機カバーを3Dプリントするために、PETGを30%infillSTLファイルで印刷しました。 3Dプリント室外ユニットファンネル用に30%infillSTLファイルでPETGを使用して印刷しました。 PETGを30%インフィルで使用して印刷しました。3D印刷用のSTLファイル室外機フィルター。 PETGを使用して20%のインフィルで印刷しました。この部分は、水平方向の最下層または最上層を使用せずに印刷する必要があり、「多孔質」フィルターを作成します。バケットがピボットロッドを介して接続するサブベースを3D印刷するためのSTLファイル。バケットを3D印刷するための30%infill.STLファイルを含むPETGを使用して印刷しました。室内機エンクロージャーを印刷するために、30%infill.STLファイルを使用してPETGを使用して印刷しました。室内機のフロントカバーを3Dプリントするために30%infill.STLファイルでPETGで印刷しました。スペーサーを印刷するために30%infill.STLファイルでPETGを使用して印刷し、LCDユニットをシフトレジスタICより上に上げたままにしました。 PETGを30%インフィルで使用して印刷しました。室外機のFusion360モデル rain_gauge_assembly ___ smaller_profile_v15_CFg0dGwM8s.f3d.STPファイルの室外機 rain_gauge_assembly ___ smaller_profile_v15_jWCS0hjSDq.stepSTEP屋内ユニットのCADモデル controller_box_v1_fwltgu6D0S.stepFusion36屋外ユニットのCADモデル switchプッシュボタンを3Dプリントするためのcontroller_box_v1_NxtSrPG4Vo.f3zSTLファイル

回路図

プロジェクト配線回路図 rain_gauge_NtjqXF6QEw.fzz

製造プロセス

  1. 圧力計
  2. スマートブラインド
  3. イタリア語の単語時計
  4. SigfoxkWhメーター
  5. デジタルハイトゲージを見せて
  6. マイクロメータねじゲージを理解する
  7. 圧力計を理解する
  8. ひずみゲージを理解する
  9. ピラニゲージを理解する
  10. ダイヤフラム圧力計を理解する
  11. ブルドン圧力計を理解する