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

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

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

構(gòu)建一個很酷數(shù)字羅盤的教程分享

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯溫斯·拉吉 ? 2022-10-28 16:59 ? 次閱讀

人類的大腦是由復(fù)雜的結(jié)構(gòu)層構(gòu)建的,這有助于我們成為地球上的主導(dǎo)物種。例如,大腦中的內(nèi)嗅皮層可以給你方向感,幫助你輕松地在你不熟悉的地方導(dǎo)航。但與我們不同的是,機(jī)器人無人駕駛的Ariel車輛需要一些東西來獲得這種方向感,這樣它們就可以在新的地形和景觀中自主操縱。不同的機(jī)器人使用不同類型的傳感器來實(shí)現(xiàn)這一點(diǎn),但常用的傳感器是磁力計(jì),它可以通知機(jī)器人當(dāng)前面向的地理圖形方向。這不僅可以幫助機(jī)器人感知方向,還可以在預(yù)定義的方向和天使中輪流。

由于傳感器可以指示北,南,東和西的地理圖形,我們?nèi)祟愐部梢栽谛枰獣r使用它。因此,在本文中,讓我們嘗試了解磁力計(jì)傳感器的工作原理以及如何將其與Arduino微控制器接口。在這里,我們將構(gòu)建一個很酷的數(shù)字羅盤,它將通過發(fā)光指向北方向的LED來幫助我們找到方向。這個數(shù)字羅盤是整齊地在PCBGO上制造的,這樣我下次去野外時就可以攜帶它,并希望我能迷路,只是為了用這個東西找到回家的路。讓我們開始吧。

阿爾杜伊諾指南針項(xiàng)目所需材料

阿爾杜伊諾專業(yè)迷你版

HMC5883L磁力計(jì)傳感器

LED 燈 - 8 否

470歐姆電阻器 – 8Nos

桶杰克

像PCB戈這樣的可靠印刷電路板制造商

小型 FTDI 編程

個人電腦/筆記本電腦

什么是磁力計(jì),它是如何工作的?

在我們深入研究電路之前,讓我們先了解一下磁力計(jì)及其工作原理。顧名思義,萬磁王這個詞并不是指那個瘋狂的變種人,他可以通過在空中彈鋼琴來控制金屬。哦!但我喜歡那個很酷的家伙。

磁力計(jì)實(shí)際上是一種設(shè)備,可以感應(yīng)地球的磁極,并據(jù)此指向方向。我們都知道,地球是巨大的球形磁鐵,有北極和南極。因此存在磁場。磁力計(jì)感測這個磁場,并根據(jù)磁場的方向,它可以檢測我們面臨的方向。

HMC5883L傳感器模塊的工作原理

HMC5883L作為磁力計(jì)傳感器也做同樣的事情。它上面有霍尼韋爾的HMC5883L IC。該 IC 具有 3 種磁阻材料,其內(nèi)部排列在 x、y 和 z 軸上。流經(jīng)這些材料的電流量對地球磁場很敏感。因此,通過測量流經(jīng)這些材料的電流的變化,我們可以檢測到地球磁場的變化。一旦變化被磁場吸收,這些值就可以通過I2C協(xié)議發(fā)送到任何嵌入式控制器,如微控制器或處理器。

由于傳感器通過感應(yīng)磁場來工作,因此如果將金屬放置在附近,則輸出值將受到很大影響。也可以利用這種行為將這些傳感器用作金屬檢測機(jī)。應(yīng)注意不要將磁鐵靠近此傳感器,因?yàn)閬碜源盆F的強(qiáng)磁場可能會觸發(fā)傳感器上的錯誤值。

HMC5883L 與 QMC5883L 之間的區(qū)別

對于許多初學(xué)者來說,圍繞這些傳感器存在一種常見的困惑。這是因?yàn)橐恍┕?yīng)商(實(shí)際上是大多數(shù)供應(yīng)商)銷售QMC5883L傳感器,而不是霍尼韋爾的原始HMC5883L。這主要是因?yàn)镼MC5883L比HMC5883L模塊便宜得多??杀氖?,這兩個傳感器的工作原理略有不同,并且不能將相同的代碼用于兩者。這是因?yàn)閮蓚€傳感器的 I2C 地址不相同。本教程中給出的代碼僅適用于常用傳感器模塊 QMC5883L。

pYYBAGNbmfWACd0_AABst202x4Y650.jpg

