在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>使用arduino/genuino 101的板載慣性測量單元(IMU)教程

使用arduino/genuino 101的板載慣性測量單元(IMU)教程

2022-12-19 | zip | 0.16 MB | 次下載 | 免費

資料介紹

描述

?

簡介和動機:

有很多關于如何在您的項目中使用 arduino/genuino 101 的板載慣性測量單元 (IMU) 的優秀教程例如:,但缺少有關如何使用 Arduino/Genuino 101 的板載低功耗藍牙 (BLE) 傳輸此數據的信息

本教程項目將演示一種使用 Evothings Workbench 通過 BLE 將原始 IMU 數據傳輸到移動設備的方法。本教程還將展示如何使用Smoothie.js以圖形方式實時顯示 IMU 數據

pYYBAGOYdd-APbeYAADSZ-ZTrtQ305.jpg
標題(可選)
?

你需要什么

  • Arduino/Genuino 101 板
  • USB電纜
  • Arduino IDE 1.6.8
  • 我們定制的 arduino 草圖,imuble01.ino
  • Evothings 工作臺和 Evothings 查看器?
  • Smoothie.js來自 SmoothieCharts?
  • 我們修改后的應用文件index.htmlapp.js

軟件

該項目的代碼已注釋,我鼓勵您閱讀它。我不會提供所有代碼如何工作的逐行細分,而是強調我認為最重要的領域。

對于 BLE 連接的 Arduino/Genuino 101 項目,了解所需軟件的整體布局非常重要。除了電路板上的 Arduino 草圖之外,您還必須編寫軟件才能在移動設備上運行。為了編寫草圖,我們使用熟悉的 Arduino IDE 以及我們項目所需的庫 CurieIMU 和 CurieBLE。

要為移動設備開發我們的軟件,有兩大類選項:

  • 直接為我們希望與之交互的移動設備的操作系統編寫本機應用程序。
  • 使用 JavaScript/HTML/CSS 三重奏編寫一個 Web 應用程序,它基本上可以在任何平臺上運行。

在我與 BLE 合作的最初努力中,我面臨的挑戰不僅是學習 BLE,而且還必須了解這些選項。這就是 Evothings 的用武之地。Evothings 平臺是一個完整的“生態系統”。借助 EvothingsStudio,我們可以使用 JavaScript/HTML/CSS 編寫我們軟件的移動應用程序組件。通過在我們的移動設備上運行 EvothngsViewer 應用程序,我們可以訪問設備的原生功能,例如 BLE。Evothings 平臺包括一個名為 easyble.js 的庫,該庫具有通過 BLE 連接與您的 Arduino/Genuino 101 項目建立和通信的所有必要功能。

?

如果您擔心不了解 HTML/CSS/JavaScript 會阻礙您,我可以保證在開始這些項目和使用 Evothings 之前,我沒有任何網絡編程經驗。我確實有 C/Arduino C 和 Python 方面的經驗,但沒有 HTML/CSS/JavaScript 方面的經驗。evothings 網站包含大量優秀的教程和文章 可幫助您入門。如果您有一些基本的編程知識,并且愿意通讀并學習一些有趣的代碼示例,那么請立即投入并使用這個非凡的工具!

Arduino草圖

