欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

       找回密碼
       立即注冊

      QQ登錄

      只需一步,快速開始

      搜索
      查看: 6163|回復(fù): 4
      打印 上一主題 下一主題
      收起左側(cè)

      arduino使用MPU6050源程序 附i2c庫文件

      [復(fù)制鏈接]
      跳轉(zhuǎn)到指定樓層
      樓主
      ID:499722 發(fā)表于 2019-3-28 10:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
      把i2c庫放到 arduino IDE 庫中
      打開第二個文件就可以了


      全部資料51hei下載地址:
      MPU6050_Kalman-master.zip (2.3 KB, 下載次數(shù): 82)
      i2cdevlib-master.zip (725.08 KB, 下載次數(shù): 71)

      Arduino源程序如下:
      1. #include "Wire.h"
      2. #include "I2Cdev.h"
      3. #include "MPU6050.h"

      4. MPU6050 accelgyro;

      5. unsigned long now, lastTime = 0;
      6. float dt;                                   //微分時間

      7. int16_t ax, ay, az, gx, gy, gz;             //加速度計陀螺儀原始數(shù)據(jù)
      8. float aax=0, aay=0,aaz=0, agx=0, agy=0, agz=0;    //角度變量
      9. long axo = 0, ayo = 0, azo = 0;             //加速度計偏移量
      10. long gxo = 0, gyo = 0, gzo = 0;             //陀螺儀偏移量

      11. float pi = 3.1415926;
      12. float AcceRatio = 16384.0;                  //加速度計比例系數(shù)
      13. float GyroRatio = 131.0;                    //陀螺儀比例系數(shù)

      14. uint8_t n_sample = 8;                       //加速度計濾波算法采樣個數(shù)
      15. float aaxs[8] = {0}, aays[8] = {0}, aazs[8] = {0};         //x,y軸采樣隊列
      16. long aax_sum, aay_sum,aaz_sum;                      //x,y軸采樣和

      17. float a_x[10]={0}, a_y[10]={0},a_z[10]={0} ,g_x[10]={0} ,g_y[10]={0},g_z[10]={0}; //加速度計協(xié)方差計算隊列
      18. float Px=1, Rx, Kx, Sx, Vx, Qx;             //x軸卡爾曼變量
      19. float Py=1, Ry, Ky, Sy, Vy, Qy;             //y軸卡爾曼變量
      20. float Pz=1, Rz, Kz, Sz, Vz, Qz;             //z軸卡爾曼變量

      21. void setup()
      22. {
      23.     Wire.begin();
      24.     Serial.begin(115200);

      25.     accelgyro.initialize();                 //初始化

      26.     unsigned short times = 200;             //采樣次數(shù)
      27.     for(int i=0;i<times;i++)
      28.     {
      29.         accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //讀取六軸原始數(shù)值
      30.         axo += ax; ayo += ay; azo += az;      //采樣和
      31.         gxo += gx; gyo += gy; gzo += gz;
      32.    
      33.     }
      34.    
      35.     axo /= times; ayo /= times; azo /= times; //計算加速度計偏移
      36.     gxo /= times; gyo /= times; gzo /= times; //計算陀螺儀偏移
      37. }

      38. void loop()
      39. {
      40.     unsigned long now = millis();             //當前時間(ms)
      41.     dt = (now - lastTime) / 1000.0;           //微分時間(s)
      42.     lastTime = now;                           //上一次采樣時間(ms)

      43.     accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //讀取六軸原始數(shù)值

      44.     float accx = ax / AcceRatio;              //x軸加速度
      45.     float accy = ay / AcceRatio;              //y軸加速度
      46.     float accz = az / AcceRatio;              //z軸加速度

      47.     aax = atan(accy / accz) * (-180) / pi;    //y軸對于z軸的夾角
      48.     aay = atan(accx / accz) * 180 / pi;       //x軸對于z軸的夾角
      49.     aaz = atan(accz / accy) * 180 / pi;       //z軸對于y軸的夾角

      50.     aax_sum = 0;                              // 對于加速度計原始數(shù)據(jù)的滑動加權(quán)濾波算法
      51.     aay_sum = 0;
      52.     aaz_sum = 0;
      53.   
      54.     for(int i=1;i<n_sample;i++)
      55.     {
      56.         aaxs[i-1] = aaxs[i];
      57.         aax_sum += aaxs[i] * i;
      58.         aays[i-1] = aays[i];
      59.         aay_sum += aays[i] * i;
      60.         aazs[i-1] = aazs[i];
      61.         aaz_sum += aazs[i] * i;
      62.    
      63.     }
      64.    
      65.     aaxs[n_sample-1] = aax;
      66.     aax_sum += aax * n_sample;
      67.     aax = (aax_sum / (11*n_sample/2.0)) * 9 / 7.0; //角度調(diào)幅至0-90°
      68.     aays[n_sample-1] = aay;                        //此處應(yīng)用實驗法取得合適的系數(shù)
      69.     aay_sum += aay * n_sample;                     //本例系數(shù)為9/7
      70.     aay = (aay_sum / (11*n_sample/2.0)) * 9 / 7.0;
      71.     aazs[n_sample-1] = aaz;
      72.     aaz_sum += aaz * n_sample;
      73.     aaz = (aaz_sum / (11*n_sample/2.0)) * 9 / 7.0;

      74.     float gyrox = - (gx-gxo) / GyroRatio * dt; //x軸角速度
      75.     float gyroy = - (gy-gyo) / GyroRatio * dt; //y軸角速度
      76.     float gyroz = - (gz-gzo) / GyroRatio * dt; //z軸角速度
      77.     agx += gyrox;                             //x軸角速度積分
      78.     agy += gyroy;                             //x軸角速度積分
      79.     agz += gyroz;
      80.    
      81.     /* kalman start */
      82.     Sx = 0; Rx = 0;
      83.     Sy = 0; Ry = 0;
      84.     Sz = 0; Rz = 0;
      85.    
      86.     for(int i=1;i<10;i++)
      87.     {                 //測量值平均值運算
      88.         a_x[i-1] = a_x[i];                      //即加速度平均值
      89.         Sx += a_x[i];
      90.         a_y[i-1] = a_y[i];
      91.         Sy += a_y[i];
      92.         a_z[i-1] = a_z[i];
      93.         Sz += a_z[i];
      94.    
      95.     }
      96.    
      97.     a_x[9] = aax;
      98.     Sx += aax;
      99.     Sx /= 10;                                 //x軸加速度平均值
      100.     a_y[9] = aay;
      101.     Sy += aay;
      102.     Sy /= 10;                                 //y軸加速度平均值
      103.     a_z[9] = aaz;
      104.     Sz += aaz;
      105.     Sz /= 10;

      106.     for(int i=0;i<10;i++)
      107.     {
      108.         Rx += sq(a_x[i] - Sx);
      109.         Ry += sq(a_y[i] - Sy);
      110.         Rz += sq(a_z[i] - Sz);
      111.    
      112.     }
      113.    
      114.     Rx = Rx / 9;                              //得到方差
      115.     Ry = Ry / 9;                        
      116.     Rz = Rz / 9;
      117.   
      118.     Px = Px + 0.0025;                         // 0.0025在下面有說明...
      119.     Kx = Px / (Px + Rx);                      //計算卡爾曼增益
      120.     agx = agx + Kx * (aax - agx);             //陀螺儀角度與加速度計速度疊加
      121.     Px = (1 - Kx) * Px;                       //更新p值

      122.     Py = Py + 0.0025;
      123.     Ky = Py / (Py + Ry);
      124.     agy = agy + Ky * (aay - agy);
      125.     Py = (1 - Ky) * Py;
      126.   
      127.     Pz = Pz + 0.0025;
      128.     Kz = Pz / (Pz + Rz);
      129.     agz = agz + Kz * (aaz - agz);
      130.     Pz = (1 - Kz) * Pz;

      131.     /* kalman end */

      132.     Serial.print(agx);Serial.print(",");
      133.     Serial.print(agy);Serial.print(",");
      134.     Serial.print(agz);Serial.println();
      135.    
      136. }
      復(fù)制代碼


      評分

      參與人數(shù) 1黑幣 +50 收起 理由
      admin + 50 共享資料的黑幣獎勵!

      查看全部評分

      分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
      收藏收藏 分享淘帖 頂1 踩
      回復(fù)

      使用道具 舉報

      沙發(fā)
      ID:525461 發(fā)表于 2019-5-1 10:12 | 只看該作者
      可以的
      回復(fù)

      使用道具 舉報

      板凳
      ID:514110 發(fā)表于 2019-5-3 15:45 來自觸屏版 | 只看該作者
      謝謝分享
      回復(fù)

      使用道具 舉報

      地板
      ID:532564 發(fā)表于 2019-5-10 16:32 | 只看該作者
      樓主威武
      回復(fù)

      使用道具 舉報

      5#
      ID:763847 發(fā)表于 2020-6-16 08:53 | 只看該作者
      謝謝分享
      回復(fù)

      使用道具 舉報

      您需要登錄后才可以回帖 登錄 | 立即注冊

      本版積分規(guī)則

      小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

      Powered by 單片機教程網(wǎng)

      快速回復(fù) 返回頂部 返回列表