در این مطلب قصد داریم به معرفی ماژول شتاب سنج بپردازیم و سپس نحوه راه اندازی این ماژول به وسیله برد node mcu را اموزش دهیم. ماژول شتاب سنج ADXL345 یک شتاب سنج سه محوره است که میتواند نیروهای شتاب استاتیک و داینامیک را اندازه گیری کند
# | نوع | تعداد | خرید |
---|---|---|---|
1 | node mcu | 1 | |
2 | سیم جامپر | 2 | |
3 | برد بورد | 1 | |
4 | ماژول ADXL345 | 1 |
برای برنامه نویسی این پروژه از نرم افزار اردوینو استفاده میکنیم.
http://arduino.esp HYPERLINK "http://arduino.esp8266.com/stable/package_esp8266com_index.json"8266 HYPERLINK "http://arduino.esp8266.com/stable/package_esp8266com_index.json".com/stable/package_esp HYPERLINK "http://arduino.esp8266.com/stable/package_esp8266com_index.json"8266 HYPERLINK "http://arduino.esp8266.com/stable/package_esp8266com_index.json"com_index.json
tools-> manager Library
نیروی گرانش زمین را میتوان نمونه ای از نیروی استاتیک نام برد.برای نیروی داینامیک هم میتوان به ارتعاشات و حرکات اشاره کرد همانطور که میدانید واحد اندازه گیری شتاب متر بر مجذور ثانیه (m/s^2) است. اما سنسورهای شتاب سنج معمولاً اندازه ها را بر حسب "g" یا گرانش بیان می کنند.لازم به ذکر است که یک "g" برابر نیروی گرانش زمین است که برابر با 9.8 متر بر ثانیه در مربع است.به وسیله این سنسور ما به وسیله بدست اوردن X وYو Z قادر به اندازه گیری شتاب و زاویه هستیم و میتوانیم در پروژه های مختلف از ان استفاده کنیم
این ماژول از دو پروتکل I2C و SPI پشتیبانی میکند.که در این پروژه ارتباط سنسور و اردونیو به وسیله پروتکل I2C برقرار میشود نحوه اتصال سنسور به اردوینو به این صورت است که پایه VCC و GND سنسور شتاب سنج به ترتیب به 5V و GND اردوینو متصل میشود و پایه SCL و SDA سنسور به ترتیب به پایه A5 و A4 اردوینو متصل میشود
اولین قدم افزودن کتابخانه به برنامه است
برای انکه اردوینو بتواند به وسیله پروتکل I2C با ماژول شتاب سنج ارتباط برقرار کند،باید در ابتدای برنامه این کتابخانه را معرفی کنیم
آدرس I2C سنسور را که از دیتاشیت ماژول بدست امده درون متغییری میریزیم
به این صورت ارتباط سریال اردوینو با رایانه را اغاز میکنیم
برای برقراری ارتباط بین میکرو و ماژول می بایسد ارتباط را با تابع زیر شروع کنیم
از ان جایی که ما برای برقراری ارتباط از i2c استفاده می کنیم می بایست برای صحبت با ماژول بیت هایی را برای ماژول ارسال کنیم و این پروسه باید بیت بیت انجام شود. به طور مثال
جهت شروع ارتباط میکرو برای ارسال دیتا از تابع() beginTransmission استفاده می کنیم
با استفاده از تابع می کنیم write() به کدام رجیستر می خواهیم دسترسی داشته باشیم
و بعد از ارسال بیت های فرامین ارتباط بین میکرو و ماژول را می بندیم
در بخش void loop داده های سنسور را می خوانیم. داده های هر محور در دو بایت ذخیره می شود.
در این قسمت با استفاده فانکشن های زیر به ماژول فرمان می دهیم تا اطلاعات x y z را برای ما استخراج کند
و با فرمان requestFrom دیتا های دریافتی را از ماژول گرفته
در این بخش با استفاده از شیفت و تقسیم متمادی اطلاعات بیتی در یافتی از ماژول را به فرمت دلخواه در می اوریم و در اینجا با تقسیم بر 256 دیتا ها را به عدد تبدیل می کنیم و این تقسیم بر اساس دیتاشیت ماژول تنظیم شده است
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <Wire.h> // Wire library - used for I2C communication
int ADXL345 = 0x53; // The ADXL345 sensor I2C address
float X_out, Y_out, Z_out; // Outputs
void setup() {
Serial.begin(9600);
Wire.begin(); // Initiate the Wire library
Wire.beginTransmission(ADXL345); // Start communicating with the device
Wire.write(0x2D); // Access/ talk to POWER_CTL Register - 0x2D
Wire.write(8); // (8dec -> 0000 1000 binary) Bit D3 High for measuring enable
Wire.endTransmission();
delay(10);
}
void loop() {
// === Read acceleromter data === //
Wire.beginTransmission(ADXL345);
Wire.write(0x32); // Start with register 0x32 (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
X_out = ( Wire.read() | Wire.read() << 8); // X-axis value
X_out = X_out / 256; //For a range of +-2g, we need to divide the raw values by 256, according to the datasheet
Y_out = ( Wire.read() | Wire.read() << 8); // Y-axis value
Y_out = Y_out / 256;
Z_out = ( Wire.read() | Wire.read() << 8); // Z-axis value
Z_out = Z_out / 256;
Serial.print("Xa= ");
Serial.print(X_out);
delay(500);
Serial.print(" Ya= ");
Serial.print(Y_out);
delay(500);
Serial.print(" Za= ");
Serial.println(Z_out);
delay(500);
}
پروژه مشابه
کامنت ها
هر هفته یک اموزش
هر هفته یک پروژه
هر هفته یک ویجت