精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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軸旋轉電路板,這些值也會出錯。

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

    關注

    2548

    文章

    50670

    瀏覽量

    751982
  • 數字羅盤
    +關注

    關注

    1

    文章

    12

    瀏覽量

    14958
  • 磁力計
    +關注

    關注

    1

    文章

    71

    瀏覽量

    20840
收藏 人收藏

    評論

    相關推薦

    基于Arduino構建自動飲水機

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

    HMC5883 數字羅盤算法優化

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

    如何用STM32實現電子羅盤?

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

    使用Arduino構建個數字羅盤

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

    報話式羅盤

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

    ST推出MEMS數字羅盤模塊

    ST推出MEMS數字羅盤模塊 意法半導體在單模塊內集成3軸數字加速計和
    發表于 01-16 08:37 ?947次閱讀

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

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

    HMR3000數字羅盤的讀數程序

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

    digilentPmodCMPS:三軸數字羅盤簡介

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

    digilent三軸數字羅盤介紹

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

    電子羅盤在終端設備上有著怎樣的應用

    電子羅盤在終端的應用 電子羅盤在人們日常生活中最常用的產品手機指南針。手機電子羅盤就是手機軟件也是手機的
    發表于 06-15 11:35 ?884次閱讀

    電子羅盤在終端的應用

    電子羅盤在終端的應用 電子羅盤在人們日常生活中最常用的產品手機指南針。手機電子羅盤就是手機軟件也是手機的
    發表于 03-23 11:37 ?1363次閱讀

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

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

    Arduino數字羅盤模塊

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

    如何構建觸摸傳感器電路?

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