نمایش نتایج: از 1 به 6 از 6
Like Tree6 لایک
  • 2 Post By Rasool65
  • 2 Post By aminta
  • 1 Post By aminta
  • 1 Post By Rasool65

موضوع: پروژه نگه داشتن در حالت تعادل دوربین

  1. #1
    Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    47

    Question پروژه نگه داشتن در حالت تعادل دوربین

    سلام ، اساتید من یک دوربین دارم میخوام روی یک قایق نصب کنم و زمانی که قایق بالا پایین میشه یا میچرخه حالت دوربین تکون نخوره یعنی با دو تا سروو متور همزمان تعادل دوربین حفظ بشه ، کسی میتونه من رو در کد نویسیش کمک کنه ؟؟ دفعه قبل هم پست گذاشتم کسی جواب نداد
    از سنسور 6050- gy-521 هم دارم استفاده میکنم که هم قطب نما داره هم زاویه ...

  2. #2
    Member
    تاریخ عضویت
    Dec 2014
    نوشته ها
    73
    سلام
    خوب stabilizer arduino را سرچ کنید که مطلب هست

  3. #3
    Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    47
    ممنون دوست عزیز ، کمک شما باعث شد پروژه رو درست کنم تمام شود فقط یه سوال اینکه کسی میدونه علت لرزش موتور سرو چیه ؟ موتور های سرو من متاسفانه همش دارن صدا میدن هرچی سرچ کردم چیزی پیدا نکردم ؟؟

  4. #4
    Member
    تاریخ عضویت
    Dec 2014
    نوشته ها
    73
    خیلی خوشحالم که موفق شدید
    علت صدا دادنشو نمیدونم ولی به عنوان توصیه سعی کنید برای این جور پروژه ها از سرووهای دنده فلزی استفاده کنید
    لایک کردن

  5. #5
    Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    47
    من پروژه ام رو درست کردم ولی نمیدونم چرا بعد از 5 دقیقه که در حالت اجرا میمونه هنگ میکنه ؟؟ کسی میتونه کمکم کنه ؟
    کدم هم اینه :
    کد:
    #include <Servo.h>
    #include "I2Cdev.h"
    #include "MPU6050_6Axis_MotionApps20.h"
    //#include "MPU6050.h" // not necessary if using MotionApps include file
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    #include "Wire.h"
    #endif
    
    #define LED_PIN 13
    bool blinkState = true;
    
    Servo Servo1;   // First Servo off the chassis
    Servo Servo2;   // Second Servo off the chassis
    
    int Servo1Pos = 0;
    int Servo2Pos = 0;
    
    float mpuPitch = 0;
    float mpuRoll = 0;
    float mpuYaw = 0;
    
    
    // define MPU instance
    MPU6050 mpu;                    // class default I2C address is 0x68; specific I2C addresses may be passed as a parameter here
    
    // MPU control/status vars
    uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
    uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)
    uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
    uint16_t fifoCount;     // count of all bytes currently in FIFO
    uint8_t fifoBuffer[64]; // FIFO storage buffer
    
    // orientation/motion vars
    Quaternion q;           // [w, x, y, z]         quaternion container
    VectorInt16 aa;         // [x, y, z]            accel sensor measurements
    VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
    VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
    VectorFloat gravity;    // [x, y, z]            gravity vector
    float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector
    
    // relative ypr[x] usage based on sensor orientation when mounted, e.g. ypr[PITCH]
    #define PITCH   1     // defines the position within ypr[x] variable for PITCH; may vary due to sensor orientation when mounted
    #define ROLL  2     // defines the position within ypr[x] variable for ROLL; may vary due to sensor orientation when mounted
    #define YAW   0     // defines the position within ypr[x] variable for YAW; may vary due to sensor orientation when mounted
    
    // ================================================================
    // ===                      INITIAL SETUP                       ===
    // ================================================================
    
    void setup()
    {
    
      Servo1.attach(10);  // attaches the servo on D11 to the servo object
      Servo2.attach(11);  // Second servo on D11
      delay(50);
      Servo1.write(0);	// These are command checks to see if the servos work and
      Servo2.write(60);	// to help w/ the initial installation.
      delay(500);		// Make sure these movements are clear from the rest of the chassis.
      Servo1.write(180);
      Servo2.write(120);
      delay(500);
      Servo1.write(0);
      Servo2.write(90);
      delay(500);
    
      // join I2C bus (I2Cdev library doesn't do this automatically)
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
      Wire.begin();
      TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
      Fastwire::setup(400, true);
    #endif
    
      Serial.begin(115200);
      while (!Serial);      // wait for Leonardo enumeration, others continue immediately
    
      // initialize device
      Serial.println(F("Initializing I2C devices..."));
      mpu.initialize();
    
      // verify connection
      Serial.println(F("Testing device connections..."));
      Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
    
      // load and configure the DMP
      Serial.println(F("Initializing DMP"));
      devStatus = mpu.dmpInitialize();
    
    
      // INPUT CALIBRATED OFFSETS HERE; SPECIFIC FOR EACH UNIT AND EACH MOUNTING CONFIGURATION!!!!
    
      mpu.setXGyroOffset(118);
      mpu.setYGyroOffset(-44);
      mpu.setZGyroOffset(337);
      mpu.setXAccelOffset(-651);
      mpu.setYAccelOffset(670);
      mpu.setZAccelOffset(1895);
    
      // make sure it worked (returns 0 if so)
      if (devStatus == 0)
      {
        // turn on the DMP, now that it's ready
        Serial.println(F("Enabling DMP"));
        mpu.setDMPEnabled(true);
    
        // enable Arduino interrupt detection
        Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)"));
        mpuIntStatus = mpu.getIntStatus();
    
        // get expected DMP packet size for later comparison
        packetSize = mpu.dmpGetFIFOPacketSize();
      }
      else
      {
        // ERROR!
        // 1 = initial memory load failed, 2 = DMP configuration updates failed (if it's going to break, usually the code will be 1)
        Serial.print(F("DMP Initialization failed code = "));
        Serial.println(devStatus);
      }
    
      // configure LED for output
      pinMode(LED_PIN, OUTPUT);
    
    } // setup()
    
    
    
    // ================================================================
    // ===                    MAIN PROGRAM LOOP                     ===
    // ================================================================
    
    void loop(void)
    {
      processAccelGyro();
    }   // loop()
    
    
    
    // ================================================================
    // ===                    PROCESS ACCEL/GYRO IF AVAILABLE       ===
    // ================================================================
    
    void processAccelGyro()
    {
    
      // Get INT_STATUS byte
      mpuIntStatus = mpu.getIntStatus();
    
      // get current FIFO count
      fifoCount = mpu.getFIFOCount();
    
      // check for overflow (this should never happen unless our code is too inefficient)
      if ((mpuIntStatus & 0x10) || fifoCount == 1024)
      {
        // reset so we can continue cleanly
        mpu.resetFIFO();
        Serial.println(F("FIFO overflow!"));
        return;
      }
    
      if (mpuIntStatus & 0x02)  // otherwise continue processing
      {
        // check for correct available data length
        if (fifoCount < packetSize)
          return; //  fifoCount = mpu.getFIFOCount();
    
        // read a packet from FIFO
        mpu.getFIFOBytes(fifoBuffer, packetSize);
    
        // track FIFO count here in case there is > 1 packet available
        fifoCount -= packetSize;
    
        // flush buffer to prevent overflow
        mpu.resetFIFO();
    
        // display Euler angles in degrees
        mpu.dmpGetQuaternion(&q, fifoBuffer);
        mpu.dmpGetGravity(&gravity, &q);
        mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
        mpuPitch = ypr[PITCH] * 180 / M_PI;
        mpuRoll = ypr[ROLL] * 180 / M_PI;
        mpuYaw  = ypr[YAW] * 180 / M_PI;
    
        // flush buffer to prevent overflow
        mpu.resetFIFO();
    
        // blink LED to indicate activity
        blinkState = !blinkState;
        digitalWrite(LED_PIN, blinkState);
    
        // flush buffer to prevent overflow
        mpu.resetFIFO();
    
        Servo1.write(-mpuPitch + 90);
        Servo2.write(mpuRoll + 90);
        //delay(10);
    
        // flush buffer to prevent overflow
        mpu.resetFIFO();
    
      } // if (mpuIntStatus & 0x02)
    }  // processAccelGyro()
    ویرایش توسط Rasool65 : 06-06-2017 در ساعت 07:07 PM

  6. #6
    Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    47
    دوستان عزیز من مشکلم رو حل کردم فقط خواستم اینجا اعلام کنم تا اگر کسی به این مشکل خورد بتونه راه حل پیدا کنه.
    من خیلی تحقیق کردم و به این نتیجه رسیدم که اگر از یک خازن در مدارم استفاده کنم میتونم اون جهش های ولتاژ که باعث خطا میشه و سیستمم هنگ میکنه رو حل کنم در واقع با گذاشتن یک خازن بصورت موازی در مدارم ، بمدت 24 ساعت روشن گذاشتم و هیچ مشکلی ایجاد نکرد و یکسره کار میکرد...
    با تشکر از همه دوستان
    لایک کردن

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

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

SEO by vBSEO