0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用加速度計(jì)構(gòu)建一個(gè)基于Arduino的地震探測(cè)器

科技觀察員 ? 來源:circuitdigest ? 作者:薩達(dá)姆 ? 2023-01-25 15:57 ? 次閱讀

地震是一種不可預(yù)測(cè)的自然災(zāi)害,會(huì)對(duì)生命和財(cái)產(chǎn)造成損害。它突然發(fā)生,我們無法阻止它,但我們可以從中得到警報(bào)。在當(dāng)今時(shí)代,有許多技術(shù)可以用來檢測(cè)微小的震動(dòng)和敲擊,以便我們可以在地球發(fā)生一些重大振動(dòng)之前采取預(yù)防措施。在這里,我們使用加速度計(jì)ADXL335來檢測(cè)地震前的振動(dòng)。加速度計(jì)ADXL335對(duì)所有三個(gè)軸的振動(dòng)和振動(dòng)都非常敏感。在這里,我們正在 使用加速度計(jì)構(gòu)建一個(gè)基于Arduino的地震探測(cè)器 。

我們?cè)谶@里構(gòu)建這個(gè) 地震探測(cè)器作為PCB上的Arduino屏蔽, 還將使用處理在計(jì)算機(jī)上顯示振動(dòng)圖。

Arduino地震探測(cè)器盾牌所需的組件

加速度計(jì):

加速度計(jì)的引腳說明:

  1. Vcc 5 伏電源應(yīng)在此引腳連接。
  2. X-OUT 此引腳在 x 方向上提供模擬輸出
  3. Y-OUT 此引腳在 y 方向上提供模擬輸出
  4. Z-OUT 該引腳在 z 方向上提供模擬輸出
  5. 接地
  6. ST 此引腳用于設(shè)置傳感器的靈敏度

加速度計(jì)加速度計(jì)-ADXL335

工作說明:

這個(gè)Arduino地震探測(cè)器的工作非常簡(jiǎn)單。正如我們之前提到的,我們已經(jīng)使用加速度計(jì)來檢測(cè)沿三個(gè)軸中的任何一個(gè)的地震振動(dòng),以便每當(dāng)振動(dòng)發(fā)生時(shí),加速度計(jì)都會(huì)感知振動(dòng)并將其轉(zhuǎn)換為等效的ADC值。然后,這些ADC值由Arduino讀取,并通過16x2 LCD顯示。我們還使用處理在圖形上顯示了這些值。通過在此處瀏覽我們的其他加速度計(jì)項(xiàng)目,了解有關(guān)加速度計(jì)的更多信息。

首先,我們需要通過在 Arduino 通電時(shí)采集周圍振動(dòng)的樣本來 校準(zhǔn)加速度計(jì) 。然后我們需要從實(shí)際讀數(shù)中減去這些樣本值以獲得真實(shí)讀數(shù)。需要進(jìn)行此校準(zhǔn),以便它不會(huì)顯示有關(guān)其正常周圍振動(dòng)的警報(bào)。找到真實(shí)讀數(shù)后,Arduino將這些值與預(yù)定義的最大值和最小值進(jìn)行比較。如果Arduino發(fā)現(xiàn)任何變化值大于或小于兩個(gè)方向(負(fù)和正)上任何軸的預(yù)定義值,則Arduino會(huì)觸發(fā)蜂鳴器并通過16x2 LCD顯示警報(bào)狀態(tài),并且LED也打開。我們可以通過更改Arduino代碼中的預(yù)定義值來調(diào)整地震探測(cè)器的靈敏度。

阿杜伊諾地震指示器工作框圖

使用加速度計(jì)的地震指示器 arduino 盾牌

電路說明:

