راه اندازی ماژول شتاب سنج ADXL345 با رزبری پای
تعریف شتاب سنج
شتاب سنج دستگاهی است که مقدار شتاب صحیح (Proper Acceleration) را اندازه گیری می کند. شتاب صحیح شتاب نسبت به جسم در حال سقوط آزاد است.
شتاب سنج دارای مدلهای یک محوری و چند محوری است که می توانند اندازه و جهت شتاب را به عنوان یک کمیت برداری اندازه گیری کنند؛ می توان از حسگرهای شتاب سنج برای تعیین موقعیت و آشکار سازی لرزش و ضربه استفاده کرد. شتاب سنجهای ریزماشین کاری شده با روند رو به افزایشی در لوازم الکترونیکی قابل حمل و کنترلرهای بازیهای کامپیوتری برای تعیین موقعیت و به عنوان ورودی بازیهای کامپیوتری به کار می روند.
کاربرد شتاب سنج
شتاب سنجها برای مانیتور کردن سلامت دستگاههای چرخشی مانند پمپ ها، پنکه ها، غلتک ها، کمپرسورها و برجهای خنک کننده می توان استفاده کرد. اثبات شده است که برنامههای مانیتور لرزش هزینهها را کاهش می دهند، زمان از کارافتادگی دستگاهها را کاهش می دهد و ایمنی کارخانه را افزایش می دهد. این امر به وسیله تشخیص موقعیت هایی مانند غیر هم محوری شافتها (محورها)، عدم تعادل موتورها و خرابی چرخ دنده ها یا خطا در نیرو که منجر به تعمیرات پرهزینه می شود، صورت می گیرد. اطلاعات لرزشی شتاب سنجها به کاربر اجازه مانیتور کردن ماشینها و پیدا کردن این خطاها را پیش از اینکه دستگاه چرخنده از کار بیفتد می دهد برنامههای مانیتور کردن لرزش در صنعت هایی مانند تولید خودرو، استفادههای ابزار کار، تولیدات دارویی، تولید انرژی و نیروگاه ها، خمیر کاغذ و کاغذ، تولید آشامیدنی و غذا، آب و فاضلاب و پتروشیمی و تولید فولاد به کار می روند.
معرفی مشخصات ماژول شتاب سنج ADXL335
یک سنسور شتاب سنج 3 محور کوچک، با توان مصرفی پایین و دارای خروجی ولتاژ با حالت دهی سیگنال است. این سنسور میتواند شتابهای استاتیک گرانش مانند کاربردهای زاویه سنجی را اندازه گیری کند. همچنین شتابهای دینامیک مانند شتابهای حرکتی، شوکهای مکانیکی و لرزش در این سنسور قابل اندازه گیری است. کاربر با استفاده از خازنهای CX، CY و CZ میتواند پهنای باند شتاب سنج را متناسب با نیاز در هر سه محور تنظیم نماید. پایه های XOUT، YOUT و ZOUT خروجیهای ولتاژ برای سه محور x و y و z هستند.
مشخصات ماژول شتاب سنج ADXL335 :
- خروجی آنالوگ
- اندازه گیری در بازه +-3.6g
- ولتاژ تغذیه 1.8 ولت تا 3.6 ولت
- تولید شده در قالب LFCSP-LQ
- حساسیت 300 میلی ولت به ازای هر g
- کاملا حفاظت شده در مقابل حرارت و رطوبت
- پهنای باند 0.5 هرتز تا 550 هرتز برای محور z
- پهنای باند 0.5 هرتز تا 1600 هرتز برای محورهای x و y
- شتاب سنج سه محور با سه خروجی مجزا برای سه محور x و y و z
نحوه اتصال به رزبری پای
ADXL345 Module Raspberry Pi
GND ————————– GND
3.3V ————————– 3.3V
SCL0 ————————— SCL
SDA0 ————————– SDA
CS —————————- 3.3V
SDO ————————– GND
برنامه C راه اندازی ماژول شتاب سنج ADXL345 با رزبری پای
#include <wiringPiI2C.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #define DevAddr 0x53 //device address struct acc_dat{ int x; int y; int z; }; void adxl345_init(int fd) { wiringPiI2CWriteReg8(fd, 0x31, 0x0b); wiringPiI2CWriteReg8(fd, 0x2d, 0x08); // wiringPiI2CWriteReg8(fd, 0x2e, 0x00); wiringPiI2CWriteReg8(fd, 0x1e, 0x00); wiringPiI2CWriteReg8(fd, 0x1f, 0x00); wiringPiI2CWriteReg8(fd, 0x20, 0x00); wiringPiI2CWriteReg8(fd, 0x21, 0x00); wiringPiI2CWriteReg8(fd, 0x22, 0x00); wiringPiI2CWriteReg8(fd, 0x23, 0x00); wiringPiI2CWriteReg8(fd, 0x24, 0x01); wiringPiI2CWriteReg8(fd, 0x25, 0x0f); wiringPiI2CWriteReg8(fd, 0x26, 0x2b); wiringPiI2CWriteReg8(fd, 0x27, 0x00); wiringPiI2CWriteReg8(fd, 0x28, 0x09); wiringPiI2CWriteReg8(fd, 0x29, 0xff); wiringPiI2CWriteReg8(fd, 0x2a, 0x80); wiringPiI2CWriteReg8(fd, 0x2c, 0x0a); wiringPiI2CWriteReg8(fd, 0x2f, 0x00); wiringPiI2CWriteReg8(fd, 0x38, 0x9f); } struct acc_dat adxl345_read_xyz(int fd) { char x0, y0, z0, x1, y1, z1; struct acc_dat acc_xyz; x0 = 0xff - wiringPiI2CReadReg8(fd, 0x32); x1 = 0xff - wiringPiI2CReadReg8(fd, 0x33); y0 = 0xff - wiringPiI2CReadReg8(fd, 0x34); y1 = 0xff - wiringPiI2CReadReg8(fd, 0x35); z0 = 0xff - wiringPiI2CReadReg8(fd, 0x36); z1 = 0xff - wiringPiI2CReadReg8(fd, 0x37); acc_xyz.x = (int)(x1 << 8) + (int)x0; acc_xyz.y = (int)(y1 << 8) + (int)y0; acc_xyz.z = (int)(z1 << 8) + (int)z0; return acc_xyz; } int main(void) { int fd; struct acc_dat acc_xyz; fd = wiringPiI2CSetup(DevAddr); if(-1 == fd){ perror("I2C device setup error"); } adxl345_init(fd); while(1){ acc_xyz = adxl345_read_xyz(fd); printf("x: %05d y: %05d z: %05d\n", acc_xyz.x, acc_xyz.y, acc_xyz.z); delay(1000); } return 0; }
برنامه پایتون راه اندازی ماژول شتاب سنج ADXL345 با رزبری پای
#!/usr/bin/env python # Python library for ADXL345 accelerometer. # Copyright 2013 Adafruit Industries # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. from Adafruit_I2C import Adafruit_I2C class Adafruit_ADXL345(Adafruit_I2C): # Minimal constants carried over from Arduino library ADXL345_ADDRESS = 0x53 ADXL345_REG_DEVID = 0x00 # Device ID ADXL345_REG_DATAX0 = 0x32 # X-axis data 0 (6 bytes for X/Y/Z) ADXL345_REG_POWER_CTL = 0x2D # Power-saving features control ADXL345_DATARATE_0_10_HZ = 0x00 ADXL345_DATARATE_0_20_HZ = 0x01 ADXL345_DATARATE_0_39_HZ = 0x02 ADXL345_DATARATE_0_78_HZ = 0x03 ADXL345_DATARATE_1_56_HZ = 0x04 ADXL345_DATARATE_3_13_HZ = 0x05 ADXL345_DATARATE_6_25HZ = 0x06 ADXL345_DATARATE_12_5_HZ = 0x07 ADXL345_DATARATE_25_HZ = 0x08 ADXL345_DATARATE_50_HZ = 0x09 ADXL345_DATARATE_100_HZ = 0x0A # (default) ADXL345_DATARATE_200_HZ = 0x0B ADXL345_DATARATE_400_HZ = 0x0C ADXL345_DATARATE_800_HZ = 0x0D ADXL345_DATARATE_1600_HZ = 0x0E ADXL345_DATARATE_3200_HZ = 0x0F ADXL345_RANGE_2_G = 0x00 # +/- 2g (default) ADXL345_RANGE_4_G = 0x01 # +/- 4g ADXL345_RANGE_8_G = 0x02 # +/- 8g ADXL345_RANGE_16_G = 0x03 # +/- 16g def __init__(self, busnum=-1, debug=False): self.accel = Adafruit_I2C(self.ADXL345_ADDRESS, busnum, debug) if self.accel.readU8(self.ADXL345_REG_DEVID) == 0xE5: # Enable the accelerometer self.accel.write8(self.ADXL345_REG_POWER_CTL, 0x08) def setRange(self, range): # Read the data format register to preserve bits. Update the data # rate, make sure that the FULL-RES bit is enabled for range scaling format = ((self.accel.readU8(self.ADXL345_REG_DATA_FORMAT) & ~0x0F) | range | 0x08) # Write the register back to the IC seld.accel.write8(self.ADXL345_REG_DATA_FORMAT, format) def getRange(self): return self.accel.readU8(self.ADXL345_REG_DATA_FORMAT) & 0x03 def setDataRate(self, dataRate): # Note: The LOW_POWER bits are currently ignored, # we always keep the device in 'normal' mode self.accel.write8(self.ADXL345_REG_BW_RATE, dataRate & 0x0F) def getDataRate(self): return self.accel.readU8(self.ADXL345_REG_BW_RATE) & 0x0F # Read the accelerometer def read(self): raw = self.accel.readList(self.ADXL345_REG_DATAX0, 6) res = [] for i in range(0, 6, 2): g = raw[i] | (raw[i+1] << 8) if g > 32767: g -= 65536 res.append(g) return res # Simple example prints accelerometer data once per second: if __name__ == '__main__': from time import sleep accel = Adafruit_ADXL345() print '[Accelerometer X, Y, Z]' while True: print accel.read() sleep(1) # Output is fun to watch if this is commented out
اجرای برنامه C
برنامه را در فایلی با نام adxl345.c ذخیره کنید به محل ذخیره شدن فایل بروید و دستور زیر را برای کامپایل شدن اجرا کنید.
gcc adxl345.c -o adxl345 -lwiringPi
برای اجرای برنامه دستور زیر را وارد کنید.
sudo ./adxl345
اجرای برنامه پایتون
برای اجرای پایتون کافی است برنامه را در فایلی به نام Adafruit_ADXL345.py ذخیره کنید برای اجرا به محل ذخیره سازی فایل بروید و دستور زیر را اجرا کنید.
sudo python Adafruit_ADXL345.py
آموزش ویدیوی راه اندازی ماژول شتاب سنج ADXL345 با رزبری پای
بسیار عالی بود، ممنون و متشکر