一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用MPU6050構(gòu)建的傾角儀或精神調(diào)平器

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-17 17:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MPU6050是一個 IC 3 軸加速度計和一個 3 軸陀螺儀組合成一個單元。它還包含一個溫度傳感器和一個DCM,用于執(zhí)行復(fù)雜的任務(wù)。MPU6050通常用于構(gòu)建無人機和其他遠(yuǎn)程機器人,如自平衡機器人。在這個項目中,我們將學(xué)習(xí)如何使用MPU6050構(gòu)建的傾角儀或精神調(diào)平器。眾所周知,傾角儀用于檢查表面是否完美調(diào)平,它們既可以作為氣泡式儀表,也可以作為數(shù)字儀表使用。在這個項目中,我們將構(gòu)建一個可以使用Android應(yīng)用程序進行監(jiān)控的數(shù)字傾角儀。使用手機等遠(yuǎn)程顯示器的原因是,我們可以監(jiān)控 MPU6050 的值而無需查看硬件,當(dāng) MPU6050 放置在無人機或其他一些無法訪問的位置時,這將非常方便。

所需材料:

Arduino Pro-mini (5V)

MPU6050 陀螺儀傳感器

HC-05 或 HC-06 藍牙模塊

富貿(mào)發(fā)展板

面包板

連接線

智能手機

poYBAGN2AmCAFjx_AACIAuIl-5o476.jpg

電路圖:

poYBAGN2AmSASWfjAACVhEZ5MWA003.png

此Arduino傾斜傳感器項目的完整電路圖如下所示。它只有三個組件,可以很容易地在面包板上構(gòu)建。

MPU6050在I2C的幫助下進行通信,因此SDA引腳連接到Arduino的A4引腳,即SDA引腳,SCL引腳連接到Arduino的A5引腳。HC-06藍牙模塊在串行通信的幫助下工作,因此藍牙的Rx引腳連接到引腳D11,藍牙的Tx引腳連接到Arduino的引腳D10。這些引腳 D10 和 D11 將通過對 Arduino 進行編程配置為串行引腳。HC-05模塊和MSP6050模塊工作在+5V電壓下,因此它們由Arduino的Vcc引腳供電,如上所示。

我使用了一些面包板連接線,并在一個小面包板上構(gòu)建了設(shè)置。連接完成后,我的電路板如下所示。

pYYBAGN2AmaABOcYAACyJr05Xb8685.jpg

為您的設(shè)置提供動力:

您可以像我一樣通過FTDI編程板為電路供電,也可以使用9V電池或12V適配器并將其連接到Arduino pro mini的Raw引腳。Arduino Pro-mini有一個內(nèi)置的穩(wěn)壓器,可以轉(zhuǎn)換這個外部電壓調(diào)節(jié)+5V。

poYBAGN2AmeAM-PSAABpW9zId-A976.jpg

對 Arduino 進行編程:

硬件準(zhǔn)備就緒后,我們可以開始對Arduino進行編程。與往常一樣,該項目的完整代碼可以在此頁面底部找到。但是為了更好地理解該項目,我將代碼分解為小問題,并按照以下步驟進行解釋。

第一步是將MPU6050與Arduino接口。

下載 ZIP 文件并將其添加到您的 Arduino IDE。然后前往文件->示例->Arduino_MPU6050_Master-> MPU6050_gyro_pitch_roll_yaw。這將打開使用我們剛剛下載的庫的示例程序。因此,單擊上傳并等待程序上傳到Arduino Pro mini。完成后,打開串行監(jiān)視器并將波特率設(shè)置為115200,然后檢查是否得到以下內(nèi)容。

連續(xù)獲取俯仰滾偏航的值

最初,所有三個值都將為零,但是當(dāng)您移動面包板時,您可以觀察到這些值正在發(fā)生變化。如果他們更改,則表示您的連接正確,否則請檢查您的連接?;c時間在這里注意俯仰滾動和偏航三個值如何根據(jù)您傾斜傳感器的方式而變化。如果您感到困惑,請按Arduino上的重置按鈕,值將再次初始化為零,然后將傳感器向一個方向傾斜并檢查哪些值正在變化。下圖將幫助您更好地理解。

解釋橫滾俯仰和偏航

在這三個參數(shù)中,我們只對滾動和俯仰感興趣。滾動值將告訴我們 X 軸的傾角,俯仰值將告訴我們 Y 軸的傾角?,F(xiàn)在我們已經(jīng)了解了基礎(chǔ)知識,讓我們開始對Arduino進行編程,以讀取這些值,通過藍牙將其發(fā)送到Arduino。與往常一樣,讓我們首先包含此項目所需的所有庫

