اطلاعیه

Collapse
No announcement yet.

ماژول شتاب سنج سه محوره دیجیتال adxl345

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ماژول شتاب سنج سه محوره دیجیتال adxl345

    ماژول شتاب سنج سه محوره دیجیتال ADXL345
    این ماژول یک شتاب سنج سه جهته MEMS با دقت زیاد 13 بیت و مصرف کم است. دیتا دیجیتال خروجی این ماژول دارای فرمت 16 بیتی مکمل 2 (twos complement) می باشد و اینترفیس ارتباطی آن SPI و I2C است.ماژول ADXL345 مناسب برای اندازه گیری شتاب استاتیک گرانش در هنگام سنجش شیب و همچنین شتاب دینامیک که حاصل از حرکت یا شوک می باشد. دقت اندازه گیری بالا 4mg/LSB امکان اندازه گیری تغییر زاویه کمتر از 1.0 درجه را برای این ماژول فراهم می آورد. از قابلیتهای این ماژول می توان وجود و عدم حرکت و همچنین شتاب در هر جهتی که از سطح تنظیم شده باشد،تشخیص ضربات آهسته و تشخیص سقوط آزاد در هنگام سقوط دستگاه را نام برد.این ماژول دارای 32 سطح بافر بصورت FIFO است که می تواند برای ذخیره دیتا و حداقل رساندن پردازش مورد استفاده قرار گیرد. مد Low Power این ماژول قادر به تشخیص هوشمندحرکت مبتنی بر مدیریت مصرف انرژی با تشخیص آستانه سنجش و اندازه گیری شتاب فعال با کمترین اتلاف مصرف انرژی است.این ماژول را به راحتی می توان به وسیله آردوینو راه اندازی کرد.

    ویژگی ها
    تغذیه: 2.0-3.6VDC
    صرف انرژی فوق العاده پایین: 4uA در مد اندازه گیری و 0.1uA در حالت استندبای
    قابلیت تشخیص ضربات آهسته
    قابلیت تشخیص سقوط آزاد
    دارای رابط SPI و I2C

    مثال
    مثال زیر چگونگی اتصال ماژول ADXL345 به آردوینو و نحوه راه اندازی آن را نشان می دهد.
    کد HTML:
    #include <Wire.h>
    #include <ADXL345.h>
    
    
    ADXL345 adxl; //variable adxl is an instance of the ADXL345 library
    
    void setup(){
      Serial.begin(9600);
      adxl.powerOn();
    
      //set activity/ inactivity thresholds (0-255)
      adxl.setActivityThreshold(75); //62.5mg per increment
      adxl.setInactivityThreshold(75); //62.5mg per increment
      adxl.setTimeInactivity(10); // how many seconds of no activity is inactive?
     
      //look of activity movement on this axes - 1 == on; 0 == off 
      adxl.setActivityX(1);
      adxl.setActivityY(1);
      adxl.setActivityZ(1);
     
      //look of inactivity movement on this axes - 1 == on; 0 == off
      adxl.setInactivityX(1);
      adxl.setInactivityY(1);
      adxl.setInactivityZ(1);
     
      //look of tap movement on this axes - 1 == on; 0 == off
      adxl.setTapDetectionOnX(0);
      adxl.setTapDetectionOnY(0);
      adxl.setTapDetectionOnZ(1);
     
      //set values for what is a tap, and what is a double tap (0-255)
      adxl.setTapThreshold(50); //62.5mg per increment
      adxl.setTapDuration(15); //625μs per increment
      adxl.setDoubleTapLatency(80); //1.25ms per increment
      adxl.setDoubleTapWindow(200); //1.25ms per increment
     
      //set values for what is considered freefall (0-255)
      adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment
      adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment
     
      //setting all interupts to take place on int pin 1
      //I had issues with int pin 2, was unable to reset it
      adxl.setInterruptMapping( ADXL345_INT_SINGLE_TAP_BIT,   ADXL345_INT1_PIN );
      adxl.setInterruptMapping( ADXL345_INT_DOUBLE_TAP_BIT,   ADXL345_INT1_PIN );
      adxl.setInterruptMapping( ADXL345_INT_FREE_FALL_BIT,    ADXL345_INT1_PIN );
      adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );
      adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );
     
      //register interupt actions - 1 == on; 0 == off  
      adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);
      adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);
      adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT,  1);
      adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   1);
      adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);
    }
    
    void loop(){
      
      //Boring accelerometer stuff   
      int x,y,z;  
      adxl.readAccel(&x, &y, &z); //read the accelerometer values and store them in variables  x,y,z
    
      // Output x,y,z values - Commented out
      //Serial.print(x);
      //Serial.print(y);
      //Serial.println(z);
    
    
      //Fun Stuff!    
      //read interrupts source and look for triggerd actions
      
      //getInterruptSource clears all triggered actions after returning value
      //so do not call again until you need to recheck for triggered actions
       byte interrupts = adxl.getInterruptSource();
      
      // freefall
      if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
        Serial.println("freefall");
        //add code here to do when freefall is sensed
      } 
      
      //inactivity
      if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){
        Serial.println("inactivity");
         //add code here to do when inactivity is sensed
      }
      
      //activity
      if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
        Serial.println("activity"); 
         //add code here to do when activity is sensed
      }
      
      //double tap
      if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){
        Serial.println("double tap");
         //add code here to do when a 2X tap is sensed
      }
      
      //tap
      if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
        Serial.println("tap");
         //add code here to do when a tap is sensed
      } 
     
    }
    لینک دانلود پروژه
    جدیدترین ویرایش توسط ali_ezzati; ۱۰:۳۳ ۱۳۹۵/۰۷/۱۹.
لطفا صبر کنید...
X