要知道您擁有的是哪種型號的傳感器,您只需仔細(xì)觀察IC本身即可閱讀其上寫的內(nèi)容。如果它寫成類似L883的東西,那么它就是HMC58836L,如果它寫成DA5883之類的東西,那么它就是QMC5883L IC。這兩個模塊都如下圖所示,以便于輕描淡寫。

poYBAGNbmfmAIDfJAAD6zzLIPUA795.png

阿爾杜伊諾數(shù)字羅盤電路圖

這款基于Arduino的數(shù)字羅盤的電路非常簡單,我們只需將HMC5883L傳感器與Arduino接口,并將8個LED連接到Arduino Pro mini的GPIO引腳。完整的電路圖如下所示

poYBAGNbmUuACxWUAAJYGUKtbKY325.png

傳感器模塊有5個引腳,其中DRDY(數(shù)據(jù)就緒)在我們的項(xiàng)目中未使用,因?yàn)槲覀冊谶B續(xù)模式下操作傳感器。Vcc 和接地引腳用于從 Arduino 板以 5V 電壓為模塊供電。SCL 和 SDA 是 I2C 通信總線,分別連接到 Arduino Pro 迷你版的 A4 和 A5 I2C 引腳。由于模塊本身在線路上有一個拉高電阻,因此無需在外部添加它們。

為了指示方向,我們使用了8個LED,所有這些LED都通過470歐姆的限流電阻連接到Arduino的GPIO引腳。完整電路由一個 9V 電池通過桶形插孔供電。該 9V 直接提供給 Arduino 的 Vin 引腳,在那里使用 Arduino 上的板載穩(wěn)壓器將其調(diào)節(jié)至 5V。然后,該5V用于為傳感器和Arduino供電。

為數(shù)字羅盤制造 PCB

電路的想法是將8個LED以圓形方式放置,以便每個LED分別指向所有8個方向,即北,東北,東,東南,南,西南,西和西北。因此,將它們整齊地排列在面包板上甚至性能板上并不容易。為該電路開發(fā)PCB將使其看起來更整潔,更易于使用。因此,我打開PCB設(shè)計(jì)軟件,將LED和電阻器以整齊的圓形模式放置,并連接軌道以形成連接。完成后,我的設(shè)計(jì)如下所示。

pYYBAGNbmfuAYYW_AABojnnW2tM462.png

我將其設(shè)計(jì)為雙面板,因?yàn)槲蚁M鸄rduino位于PCB的底部,這樣它就不會破壞PCB頂部的外觀。如果你擔(dān)心你必須為雙面PCB支付高價,那么請堅(jiān)持住我得到了很好的新來。

現(xiàn)在,我們的設(shè)計(jì)已經(jīng)準(zhǔn)備就緒,是時候?qū)⑺鼈冎圃斐鰜砹?。要完成PCB非常容易,只需按照以下步驟操作即可

第 1 步: 進(jìn)入 www.pcbgogo.com,如果這是您的第一次注冊。然后,在“PCB 原型”選項(xiàng)卡中,輸入 PCB 的尺寸、層數(shù)和所需的 PCB 數(shù)量。我的PCB是80厘米×80厘米,所以標(biāo)簽看起來像下面這樣

poYBAGNbmf2AZlK2AABI4Ym4tDg942.png

第 2 步: 單擊“立即報(bào)價”按鈕繼續(xù)。您將被帶到一個頁面,如果需要,可以設(shè)置一些其他參數(shù),例如使用的材料軌道間距等。但大多數(shù)情況下,默認(rèn)值可以正常工作。我們在這里唯一需要考慮的是價格和時間。如您所見,構(gòu)建時間僅為2-3天,我們的PSB只需花費(fèi)5美元。然后,您可以根據(jù)需要選擇首選的運(yùn)輸方式。

pYYBAGNbmf-AXpoIAABKisTeaAM856.png

第 3 步:最后一步是上傳Gerber文件并繼續(xù)付款。為了確保過程順利進(jìn)行,PCBGOGO在繼續(xù)付款之前驗(yàn)證您的Gerber文件是否有效。通過這種方式,您可以確保您的PCB是制造友好的,并將按照承諾到達(dá)您手中。

組裝印刷電路板

訂購電路板后,幾天后,它到達(dá)了我,盡管快遞在一個整齊的標(biāo)簽包裝良好的盒子里,并且一如既往地,PCB的質(zhì)量很棒。我在下面分享了幾張板的圖片供您判斷。

poYBAGNbmgGAUXjmAACbwK8K27U214.jpg

我打開焊條,開始組裝電路板。由于腳印、焊盤、過孔和絲網(wǎng)印刷的形狀和尺寸都非常合適,因此我在組裝電路板時沒有問題。從拆開包裝盒開始,電路板在短短10分鐘內(nèi)就準(zhǔn)備好了。