#include //Lib for IIC communication
#include //Lib for MPU6050
#include // import the serial library
然后我們初始化藍牙模塊的軟件序列號.這是可能的,因為Arduino中的軟件串行庫,IO引腳可以編程為串行引腳。這里我們使用數(shù)字引腳 D10 和 D11,其中 D10 id Rx 和 D11 是 Tx。

SoftwareSerial BT(10, 11); // RX, TX
接下來,我們初始化程序所需的變量和對象,然后轉(zhuǎn)到setup()函數(shù),在其中指定串行監(jiān)視器和藍牙的波特率。對于 HC-05 和 HC-06,波特率為 9600,因此必須使用相同的波特率。然后我們檢查Arduino的IIC總線是否連接到MPU6050,如果沒有,我們會打印警告消息,只要設(shè)備已連接,就會保持在那里。之后,我們校準(zhǔn)陀螺儀并使用其各自的功能設(shè)置其閾值,如下所示。

void setup()
{
Serial.begin(115200);
BT.begin(9600); //start the Bluetooth communication at 9600 baudrate
// Initialize MPU6050
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}
mpu.calibrateGyro(); // Calibrate gyroscope during start
mpu.setThreshold(3); //Controls the sensitivty
}
“mpu.calibrateGyro();”行校準(zhǔn)MPU6050當(dāng)前放置的位置。每當(dāng)需要校準(zhǔn)MPU6050并將所有值設(shè)置為零時,可以在程序內(nèi)多次調(diào)用此線路?!癿pu.setThreshold(3);”此功能控制傳感器上移動的值變化程度,太低的值會增加噪聲,因此在擺弄它時要小心。

在void loop()內(nèi)部,我們反復(fù)讀取陀螺儀和溫度傳感器的值,計算俯仰,滾動和偏航的值,將其發(fā)送到藍牙模塊。以下兩行將讀取原始陀螺儀值和溫度值

Vector norm = mpu.readNormalizeGyro();
temp = mpu.readTemperature();
接下來,我們通過乘以時間步長并將其與先前的值相加來計算俯仰、橫滾和偏航。時間步長只不過是連續(xù)讀數(shù)之間的間隔。

pitch = pitch + norm.YAxis * timeStep;
roll = roll + norm.XAxis * timeStep;
yaw = yaw + norm.ZAxis * timeStep;
為了更好地理解時間步長,讓我們看一下下面的行。放置此行以 10mS 或 0.01 秒的間隔精確讀取 MPU6050 的值。所以我們聲明 timeStep 的值為 0.01。如果還有更多時間,請使用下面的行來保持程序。(millis() – timer()) 給出到目前為止程序執(zhí)行所花費的時間。我們只需用 0.01 秒減去它,在剩余的時間內(nèi),我們只需使用延遲函數(shù)將程序保留在那里。

delay((timeStep*1000) - (millis() - timer));
完成讀取和計算值后,我們可以通過藍牙將它們發(fā)送到我們的手機。但這里有一個問題。我們使用的藍牙模塊只能發(fā)送 1 字節(jié) (8 位) 這允許我們僅發(fā)送從 0 到 255 的數(shù)字.因此,我們必須拆分我們的值并將其映射到此范圍內(nèi)。這是通過以下行完成的

if (roll>-100 && roll<100)
x = map (roll, -100, 100, 0, 100);
if (pitch>-100 && pitch<100)
y = map (pitch, -100, 100, 100, 200);
if (temp>0 && temp<50)
t = 200 + int(temp);
正如您可以計算的那樣,滾動的值映射到變量 x 中的 0 到 100,音高映射到變量 y 中的 100 到 200,溫度映射到變量 t 中的 200 及以上。我們可以使用相同的信息從我們發(fā)送的內(nèi)容中檢索數(shù)據(jù)。最后,我們使用以下行通過藍牙寫入這些值。

BT.write(x);
BT.write(y);
BT.write(t);
如果您已經(jīng)了解了完整的程序,請向下滾動以查看該程序并將其上傳到Arduino板。

使用處理準(zhǔn)備 Android 應(yīng)用程序:
這個Arduino傾角儀的安卓應(yīng)用程序是使用處理IDE開發(fā)的。這與Arduino非常相似,可用于創(chuàng)建系統(tǒng)應(yīng)用程序,Android應(yīng)用程序,網(wǎng)頁設(shè)計等等。

在ZIP文件中,您可以找到一個名為data的文件夾,其中包含要加載到android應(yīng)用程序中的所有圖像和其他來源。以下行決定藍牙應(yīng)自動連接到哪個名稱

