Giới thiệu
Trong bài viết này, chúng ta sẽ thảo luận về cách tạo dự án ghi dữ liệu hướng dẫn Robot VEX thu thập dữ liệu bằng VEX Brain và lưu nó vào tệp CSV trên thẻ SD để phân tích dữ liệu.
Ghi nhật ký dữ liệu là một công cụ mạnh mẽ mà chúng ta có thể sử dụng để hỗ trợ nghiên cứu khoa học, tiến hành các thí nghiệm của riêng mình và giải quyết các vấn đề cụ thể. Có nhiều nhiệm vụ thú vị và hấp dẫn khác nhau mà chúng ta có thể điều khiển Robot VEX thực hiện bằng việc ghi dữ liệu. Sau đây là một số ví dụ:
- Thu thập dữ liệu bằng Cảm biến khoảng cách để tính toán tốc độ của robot
- Lái robot đi vòng quanh lớp học và thu thập dữ liệu bằng Cảm biến quang học để quan sát sự thay đổi ánh sáng ở nhiều vị trí khác nhau.
- Đưa robot vào một cuộc phiêu lưu và ghi lại dữ liệu tọa độ GPS để tạo bản đồ.
Kỹ năng mã hóa cần thiết để phát triển Dự án ghi dữ liệu
- Sử dụng các lệnh khác nhau để thu thập dữ liệu bằng VEX Brain/Sensors và thêm nó vào cấu trúc dữ liệu.
- Ghi dữ liệu vào tệp Giá trị được phân tách bằng dấu phẩy (CSV) trên thẻ SD.
Phần cứng cần thiết để ghi dữ liệu:
- Bộ não VEX (IQ, V5, EXP)
- Một thẻ SD
- Một cảm biến hoặc nhiều cảm biến (Tùy chọn, theo dữ liệu được yêu cầu)
Lấy dữ liệu từ cảm biến
Chúng ta có thể lập trình cho Robot VEX (IQ, V5, EXP) để thu thập dữ liệu từ các cảm biến sau:
- Cảm biến quán tính
- Cảm biến khoảng cách
- Cảm biến quang học
- Cảm biến tầm nhìn
- Cảm biến xoay (V5, EXP)
- Cảm biến GPS (V5)
Lưu ý: Bộ não VEX IQ (thế hệ thứ 2) và Bộ não VEX EXP được tích hợp Cảm biến quán tính. Chúng tôi có thể thu thập dữ liệu Cảm biến quán tính bằng các VEX Brians này.
Trong bài viết này, chúng tôi sẽ phát triển một dự án ghi dữ liệu nhằm thu thập dữ liệu tăng tốc bằng VEX IQ Brain (thứ 2) và lưu trữ vào thẻ SD.
Đầu tiên, chúng ta cần viết một chương trình ngắn để lấy số đọc từ Bộ hẹn giờ và Cảm biến quán tính được tích hợp trong VEX IQ Brain (thứ 2).
- Khi bắt đầu chương trình này, chúng ta sẽ cần nhập các mô-đun Python để điều khiển VEX IQ Brain (thứ 2) và lấy dữ liệu từ nó. Vì vậy, hãy bắt đầu bằng cách thêm các hướng dẫn này vào dự án.
- Tiếp theo thêm code khai báo biến
numOfDataEntries
để lưu trữ số lượng mục dữ liệu cần ghi, khai báo biếnpolling_delay_msec
để lưu giá trị khoảng thời gian đọc dữ liệu và tạo biến chuỗi trốngdata_buffer
để lưu trữ dữ liệu được đọc từ cảm biến. - Vì chúng ta sẽ sử dụng giá trị hiện tại của Bộ hẹn giờ để thêm Dấu thời gian vào dữ liệu nên chúng ta cần đặt lại giá trị bộ hẹn giờ về 0 giây trước khi bắt đầu thu thập dữ liệu.
- Trước khi sử dụng lệnh lấy dữ liệu từ VEX IQ Brain (thứ 2) và ghi dữ liệu vào bộ đệm, trước tiên chúng ta cần hiểu nó.
Lệnh sau sẽ thêm giá trị bộ đếm thời gian hiện tại vào biếndata_buffer
theo một định dạng cụ thể.Hãy chia nhỏ chuỗi định dạng
“%1.3f”
:- “%”: Giới thiệu thông số chuyển đổi.
- “1”: Cho biết số chữ số tối thiểu có trong chuỗi
- “.3”: Chỉ định số vị trí thập phân cần đưa vào số được định dạng.
- “f”: Cho biết giá trị cần định dạng là số dấu phẩy động.
Do đó, chúng ta có thể sử dụng chuỗi định dạng “%1.3f” để định dạng số dấu phẩy động có chiều rộng tối thiểu là 1 chữ số và độ chính xác là 3 chữ số thập phân.
- Bây giờ, chúng ta có thể đọc Đồng hồ bấm giờ và giá trị gia tốc của Cảm biến quán tính được tích hợp trong VEX IQ Brain (thứ 2) và sau đó nối dữ liệu vào biến
data_buffer
theo định dạng đã chỉ định.Lưu ý: “\n” là ký tự Dòng mới. Nó chỉ ra rằng dòng kết thúc ở đây và bắt đầu một dòng mới.
- Sau đó, để ghi một số mục nhập dữ liệu nhất định vào biến
data_buffer
, chúng ta có thể sử dụng vòng lặpfor
để thực hiện liên tục các lệnh tìm nạp dữ liệu và nối dữ liệu vào biếndata_buffer
trong một số lần lặp. Chiến lược của chúng tôi là sử dụng giá trị của biếnnumOfDataEntries
để xác định số lần lặp.
- Cho đến nay, chương trình của chúng tôi ghi lại dữ liệu nhanh nhất có thể. Tuy nhiên, chúng tôi muốn ghi lại dữ liệu vào những khoảng thời gian cụ thể. Do đó, chúng ta có thể sử dụng hàm
wait()
trongfor để tạm dừng chương trình nhằm thêm khoảng thời gian cụ thể giữa hai lần đọc. Chúng ta sử dụng giá trị của biến
polling_delay_msec
để xác định giá trị của khoảng thời gian.
Chúc mừng! Chúng tôi đã hoàn thành chương trình lấy số đọc (dữ liệu gia tốc) từ Cảm biến quán tính được tích hợp trong VEX Brain. Tiếp theo, chúng ta sẽ khám phá cách ghi dữ liệu vào tệp CSV trên thẻ SD.
Gắn thẻ SD vào bộ não VEX
Trước khi ghi dữ liệu vào tệp trên thẻ SD, trước tiên hãy lắp thẻ SD vào khe cắm thẻ SD của VEX Brain.
Lưu ý: Định dạng thẻ SD thành FAT32 để ghi dữ liệu. Chúng tôi khuyên bạn nên sử dụng thẻ SD có dung lượng từ 32 GB trở xuống.
Để đảm bảo việc ghi dữ liệu vào tệp trên thẻ SD có thể được thực hiện trong các điều kiện thích hợp, chúng ta sẽ cần thêm mã để kiểm tra xem thẻ SD có được lắp đúng cách vào VEX IQ Brain hay không (thứ 2).
- Sử dụng hàm
brain.sdcard.is_inserted()
để kiểm tra xem thẻ SD đã được lắp chưa. Nếu thẻ SD chưa được lắp vào, hãy hiển thị thông báo tương ứng trên Màn hình não VEX IQ và giữ chương trình.
Lưu ý: thebrain.sdcard.is_inserted()
hàm trả về True nếu thẻ SD được lắp vào Brain.
Ghi dữ liệu vào tệp CSV trên thẻ SD
Cho đến nay, chương trình của chúng tôi có thể thu thập dữ liệu với VEX IQ Brain (thứ 2). Để hoàn thành dự án ghi dữ liệu, chúng ta cần ghi dữ liệu vào tệp Giá trị được phân tách bằng dấu phẩy (CSV) trên thẻ SD để kiểm tra và phân tích trong tương lai.
- Khi ghi các loại dữ liệu khác nhau vào tệp CSV, chúng tôi muốn biết mỗi cột chứa loại dữ liệu nào. Để thực hiện việc này, chúng ta có thể nối văn bản tiêu đề CSV vào biến
data_buffer
trước khi ghi dữ liệu.
Do đó, thêm mã khai báo biếncsvHeaderText
để lưu văn bản tiêu đề CSV để chỉ định tên cột cho tệp CSV và khai báo biếnsd_file_name
để giữ tên tệp CSV để ghi trên Thẻ SD.
Lưu ý: Đảm bảo các tiêu đề có cùng thứ tự với dữ liệu được lưu trữ trong biến data_buffer
.
- Tiếp theo, nối văn bản tiêu đề CSV vào chuỗi
data_buffer
trước chuỗifor vòng
để thu thập dữ liệu.
- Trước khi ghi dữ liệu vào một tệp trên thẻ SD, trước tiên chúng ta hãy tìm hiểu cách sử dụng hàm
brain.sdcard.savefile()
.
Lệnh này ghi dữ liệu được lưu trữ trong biếndata_buffer
vào tệp CSV có tên trên thẻ SD.
Hãy chia nhỏ nó ra:-
brain.sdcard.savefile(): Hàm lưu một bytearray vào một tệp có tên trên thẻ SD. Hàm trả về số byte được ghi vào tệp.
-
sd_file_name: Tham số đầu tiên của hàm. Cho biết tên của tập tin để ghi. Trong dự án này, tên tệp được lưu trữ trong biến
sd_file_name.
-
bytearray(datat_buffer,'utf-8'): Tham số thứ hai của hàm. Đại diện cho bytearray được ghi vào tệp.
-
- bytearray(): Phương thức này tạo ra một bytearray có thể thay đổi. Trong hướng dẫn này, chúng tôi sử dụng nó để chuyển đổi một chuỗi thành một bytearray bằng cách chỉ định mã hóa.
- data_buffer: Tham số đầu tiên của phương thức. Cho biết nguồn sẽ được chuyển đổi thành bytearray. Trong dự án này, nguồn là dữ liệu được lưu trữ trong biến
data_buffer.
- 'utf-8': Tham số thứ hai của phương thức. Cho biết mã hóa đã chỉ định được sử dụng để mã hóa chuỗi. Mã hóa là 'utf-8' trong hướng dẫn này.
-
-
- Sau vòng
for
để thu thập dữ liệu, hãy sử dụng hàmbrain.sdcard.savefile()
để ghi dữ liệu được lưu trữ trong biếndata_buffer
vào tệp CSV trên thẻ SD. Ngoài ra, thêm code kiểm tra giá trị trả về từ hàmbrain.sdcard.savefile()
để xác minh dữ liệu đã được ghi vào file thành công hay chưa và hiển thị thông báo tương ứng trên VEX IQ Brain Screen để nhận được giá trị thực phản hồi về thời gian.
Lưu ý: Hàmbrain.sdcard.savefile()
trả về số byte được ghi vào tệp. Trong dự án này, chúng tôi sử dụng nó để ghi dữ liệu đã thu thập vào tệp CSV, do đó số byte được ghi vào tệp phải lớn hơn 0. Nói cách khác, nếu hàmbrain.sdcard.savefile()
trả về 0, chúng ta có thể kết luận rằng dữ liệu chưa được ghi vào tệp thành công. Ngược lại, dữ liệu đã được ghi vào tập tin.
Chúc mừng! Chúng tôi đã phát triển một dự án ghi dữ liệu nhằm thu thập dữ liệu tăng tốc bằng VEX IQ Brain (thứ 2) và lưu trữ dữ liệu đó vào tệp CSV trên thẻ SD. Tiếp theo, chúng ta sẽ khám phá cách mở tệp CSV để phân tích dữ liệu.
Mở tệp CSV để phân tích dữ liệu
Khi dữ liệu đã được ghi vào tệp CSV trên thẻ SD, chúng ta có thể sử dụng ứng dụng bảng tính để mở tệp để đọc và phân tích dữ liệu.
Lưu ý: Hai trong số những ứng dụng bảng tính phổ biến nhất là Google Trang tính và Microsoft Excel. Trong bài viết này, chúng tôi sẽ sử dụng Google Trang tính (Dựa trên web) để mở tệp CSV trên thẻ SD. Quá trình sử dụng các ứng dụng khác cũng tương tự.
- Tháo thẻ SD khỏi khe cắm thẻ SD của VEX IQ Brain. Nếu máy tính có tích hợp sẵn khe cắm thẻ Micro SD thì chúng ta có thể cắm thẻ SD trực tiếp vào khe đó. Nếu không, hãy lắp thẻ SD vào bộ chuyển đổi thẻ SD rồi kết nối bộ chuyển đổi với máy tính.
- Đăng nhập vào tài khoản Google của chúng tôi và mở Google Sheets. Tạo một bảng tính mới.
- Trong bảng tính, mở menu “File” , chọn nút “Nhập” -> “Tải lên” -> “Duyệt” , sau đó chọn tệp CSV trên máy tính. Sau khi tải tệp CSV lên, hãy nhấp vào nút “Nhập dữ liệu”. Sau khi Nhập dữ liệu, nhấp vào “Mở ngay” để xem dữ liệu đã thu thập trong tệp CSV.
- (Tùy chọn) Một cách dễ dàng để phân tích dữ liệu là vẽ biểu đồ, sau đó tìm kiếm xu hướng trong dữ liệu. Trong bảng tính, mở menu “Chèn” và chọn “Biểu đồ” để vẽ biểu đồ sử dụng dữ liệu trong tệp CSV. Biểu đồ sau đây là kết quả của dữ liệu tăng tốc được thu thập bằng VEX IQ Brain (thứ 2).
Lưu ý: Chúng ta có thể sử dụng Trình chỉnh sửa biểu đồ để chọn Loại biểu đồ khác hoặc chỉnh sửa biểu đồ dựa trên nhu cầu của chúng ta.
Tính đến thời điểm này, chúng tôi đã hoàn thành dự án ghi dữ liệu thu thập dữ liệu bằng VEX IQ Brain (thứ 2) và lưu vào tệp CSV trên thẻ SD. Ngoài ra, chúng tôi đã học cách đọc tệp CSV trên thẻ SD bằng Google Trang tính và thậm chí tạo biểu đồ để phân tích thêm. Tiếp theo là gì? Hãy thử lên kế hoạch cho những thử nghiệm thú vị hơn bằng cách sử dụng Robot VEX để ghi dữ liệu, để quan sát xem các yếu tố môi trường thay đổi ảnh hưởng như thế nào đến các loại dữ liệu khác nhau và hiểu sâu hơn về thế giới xung quanh chúng ta.