我為 arduino 項目編寫軟件的首要原則是建立在其他人的工作之上,這個項目也不例外。我使用加速度計和陀螺儀原始數據訪問示例草圖作為我項目草圖的基礎。這些位于 CurieIMU 庫 ( http://www.arduino.cc/en/Reference/CurieIMU )參考頁面的底部。我從加速度計草圖開始,然后將相關的陀螺儀草圖元素剪切并粘貼到其中。

低功耗藍牙

當我第一次開始使用 BLE 時,我對所有新術語感到不知所措。我希望它會像通過串行端口發送消息一樣簡單。如果您感到不知所措,請不要擔心,只需開始嘗試即可。您使用它的次數越多,您就越有信心在您的項目中使用 BLE!有許多很好的教程可以幫助您入門。開始學習的幾個好地方是 CurieBLE 庫參考和 Adafruit BLE 教程:

BLE 標準規定了服務,這些服務是相關數據值的集合或集合。在 BLE 的世界中,這些值被稱為特性。每個服務和特征都由一個通用唯一標識符 (uuid) 指定。對于官方接受的服務,這些 uuid 是為您指定的。信不信由你,我找不到慣性測量的標準服務!所以對于這個應用程序,我必須為我的“imu 服務”生成一個自定義 uuid。對于自定義服務,您必須創建自己的 128 位自定義 uuid。這很容易做到,并且有很多資源可以生成這些 uuid。我使用的是一個在線 uuid 生成器:

完成后,您可以使用 CurieBLE 庫創建 BLE 服務:

BLEService imuService("917649A0-D98E-11E5-9EEC-0002A5D5C51B"); // 自定義 UUID

BLECharacteristic imuAccCharacteristic("917649A1-D98E-11E5-9EEC-0002A5D5C51B", BLERead | BLENotify, 12 );

BLECharacteristic imuGyroCharacteristic("917649A2-D98E-11E5-9EEC-0002A5D5C51B", BLERead | BLENotify, 12 );

BLEUnsignedCharCharacteristic appButtonCharacteristic("917649A7-D98E-11E5-9EEC-0002A5D5C51B", BLERead | BLEWrite );

請閱讀 Arduino/Genuino 101 網站上的 BLE 代碼示例(https://www.arduino.cc/en/Tutorial/Genuino101CurieBLEHeartRateMonitor) 和此代碼中的注釋以進一步了解如何設置您的 BLE 服務和特性。通過 BLE 發送浮點數:所有 BLE 數據都以字節形式傳輸。因此,無論您的數據是來自整數、字符還是浮點數,都必須將其轉換為字節才能通過 BLE 傳輸。無需將 IMU 數據作為浮點數傳輸,CurieIMU 接口允許您以整數形式訪問原始 IMU 數據。然而,這兩個示例應用程序都將這些原始數據轉換為具有物理意義的浮點數。這些轉換基于 CurieIMU 參考中推薦的公式。對于加速度計,建議使用以下公式將原始加速度計讀數轉換為 mg:

? ? ?浮動 g = (gRaw/32768.0)*getAccelerometerRange()

我們有什么選擇來處理這個問題?

  • 我們可以通過 BLE 發送原始數據整數,并在我們軟件的移動應用程序端實現推薦的方程。這將問題轉移到移動應用程序上。
  • 我們可以將浮點數轉換為字符串。字符串只是 char 數組,或者另一種看待它們的方式是字節數組。然后我們可以在移動應用程序方面隨意轉換或解碼這些字節。這是 CurieBLE 庫 ( http://www.arduino.cc/en/Reference/CurieBLE ) 的教程/參考所暗示的解決方案。
  • 我們可以使用一些 C 編程魔法將我們的浮點數轉換為它們的 char 數組或字節等價物,然后通過 BLE 將它們發送給移動應用程序“解碼”。

選項 1 很好,但沒有教給我們任何新東西。此外,當我們最終獲得只能作為浮點數使用的數據時,我們將回到我們開始的地方。英特爾居里模塊非常強大,那么為什么不使用它來執行計算并讓移動應用程序來處理其他瑣事呢?選項 2 是一種非常常用且可接受的方法,但涉及處理字符串和字符串轉換的所有開銷。

選項 3 可能是最復雜的,但也是最有效的。我們跳過了處理字符串的所有開銷。在這個選項中,我們還將學習如何使用代表我們數據的實際字節。我們將更深入地了解我們的計算機如何表示和存儲數字。我們還將獲得以 Arduino C 為核心的信心。最重要的是,這個選項也將為我們贏得一些嚴肅的“極客信譽”,因此作為優秀的制造者和黑客,我們當然會選擇選項 #3!

選項#3:

所有數據類型在內存中都有一個底層表示。了解浮點數的存儲和表示方式是我們解決方案的關鍵。Arduino C 使用 32 位或 4 個字節來表示和存儲一個浮點數。char 和 unsigned char 數據類型都使用 4 位或 1 字節來表示和存儲 char 數據。

unsigned char 是 CurieBLE 庫中數據交換的“貨幣”:

/**

* 設置 Characteristic 的當前值

* @param value 要設置的新值,作為字節數組。數據存儲在內部副本中。

* @param length 數組中要寫入的有效數據的長度,以字節為單位。

* 不得超過為此特征設置的 maxLength。

* @return bool true 設置值成功,錯誤為 false

*/

bool setValue(const unsigned char value[], unsigned short length);

如您所見,為了使用setValue()函數更改特征的值,我們需要將數據作為 char 數組傳遞(unsigned char 數組與字節數組相同)。

所以現在的問題變成了,我們如何傳遞一個浮點數和一個無符號字符數組?我們可以通過使用 C 語言union來做到這一點。union關鍵字允許我們讓不同數據類型的變量在內存中共享相同的空間由于 C 中的浮點數占用 4 個字節,我們希望與 4 個無符號字符的數組共享 4 個字節的內存空間。

從某種意義上說,編譯器并不真正關心我們如何解釋字節,它只是保留空間并允許我們使用這個空間,就好像它是我們聯合中的一種數據類型一樣。但是,當我們在程序中使用變量時,我們必須非常小心,以確保正確考慮變量的大小和類型。

實際上,在我們的例子中,我們需要從加速度計和陀螺儀中分別考慮 3 個浮點數。每個軸一個浮點數。我們可以為每個變量考慮一個單獨的變量、聯合和 BLE 特征。但是,知道每個浮點數的長度為 4 個字節,并且每次 BLE 傳輸最多可以發送 20 個字節,我們可以使用 2 個聯合、2 個 3 個浮點數的數組發送完整的加速度計和陀螺儀數據集,并且只需2 個特性,每個特性 12 個字節。這不僅會使我們的代碼更具可讀性和可管理性,而且效率更高。

為此,我們將使用聯合來共享 3 個浮點數數組(需要 12 個字節)和一個 12 個無符號字符數組之間的空間。這樣做是這樣的:

聯盟

{

? ? ?浮動一個[3];

? ? 無符號字符字節[12];

} 數據;

當從 IMU 讀取數據并轉換為浮點數時,我們將其分配給聯合體的浮點元素:

? ?CurieIMU.readAccelerometer(axRaw, ayRaw, azRaw);

? ?accData.a[0] = convertRawAcceleration(axRaw);

? ?accData.a[1] = convertRawAcceleration(ayRaw);

? ?accData.a[2] = convertRawAcceleration(azRaw);

不幸的是,我們還沒有完成。如果我們嘗試將聯合傳遞給setValue()函數,我們的編譯器會抱怨并且不讓我們繼續。完成這項工作還需要一個步驟。我們必須讓編譯器相信我們的并集實際上是一個無符號字符數組,方法是這樣轉換。演員表是一種編程魔法,它允許我們將一種數據類型轉換為另一種數據類型(https://www.arduino.cc/en/Reference/Cast)。在某些情況下,這可能會導致數據丟失,但在我們的例子中,由于我們只是處理字節,我們根本不會丟失任何信息。然而,為了執行這個轉換,我們確實需要使用一些指針魔法:

? ?unsigned char *acc = (unsigned char *)&accData;

讓我們翻譯一下:

首先,&accData獲取我們 12 個字節的內存位置的地址。然后,(unsigned char *)&accData告訴編譯器我們認為這個內存位置被視為一個無符號數組字符。實際上,這是一個指向該內存位置第一個字節的指針。最后,unsigned char *acc將變量acc分配給這個指針。要處理的內容很多,但多讀幾遍就會明白。如果沒有,只需按原樣使用模式發送數據。對陀螺儀數據重復完全相同的命令模式。?現在我們可以繼續使用移動應用程序了。

JavaScript/HTML/CSS 移動應用程序:

為了開發我們的移動應用程序,必須學習 JavaScript/HTML/CSS 似乎是一件苦差事。但是,時間和精力將是值得的!它將為您的項目打開許多機會,并允許您利用許多令人興奮的庫進行編程。一個這樣的庫,smoothie.js將在此處討論。為了幫助您學習如何使用 JavaScript/HTML/CSS,Evothings 網站和 Evothings 工作臺提供了大量示例和教程來幫助您。就本項目而言,我發現最簡單的方法是修改 TI SensorTag CC2650 示例。此示例代碼遵循功能強大的結構,易于閱讀,并且已經具有我們項目所需的大部分功能。每個示例都有一個包含許多文件的目錄樹,乍一看可能看起來很復雜,但出于我們的目的,我們只需要修改示例根目錄中的兩個文件 index.html 和app.js ,并將smoothie.js庫添加到我們的項目目錄。下面的項目配方涵蓋了這些步驟

移動應用程序的亮點:

沒有什么可以替代閱讀代碼,但我將在這里介紹一些亮點。請記住,我們的 IMU 數據將作為無符號字符或字節數組通過 BLE 發送。幸運的是,JavaScript 提供了易于使用的函數來將這些字節轉換回任何形式的數據。這是一個代碼片段,它將我們的加速度計字節轉換回 JavaScript 中的浮點數:

? ?var ax = new DataView(data).getFloat32(0, true);

? ?var ay = new DataView(data).getFloat32(4, true);

? ?var az = new DataView(data).getFloat32(8, true);

字節通過 data 變量傳遞到我們的函數中。此數據用于實例化 DataView。一旦我們有了這個,我們就可以調用 DataView 對象的許多方法之一來將數據轉換為我們想要的表示形式。在?這種情況下,我們要將其轉換回浮點數。還記得我們從 Arduino/Genuino 101 IMU 創建的浮點數是 4 字節還是 32 位長?getFloat32 ()函數專門用于處理 32 位浮點表示。我們發送到getFloat32()的參數功能非常重要。第一個是一個數字,這個數字在我們的例子中是 0、4 或 8,表示我們的 4 字節浮點數的第一個字節的字節偏移或索引第二個參數 true 表示我們的浮點數是小端格式。就是這樣,很簡單。我們現在可以將所有的 分配給一個變量axayaz來表示沿每個軸的加速度。

現在,擁有這些數據的實時滾動圖形表示不是很巧妙嗎?當然會!為了實現這一點,我們將使用Smoothie.js庫。我相信這說明了使用 JavaScript/HTML/CSS 為連接設備開發移動應用程序的力量。幾乎所有您能想到的用途都有免費且易于使用的庫和框架。

Smoothie.js庫在?http://smoothiecharts.org/??網站上?有完整的描述。為了學習如何使用該庫,作者創建了一個 10 分鐘的教程(http://smoothiecharts.org/tutorial.html)。在查看示例并閱讀他們的教程后,您應該能夠輕松地使用他們的代碼來創建自己的繪圖。作者還創建了一個構建器頁面 ( http://smoothiecharts.org/builder/ ),允許您以圖形方式自定義繪圖。根據您的意愿對繪圖進行格式化后,您可以從構建器頁面底部的文本框中剪切代碼并將其直接粘貼到您的應用程序中。

我們將從smoothiecharts.org 主頁下載smoothie.js庫到我們的移動應用程序目錄中以使用它。請按照以下項目配方中的說明執行此操作。index.html 中的以下行允許我們在應用程序中使用該庫:

這就是教學的內容。讓我們做這個項目吧!

硬件:

Arduino/Genuino 101。

因為 Arduino/Genuino 101 帶有板載 BLE 和 IMU 功能,所以無需制作電路!只需通過 USB 將您的計算機連接到您的計算機以上傳草圖并訪問 Arduino 軟件 (IDE) 的串行監視器窗口以進行調試。

項目配方:

我假設您已經安裝了 Arduino IDE、對英特爾居里的板級支持以及所有必要的庫。如果沒有,請在此處獲取說明:https://www.arduino.cc/en/Guide/Arduino101。

1) 下載并安裝 EvothingsStudio 和 EvothingsViewer ( http://evothings.com/download/ )。按照此處特定于您的操作系統和移動平臺的說明進行操作。

2) 啟動 Evothings Workbench 并單擊示例選項卡。

pYYBAGOYdeGAR9laAAGPwP0Pez8298.png
Evothings Workbench 在桌面上打開,單擊頂部的示例選項卡。
?

?

3) 復制 TI SensorTag CC2650 演示應用程序并為其命名。

4) 使用文件瀏覽器,進入 EvothingsStudio/MyApps 目錄,找到您在步驟 3 中重命名的項目的主目錄。

poYBAGOYdeSAKfa8AADMUqkVZcg685.png
項目主目錄,將 index.html 和 app.js 替換為項目 index.html 和 app.js 文件。
?

5) 選擇 index.html 文件并將其重命名為 index_old.html。

6) 選擇 app.js 文件并將其重命名為 app_old.js。

7) 現在將本項目教程中的 index.html 和 app.js 文件復制到新項目的主目錄中。

8) 創建一個名為 Smoothie 的目錄。

9) 轉到 smoothiecharts.org 并單擊標有下載 Smoothie.js 的按鈕。Smoothie.js 庫的文本應顯示在您的瀏覽器中。

10) 單擊瀏覽器的文件選項卡,然后選擇將頁面另存為。在步驟 8 中創建的 Smoothie 目錄中將此頁面另存為 Smoothie.js。

11) 使用 USB 電纜將您的 Arduino/Genuino 101 連接到您的計算機。

12) 使用您的 Arduino IDE 1.6.8,將 imu_ble.ino 草圖上傳到 Arduino/Genuino 101。

13) 打開串口連接。在建立 BLE 連接之前,不會從 arduino/genuino101 imu 發送數據,因此此時您不應期望看到任何串行數據。

14) 返回 EvothingsWorkbench 并從 Connect 選項卡中獲取您的連接密鑰。

15) 在您的移動設備上啟動 EvothingsViewer 并輸入連接密鑰。

16) 點擊移動應用主頁上的開始按鈕。

17) 建立連接后,您應該會在移動設備上看到以下消息,狀態:數據流活動 - 加速度計。值應該在 Arduino IDE 串行窗口上流式傳輸,并且線條應該在加速度計和陀螺儀圖上滾動。

