رزبری پای - Raspberry PIمطالب علمی

راه اندازی ماژول شتاب سنج 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 با رزبری پای

نوشته های مشابه

1 دیدگاه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا