步驟1:您需要的東西
您可能已有一個使用MPU-9150的Arduino項目,在這種情況下,您可以將我的草圖加載到其中。 Neopixel環(huán)僅使用一個Arduino輸出引腳。
或者,您可以使用此處描述的設(shè)置。您可以使用其他功能來擴(kuò)展它,并且可以根據(jù)需要為其他基于Neopixel環(huán)的項目使用其他硬件。
您將需要:
基于ATMega328的Arduino和電源(盡管您可能會使用其他電源)
MPU-9150加速度計/陀螺儀/磁力計
Adafruit Neopixel環(huán),12像素大小或更大的
無焊面包板,剝離板和跳線。
MPU-9150輸入不容許5V的電壓,因此以5V運(yùn)行Arduino時,您將需要具有2個或更多電壓的5V/3.3V電平轉(zhuǎn)換器通道。這些東西從遠(yuǎn)東eBay賣家那里非常便宜。由于Neopixels需要5V的全部電壓,因此您不能簡單地以3.3V的電壓運(yùn)行整個項目。
電平轉(zhuǎn)換器將Arduino的SDA和SCL引腳以5V的電平供電,并以3.3V的電壓提供給MPU -9150。為此,它一方面需要5V電源,另一方面需要3.3V電源。幸運(yùn)的是,常見的MPU-9150板包含3.3V穩(wěn)壓器,但是不幸的是,其輸出未在任何引腳上提供。因此,必須如圖所示將細(xì)線焊接到穩(wěn)壓器的輸出引腳上。
找到穩(wěn)壓器,該穩(wěn)壓器應(yīng)標(biāo)記為KB33(在第二張圖片的頂部)。您將需要一只穩(wěn)定的手和一個尖尖的烙鐵。將一根細(xì)線焊接到右上角的插針上。建立良好的連接后,請用一滴強(qiáng)力膠將其覆蓋,以防止其輕易脫落。
步驟2:將其連接
接線將取決于您使用的是插線板還是無焊面包板,哪種類型的Arduino,以及是否使用電平轉(zhuǎn)換器,因此我將為您確定接線或插線板布局。 (如果您覺得做不到,請嘗試一個或兩個簡單的Arduino項目或使用Stripboard的項目,然后在有想法的情況下返回。)
電平轉(zhuǎn)換器具有除Gnd之外,還有兩個標(biāo)為HV和LV的電源輸入。使用您焊接到的細(xì)線,將HV連接到5V電源,將LV連接到MPU-9150的3.3V輸出。 Arduino的SDA和SCL引腳使用5V邏輯電平,并連接到電平轉(zhuǎn)換器的HV1和HV2引腳。然后,LV1和LV2引腳以3.3V邏輯電平向MPU-9150提供相同的信號。您的設(shè)備可能還具有未使用的HV3,HV4,LV3和LV4連接。
步驟3:對Arduino進(jìn)行編程
該草圖包括三個文件(附加)。將這三個都復(fù)制到Arduino sketch文件夾中的新文件夾“ Compass”中。然后,草圖應(yīng)出現(xiàn)在Arduino IDE的草圖簿中。
在編譯之前,請檢查“指南針”選項卡下文件頂部的#define配置選項,并根據(jù)需要進(jìn)行修改。
PIN定義用于Neopixel數(shù)據(jù)輸入的Arduino引腳,默認(rèn)情況下為引腳8。
BRILL是默認(rèn)的像素亮度,最大可以為255,但是更高的值會造成盲目和可能消耗的電流超過電源所能提供的電流,尤其是使用較大尺寸的環(huán)之一時。我通常不會超過30。
PIXELS是指環(huán)中的像素數(shù)。 Adafruit當(dāng)前提供的尺寸為12(非常好用),16、24(非常不錯的尺寸)和60(巨大-如果您有足夠的錢就可以了)。
已反轉(zhuǎn):如果您的戒指與MPU-9150在電路板的同一側(cè),請保留此注釋掉。相對于MPU-9150,第一個像素應(yīng)位于加速度計的正Y方向。取消注釋您的戒指在板子的另一側(cè)(已將板子繞Y軸翻轉(zhuǎn))。
您將需要下載并安裝MPU6050庫(其中還包含代碼)用于MPU-9150,是MPU6050的超集)和Adafruit Neopixel庫。編譯草圖并將其上傳到Arduino。
步驟4:自動校準(zhǔn)過程
首次運(yùn)行草圖時,它首先輸入校準(zhǔn)值程序。將完成的設(shè)備放在桌子上方幾英寸的地方,使電路板的一個邊緣與桌子的邊緣對齊,或者與其他固定的直邊對齊。
Neopixel環(huán)將顯示一些綠色和一些藍(lán)色像素。調(diào)平電路板,直到它們?nèi)孔優(yōu)榫G色。剩余的藍(lán)色像素表示該邊太高(天空為藍(lán)色)。當(dāng)滿足水平要求時,將讀取數(shù)個磁力計讀數(shù),然后將所有像素閃爍一次。
現(xiàn)在,它將要求您在4個方向上將其傾斜45度,以綠色提示和藍(lán)色像素一樣,在每個位置進(jìn)行測量,并將所有像素閃爍2、3、4,最后閃爍5次。始終注意使板的邊緣與桌子的邊緣對齊。
整個過程將重復(fù)3次,然后將計算并存儲磁力計的偏移量。
一旦校準(zhǔn),草圖將模擬指南針。消除藍(lán)色像素以使電路板保持水平,從而獲得可靠的讀數(shù)。紅點(diǎn)疊加在一起,表示北。點(diǎn)從一個像素移動到下一個像素時逐漸淡出。
您可以根據(jù)需要使它重新進(jìn)入校準(zhǔn)模式,只需將板急劇地向另一方向扭轉(zhuǎn)幾下即可。
p》
第5步:在自己的項目中使用草圖
您可以將校準(zhǔn)功能合并到自己的項目中,方法是將我的代碼合并到自己的代碼中或添加代碼挖掘,取決于您已經(jīng)走了多遠(yuǎn)。 Mine包含鉤子,可用于添加其他功能。
如果將Mine合并到自己的鉤子中,請完成Calibrate和Functions選項卡。在“指南針”選項卡中,您需要將我的Setup()函數(shù)與您的函數(shù)合并,并將之前的所有內(nèi)容合并到您的代碼中。您只需要調(diào)用Calibrate()函數(shù)即可進(jìn)入校準(zhǔn)模式。
“校準(zhǔn)”選項卡包含兩個#define語句。 NUMSAMPLES定義每個位置獲取多少個磁力計讀數(shù)。可能沒有特別的理由將其從10更改。這樣的數(shù)字可以確保始終保持穩(wěn)定。 NUMTESTS定義要重復(fù)執(zhí)行5個位置的完整過程的次數(shù)。一個很好的數(shù)字是3,但是對于速度而言,如果您只想進(jìn)行粗略的校準(zhǔn),則1可能就足夠了。
步驟6:使用其他硬件
相同的技術(shù)可以用于其他磁力計,并且不僅限于Arduino,還必須對其進(jìn)行調(diào)整,并可能將其從C語言翻譯為另一種語言。
如果將代碼修改為如果要使用其他磁力計,則MPU-9150會對磁力計和加速度計使用不同的坐標(biāo)系。從一個交換到另一個需要交換X和Y值并取反Z。這是在readMag()函數(shù)中完成的,以便其余代碼可以僅在加速度計的坐標(biāo)系中工作。一旦計算出偏移量,就將其轉(zhuǎn)換回磁力計坐標(biāo)以進(jìn)行存儲。
使用其他磁力計,原則上您只需要替換readMag()函數(shù)即可。
三個數(shù)組,mx [],my []和mz [] 5個元素中的每一個,將磁力計讀數(shù)保持在5個位置(即水平)上,分別繞X軸旋轉(zhuǎn)45度,然后繞X軸旋轉(zhuǎn),以及類似地繞Y軸旋轉(zhuǎn)。旋轉(zhuǎn)加速度計輸出的位置(第一個位置除外),以便displayCal()函數(shù)只需要計算變量“ angle”和“ up”,作為與所需方向和方向(作為浮點(diǎn)像素數(shù))的角度最大的坡度。將誤差的大小轉(zhuǎn)換為對數(shù)刻度,以在誤差較小時提供最大的靈敏度。當(dāng)誤差在限制范圍內(nèi)時,displayCal()函數(shù)將返回布爾值true,一旦這樣做,行中就會以固定次數(shù)多次校準(zhǔn)Calibrate()存儲磁力計讀數(shù)。
實(shí)際計算偏移量的計算需要幾頁代數(shù)和三角函數(shù),但僅用4行代碼即可實(shí)現(xiàn)。您可能會認(rèn)識到魔術(shù)數(shù)0.7071是2或cos(45?)的平方根的一半。從1減去這個得到第二個魔術(shù)數(shù)0.29289并將其加倍得到第三個魔術(shù)數(shù)0.58579。畢竟不是魔術(shù)。
在校準(zhǔn)中使用的45度傾斜沒有什么特別之處,但是它確實(shí)大大簡化了數(shù)學(xué)運(yùn)算。原則上,您可以將設(shè)備繞垂直方向滾動,連續(xù)獲取來自加速度計和磁力計的讀數(shù),并計算偏移量,直到計算出的平均值穩(wěn)定在一個可靠的結(jié)果附近,但數(shù)學(xué)會復(fù)雜得多。 iOS Compass應(yīng)用程序執(zhí)行此操作,這是我自動校準(zhǔn)的想法。
-
校準(zhǔn)
+關(guān)注
關(guān)注
1文章
153瀏覽量
21839 -
磁力計
+關(guān)注
關(guān)注
1文章
71瀏覽量
20841
發(fā)布評論請先 登錄
相關(guān)推薦
評論