18) 搖晃、扭轉和轉動 Arduino/Genuino101!

結論:

您可以選擇多種方法來收集、傳輸和顯示 IMU 數據,但我相信這里介紹的方法是最有教益的方法。仔細閱讀代碼并對其進行試驗確實沒有替代品。你的努力會得到回報。作為創客,我們越是真正了解我們的項目是如何運作的,我們就越能完成:

“投入勞動力的最佳紅利總是來自尋求更多的知識,而不是更多的權力。” 1906 年 3 月 12 日簽署威爾伯和奧維爾賴特。”

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 色偷偷.com | 毛片又大又粗又长又硬 | 女人18毛片水多 | 椎名空中文字幕一区二区 | 色婷婷久久综合中文久久蜜桃 | 欧美三级不卡在线观线看高清 | 欧美天堂视频 | 欧美一级欧美三级在线 | 伊人久久成人成综合网222 | 免费在线播放视频 | 久久免费看视频 | 午夜影院普通用户体验区 | 一区二区三区亚洲 | 色涩在线| 人人叉人人| 手机看片福利日韩 | 三级黄色a| 人人玩人人添天天爽 | 天天色色色 | 婷婷综合五月中文字幕欧美 | 国产久热精品 | 亚洲午夜精品久久久久久抢 | 日韩亚 | 波多野结衣在线视频观看 | bt天堂在线最新版在线 | 大蕉久久伊人中文字幕 | 成在线人永久免费播放视频 | 久久精品国产乱子伦多人 | 日本www网站 | 日韩三级免费 | 人人艹在线观看 | 男女吃奶一进一出动态图 | 欧美一区中文字幕 | 俺也操 | 久久精品亚洲 | 天天摸天天操天天干 | 手机在线亚洲 | 欧美黑人5o厘米全进去 | 日本xxxx色视频在线观看免费 | 亚洲 成人 欧美 自拍 | 国产精品色婷婷在线观看 |