bt.connectToDeviceByName("HC-06");
在 draw() 函數(shù)中, 這些東西將在這里重復(fù)執(zhí)行,我們繪制圖像, 顯示文本并根據(jù)藍牙模塊中的值對條形進行動畫處理.您可以通過通讀程序來檢查每個函數(shù)內(nèi)部發(fā)生的情況。

void draw() //The infinite loop
{
background(0);
imageMode(CENTER);
image(logo, width/2, height/1.04, width, height/12);
load_images();
textfun();
getval();
}
最后,還有一件重要的事情需要解釋,請記住,我們將俯仰、滾動和溫度的值拆分為 0 到 255。因此,在這里,我們再次通過將其反向映射到正常值來將其恢復(fù)為正常值。

if (info<100 && info>0)
x = map(info, 0, 100, -(width/1.5)/3, +(width/1.5)/3);//x = info;
else if (info<200 && info>100)
y = map(info, 100, 200, -(width/4.5)/0.8, +(width/4.5)/0.8);//y = info;
else if (info>200)
temp = info -200;
println(temp,x,y);
有更好的方法將數(shù)據(jù)從藍牙模塊傳輸?shù)绞謾C, 但由于這只是一個愛好項目,我們忽略了它們, 如果有興趣,您可以深入挖掘.

Arduino測斜儀的工作:
準(zhǔn)備好硬件和應(yīng)用程序后,是時候享受我們構(gòu)建的內(nèi)容了。將Arduino代碼上傳到開發(fā)板,您還可以刪除Serial.println行上的注釋,并使用串行監(jiān)視器檢查硬件是否按預(yù)期工作。無論如何,這是完全可選的。

上傳代碼后,在手機上啟動Android應(yīng)用程序。應(yīng)用程序應(yīng)自動連接到您的 HC-06 模塊,它將在應(yīng)用程序頂部顯示“連接到:HC-06”,如下所示。

pYYBAGN2AmmAQuo1AAC9UbH8FZw269.jpg

最初,除溫度值外,所有值都將為零。這是因為Arduino已針對此位置校準(zhǔn)了MPU-6050作為參考,現(xiàn)在您可以傾斜硬件并檢查移動應(yīng)用程序上的值是否也隨著動畫而變化。該應(yīng)用程序的完整工作可以在下面給出的視頻中找到。因此,現(xiàn)在您可以將面包板放置在任何地方,并檢查表面是否完全平整。

/*


MPU6050 Librarey: https://github.com/jarzebski/Arduino-MPU6050; (c) 2014 by Korneliusz Jarzebski

*/


#include //Lib for IIC communication

#include //Lib for MPU6050

#include // import the serial library


SoftwareSerial BT(10, 11); // RX, TX


MPU6050 mpu;


unsigned long timer = 0;


unsigned long timer2 = 0;


float timeStep = 0.01;

float pitch = 0;

float roll = 0;

float yaw = 0;

float temp =0;


void setup()

{

Serial.begin(115200);


BT.begin(9600); //start the Bluetooth communication at 9600 baudrate


// Initialize MPU6050

while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))

{

Serial.println("Could not find a valid MPU6050 sensor, check wiring!");

delay(500);

}



mpu.calibrateGyro(); // Calibrate gyroscope during start


mpu.setThreshold(3); //Controls the sensitivty

}


void loop()

{

timer = millis();


//Read Gyro and Temperature sensor values

Vector norm = mpu.readNormalizeGyro();

temp = mpu.readTemperature();


// Calculate Pitch, Roll and Yaw

pitch = pitch + norm.YAxis * timeStep;

roll = roll + norm.XAxis * timeStep;

yaw = yaw + norm.ZAxis * timeStep;


// Print values

Serial.print(" Pitch = ");

Serial.print(pitch);

Serial.print(" Roll = ");

Serial.print(roll);

Serial.print(" Yaw = ");

Serial.print(yaw);

Serial.print(" Temp = ");

Serial.print(temp);

Serial.println(" *C");


delay((timeStep*1000) - (millis() - timer)); //makes sure we read only at a an interval of 0.01 secounds


if ((millis()-timer2) > 200)

send_BT();

}


void send_BT()

