11 فایل پیوست
آی ام یو ( 10dof imu / ahrs ) نه محوره gy-80 - ماژول قطب نمای دیجیتال ، سنسور شتاب
یک ماژول قدرتمند برای ربات پرنده ، خودروی هوشمند و یا سایر پروژه های شما! این ماژول از چهار سنسور l3g4200d ( سنسور زاویه سنج سه محوره ) ، adxl345 (سنسور شتاب سنج سه محوره ) ، hmc5883l ( قطب نمای دیجیتال ) و bmp085 که یک سنسور فشار بارومتریک می باشد تشکیل شده است . این سنسور در کنار اتصال به یک ماژول موقعیت یاب ماهواره ای ( gps ) هر آنچه را که برای جهت یابی در کنترل هوشمند و خودکار ، سیستم های آتوپایلوت یا آتولندینگ ، ساخت یک هواپیمای مدل و یا سایر ربات های پرنده بدون سرنشین خودکار نیاز دارید در اختیار شما قرار می دهد. با استفاده از داده های قطب نمای دیجیتال ، می توانید جهت های جغرافیایی را معین نمایید ، با استفاده از شتاب سنج میزان سرعت و شتاب را اندازه گیری کنید ، سنسور زاویه سنج روی برد ، زاویه را در سه محور مشخص می نمایند و در نهایت فشارسنج نصب شده بر روی برد در اصل می تواند به صورت یک ارتفاع سنج عمل نموده و میزان ارتفاع را به شما اعلام کند. مصرف کم ، قیمت مناسب و رابط دیجیتال i2c این برد برای اتصال به برد آردوینو و یا سایر میکروکنترل ها از سایر ویژگی های این ماژول می باشند.
فایل پیوست 341 فایل پیوست 342 فایل پیوست 343 فایل پیوست 351
امکانات:
چیپ ها : L3g4200d + adxl345 + hmc5883l +bmp085
رگلاتور داخلی برای پشتیبانی از ولتاژهای 3.3 و 5 ولت میکروکنترل ها
رابط دیجیتال i2c
کیفیت بالای مدار pcb
برنامه زير پارامترهاي yaw,pitch,roll,temperature,pressure,altitude را از طريق serial monitor نمايش ميدهد.
جهت سفارش این کالا، به این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.
L3G4200D Tripple Axis Gyroscope
برای راه اندازی سنسور ژیروسکوپ L3G4200D Tripple Axis Gyroscope نیاز به کتابخونه نداره
برای دریافت سه پارامتر X Y Z
از کد زیر استفاده کنید
کد:
#include <Wire.h>
#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24
int L3G4200D_Address = 105; //I2C address of the L3G4200D
int x;
int y;
int z;
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("starting up L3G4200D");
setupL3G4200D(2000); // Configure L3G4200 - 250, 500 or 2000 deg/sec
delay(1500); //wait for the sensor to be ready
}
void loop(){
getGyroValues(); // This will update x, y, and z with new values
Serial.print("X:");
Serial.print(x);
Serial.print(" Y:");
Serial.print(y);
Serial.print(" Z:");
Serial.println(z);
delay(100); //Just here to slow down the serial to make it more readable
}
void getGyroValues(){
byte xMSB = readRegister(L3G4200D_Address, 0x29);
byte xLSB = readRegister(L3G4200D_Address, 0x28);
x = ((xMSB << 8) | xLSB);
byte yMSB = readRegister(L3G4200D_Address, 0x2B);
byte yLSB = readRegister(L3G4200D_Address, 0x2A);
y = ((yMSB << 8) | yLSB);
byte zMSB = readRegister(L3G4200D_Address, 0x2D);
byte zLSB = readRegister(L3G4200D_Address, 0x2C);
z = ((zMSB << 8) | zLSB);
}
int setupL3G4200D(int scale){
//From Jim Lindblom of Sparkfun's code
// Enable x, y, z and turn off power down:
writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111);
// If you'd like to adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000);
// Configure CTRL_REG3 to generate data ready interrupt on INT2
// No interrupts used on INT1, if you'd like to configure INT1
// or INT2 otherwise, consult the datasheet:
writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);
// CTRL_REG4 controls the full-scale range, among other things:
if(scale == 250){
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
}else if(scale == 500){
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
}else{
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
}
// CTRL_REG5 controls high-pass filtering of outputs, use it
// if you'd like:
writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
}
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int readRegister(int deviceAddress, byte address){
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while(!Wire.available()) {
// waiting
}
v = Wire.read();
return v;
}