焊接后的電路板的幾張圖片如下所示。

poYBAGNbmgOAZ7ujAACtgsDFinM804.jpg

對阿爾杜伊諾進(jìn)行編程

現(xiàn)在我們的硬件已經(jīng)準(zhǔn)備就緒,讓我們看看必須上傳到Arduino板中的程序。該代碼的目的是從QMC5883L磁力計(jì)傳感器讀取數(shù)據(jù)并將其轉(zhuǎn)換為度數(shù)(0到360)。一旦我們知道了程度,我們就必須打開指向特定方向的LED。我在這個程序中使用的方向是北方。因此,無論您身在何處,您的電路板上都只有一個LED發(fā)光,并且LED的方向?qū)⒅甘颈毕?/strong>。一次以后可以計(jì)算出另一個方向是已知的一個方向。

數(shù)字羅盤項(xiàng)目的完整代碼可在本頁末尾找到。您可以在包含庫后直接將其上傳到您的板上,然后就可以開始了。但是,如果您想進(jìn)一步了解代碼中實(shí)際發(fā)生的情況。

如前所述,我們使用的是QMC5883L IC,為了與IC通信,我們需要知道其寄存器的I2C地址,該地址可以在其數(shù)據(jù)表中找到。但幸運(yùn)的是,所有這些都已經(jīng)完成,并被一個叫做Keeping的人打包成一個圖書館。因此,您所要做的就是通過單擊鏈接下載QMC5883L的庫以獲取ZIP文件。然后,可以通過按照草圖 ->包含庫 -> 添加.ZIP庫,將此 ZIP 文件添加到 Arduino IDE 中。

添加庫后,我們可以繼續(xù)我們的程序。我們通過包含所需的庫文件來開始程序,如下所示。線庫用于啟用 I2C 通信,而 MechaQMC5883 是我們剛剛添加到 Arduino 中的一個。此庫包含有關(guān)如何與 EMC5883L 傳感器通信的所有信息。

#include //Wire Librarey for I2C communication

#include //QMC5883 Librarey is added since mine is QMC583 and not HMC5883

在下一行中,我們?yōu)?strong>正在使用的傳感器創(chuàng)建一個對象名稱。我用過qmc這個名字,但它可以是你喜歡的任何東西。

MechaQMC5883 qmc; //Create an object name for the snsor, I have named it as qmc

接下來,我們進(jìn)入全局變量聲明。在這里,由于我們有8個LED作為輸出,因此很難通過引腳名稱來引用每個LED,因此我們使用陣列選項(xiàng)來引用所有LED。數(shù)組的名稱是 ledPins,變量led_count是我們所擁有的 led 的數(shù)量。它以 0 開頭。

int ledPins[] = {2,3,4,5,6,7,8,9}; //Array of output pin to which the LED is connected to

char led_count = 7; //Total number of LED pins

空隙設(shè)置功能中,我們初始化 I2C 通信、串行通信和傳感器。然后,我們將所有LED引腳聲明為輸出引腳。由于我們已經(jīng)使用了數(shù)組,因此通過使用 for 循環(huán)并在 for 循環(huán)中導(dǎo)航來引用所有引腳,如下所示。

void setup() {

Wire.begin(); //Begin I2C communication

Serial.begin(9600); //Begin Serial Communication

qmc.init(); //Initialise the QMC5883 Sensor

for (int thisPin=0; thisPin <= led_count; thisPin++){ //Navigate through all the pins in array

pinMode(ledPins[thisPin],OUTPUT); //Declare them as output

}

}

在無限主循環(huán)中,我們必須從傳感器獲取 x,y 和 z 的值,并計(jì)算傳感器當(dāng)前面臨的程度。要讀取 x,y 和 z 的值,請使用以下行

int x,y,z;

qmc.read(&x,&y,&z); //Get the values of X,Y and Z from sensor

用于計(jì)算以度為單位的標(biāo)題的公式如下所示。由于我們不會沿 z 軸旋轉(zhuǎn)指南針,因此我們不會考慮該值。僅當(dāng) IC 平坦表面朝上時,才能使用此公式,就像在我們的設(shè)置中一樣。計(jì)算出航向后,該值將在-180到180的范圍內(nèi),我們必須將其轉(zhuǎn)換為0到360,就像我們在所有數(shù)字羅盤中找到的那樣。

int heading=atan2(x, y)/0.0174532925; //Calculate the degree using X and Y parameters with this formulae

