博客專欄

        EEPW首頁 > 博客 > DIY Arduino萬向節|自穩平臺

        DIY Arduino萬向節|自穩平臺

        發布人:電子資料庫 時間:2023-03-19 來源:工程師 發布文章

        在本教程中,我們將學習如何建立一個Arduino萬向節或一個帶有伺服電機的自穩定平臺。本教程實際上是先前關于 .

        概述

        我用三維建模軟件設計了萬向節。它由3臺MG996R伺服電機組成,用于3軸控制,以及MPU6050傳感器、Arduino和電池的底座。


        您可以在以下位置找到并下載此三維模型以及用于三維打印的STL文件:

        使用我的,我3D打印了所有的部件,它們都非常完美。


        裝配

        組裝萬向節很容易。我從安裝偏航伺服開始。我用M3螺栓和螺母把它固定在底座上。


        下一步,我用同樣的方法固定了滾動伺服。這些零件是專門設計的,以方便安裝MG996R伺服系統。


        為了將零件相互連接,我使用了圓喇叭,它作為伺服系統的附件。


        首先,我們需要用兩個螺栓將圓喇叭固定在底座上,然后用另一個螺栓將其連接到之前的伺服系統上。


        我重復了這個過程,組裝其余的組件,變槳伺服和頂部平臺。


        下一步,我通過伺服線通過支架的開口,以保持他們的組織。然后我插入MPU6050傳感器,用螺栓和螺母將其固定在底座上。


        為了給這個項目供電,我用了2節鋰離子電池,我把它們放在這個電池架上。我用兩個螺栓和螺母把電池座固定在底座上。


        2節鋰離子電池將產生約7.4V的電壓,但我們需要5伏的電壓來為Arduino和伺服系統供電。


        這就是為什么我使用了一個降壓轉換器,將7.4伏轉換為5伏。

        Arduino萬向節電路圖

        現在剩下的,就是把一切聯系起來。這里的電路圖和所有的電路圖都需要連接起來。


        您可以從以下鏈接獲取本Arduino教程所需的組件:

        MPU6050 IMU

        MG996R伺服

        降壓轉換器

        Arduino Uno

        試驗板和跨接導線

        最后,我把電子元件和電線壓入底座,用底部的蓋子蓋住它們。


        有了這個,自平衡平臺或Arduino萬向節就完成了,它的工作和預期一樣好。剩下的就是看看程序。


        Arduino代碼

        本例中的Arduino代碼是對MPU6050 U DMP6示例的修改 .

        代碼說明:所以,我們使用輸出可讀的偏航,俯仰和橫搖。

        // Get Yaw, Pitch and Roll values

        #ifdef OUTPUT_READABLE_YAWPITCHROLL

        mpu.dmpGetQuaternion(&q, fifoBuffer);

        mpu.dmpGetGravity(&gravity, &q);

        mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

        // Yaw, Pitch, Roll values - Radians to degrees

        ypr[0] = ypr[0] * 180 / M_PI;

        ypr[1] = ypr[1] * 180 / M_PI;

        ypr[2] = ypr[2] * 180 / M_PI;

        // Skip 300 readings (self-calibration process)

        if (j <= 300) {

        correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings

        j++;

        }

        // After 300 readings

        else {

        ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees

        // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180

        int servo0Value = map(ypr[0], -90, 90, 0, 180);

        int servo1Value = map(ypr[1], -90, 90, 0, 180);

        int servo2Value = map(ypr[2], -90, 90, 180, 0);

        // Control the servos according to the MPU6050 orientation

        servo0.write(servo0Value);

        servo1.write(servo1Value);

        servo2.write(servo2Value);

        }

        #endif

        一旦我們得到這些值,首先我們把它們從弧度轉換成度。

        // Yaw, Pitch, Roll values - Radians to degrees

        ypr[0] = ypr[0] * 180 / M_PI;

        ypr[1] = ypr[1] * 180 / M_PI;

        ypr[2] = ypr[2] * 180 / M_PI;

        然后我們等待或讀取300個讀數,因為在此期間傳感器仍處于自校準過程中。另外,我們捕捉偏航值,它在開始時不像俯仰和橫搖值為0,而是總是一些隨機值。

        // Skip 300 readings (self-calibration process)

        if (j <= 300) {

        correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings

        j++;

        }

        在300個讀數之后,首先我們通過減去上面捕獲的隨機值將偏航設置為0。然后我們將偏航、俯仰和橫搖的值從-90度映射到0到180度,這些值用于驅動伺服系統。

        // After 300 readings

        else {

        ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees

        // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180

        int servo0Value = map(ypr[0], -90, 90, 0, 180);

        int servo1Value = map(ypr[1], -90, 90, 0, 180);

        int servo2Value = map(ypr[2], -90, 90, 180, 0);

        // Control the servos according to the MPU6050 orientation

        servo0.write(servo0Value);

        servo1.write(servo1Value);

        servo2.write(servo2Value);

        }

        最后利用寫函數,把這些值作為控制信號發送給伺服系統。當然,你可以禁用偏航伺服,如果你只想穩定的X和Y軸,并使用這個平臺作為相機常平架。

        請注意這遠不是好的相機萬向節。運動不平穩,因為這些伺服不是為了這樣的目的。真正的相機萬向節使用一種特殊類型的為了獲得流暢的動作。所以,考慮這個項目只是為了教育目的。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 自穩 平臺

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 河南省| 石渠县| 婺源县| 贵德县| 明光市| 噶尔县| 封开县| 芦山县| 绥棱县| 西乌珠穆沁旗| 常熟市| 台北县| 新绛县| 正阳县| 蒲江县| 武山县| 襄樊市| 永顺县| 浏阳市| 林芝县| 潼关县| 美姑县| 延寿县| 车致| 陈巴尔虎旗| 资阳市| 江山市| 额济纳旗| 武义县| 泗阳县| 赫章县| 酉阳| 崇左市| 页游| 泸溪县| 延安市| 安泽县| 扶绥县| 澎湖县| 商都县| 玉环县|