這個(gè)地震探測(cè)器Arduino Shield PCB的電路也很簡(jiǎn)單.在這個(gè)項(xiàng)目中,我們使用了Arduino來讀取加速度計(jì)的模擬電壓并將其轉(zhuǎn)換為數(shù)字值。Arduino還驅(qū)動(dòng)蜂鳴器,LED,16x2 LCD,并計(jì)算和比較值并采取適當(dāng)?shù)拇胧?。下一部分是加速度?jì),它檢測(cè)大地振動(dòng)并在 3 個(gè)軸(X、Y 和 Z)上產(chǎn)生模擬電壓。LCD用于顯示X,Y和Z軸的值變化,并在其上顯示警報(bào)消息。此LCD以4位模式連接到Arduino。RS、GND 和 EN 引腳直接連接到 Arduino 的 9、GND 和 8 個(gè)引腳,LCD 的其余 4 個(gè)數(shù)據(jù)引腳(即 D4、D5、D6 和 D7)直接連接到 Arduino 的數(shù)字引腳 7、6、5 和 4。蜂鳴器通過 NPN BC547 晶體管連接到 Arduino 的引腳 12。10k電位器也用于控制LCD的亮度。

使用加速度計(jì)的地震指示器 arduino 屏蔽電路圖

編程說明:

在這個(gè)Arduino地震探測(cè)器項(xiàng)目中,我們制作了 兩個(gè)代碼 :一個(gè)用于Arduino檢測(cè)地震,另一個(gè)用于處理IDE,用于在計(jì)算機(jī)上繪制圖形上的地震振動(dòng)。我們將一一了解這兩個(gè)代碼:

Arduino 代碼

首先,我們根據(jù)加速度計(jì)的放置表面校準(zhǔn)加速度計(jì),使其不會(huì)顯示有關(guān)其正常周圍振動(dòng)的警報(bào)。在此校準(zhǔn)中,我們采集一些樣本,然后取平均值并存儲(chǔ)在變量中。

for(int i=0;i
  {
    xsample+=analogRead(x);
    ysample+=analogRead(y);
    zsample+=analogRead(z);
  }

  xsample/=samples;   // taking avg for x
  ysample/=samples;   // taking avg for y
  zsample/=samples;   // taking avg for z
  
  delay(3000);
  lcd.clear();
  lcd.print("Calibrated");
  delay(1000);
  lcd.clear();
  lcd.print("Device Ready");
  delay(1000);
  lcd.clear();
  lcd.print(" X     Y     Z   ");

現(xiàn)在,每當(dāng)加速度計(jì)獲取讀數(shù)時(shí),我們都會(huì)從讀數(shù)中減去這些樣本值,以便它可以忽略周圍的振動(dòng)。

int value1=analogRead(x);   // reading x out
    int value2=analogRead(y);   //reading y out
    int value3=analogRead(z);   //reading z out

    int xValue=xsample-value1;    // finding change in x
    int yValue=ysample-value2;    // finding change in y
    int zValue=zsample-value3;    // finding change in z

  /*displying change in x,y and z axis values over lcd*/
    lcd.setCursor(0,1);
    lcd.print(zValue);
    lcd.setCursor(6,1);
    lcd.print(yValue);
    lcd.setCursor(12,1);
    lcd.print(zValue);
    delay(100)

然后Arduino將這些校準(zhǔn)(減去)值與預(yù)定義的限制進(jìn)行比較。并采取相應(yīng)的行動(dòng)。如果值高于預(yù)定義的值,則它將發(fā)出蜂鳴器嗶嗶聲并使用處理在計(jì)算機(jī)上繪制振動(dòng)圖。

/* comparing change with predefined limits*/
    if(xValue < minVal || xValue > maxVal  || yValue < minVal || yValue > maxVal  || zValue < minVal || zValue > maxVal)
    { 
      if(buz == 0)
      start=millis();   // timer start
       buz=1;       // buzzer / led flag activated
    } 

   else if(buz == 1)        // buzzer flag activated then alerting earthquake
   {
      lcd.setCursor(0,0);
      lcd.print("Earthquake Alert   ");
      if(millis()>= start+buzTime)    
      buz=0;
   }

處理代碼:

我們使用處理設(shè)計(jì)了一個(gè)用于地震振動(dòng)的圖表,其中我們定義了窗口的大小、單位、字體大小、背景、讀取和顯示串行端口、打開選定的串行端口等。

// set the window size:  and Font size
  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);
  size(1200, 700);        
 
 // List all the available serial ports
 println(Serial.list());
 myPort = new Serial(this, "COM43", 9600);
 println(myPort);
 myPort.bufferUntil('\\n');
 background(80)

在下面的函數(shù)中,我們從串行端口接收數(shù)據(jù)并提取所需的數(shù)據(jù),然后將其映射到圖形的大小。

// extracting all required values of all three axis:
 int l1=inString.indexOf("x=")+2;
 String temp1=inString.substring(l1,l1+3);
 l1=inString.indexOf("y=")+2;
 String temp2=inString.substring(l1,l1+3);
 l1=inString.indexOf("z=")+2;
 String temp3=inString.substring(l1,l1+3);
 
 //mapping x, y and z value with graph dimensions
 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 軸的值。

//ploting graph window, unit 
  strokeWeight(2);
  stroke(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);
   .... ....
   ..........

在此之后,我們使用 3 種不同的顏色在圖形上繪制值,例如 x 軸值的藍(lán)色、y 軸的綠色和紅色表示的 z。

stroke(0,0,255);         
   if(y1 == 0)
   y1=height-inByte1-shift;
   line(x, y1, x+2, height-inByte1-shift) ;
   y1=height-inByte1-shift;
   
   stroke(0,255,0);            
   if(y2 == 0)
   y2=height-inByte2-shift;
   line(x, y2, x+2, height-inByte2-shift) ;
   y2=height-inByte2-shift;
   
   stroke(255,0,0);             
   if(y2 == 0)
   y3=height-inByte3-shift;
   line(x, y3, x+2, height-inByte3-shift) ;
   y3=height-inByte3-shift;

#include // lcd Header

LiquidCrystal lcd(9,8,7,6,5,4); // pins for LCD Connection

#define buzzer 12 // buzzer pin

#define led 13 //led pin

#define x A0 // x_out pin of Accelerometer

#define y A1 // y_out pin of Accelerometer

#define z A2 // z_out pin of Accelerometer

/ variables /

int xsample=0;

int ysample=0;

int zsample=0;

long start;

int buz=0;

/ Macros /

#define samples 50

#define maxVal 20 // max change limit

#define minVal -20 // min change limit

#define buzTime 5000 // buzzer on time

void setup()