//Convert result into 0 to 360

if(heading < 0)

heading+=360;

heading = 360-heading;

最后一步是向北方向發(fā)光。為此,我們有一系列if條件語句,我們檢查當(dāng)前度數(shù)的范圍,并據(jù)此打開LED。代碼如下所示

//Based on the value of heading print the result for debugging and glow the respective LED.

if (heading > 338 || heading < 22)

{

Serial.println("NORTH");

digitalWrite(ledPins[0],HIGH);

}

if (heading > 22 && heading < 68)

{

Serial.println("NORTH-EAST");

digitalWrite(ledPins[7],HIGH);

}

if (heading > 68 && heading < 113)

{

Serial.println("EAST");

digitalWrite(ledPins[6],HIGH);

}

if (heading > 113 && heading < 158)

{

Serial.println("SOUTH-EAST");

digitalWrite(ledPins[5],HIGH);

}

if (heading > 158 && heading < 203)

{

Serial.println("SOUTH");

digitalWrite(ledPins[4],HIGH);

}

if (heading > 203 && heading < 248)

{

Serial.println("SOTUH-WEST");

digitalWrite(ledPins[3],HIGH);

}

if (heading > 248 && heading < 293)

{

Serial.println("WEST");

digitalWrite(ledPins[2],HIGH);

}

if (heading > 293 && heading < 338)

{

Serial.println("NORTH-WEST");

digitalWrite(ledPins[1],HIGH);

}

通過查看下表可以理解代碼值背后的邏輯?;旧?,我們計(jì)算我們面向哪個方向,并預(yù)測北向并發(fā)光相應(yīng)的LED。

poYBAGNbmaKAT7l9AABy4NKZAY4909.png

程序的最后一部分是設(shè)置結(jié)果的更新速度。我已經(jīng)創(chuàng)建了一個500毫微秒的延遲,然后使所有LED關(guān)閉以再次啟動,形成第一個內(nèi)部的空隙路。但是,如果您需要更快的更新,則可以進(jìn)一步減少延遲。

delay(500); // update position of LED for every alf seconds

//Turn off the all the LED

for (int thisPin=0; thisPin <= led_count; thisPin++){

digitalWrite(ledPins[thisPin],LOW);

}

測試數(shù)字羅盤

由于我們已經(jīng)使用了Arduino pro mini,我們需要一個像FTDI板這樣的外部程序員來上傳程序。上傳程序后,您應(yīng)該注意到板上有一個LED發(fā)光,LED發(fā)光的方向?qū)⑹荖ORTH方向。

pYYBAGNbmgaARdBOAACRSXZo_5U444.jpg

然后,您可以通過旋轉(zhuǎn)電路板來玩它,并檢查LED是否仍然指向北方向。之后,您可以隨時使用9V電池為設(shè)置供電并檢查您面臨的方向。數(shù)字羅盤的完整工作原理可以在下面的視頻中找到。您可能會注意到,當(dāng)電路板附近有重金屬片時,或者即使您沿著Z軸旋轉(zhuǎn)電路板,這些值也會出錯。

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

    關(guān)注

    2545

    文章

    50459

    瀏覽量

    751104
  • 數(shù)字羅盤
    +關(guān)注

    關(guān)注

    1

    文章

    12

    瀏覽量

    14954
  • 磁力計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    71

    瀏覽量

    20824