{

int t;

int x;

int y;


if (roll>-100 && roll<100)

x = map (roll, -100, 100, 0, 100);


if (pitch>-100 && pitch<100)

y = map (pitch, -100, 100, 100, 200);


if (temp>0 && temp<50)

t = 200 + int(temp);



BT.write(x);

BT.write(y);

BT.write(t);


timer2 = millis();

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3973

    瀏覽量

    130237
  • MPU6050
    +關(guān)注

    關(guān)注

    39

    文章

    310

    瀏覽量

    73104
  • 傾角儀
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    2831
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    關(guān)于mpu6050問題

    我很早之前買了一個,我現(xiàn)在使用這個mpu6050,我在調(diào)mpu6050數(shù)據(jù)時候,數(shù)據(jù)抖動特別大,我沒動這個mpu6050,它自己都有抖動,然后本來放在水平,他的機械中值是2.5,但是我
    發(fā)表于 03-09 17:17

    跪求mpu6050解算傾角的程序

    最近在做塔機的檢測平臺,但是在測水平方面遇到了問題,本想用MPU6050模塊檢測塔機的垂直度,但是這個傳感好像不能直接輸出傾斜角度(Z軸的傾角或者XY方向的傾角),顯示
    發(fā)表于 03-30 17:04

    STM32 實現(xiàn) MPU6050 數(shù)據(jù)讀取與傾角檢測

    都不懂的東西。事實上如果你只是想從傳感讀出陀螺儀和加速度值,并簡單計算一下坐標(biāo)傾角(不涉及姿態(tài)解算、四元素等),其實沒有想象中那么難。PS:MPU6050 的確涉及到許多令人敬畏的數(shù)學(xué)知識,但如果
    發(fā)表于 05-05 18:02

    關(guān)于MPU6050的簡介

    關(guān)于MPU6050前言簡介首先,個人是通過野火的視頻,有專門介紹MPU6050的版塊來做的了解。然后關(guān)于MPU6050基本認(rèn)識跟坐標(biāo)系就不做闡述了MPU6050主要是陀螺
    發(fā)表于 08-03 07:37

    MPU6050簡介

    時,MPU-60X0提供完整的9軸運動融合輸出到其主I2CSPI端口(SPI僅在MPU-6000上可用)。MPU6050, 該芯片內(nèi)部集成一個三軸加速度傳感
    發(fā)表于 02-11 07:46

    MPU6050陀螺原理圖代碼

    MPU6050陀螺使用( 原理圖代碼 )
    發(fā)表于 10-29 15:24 ?97次下載

    mpu6050寄存中文版資料

    mpu6050陀螺中文介紹,做四軸飛行的朋友用得著。
    發(fā)表于 11-06 09:51 ?0次下載

    MPU6050(硬件IIC)

    MPU6050(硬件IIC)MPU6050(硬件IIC)
    發(fā)表于 04-02 16:29 ?79次下載

    mpu6050怎么與單片機連接

    本文開始介紹了mpu6050的定義和mpu6050的感測范圍,其次闡述了mpu6050特征,最后介紹了mpu6050與單片機的連接方法。
    發(fā)表于 03-09 08:42 ?2.7w次閱讀

    mpu6050姿態(tài)解算原理_mpu6050姿態(tài)解算程序

    mpu6050常用作提供飛控運行時的姿態(tài)測量和計算。本文首先介紹了MPU6050姿態(tài)解算的原理,其次詳細(xì)的介紹了mpu6050姿態(tài)解算程序。
    的頭像 發(fā)表于 03-09 09:15 ?4.4w次閱讀

    MPU6050簡介

    MPU6050簡介什么是MPU6050MPU6050的特點MPU6050框圖MPU6050初始化MPU6050—DMP使用介紹
    發(fā)表于 12-06 11:51 ?78次下載
    <b class='flag-5'>MPU6050</b>簡介

    MPU6050常見問題的分析與處理

    # MPU6050常見問題的分析與處理本文主要針對STM32使用MPU6050過程中產(chǎn)生的問題進行分析和處理,部分內(nèi)容也適用于其他單片機。本文基于MPU6050自帶的DMP算法。文章內(nèi)容對于M
    發(fā)表于 12-06 12:21 ?44次下載
    <b class='flag-5'>MPU6050</b>常見問題的分析與處理

    MPU6050( )

    MPU6050( )
    發(fā)表于 12-06 15:06 ?31次下載
    <b class='flag-5'>MPU6050</b>( )

    如何使用MPU6050和Arduino構(gòu)建一個數(shù)字量角

    MPU6050是一款 集成 了 IC 3 軸加速度計和 3 軸陀螺的 單元。它還包含一個溫度傳感和一個 DCM 來執(zhí)行復(fù)雜的任務(wù)。MPU6050 常用于
    發(fā)表于 08-31 15:42 ?6147次閱讀
    如何使用<b class='flag-5'>MPU6050</b>和Arduino<b class='flag-5'>構(gòu)建</b>一個數(shù)字量角<b class='flag-5'>器</b>

    MPU6050的Arduino陀螺游戲

    電子發(fā)燒友網(wǎng)站提供《帶MPU6050的Arduino陀螺游戲.zip》資料免費下載
    發(fā)表于 11-11 11:20 ?1次下載
    帶<b class='flag-5'>MPU6050</b>的Arduino陀螺<b class='flag-5'>儀</b>游戲