صفحه 1 از 4 123 ... آخرینآخرین
نمایش نتایج: از 1 به 10 از 34
Like Tree7 لایک

موضوع: ماژول imu ده درجه آزادی و نه محور gy-87 - سنسور mpu6050 hmc5883l bmp180

  1. #1
    max
    max آنلاین نیست.
    Member
    تاریخ عضویت
    Jul 2013
    محل سکونت
    iran-shiraz
    نوشته ها
    70

    ماژول imu ده درجه آزادی و نه محور gy-87 - سنسور mpu6050 hmc5883l bmp180

    gy-87 imu يك برد كوچك است كه تمامي سنسورهاي مورد نياز براي 10 درجه آزادي روي آن قرار گرفته است.ارتباط اين ماژول با آردوينو از طريق رابط i2c برقرار ميشود.


    اجزاي تشكيل دهنده ماژول imu gy-87 :
    Mpu6050 :سنسور gyro سه محوره ، سنسور شتاب سه محوره و دماسنج محصول invensense شامل مجموعه شتاب سنج و gyro با دقت بالا (16 بيتي) ميباشد. همچنين داراي بافر FIFO با ظرفيت 1024 بايت .و سنسور دما با رنج اندازه گيري 40- تا 85+ درجه سانتيگراد ميباشد. این ماژول با تجمیع و ترکیب یک ژیروسکوپ 3 محور با یک شتاب سنج 3 محور روی یک چیپ سیلیکونی و بهره گیری از یک پردازشگر دیجیتال حرکت، قادر است الگوریتم های پیچیده 9 محوری را اجرا کند.

    Hmc5883l: قطب نماي الكترونيكي 3 محوره محصول Honeywell يك قطب نماي 3 محوره ديجيتال است كه ميتواند شدت ميدان مغناطيسي تا 8± گاوس را با دقت 5 ميلي گاوس اندازه گيري نمايد. توسط اين ماژول ميتوان به دقت 1 تا 2 درجه در جهت يابي و ناوبري رسيد.

    bmp180:ماژول فشار بارومتريك با دقت بالا و جريان مصرفي پايين با رنج گسترده در اندازه گيري فشار بارومتريك (300 تا 1100 هكتوپاسكال).اين سنسور بر اساس تكنولوژي مقاومت پيزوالكتريك ياPiezo-resistive طراحي و توليد شده. استفاده از اين تكنولوژي دقت بالا، خطي بودن و پايداري طولاني مدت را براي اين سنسور فراهم نموده است.
    اين سنسور اندازه گيري ارتفاع از 500 متر پايينتر از سطح دريا تا 9000 متر بالاتر از سطح دريا را ممكن ميسازد.
    gy-87_10dof_imu_1-500x500.jpg flight_dynami.jpg
    کد:
    /**
     * FreeIMU library serial communication protocol
    */
    
    #include <ADXL345.h>
    #include <bma180.h>
    #include <HMC58X3.h>
    #include <ITG3200.h>
    #include <MS561101BA.h>
    #include <I2Cdev.h>
    #include <MPU60X0.h>
    #include <EEPROM.h>
    
    //#define DEBUG
    #include "DebugUtils.h"
    #include "CommunicationUtils.h"
    #include "FreeIMU.h"
    #include <Wire.h>
    #include <SPI.h>
    
    
    float q[4];
    int raw_values[9];
    float ypr[3]; // yaw pitch roll
    char str[256];
    float val[9];
    
    
    // Set the FreeIMU object
    FreeIMU my3IMU = FreeIMU();
    //The command from the PC
    char cmd;
    
    void setup() {
      Serial.begin(115200);
      Wire.begin();
      my3IMU.init(true);
      
      // LED
      pinMode(13, OUTPUT);
    }
    
    
    void loop() {
      if(Serial.available()) {
        cmd = Serial.read();
        if(cmd=='v') {
          sprintf(str, "FreeIMU library by %s, FREQ:%s, LIB_VERSION: %s, IMU: %s", FREEIMU_DEVELOPER, FREEIMU_FREQ, FREEIMU_LIB_VERSION, FREEIMU_ID);
          Serial.print(str);
          Serial.print('\n');
        }
        else if(cmd=='r') {
          uint8_t count = serial_busy_wait();
          for(uint8_t i=0; i<count; i++) {
            my3IMU.getRawValues(raw_values);
            sprintf(str, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,", raw_values[0], raw_values[1], raw_values[2], raw_values[3], raw_values[4], raw_values[5], raw_values[6], raw_values[7], raw_values[8], raw_values[9], raw_values[10]);
            Serial.print(str);
            Serial.print('\n');
          }
        }
        else if(cmd=='b') {
          uint8_t count = serial_busy_wait();
          for(uint8_t i=0; i<count; i++) {
            #if HAS_ITG3200()
              my3IMU.acc.readAccel(&raw_values[0], &raw_values[1], &raw_values[2]);
              my3IMU.gyro.readGyroRaw(&raw_values[3], &raw_values[4], &raw_values[5]);
            #else // MPU6050
              my3IMU.accgyro.getMotion6(&raw_values[0], &raw_values[1], &raw_values[2], &raw_values[3], &raw_values[4], &raw_values[5]);
            #endif
            writeArr(raw_values, 6, sizeof(int)); // writes accelerometer and gyro values
            #if IS_9DOM()
              my3IMU.magn.getValues(&raw_values[0], &raw_values[1], &raw_values[2]);
              writeArr(raw_values, 3, sizeof(int));
            #endif
            Serial.println();
          }
        }
        else if(cmd == 'q') {
          uint8_t count = serial_busy_wait();
          for(uint8_t i=0; i<count; i++) {
            my3IMU.getQ(q);
            serialPrintFloatArr(q, 4);
            Serial.println("");
          }
        }
        #ifndef CALIBRATION_H
        else if(cmd == 'c') {
          const uint8_t eepromsize = sizeof(float) * 6 + sizeof(int) * 6;
          while(Serial.available() < eepromsize) ; // wait until all calibration data are received
          EEPROM.write(FREEIMU_EEPROM_BASE, FREEIMU_EEPROM_SIGNATURE);
          for(uint8_t i = 1; i<(eepromsize + 1); i++) {
            EEPROM.write(FREEIMU_EEPROM_BASE + i, (char) Serial.read());
          }
          my3IMU.calLoad(); // reload calibration
          // toggle LED after calibration store.
          digitalWrite(13, HIGH);
          delay(1000);
          digitalWrite(13, LOW);
        }
        #endif
        else if(cmd == 'C') { // check calibration values
          Serial.print("acc offset: ");
          Serial.print(my3IMU.acc_off_x);
          Serial.print(",");
          Serial.print(my3IMU.acc_off_y);
          Serial.print(",");
          Serial.print(my3IMU.acc_off_z);
          Serial.print("\n");
          
          Serial.print("magn offset: ");
          Serial.print(my3IMU.magn_off_x);
          Serial.print(",");
          Serial.print(my3IMU.magn_off_y);
          Serial.print(",");
          Serial.print(my3IMU.magn_off_z);
          Serial.print("\n");
          
          Serial.print("acc scale: ");
          Serial.print(my3IMU.acc_scale_x);
          Serial.print(",");
          Serial.print(my3IMU.acc_scale_y);
          Serial.print(",");
          Serial.print(my3IMU.acc_scale_z);
          Serial.print("\n");
          
          Serial.print("magn scale: ");
          Serial.print(my3IMU.magn_scale_x);
          Serial.print(",");
          Serial.print(my3IMU.magn_scale_y);
          Serial.print(",");
          Serial.print(my3IMU.magn_scale_z);
          Serial.print("\n");
        }
        else if(cmd == 'd') { // debugging outputs
          while(1) {
            my3IMU.getRawValues(raw_values);
            sprintf(str, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,", raw_values[0], raw_values[1], raw_values[2], raw_values[3], raw_values[4], raw_values[5], raw_values[6], raw_values[7], raw_values[8], raw_values[9], raw_values[10]);
            Serial.print(str);
            Serial.print('\n');
            my3IMU.getQ(q);
            serialPrintFloatArr(q, 4);
            Serial.println("");
            my3IMU.getYawPitchRoll(ypr);
            Serial.print("Yaw: ");
            Serial.print(ypr[0]);
            Serial.print(" Pitch: ");
            Serial.print(ypr[1]);
            Serial.print(" Roll: ");
            Serial.print(ypr[2]);
            Serial.println("");
          }
        }
      }
    }
    
    char serial_busy_wait() {
      while(!Serial.available()) {
        ; // do nothing until ready
      }
      return Serial.read();
    }
    
    const int EEPROM_MIN_ADDR = 0;
    const int EEPROM_MAX_ADDR = 511;
    
    void eeprom_serial_dump_column() {
      // counter
      int i;
    
      // byte read from eeprom
      byte b;
    
      // buffer used by sprintf
      char buf[10];
    
      for (i = EEPROM_MIN_ADDR; i <= EEPROM_MAX_ADDR; i++) {
        b = EEPROM.read(i);
        sprintf(buf, "%03X: %02X", i, b);
        Serial.println(buf);
      }
    }
    gy-87-imu-sch.jpg

    جهت سفارش این کالا، به این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.
    فایل های پیوست شده فایل های پیوست شده
    ویرایش توسط max : 10-24-2013 در ساعت 07:20 AM

  2. #2
    Member
    تاریخ عضویت
    Aug 2013
    محل سکونت
    ایران
    نوشته ها
    64
    سلام
    من ماژول رو دارم و خیلی هم خوب کار میکنه اما وقتی توی روبات ام نصب میشه اعداد خروجی اشتباه میشن
    فکر میکنم اثر موتورهای روبات و میان مغناطیسی بوجود اومده هست اگه کسی میدونه چطور میشه مشکل رو حل کرد لطفا راهنمایی کنه

  3. #3
    مدیر اصلی
    تاریخ عضویت
    Aug 2012
    محل سکونت
    ایران
    نوشته ها
    440
    سلام
    کافی هست یه پایه براش در نظر بگیرید و در بالا ترین قسمت ممکن نصبش کنید ، 20-30 سانتیمتر بالا بیاریدش احتمالا مشکلتون حل میشه

  4. #4
    Member
    تاریخ عضویت
    Aug 2013
    محل سکونت
    ایران
    نوشته ها
    64
    ارتفاع کل روبوت 7 سانته !

  5. #5
    مدیر اصلی
    تاریخ عضویت
    Aug 2012
    محل سکونت
    ایران
    نوشته ها
    440
    سلام
    پس تنها فکری که به ذهن من میرسه ایزوله کردن محفظه موتور ها و باتری هست.
    برای ایزوله کردن بسته به نوع موتورها روش ها متفاوتی وجود داره که باید در موردش تحقیق کنید

  6. #6
    Junior Member
    تاریخ عضویت
    Nov 2013
    نوشته ها
    1
    سلام خسته نباشید
    اگه ممکن هستش نمونه کد آن را برای میکروکنترلر AVR به زبان codevision را بنویسید.
    توضیح بیشتری درباره این ماژول بدید.

  7. #7
    مدیر اصلی
    تاریخ عضویت
    Aug 2012
    محل سکونت
    ایران
    نوشته ها
    440
    با سلام
    با توجه به نام انجمن اینجا کلیه مثال های برنامه نویسی بر اساس آردوینو ارائه میشه
    نقل قول نوشته اصلی توسط vandish2005 نمایش پست ها
    سلام خسته نباشید
    اگه ممکن هستش نمونه کد آن را برای میکروکنترلر AVR به زبان codevision را بنویسید.
    توضیح بیشتری درباره این ماژول بدید.

  8. #8
    Junior Member
    تاریخ عضویت
    Nov 2013
    نوشته ها
    2
    چند تا سوال وجود داره
    اولیش اینه که کدوم داده ها اشتباه میشن؟
    کی اشتباه میشن وقتی که شتاب میگیری یا pwm رو تغییر میدی؟
    مدار تغذیه رو چک کردی؟
    تراز سنسور توی حرکت چقدر بهم خورده؟

  9. #9
    مدیر اصلی
    تاریخ عضویت
    Aug 2012
    محل سکونت
    ایران
    نوشته ها
    440
    نقل قول نوشته اصلی توسط navidsabet نمایش پست ها
    چند تا سوال وجود داره
    اولیش اینه که کدوم داده ها اشتباه میشن؟
    کی اشتباه میشن وقتی که شتاب میگیری یا pwm رو تغییر میدی؟
    مدار تغذیه رو چک کردی؟
    تراز سنسور توی حرکت چقدر بهم خورده؟
    سلام
    به نکته خوبی اشاره کردید ، سری جدید یه تعداد رگولاتو برای ربات های پرنده میاریم که مشکل نویز جریان و ولتاژ رو برای اونا حل می کنه ، ممکنه به درد ربات های زمینی هم بخوره

  10. #10
    Junior Member
    تاریخ عضویت
    Feb 2014
    نوشته ها
    8
    سلام
    کدوم یکی از این سنسورهایی که تو فروشگاه هستن رو برای ربات segway تصیه می کنید؟
    آی ام یو ( 10DOF IMU / AHRS ) نه محوره GY-80 - ماژول قطب نمای دیجیتال ، سنسور شتاب سنج ، زاویه سنج ، فشار سنج؟؟؟؟؟؟
    یا
    ماژول IMU ده درجه آزادی و نه محور GY-87 - سنسور MPU6050 HMC5883L BMP180؟؟؟؟؟؟؟؟؟؟

صفحه 1 از 4 123 ... آخرینآخرین

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO