使用 Python 透過 VEX Brain 和感測器進行資料記錄

介紹

在本文中,我們將討論如何建立一個資料記錄項目,指示 VEX 機器人使用 VEX Brain 收集資料並將其保存在 SD 卡上的 CSV 檔案中以進行資料分析。

數據記錄是一個強大的工具,我們可以用它來協助科學研究、進行自己的實驗和解決具體問題。 我們可以透過數據記錄驅動 VEX 機器人完成各種有趣且令人興奮的任務。 以下是一些範例:

  • 使用距離感測器收集數據來計算機器人的速度。
  • 駕駛機器人在教室周圍行駛,並使用光學感測器收集數據,以觀察不同位置的光線變化。
  • 讓機器人去冒險並記錄 GPS 座標資料以建立地圖。

開發資料記錄專案所需的編碼技能

  • 使用各種命令透過 VEX Brain/Sensors 收集資料並將其新增至資料結構。
  • 將資料寫入 SD 卡上的逗號分隔值 (CSV) 檔案。

數據記錄所需的硬體:

  • VEX 大腦(IQ、V5、EXP)
  • 一張SD卡
  • 一個感測器或多個感測器(可選,根據所需數據)

從感測器獲取數據

我們可以對 VEX 機器人(IQ、V5、EXP)進行編程,以捕獲來自以下感測器的數據:

  • 慣性感測器
  • 距離感測器
  • 光學感測器
  • 視覺感測器
  • 旋轉感測器(V5、EXP)
  • GPS感測器(V5)

注意: VEX IQ(第二代)Brain 和 VEX EXP Brain 內建慣性感測器。 我們可以使用這些 VEX 大腦收集慣性感測器資料。

在本文中,我們將開發一個資料記錄項目,該項目使用 VEX IQ Brain(第二代)收集加速度資料並將其儲存到 SD 卡中。 

首先,我們需要編寫一個簡短的程式來取得 VEX IQ Brain(第二代)內建的計時器和慣性感測器的讀數。

  • 在這個程式開始時,我們需要匯入 Python 模組來控制 VEX IQ Brain(第二代)並從中取得資料。 因此,首先將這些指令加入項目。

    圖片5.png

  • 接下來加入程式碼宣告變數 numOfDataEntries 儲存記錄的資料條數,宣告變數 polling_delay_msec 儲存讀取資料的時間間隔值,建立一個空字串變數 data_buffer 儲存從感測器讀取的資料。

    圖片9.png

  • 由於我們將使用計時器的當前值將時間戳記新增至資料中,因此我們需要在開始收集資料之前將計時器值重設為 0 秒。

    圖片13.png

  • 在使用從VEX IQ Brain(第2)中取得資料並將資料記錄到緩衝區的指令之前,我們需要先了解它。
    以下指令以特定格式將目前定時器值附加到 data_buffer 變數。

    圖片14.png

    讓我們分解一下格式字串 “%1.3f”: 

    • “%”:引入轉換說明符。
    • “1”:表示字串中出現的最少位數。
    • “.3”:指定格式化數字中包含的小數位數。
    • “f”:表示要格式化的值為浮點數。

    因此,我們可以使用格式字串「%1.3f」來格式化一個最小寬度為1位元、精確度為3位元小數的浮點數。

  • 現在,我們可以讀取VEX IQ Brain(第二代)內建的計時器和慣性感測器的加速度值,然後將資料以指定的格式附加到 data_buffer 變數中。

    圖片7.png

    註: “\n”是換行符。 它表示該行在此結束並開始新行。

  • 然後,為了將一定數量的資料記錄到 data_buffer 變數中,我們可以使用 for 迴圈 重複執行取得資料的指令,並將資料追加到 data_buffer 變數中,進行多次迭代。 我們的策略是使用變數 numOfDataEntries 的值來決定迭代次數。

    圖片12.png

  • 到目前為止,我們的程式已盡可能快速地記錄資料。 然而,我們希望以特定的時間間隔記錄資料。 因此,我們可以在 for循環 中使用 wait() 函數來暫停程序,以新增兩次讀數之間的特定時間間隔。 我們使用變數 polling_delay_msec 的值來決定時間間隔的值。

    圖片8.png

恭喜! 我們已經完成了從 VEX Brain 內建慣性感測器獲取讀數(加速度數據)的程序。 接下來,我們將探討如何將資料寫入 SD 卡上的 CSV 檔案。

圖片1.png




將 SD 卡連接到 VEX Brain

將資料寫入 SD 卡上的檔案之前,請將 SD 卡插入 VEX Brain 的 SD 卡插槽。

圖片2.png

註: 將SD 卡格式化為FAT32 以便寫入資料。 我們建議使用 32GB 或更小的 SD 卡。

為了確保在適當的條件下可以將資料寫入 SD 卡上的文件,我們需要添加代碼來檢查 SD 卡是否正確插入 VEX IQ Brain(第二代)。

  • 使用 Brain.sdcard.is_inserted() 函數檢查SD卡是否插入。 如果未插入SD卡,則VEX IQ Brain畫面上顯示對應訊息並按住程式。

    image17.png


    注意:如果 SD 卡插入 Brain,則 Brain.sdcard.is_inserted() 函數傳回 True。

將資料寫入 SD 卡上的 CSV 文件