收藏 人收藏

    評論

    相關(guān)推薦

    基于Arduino構(gòu)建自動飲水機(jī)

    在這個項(xiàng)目中,我們將使用Arduino構(gòu)建自動飲水機(jī)和電磁閥,當(dāng)玻璃杯靠近它時,它可以自動給你水。聽起來
    的頭像 發(fā)表于 11-09 16:22 ?2954次閱讀
    基于Arduino<b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>自動飲水機(jī)

    HMC5883 數(shù)字羅盤算法優(yōu)化

    目前本人手里有數(shù)字羅盤產(chǎn)品,當(dāng)初設(shè)計(jì)人員對于數(shù)字羅盤沒有增加算法或許涉及不深,導(dǎo)致產(chǎn)品使用過程中經(jīng)常穩(wěn)定性比較差,目前硬件產(chǎn)品現(xiàn)有,需要的是改動軟件算法,有興趣請聯(lián)系我產(chǎn)品
    發(fā)表于 05-21 17:38

    如何用STM32實(shí)現(xiàn)電子羅盤?

    項(xiàng)目需要用STM32實(shí)現(xiàn)電子羅盤,我已經(jīng)移植了ucgui,該如何實(shí)現(xiàn)了?比較令我頭疼的是問題有:(1)如何實(shí)現(xiàn)在表盤中非水平(隨著角度不同有定的傾斜)顯示刻度?(2)如何實(shí)現(xiàn)表盤
    發(fā)表于 10-27 22:55

    使用Arduino構(gòu)建個數(shù)字羅盤

    方向。在本文中,您將學(xué)習(xí)如何使用 Arduino 構(gòu)建自己的數(shù)字羅盤。通過它,您將能夠了解HMC5883L傳感器的完整操作,來檢測它的方位方向。此外,您將學(xué)習(xí)如何構(gòu)建自己的電子
    發(fā)表于 08-25 06:11

    報(bào)話式羅盤

    報(bào)話式羅盤   報(bào)話式羅盤主要霍爾效應(yīng)方位
    發(fā)表于 09-17 17:56 ?533次閱讀
    報(bào)話式<b class='flag-5'>羅盤</b>

    ST推出MEMS數(shù)字羅盤模塊

    ST推出MEMS數(shù)字羅盤模塊 意法半導(dǎo)體在單模塊內(nèi)集成3軸數(shù)字加速計(jì)和
    發(fā)表于 01-16 08:37 ?938次閱讀

    什么是電子羅盤/數(shù)字羅盤

    什么是電子羅盤/數(shù)字羅盤 ??? 電子羅盤,也叫數(shù)字
    發(fā)表于 01-29 10:11 ?3485次閱讀

    HMR3000數(shù)字羅盤的讀數(shù)程序

    HMR3000數(shù)字羅盤的讀數(shù)程序,感興趣的小伙伴們可以看看。
    發(fā)表于 08-23 16:23 ?29次下載

    digilentPmodCMPS:三軸數(shù)字羅盤簡介

    Pmod CMPS使用了霍尼韋爾的HMC5883L三軸數(shù)字羅盤,并且可以向任何帶有I2C接口的Digilent主板上添加羅盤航向讀數(shù)。
    的頭像 發(fā)表于 12-02 10:18 ?2598次閱讀
    digilentPmodCMPS:三軸<b class='flag-5'>數(shù)字</b><b class='flag-5'>羅盤</b>簡介

    digilent三軸數(shù)字羅盤介紹

    Digilent Pmod CMPS2是一款數(shù)字羅盤模塊,基于 Memsic 的 MMC34160PJ 磁力計(jì)設(shè)計(jì)。
    的頭像 發(fā)表于 12-02 11:19 ?3004次閱讀
    digilent三軸<b class='flag-5'>數(shù)字</b><b class='flag-5'>羅盤</b>介紹

    電子羅盤在終端設(shè)備上有著怎樣的應(yīng)用

    電子羅盤在終端的應(yīng)用 電子羅盤在人們?nèi)粘I钪凶畛S玫漠a(chǎn)品手機(jī)指南針。手機(jī)電子羅盤就是手機(jī)軟件也是手機(jī)的
    發(fā)表于 06-15 11:35 ?877次閱讀

    電子羅盤在終端的應(yīng)用

    電子羅盤在終端的應(yīng)用 電子羅盤在人們?nèi)粘I钪凶畛S玫漠a(chǎn)品手機(jī)指南針。手機(jī)電子羅盤就是手機(jī)軟件也是手機(jī)的
    發(fā)表于 03-23 11:37 ?1358次閱讀

    電子羅盤是什么_電子羅盤工作原理

    電子羅盤,是利用地磁場來定北極的種方法。古代稱為羅經(jīng),現(xiàn)代利用先進(jìn)加工工藝生產(chǎn)的磁阻傳感器為羅盤數(shù)字化提供了有力的幫助?,F(xiàn)在般有用磁阻
    的頭像 發(fā)表于 02-01 15:15 ?1.5w次閱讀

    Arduino數(shù)字羅盤模塊

    電子發(fā)燒友網(wǎng)站提供《Arduino數(shù)字羅盤模塊.zip》資料免費(fèi)下載
    發(fā)表于 08-02 14:23 ?1次下載
    Arduino<b class='flag-5'>數(shù)字</b><b class='flag-5'>羅盤</b>模塊

    如何構(gòu)建觸摸傳感器電路?

    在本項(xiàng)目中,您將構(gòu)建觸摸傳感器電路。這是很酷且簡單的電路,可讓您通過手指觸摸來控制LED
    的頭像 發(fā)表于 06-29 14:39 ?2023次閱讀
    如何<b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>觸摸傳感器電路?