{

lcd.begin(16,2); //initializing lcd

Serial.begin(9600); // initializing serial

delay(1000);

lcd.print("EarthQuake ");

lcd.setCursor(0,1);

lcd.print("Detector ");

delay(2000);

lcd.clear();

lcd.print("Circuit Digest ");

lcd.setCursor(0,1);

lcd.print("Saddam Khan ");

delay(2000);

lcd.clear();

lcd.print("Calibrating.....");

lcd.setCursor(0,1);

lcd.print("Please wait...");

pinMode(buzzer, OUTPUT);

pinMode(led, OUTPUT);

buz=0;

digitalWrite(buzzer, buz);

digitalWrite(led, buz);

for(int i=0;i

{

xsample+=analogRead(x);

ysample+=analogRead(y);

zsample+=analogRead(z);

}

xsample/=samples; // taking avg for x

ysample/=samples; // taking avg for y

zsample/=samples; // taking avg for z

delay(3000);

lcd.clear();

lcd.print("Calibrated");

delay(1000);

lcd.clear();

lcd.print("Device Ready");

delay(1000);

lcd.clear();

lcd.print(" X Y Z ");

}

void loop()

{

int value1=analogRead(x);   // reading x out

int value2=analogRead(y);   //reading y out

int value3=analogRead(z);   //reading z out


int xValue=xsample-value1;    // finding change in x

int yValue=ysample-value2;    // finding change in y

int zValue=zsample-value3;    // finding change in z

/ displying change in x,y and z axis values over lcd /

lcd.setCursor(0,1);

lcd.print(zValue);

lcd.setCursor(6,1);

lcd.print(yValue);

lcd.setCursor(12,1);

lcd.print(zValue);

delay(100);

/* comparing change with predefined limits*/

if(xValue < minVal || xValue > maxVal  || yValue < minVal || yValue > maxVal  || zValue < minVal || zValue > maxVal)

{ 

  if(buz == 0)

  start=millis();   // timer start

   buz=1;       // buzzer / led flag activated

}

else if(buz == 1) // buzzer flag activated then alerting earthquake

{

lcd.setCursor(0,0);

  lcd.print("Earthquake Alert   ");

  if(millis()>= start+buzTime)    

  buz=0;

}

else

{

  lcd.clear();

  lcd.print(" X     Y     Z   ");

}


digitalWrite(buzzer, buz);    // buzzer on and off command

digitalWrite(led, buz);   // led on and off command

/ sending values to processing for plot over the graph /

Serial.print("x=");

Serial.println(xValue);

Serial.print("y=");

Serial.println(yValue);

Serial.print("z=");

Serial.println(zValue);  

Serial.println(" $");

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 探測(cè)器
    +關(guān)注

    關(guān)注

    14

    文章

    2596

    瀏覽量

    72805
  • 加速度計(jì)
    +關(guān)注

    關(guān)注

    6

    文章

    695

    瀏覽量

    45807
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186376
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MEMS加速度計(jì)性能成熟

    結(jié)果。這表明,MEMS加速度計(jì)非常適合新型狀態(tài)監(jiān)測(cè)產(chǎn)品的重新構(gòu)建輸出通道,特別是可實(shí)現(xiàn)基于半導(dǎo)體元件的全新概念,這些概念可在單個(gè)+5 V電源上運(yùn)行,例如無線智能傳感。從表面上看,第
    發(fā)表于 10-29 17:11

    2476-100加速度計(jì)

    ,密封,低噪聲的SDI 1522型表面安裝加速度計(jì),在氣候室內(nèi)分別進(jìn)行了測(cè)試,編程,校準(zhǔn)和驗(yàn)證以確保在熱揮發(fā)條件下的最大精度。 2470和2476包含初始校準(zhǔn)報(bào)告詳細(xì)測(cè)試性能數(shù)據(jù)。板載穩(wěn)壓和內(nèi)部
    發(fā)表于 05-27 19:18

    2460-010加速度計(jì)

    的噪聲和長(zhǎng)期穩(wěn)定性是絕對(duì)要求。2460包含3英尺長(zhǎng)的集成電纜,并且在操作上與2466相同,它具有個(gè)連接,可輕松定制電纜的長(zhǎng)度和位置。每個(gè)SDI三軸加速度計(jì)均具有三
    發(fā)表于 05-28 14:41

    2422H-400加速度計(jì)

    在零到中頻應(yīng)用中經(jīng)歷過大或快速的溫度過高溫度變化或長(zhǎng)時(shí)間保持極端高溫或低溫。SDI 2422H型包含三個(gè)正交安裝的高級(jí)加速度計(jì)LCC,使它們對(duì)-55至+ 125°C的溫度變化和梯度更加不敏感,并大大
    發(fā)表于 05-28 14:44

    2227-050加速度計(jì)模塊

    獲得專利的電容式硅感測(cè)元件和個(gè)密封LCC封裝的高精度,定制CMOS集成電路。差分輸出MEMS加速度計(jì)的電壓在PCB上轉(zhuǎn)換為與施加的電流成比例的電流加速??梢詾?227模塊提供熱校準(zhǔn)參
    發(fā)表于 05-28 14:56

    1410L-100加速度計(jì)

    `1410型是款集成式加速度計(jì),可用于零至中頻儀器應(yīng)用測(cè)量加速。每個(gè)微型密封包裝結(jié)合了微機(jī)械電容感應(yīng)元件和包括檢測(cè)放大器和sigma-的定制集成電路Delta A / D轉(zhuǎn)換。對(duì)溫
    發(fā)表于 05-28 15:01

    1527J-010加速度計(jì)

    `1527型是款小型,輕巧的集成MEMS加速度計(jì),用于用于要求高重復(fù)性,低重復(fù)性的戰(zhàn)術(shù)級(jí)慣性應(yīng)用噪聲,以及在-55至+ 125°C的環(huán)境中的長(zhǎng)期穩(wěn)定性。 1527型加速度計(jì)是由美國(guó)SDI完全
    發(fā)表于 05-28 15:04

    1521L-200加速度計(jì)

    `1521型是款低成本通用集成MEMS加速度計(jì),適用于零至中頻需要極低噪聲和可靠長(zhǎng)期穩(wěn)定性的工業(yè)應(yīng)用。每個(gè)微型密封密封封裝結(jié)合了MEMS電容式感應(yīng)元件和包含感應(yīng)的定制集成電路放大器和差分輸出級(jí)
    發(fā)表于 05-28 15:08

    設(shè)計(jì)具有成本效益的加速度計(jì)

    等低成本 MEMS 加速度計(jì)稍貴(約 40 美元)。也許對(duì)于某些應(yīng)用我們可以避免使用 ADXL355 并節(jié)省更多的錢;知道是否可行的唯方法是比較兩個(gè)傳感。為了比較這兩
    發(fā)表于 08-23 06:20

    文帶你了解加速度計(jì)

    加速度計(jì)到底是什么?本文將對(duì)加速度計(jì)進(jìn)行簡(jiǎn)單介紹。
    發(fā)表于 07-07 10:52 ?1.4w次閱讀

    選擇個(gè)加速度計(jì)的技巧

    加速度計(jì),是測(cè)量運(yùn)載體線加速度的儀表。加速度計(jì)由檢測(cè)質(zhì)量(也稱敏感質(zhì)量)、支承、電位、彈簧、阻尼和殼體組成。
    發(fā)表于 09-17 11:46 ?10次下載
    選擇<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>加速度計(jì)</b>的技巧

    MEMS加速度計(jì)的概念,MEMS加速度計(jì)的原理

    MEMS加速度計(jì)的概念 加速度計(jì)種慣性傳感,能夠測(cè)量物體的加速力。加速力就是當(dāng)物體在
    發(fā)表于 06-01 11:28 ?4362次閱讀

    加速度計(jì)的安裝方法分享

    在本文中,了解安裝加速度計(jì)的不同方法、它們對(duì)加速度計(jì)頻率響應(yīng)的影響以及安裝MEMS加速度計(jì)的解決方案。
    的頭像 發(fā)表于 04-16 16:35 ?5145次閱讀
    <b class='flag-5'>加速度計(jì)</b>的安裝方法分享

    使用Arduino加速度計(jì)構(gòu)建個(gè)簡(jiǎn)單且便宜的計(jì)步器

    在本教程中,我們將使用 Arduino加速度計(jì)構(gòu)建個(gè)簡(jiǎn)單且便宜的 DIY 計(jì)步器。該計(jì)步器將計(jì)算腳步的數(shù)量并將其顯示在16x2 LCD
    的頭像 發(fā)表于 08-19 15:15 ?4643次閱讀
    使用<b class='flag-5'>Arduino</b>和<b class='flag-5'>加速度計(jì)</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>簡(jiǎn)單且便宜的計(jì)步器

    mems加速度計(jì)的量程是指什么

    Mems加速度計(jì)(Micro Electro Mechanical Systems Accelerometer)是種微型化的加速度傳感,可以測(cè)量物體在三
    的頭像 發(fā)表于 12-15 10:21 ?1450次閱讀