到目前為止,我們的程式可以使用 VEX IQ Brain(第二代)收集資料。 為了完成資料記錄項目,我們需要將資料寫入 SD 卡上的逗號分隔值 (CSV) 文件,以便將來檢查和分析。

  • 當將不同類型的資料寫入CSV檔案時,我們想知道每列包含哪種類型的資料。 為此,我們可以在記錄資料之前將 CSV 標題文字附加到 data_buffer 變數。
    因此,新增程式碼來宣告變數 csvHeaderText 來儲存 CSV 標題文字以指定 CSV 檔案的列名稱,並宣告變數 sd_file_name 來儲存要寫入的 CSV 檔案的名稱SD卡。

    圖片10.png

注意: 確保標頭的順序與 data_buffer 變數中儲存的資料的順序相同。

  • 接下來,將 CSV 標頭文字附加到 for 迴圈 之前的 data_buffer 字串以進行資料收集。

    圖片15.png

  • 在將資料寫入SD卡上的檔案之前,我們先來了解如何使用 Brain.sdcard.savefile() 函數。

    圖4.png


    該指令將儲存在 data_buffer 變數中的資料寫入 SD 卡上的命名 CSV 檔案。
    讓我們細分一下:
    • Brain.sdcard.savefile():此函數將位元組陣列儲存到SD卡上的命名檔案中。 此函數傳回寫入檔案的位元組數。

    • sd_file_name:函數的第一個參數。 指示要寫入的文件的名稱。 在此專案中,檔案名稱儲存在變數 sd_file_name 中。

    • bytearray(datat_buffer,'utf-8'):函數的第二個參數。 表示要寫入檔案的位元組數組。

        • bytearray():此方法建立一個可變的位元組數組。 在此指令中,我們使用它透過指定編碼將字串轉換為位元組數組。
        • data_buffer:此方法的第一個參數。 指示要轉換為位元組數組的來源。 在本項目中,來源是變數 data_buffer中儲存的資料。 
        • 'utf-8':此方法的第二個參數。 指示用於對字串進行編碼的指定編碼。 該指令中的編碼為「utf-8」。 
  • 經過 for 循環 進行資料收集後,使用 Brain.sdcard.savefile() 函數將 data_buffer 變數中儲存的資料寫入到 SD 卡上的 CSV 檔案中。 另外,加入程式碼來檢查 Brain.sdcard.savefile() 函數的回傳值,以驗證資料是否已成功寫入文件,並在 VEX IQ Brain 畫面上顯示對應的訊息以取得真實資訊:時間回饋。

    image6.png


    注意: Brain.sdcard.savefile() 函數傳回寫入檔案的位元組數。 在本專案中,我們使用它將收集到的資料寫入CSV文件,因此寫入文件的位元組數必須大於零。 也就是說,如果 Brain.sdcard.savefile() 函數回傳0,我們就可以斷定資料還沒成功寫入檔案。 否則,資料已寫入文件中。

恭喜! 我們開發了一個資料記錄項目,可以使用 VEX IQ Brain(第二代)收集加速度資料並將其儲存到 SD 卡上的 CSV 檔案中。 接下來我們將探討如何開啟CSV檔案進行資料分析。 

圖16.png

開啟 CSV 檔案進行資料分析

將資料寫入 SD 卡上的 CSV 檔案後,我們可以使用電子表格應用程式開啟該檔案以讀取和分析資料。 

注意: 兩種最常見的電子表格應用程式是 Google Sheets 和 Microsoft Excel。 在本文中,我們將使用 Google Sheets(基於網路)開啟 SD 卡上的 CSV 檔案。 使用其他應用程式的過程類似。

  • 從 VEX IQ Brain 的 SD 卡插槽中取出 SD 卡。 如果電腦內建Micro SD卡插槽,我們可以將SD卡直接插入該插槽。 否則,請將 SD 卡插入 SD 卡轉接器,然後將轉接器連接到電腦。 
  • 登入我們的 Google 帳戶並開啟 Google 試算表。 建立一個新的電子表格。
  • 在電子表格中,開啟「檔案」 選單,選擇 「匯入」 -> 「上傳」 -> 「瀏覽」 按鈕,然後選擇電腦上的 CSV 檔案。 上傳 CSV 檔案後,按一下「匯入資料」 按鈕。 匯入資料後,點選「立即開啟」 可在 CSV 檔案中查看收集到的資料。

    圖片11.png

  • (可選)分析資料的簡單方法是繪製圖表,然後尋找資料的趨勢。 在電子表格中,開啟「插入」 選單並選擇「圖表」 使用 CSV 檔案中的資料繪製圖表。 下圖是使用 VEX IQ Brain(第二代)收集的加速度資料的結果。

    image3.png


    註: 我們可以使用圖表編輯器 選擇不同的圖表類型或依需求編輯圖表。

到目前為止,我們已經完成了使用 VEX IQ Brain(第二代)收集資料並將其保存在 SD 卡上的 CSV 檔案中的資料記錄項目。 此外,我們還學習如何使用 Google Sheets 讀取 SD 卡上的 CSV 文件,甚至建立圖表以進行進一步分析。 接下來是什麼? 讓我們試著利用VEX機器人進行數據記錄來策劃更多令人興奮的實驗,觀察不斷變化的環境因素如何影響各類數據,更深入地了解我們周圍的世界。

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: