<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

構建一個很酷數字羅盤的教程分享

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

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

由于傳感器可以指示北,南,東和西的地理圖形,我們人類也可以在需要時使用它。因此,在本文中,讓我們嘗試了解磁力計傳感器的工作原理以及如何將其與Arduino微控制器接口。在這里,我們將構建一個很酷的數字羅盤,它將通過發光指向北方向的LED來幫助我們找到方向。這個數字羅盤是整齊地在PCBGO上制造的,這樣我下次去野外時就可以攜帶它,并希望我能迷路,只是為了用這個東西找到回家的路。讓我們開始吧。

阿爾杜伊諾指南針項目所需材料

阿爾杜伊諾專業迷你版

HMC5883L磁力計傳感器

LED 燈 - 8 否

470歐姆電阻器 – 8Nos

桶杰克

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

小型 FTDI 編程

個人電腦/筆記本電腦

什么是磁力計,它是如何工作的?

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

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

HMC5883L傳感器模塊的工作原理

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

由于傳感器通過感應磁場來工作,因此如果將金屬放置在附近,則輸出值將受到很大影響。也可以利用這種行為將這些傳感器用作金屬檢測機。應注意不要將磁鐵靠近此傳感器,因為來自磁鐵的強磁場可能會觸發傳感器上的錯誤值。

HMC5883L 與 QMC5883L 之間的區別

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

pYYBAGNbmfWACd0_AABst202x4Y650.jpg

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

poYBAGNbmfmAIDfJAAD6zzLIPUA795.png

阿爾杜伊諾數字羅盤電路圖

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

poYBAGNbmUuACxWUAAJYGUKtbKY325.png

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

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

為數字羅盤制造 PCB

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

pYYBAGNbmfuAYYW_AABojnnW2tM462.png

我將其設計為雙面板,因為我希望Arduino位于PCB的底部,這樣它就不會破壞PCB頂部的外觀。如果你擔心你必須為雙面PCB支付高價,那么請堅持住我得到了很好的新來。

現在,我們的設計已經準備就緒,是時候將它們制造出來了。要完成PCB非常容易,只需按照以下步驟操作即可

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

poYBAGNbmf2AZlK2AABI4Ym4tDg942.png

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

pYYBAGNbmf-AXpoIAABKisTeaAM856.png

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

組裝印刷電路板

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

poYBAGNbmgGAUXjmAACbwK8K27U214.jpg

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

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

poYBAGNbmgOAZ7ujAACtgsDFinM804.jpg

對阿爾杜伊諾進行編程

現在我們的硬件已經準備就緒,讓我們看看必須上傳到Arduino板中的程序。該代碼的目的是從QMC5883L磁力計傳感器讀取數據并將其轉換為度數(0到360)。一旦我們知道了程度,我們就必須打開指向特定方向的LED。我在這個程序中使用的方向是北方。因此,無論您身在何處,您的電路板上都只有一個LED發光,并且LED的方向將指示北向。一次以后可以計算出另一個方向是已知的一個方向。

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

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

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

#include //Wire Librarey for I2C communication

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

在下一行中,我們為正在使用的傳感器創建一個對象名稱。我用過qmc這個名字,但它可以是你喜歡的任何東西。

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

接下來,我們進入全局變量聲明。在這里,由于我們有8個LED作為輸出,因此很難通過引腳名稱來引用每個LED,因此我們使用陣列選項來引用所有LED。數組的名稱是 ledPins,變量led_count是我們所擁有的 led 的數量。它以 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

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

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

}

}

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

int x,y,z;

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

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

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;

最后一步是向北方向發光。為此,我們有一系列if條件語句,我們檢查當前度數的范圍,并據此打開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);

}

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

poYBAGNbmaKAT7l9AABy4NKZAY4909.png

程序的最后一部分是設置結果的更新速度。我已經創建了一個500毫微秒的延遲,然后使所有LED關閉以再次啟動,形成第一個內部的空隙路。但是,如果您需要更快的更新,則可以進一步減少延遲。

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);

}

測試數字羅盤

由于我們已經使用了Arduino pro mini,我們需要一個像FTDI板這樣的外部程序員來上傳程序。上傳程序后,您應該注意到板上有一個LED發光,LED發光的方向將是NORTH方向。

pYYBAGNbmgaARdBOAACRSXZo_5U444.jpg

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2526

    文章

    48110

    瀏覽量

    740122
  • 數字羅盤
    +關注

    關注

    1

    文章

    11

    瀏覽量

    14930
  • 磁力計
    +關注

    關注

    1

    文章

    54

    瀏覽量

    20593
收藏 人收藏

    評論

    相關推薦

    HMC5883 數字羅盤算法優化

    目前本人手里有數字羅盤產品,當初設計人員對于數字羅盤沒有增加算法或許涉及不深,導致產品使用過程中經常穩定性比較差,目前硬件產品現有,需要的是改動軟件算法,有興趣請聯系我產品
    發表于 05-21 17:38

    如何用STM32實現電子羅盤?

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

    電子羅盤概述及應用基本介紹

    目錄1 概述及應用基本介紹電子羅盤,也叫數字指南針,是利用地磁場來定北極的種方法,作為導航儀器或姿態傳感器已被廣泛應用。古代稱為羅經,現代利用先進加工工藝生產的磁阻傳感器為羅盤
    發表于 12-09 06:55

    使用Arduino構建個數字羅盤

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

    報話式羅盤

    報話式羅盤   報話式羅盤主要一個霍爾效應方位
    發表于 09-17 17:56 ?506次閱讀
    報話式<b class='flag-5'>羅盤</b>

    ST推出MEMS數字羅盤模塊

    ST推出MEMS數字羅盤模塊 意法半導體在單一模塊內集成一個3軸數字加速計和一個3軸數字磁感應計,這款數字
    發表于 01-16 08:37 ?876次閱讀

    什么是電子羅盤/數字羅盤

    什么是電子羅盤/數字羅盤 ??? 電子羅盤,也叫數字
    發表于 01-29 10:11 ?3340次閱讀

    HMR3000數字羅盤的讀數程序

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

    AVR單片機數字電子羅盤的研究

    引起學界重視,為此本文就AVR單片機下數字電子羅盤的研究和實現展開了深入探討,希望這一探討內容能夠為相關研究人員帶來一定啟發。 在本文進行的AVR單片機下數字電子羅盤設計中,筆者選用了
    發表于 02-11 10:30 ?3次下載

    digilentPmodCMPS:三軸數字羅盤簡介

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

    digilent三軸數字羅盤介紹

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

    電子羅盤在終端的應用

    讀取的方向。 此外與傳統羅盤一樣,可以根據地標粗略估計自己所處位置可以控制行進方向等等,電子羅盤也叫數字指南針,是利用地磁場來定北極的一種方法。古代稱為羅經現代利用先進加工工藝生產的磁阻傳感器為
    發表于 03-23 11:37 ?1196次閱讀

    電子羅盤應用廣泛,淺析它的工作原理

    電子羅盤工作原理及本質 電子羅盤電子羅盤又稱數字羅盤,在現代技術條件中電子羅盤作為導航儀器或姿態
    發表于 06-11 14:27 ?1913次閱讀

    高精度羅盤的特點介紹_羅盤專題

    高精度羅盤的特點介紹 電子羅盤作為飛行器方位測量以及飛行姿態監測的常用設備,廣泛應用于航空航天系統中的各類導航儀器和姿態傳感器中,測量的精度直接會影響到系統的性能。因此,高精度電子羅盤在航空、航天
    發表于 04-16 17:19 ?2479次閱讀

    Arduino數字羅盤模塊

    電子發燒友網站提供《Arduino數字羅盤模塊.zip》資料免費下載
    發表于 08-02 14:23 ?1次下載
    Arduino<b class='flag-5'>數字</b><b class='flag-5'>羅盤</b>模塊
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>