介紹
在本文中,我們將討論如何建立一個資料記錄項目,指示 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(第二代)並從中取得資料。 因此,首先將這些指令加入項目。
- 接下來加入程式碼宣告變數
numOfDataEntries
儲存記錄的資料條數,宣告變數polling_delay_msec
儲存讀取資料的時間間隔值,建立一個空字串變數data_buffer
儲存從感測器讀取的資料。 - 由於我們將使用計時器的當前值將時間戳記新增至資料中,因此我們需要在開始收集資料之前將計時器值重設為 0 秒。
- 在使用從VEX IQ Brain(第2)中取得資料並將資料記錄到緩衝區的指令之前,我們需要先了解它。
以下指令以特定格式將目前定時器值附加到data_buffer
變數。讓我們分解一下格式字串
“%1.3f”
:- “%”:引入轉換說明符。
- “1”:表示字串中出現的最少位數。
- “.3”:指定格式化數字中包含的小數位數。
- “f”:表示要格式化的值為浮點數。
因此,我們可以使用格式字串「%1.3f」來格式化一個最小寬度為1位元、精確度為3位元小數的浮點數。
- 現在,我們可以讀取VEX IQ Brain(第二代)內建的計時器和慣性感測器的加速度值,然後將資料以指定的格式附加到
data_buffer
變數中。註: “\n”是換行符。 它表示該行在此結束並開始新行。
- 然後,為了將一定數量的資料記錄到
data_buffer
變數中,我們可以使用for 迴圈
重複執行取得資料的指令,並將資料追加到data_buffer
變數中,進行多次迭代。 我們的策略是使用變數numOfDataEntries
的值來決定迭代次數。
- 到目前為止,我們的程式已盡可能快速地記錄資料。 然而,我們希望以特定的時間間隔記錄資料。 因此,我們可以在
for循環
中使用wait()
函數來暫停程序,以新增兩次讀數之間的特定時間間隔。 我們使用變數polling_delay_msec
的值來決定時間間隔的值。
恭喜! 我們已經完成了從 VEX Brain 內建慣性感測器獲取讀數(加速度數據)的程序。 接下來,我們將探討如何將資料寫入 SD 卡上的 CSV 檔案。
將 SD 卡連接到 VEX Brain
將資料寫入 SD 卡上的檔案之前,請將 SD 卡插入 VEX Brain 的 SD 卡插槽。
註: 將SD 卡格式化為FAT32 以便寫入資料。 我們建議使用 32GB 或更小的 SD 卡。
為了確保在適當的條件下可以將資料寫入 SD 卡上的文件,我們需要添加代碼來檢查 SD 卡是否正確插入 VEX IQ Brain(第二代)。
- 使用
Brain.sdcard.is_inserted()
函數檢查SD卡是否插入。 如果未插入SD卡,則VEX IQ Brain畫面上顯示對應訊息並按住程式。
注意:如果 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卡。
注意: 確保標頭的順序與 data_buffer
變數中儲存的資料的順序相同。
- 接下來,將 CSV 標頭文字附加到
for 迴圈
之前的data_buffer
字串以進行資料收集。
- 在將資料寫入SD卡上的檔案之前,我們先來了解如何使用
Brain.sdcard.savefile()
函數。
該指令將儲存在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 畫面上顯示對應的訊息以取得真實資訊:時間回饋。
注意:Brain.sdcard.savefile()
函數傳回寫入檔案的位元組數。 在本專案中,我們使用它將收集到的資料寫入CSV文件,因此寫入文件的位元組數必須大於零。 也就是說,如果Brain.sdcard.savefile()
函數回傳0,我們就可以斷定資料還沒成功寫入檔案。 否則,資料已寫入文件中。
恭喜! 我們開發了一個資料記錄項目,可以使用 VEX IQ Brain(第二代)收集加速度資料並將其儲存到 SD 卡上的 CSV 檔案中。 接下來我們將探討如何開啟CSV檔案進行資料分析。
開啟 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 檔案中查看收集到的資料。
- (可選)分析資料的簡單方法是繪製圖表,然後尋找資料的趨勢。 在電子表格中,開啟「插入」 選單並選擇「圖表」 使用 CSV 檔案中的資料繪製圖表。 下圖是使用 VEX IQ Brain(第二代)收集的加速度資料的結果。
註: 我們可以使用圖表編輯器 選擇不同的圖表類型或依需求編輯圖表。
到目前為止,我們已經完成了使用 VEX IQ Brain(第二代)收集資料並將其保存在 SD 卡上的 CSV 檔案中的資料記錄項目。 此外,我們還學習如何使用 Google Sheets 讀取 SD 卡上的 CSV 文件,甚至建立圖表以進行進一步分析。 接下來是什麼? 讓我們試著利用VEX機器人進行數據記錄來策劃更多令人興奮的實驗,觀察不斷變化的環境因素如何影響各類數據,更深入地了解我們周圍的世界。