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

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

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

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

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

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

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

Arduino地震探測器盾牌所需的組件

加速度計(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

工作說明:

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

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

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

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

電路說明:

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

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

編程說明:

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

Arduino 代碼

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

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ù)中減去這些樣本值,以便它可以忽略周圍的振動。

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)的行動。如果值高于預(yù)定義的值,則它將發(fā)出蜂鳴器嗶嗶聲并使用處理在計(jì)算機(jī)上繪制振動圖。

/* 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ì)了一個用于地震振動的圖表,其中我們定義了窗口的大小、單位、字體大小、背景、讀取和顯示串行端口、打開選定的串行端口等。

// 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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 探測器
    +關(guān)注

    關(guān)注

    14

    文章

    2646

    瀏覽量

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

    關(guān)注

    6

    文章

    703

    瀏覽量

    45919
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6471

    瀏覽量

    187259
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    2476-100加速度計(jì)

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

    2460-010加速度計(jì)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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