آردوینو شتاب و ژایرو پروژه های آردوینو

آموزش تشخیص تک ضربه و دوضربه توسط ماژول شتاب و ژایرو ADXLl345 آردوینو

آموزش adxl345 آردوینو
نوشته شده توسط علیرضا قربانی

بدون شک با ژیروسکوپ آشنایی دارید !! همان وسیله‌ی داخل تلفن همراهتنان که می‌توانید جهت گوشی خود را تشخیص دهید.ولی این تنها کار یک ژیروسکوپ نمی‌باشد. به وسیله‌ی adxl 345 علاوه بر تشخیص شتاب استاتیک و شتاب داینامیک ، می‌توانید تک ضربه ، دو ضربه و همچنین سقوط آزاد را تشخیص دهید.در ادامه این پست با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

 

ADXL345

ADXL345

adxl345 یک ماژول ژیروسکوپ سه محوره با دقت اندازه‌گیری ۱۰ الی ۱۳ بیت (قابل تنظیم توسط کاربر) می‌باشد.امروز قصد ندارم راجب این مسائل خسته کننده صحبت کنم و می‌خواهم بی درنگ به سراغ  ویژگی‌های خاص این ماژول adxl345 یعنی تشخیص تک ضربه ، دوضربه و همچنین قابلیت تشخیص فعالیت و عدم فعالیت این مازول بروم.

یکی از ویژگی‌های منحصر‌ به فرد این ماژول ،۲ پین وقفه‌ای است(INT1 و INT2)  که با تنظیم کردن آن‌ها می‌توان هنگام یک رخداد در ماژول ، آن دو پین را به وضعیت HIGH در آورد. شما می‌توانید این دو  پین وقفه را به پین‌های وقفه‌ی آردوینو متصل کنید و هنگامی یک رویداد خاص در ماژول adxl رخ داد ،برنامه‌ی آردوینو متوقف شود و به سرعت آن رویداد را بررسی کند.

 

سخت افزار مورد نیاز

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

 

اتصالات

ماژول adxl345 برای ارتباط با آردینو از دو پروتکل spi و i2c  پشتیبانی می‌کند ولی ما قصد داریمم در این آموزش از پروتکل i2c استفاده کنیم.پس فقط کافیست دو پین SDA و SCL را به آردوینو خود متصل کنیم. همچنین برای اینکه به ماژول را متوجه کنیم که می‌خواهیم از پروتکل I2C استفاده کنیم ، باید پین CS ماژول را به ۳٫۳ ولت آردوینو متصل کنیم.

آموزش adxl345 آردوینو

اتصال adxl 345 به آردوینو

 

 

 برنامه نویسی

ابتدا کتابخانه ماژول ژیروسکوپ سه محوره adxl345 را دانلود کنید و سپس طبق آموزش زیر آن  را به نرم‌افزار آردوبنو اضافه کنید.

دانلود کتابخانه ماژول adxl345

آموزش نصب کتابخانه در آردوینو

 

کد‌های زیر را بر روی آردوینو آپلود کنید. و نتیجه را مشاهده کنید. در صورت تحریک ماژول عبارت actibity بر روی سریال مانیتور نمایش داده می‌شود ، همچنین در صورت تک ضربه عبارت single tap و برای دو ضربه عبارت double tap  برو روی سریال مانیتور نرم‌افزار نمایش داده می‌شود.

//Arduino 1.0+ Only!
//Arduino 1.0+ Only!

#include <Wire.h>
#include <ADXL345.h>


ADXL345 adxl; //می سازیمADXL345آبجکتی از کلاس

void setup()
{

 Serial.begin(9600);
 adxl.powerOn();

 //تنظیم آستانه حالت فعالیت و عدم فعالیت ماژول (۰-۲۵۵)
 adxl.setActivityThreshold(75); //62.5mg per increment
 adxl.setInactivityThreshold(75); //62.5mg per increment
 adxl.setTimeInactivity(10); // مقدار زمان بین حالت فعال و غیر فعال

 //فعال کردن تشخیص ماژول در راستای محور های مختصات - ۱ == 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);

 //تنظیم آستانه تشخیص تک ضربه و دو ضربه (۰-۲۵۵)
 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

 //تنظیم مقدار آستانه سقوط آزادb(0-255)
 adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment
 adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment

 //تنظیم تمام وقفه ها برای پین شماره ۱
 //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 );

 //فعال و غیر فعال کردن وقفه برای هر یک از حالت های تک ضربه ، دو ضربه ، سقوط آزاد و همچنین حالت فعال و غیر فعال - ۱ == 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(){

 //خواندن مقدار ماژول در راستای محور های مختصات
 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);




 //حالت سقوط آزاد
 if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
  Serial.println("freefall");
  //add code here to do when freefall is sensed
 }


 //حالت غیرفعال
 if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){
  Serial.println("inactivity");
  //add code here to do when inactivity is sensed
 }

 //حالت فعال
 if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
  Serial.println("activity");
  //add code here to do when activity is sensed
 }

 //حالت دو ضربه
 if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){
  Serial.println("double tap");
  //add code here to do when a 2X tap is sensed
 }

 //حالت تک ضربه
 if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
  Serial.println("tap");
  //add code here to do when a tap is sensed
 }


}

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه

  • سلام ممنون از آموزش خوبتون من این دستورات رو اجرا کردم عالی بود ، سوالی برام پیش اومد آیا میشه آستانه تشخیص ضربه رو دلخواه تنظیم کرد ؟؟؟ مثلا جوری که وقتی یک نیروی ۱۵کیلوگرمی بهش اصابت میکنه