地震は、人命や財産に損害を与える予測不可能な自然災害です。それは突然起こり、私たちはそれを止めることはできませんが、それから警告を受けることができます。今日では、小さな揺れやノックを検出するために使用できる多くの技術があり、地球のいくつかの大きな振動の前に予防策を講じることができます。ここでは、加速度計ADXL335を使用して地震前の振動を検出しています。加速度計ADXL335は、3つの軸すべてに加えて揺れや振動に非常に敏感です。ここでは、加速度計を使用してArduinoベースの地震検出器を構築しています。
ここでは、この地震検出器をPCB上のArduinoシールドとして構築しており、 Processingを使用してコンピューター上で振動グラフも表示します。
必要なコンポーネント:
- Arduino UNO
- 加速度計ADXL335
- 16x2 LCD
- ブザー
- BC547トランジスタ
- 1k抵抗器
- 10Kポット
- 導いた
- 電源9v / 12v
- バーグスティックオス/メス
加速度計:
加速度計のピンの説明:
- Vcc5ボルト電源はこのピンに接続する必要があります。
- X-OUTこのピンはx方向にアナログ出力を提供します
- Y-OUTこのピンはy方向にアナログ出力を提供します
- Z-OUTこのピンはz方向にアナログ出力を提供します
- GNDグラウンド
- STこのピンはセンサーの感度を設定するために使用されます
また、加速度計を使用して他のプロジェクトを確認してください。
- Arduinoを使用したピンポンゲーム
- 加速度計ベースのハンドジェスチャ制御ロボット。
- GPS、GSM、加速度計を使用したArduinoベースの車両事故警報システム
作業説明:
この地震検知器の操作は簡単です。先に述べたように、3つの軸のいずれかに沿った地震の振動を検出するために加速度計を使用しました。これにより、振動が発生するたびに、加速度計はその振動を感知し、同等のADC値に変換します。次に、これらのADC値がArduinoによって読み取られ、16x2LCDに表示されます。これらの値は、Processingを使用してグラフにも表示されています。こちらで他の加速度計プロジェクトを実行して、加速度計の詳細をご覧ください。
まず、 Arduinoの電源が入るたびに周囲の振動のサンプルを取得して、加速度計を校正する必要があります。次に、実際の測定値からこれらのサンプル値を差し引いて、実際の測定値を取得する必要があります。このキャリブレーションは、通常の周囲の振動に関してアラートを表示しないようにするために必要です。実際の測定値を見つけた後、Arduinoはこれらの値を事前定義された最大値および最小値と比較します。 Arduinoが、両方向(負と正)の軸の事前定義された値よりも多かれ少なかれ変更値を検出した場合、Arduinoはブザーをトリガーし、16x2 LCDにアラートのステータスを表示し、LEDもオンになります。 Arduinoコードの事前定義値を変更することで、地震検出器の感度を調整できます。
デモンストレーションビデオとArduinoコードは記事の最後にあります。
回路の説明:
この地震検知器ArduinoシールドPCBの回路も簡単です。このプロジェクトでは、加速度計のアナログ電圧を読み取り、それらをデジタル値に変換するArduinoを使用しました。 Arduinoはまた、ブザー、LED、16x2 LCDを駆動し、値を計算して比較し、適切なアクションを実行します。次の部分は、地球の振動を検出し、3軸(X、Y、Z)でアナログ電圧を生成する加速度計です。 LCDは、X、Y、Z軸の値の変化を表示し、その上にアラートメッセージを表示するために使用されます。このLCDは4ビットモードでArduinoに接続されています。 RS、GND、およびENピンはArduinoの9、GND、および8ピンに直接接続され、LCDの残りの4つのデータピン(D4、D5、D6、およびD7)はArduinoのデジタルピン7、6、5、および4に直接接続されます。 。ブザーは、NPNBC547トランジスタを介してArduinoのピン12に接続されています。 LCDの明るさを制御するために10kポットも使用されます。
プログラミングの説明:
この地震検出器ArduinoShieldでは、2つのコードを作成しました。1つはArduinoが地震を検出するためのもので、もう1つはProcessingIDEがコンピューターのグラフ上に地震の振動をプロットするためのものです。両方のコードについて1つずつ学習します。
Arduinoコード:
まず、加速度計をその配置面に対して校正し、通常の周囲の振動に関してアラートが表示されないようにします。このキャリブレーションでは、いくつかのサンプルを取得し、それらの平均を取得して変数に格納します。
for(int i = 0; i
これで、加速度計が読み取り値を取得するたびに、読み取り値からそれらのサンプル値を差し引いて、周囲の振動を無視できるようにします。
int value1 = analogRead(x); // xを読み取るintvalue2 = analogRead(y); // yを読み取るintvalue3 = analogRead(z); // zを読み取るintxValue = xsample-value1; // xの変化を見つけるintyValue = ysample-value2; // yの変化を見つけるintzValue = zsample-value3; // zの変化を見つける/ * lcd上のx、y、z軸の値の変化を表示する* / lcd.setCursor(0,1); lcd.print(zValue); lcd.setCursor(6,1); lcd.print(yValue); lcd.setCursor(12,1); lcd.print(zValue); delay(100)
次に、Arduinoはそれらのキャリブレーションされた(減算された)値を事前定義された制限と比較します。そしてそれに応じて行動を起こします。値が事前定義された値よりも高い場合、ブザーが鳴り、Processingを使用してコンピューターに振動グラフがプロットされます。
/ *変更を事前定義された制限と比較します* / if(xValue <minVal --xValue> maxVal --yValue <minVal --yValue> maxVal --zValue <minVal --zValue> maxVal){if(buz == 0)start =ミリス(); //タイマー開始buz = 1; //ブザー/ LEDフラグがアクティブになりました} else if(buz == 1)//ブザーフラグがアクティブになり、地震を警告します{lcd.setCursor(0,0); lcd.print( "Earthquake Alert"); if(millis()> = start + buzTime)buz = 0; }
処理コード:
以下は添付の処理コードです。以下のリンクからコードをダウンロードできます。
地震検出器処理コード
地震の振動について、処理を使用してグラフを設計しました。このグラフでは、ウィンドウのサイズ、単位、フォントサイズ、背景、シリアルポートの読み取りと表示、選択したシリアルポートのオープンなどを定義しました。
//ウィンドウサイズを設定します:およびフォントサイズf6 = createFont( "Arial"、6、true); f8 = createFont( "Arial"、8、true); f10 = createFont( "Arial"、10、true); f12 = createFont( "Arial"、12、true); f24 = createFont( "Arial"、24、true); サイズ(1200、700); //使用可能なすべてのシリアルポートを一覧表示しますprintln(Serial.list()); myPort = new Serial(this、 "COM43"、9600); println(myPort); myPort.bufferUntil( '\ n'); 背景(80)
以下の関数では、シリアルポートからデータを受信し、必要なデータを抽出して、グラフのサイズにマッピングしました。
// 3つの軸すべてに必要なすべての値を抽出します:int l1 = inString.indexOf( "x =")+ 2; 文字列temp1 = inString.substring(l1、l1 + 3); l1 = inString.indexOf( "y =")+ 2; 文字列temp2 = inString.substring(l1、l1 + 3); l1 = inString.indexOf( "z =")+ 2; 文字列temp3 = inString.substring(l1、l1 + 3); // x、y、zの値をグラフの次元にマッピングするfloat inByte1 = float(temp1 +(char)9); inByte1 = map(inByte1、-80,80、0、height-80); float inByte2 = float(temp2 +(char)9); inByte2 = map(inByte2、-80,80、0、height-80); float inByte3 = float(temp3 +(char)9); inByte3 = map(inByte3、-80,80、0、height-80); float x = map(xPos、0,1120,40、width-40);
この後、単位空間、最大および最小制限、x、y、およびz軸の値をプロットしました。
//グラフウィンドウのプロット、単位strokeWeight(2); ストローク(175); Line(0,0,0,100); textFont(f24); fill(0,00,255); textAlign(RIGHT); xmargin( "EarthQuake Graph By Circuit Digest"、200,100); fill(100); strokeWeight(100); line(1050,80,1200,80);……………..。
この後、x軸の値が青、y軸が緑、zが赤で表される3つの異なる色を使用して、グラフ上に値をプロットします。
ストローク(0,0,255); if(y1 == 0)y1 = height-inByte1-shift; line(x、y1、x + 2、height-inByte1-shift); y1 = height-inByte1-shift; ストローク(0,255,0); if(y2 == 0)y2 = height-inByte2-shift; line(x、y2、x + 2、height-inByte2-shift); y2 = height-inByte2-shift; ストローク(255,0,0); if(y2 == 0)y3 = height-inByte3-shift; line(x、y3、x + 2、height-inByte3-shift); y3 = height-inByte3-shift;
また、他の処理プロジェクトを実行して、処理の詳細を確認してください。
EasyEDAを使用した回路およびPCB設計:
EasyEDAは、回路図キャプチャ、回路シミュレーション、PCB設計のワンストップソリューションであるだけでなく、低コストのPCBプロトタイプおよびコンポーネントソーシングサービスも提供します。彼らは最近、電子部品の在庫が豊富で、ユーザーがPCBの注文と一緒に必要な部品を注文できる、部品調達サービスを開始しました。
回路とPCBを設計する際に、回路とPCBの設計を公開して、他のユーザーがそれらをコピーまたは編集してそこから利益を得ることができるようにすることもできます。また、この地震インジケーターシールドの回路とPCBのレイアウト全体を公開し ました。 Arduino UNO、以下のリンクを確認してください:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
以下は、EasyEDAからのPCBレイアウトのトップレイヤーのスナップショットです。「レイヤー」ウィンドウからレイヤーを選択することにより、PCBの任意のレイヤー(トップ、ボトム、トップシルク、ボトムシルクなど)を表示できます。
EasyEDAを使用してPCBの写真ビューを表示することもできます 。
オンラインでのサンプルの計算と注文:
PCBの設計が完了したら、 製造出力 のアイコンをクリック すると、PCB注文ページが表示されます。ここでは、Gerber ViewerでPCBを表示したり、PCBのGerberファイルをダウンロードしたりできます。ここでは、注文するPCBの数、必要な銅層の数、PCBの厚さ、銅の重量、さらにはPCBの色を選択できます。すべてのオプションを選択したら、「カートに保存」をクリックして注文を完了します。最近、PCBレートが大幅に低下し、10cm x10cmサイズの2層PCB10個を2ドルで注文できるようになりました。
EasyEDAから入手したPCBは次のとおりです。
以下は、PCBにコンポーネントをはんだ付けした後の最終的なシールドの 写真です。