Pencatatan Data dengan VEX Brain/Sensor (Versi Python)

Perkenalan

Dalam artikel ini, kami akan membahas cara membuat proyek pencatatan data yang menginstruksikan Robot VEX untuk mengumpulkan data dengan VEX Brain dan menyimpannya dalam file CSV pada kartu SD untuk analisis data.

Pencatatan data adalah alat yang ampuh yang dapat kita gunakan untuk membantu penelitian ilmiah, melakukan eksperimen kita sendiri, dan memecahkan masalah tertentu. Ada berbagai tugas menyenangkan dan menarik yang dapat kita kendalikan dengan Robot VEX untuk diselesaikan melalui pencatatan data. Berikut ini adalah beberapa contohnya:

  • Mengumpulkan data dengan Sensor Jarak untuk menghitung kecepatan robot
  • Mengendalikan robot di sekitar kelas dan mengumpulkan data dengan Sensor Optik untuk mengamati perubahan cahaya di berbagai lokasi.
  • Membawa robot pada suatu petualangan dan merekam data koordinat GPS untuk membuat peta.

Keterampilan pengkodean yang dibutuhkan untuk mengembangkan Proyek Pencatatan Data

  • Gunakan berbagai perintah untuk mengumpulkan data dengan VEX Brain/Sensor dan menambahkannya ke struktur data.
  • Tulis data ke file Comma-Separated Values (CSV) pada kartu SD.

Perangkat Keras yang Diperlukan untuk Pencatatan Data:

  • Otak VEX (IQ, V5, EXP)
  • Kartu SD
  • Sensor atau beberapa Sensor (Opsional, sesuai dengan data yang dibutuhkan)

Mendapatkan Data Dari Sensor

Kita dapat memprogram Robot VEX (IQ, V5, EXP) untuk menangkap data dari sensor berikut:

  • Sensor Inersia
  • Sensor Jarak
  • Sensor Optik
  • Sensor Penglihatan
  • Sensor Rotasi (V5, EXP)
  • Sensor GPS (V5)

Catatan: Otak VEX IQ (generasi ke-2) dan Otak VEX EXP memiliki Sensor Inersia yang terpasang di dalamnya. Kita dapat mengumpulkan data Sensor Inersia dengan VEX Brian ini.

Dalam artikel ini, kami akan mengembangkan proyek pencatatan data yang mengumpulkan data akselerasi dengan VEX IQ Brain (2nd) dan menyimpannya ke dalam kartu SD. 

Pertama, kita perlu menulis program pendek untuk mendapatkan pembacaan dari Timer dan Sensor Inersia yang terpasang di VEX IQ Brain (ke-2).

  • Pada awal program ini, kita perlu mengimpor modul Python untuk mengendalikan VEX IQ Brain (2nd) dan mengambil data darinya. Jadi, mulailah dengan menambahkan instruksi ini ke proyek.
  • # Perpustakaan mengimpor
    dari vex import *

    # Otak harus didefinisikan secara default
    brain = Brain()
    brain_inertial = Inertial()
  • Berikutnya, tambahkan kode untuk mendeklarasikan variabel numOfDataEntries untuk menyimpan jumlah entri data untuk perekaman, mendeklarasikan variabel polling_delay_msec untuk menyimpan nilai interval waktu untuk membaca data, dan membuat variabel string kosong data_buffer untuk menyimpan data yang dibaca dari sensor.
  • numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • Karena kita akan menggunakan nilai Timer saat ini untuk menambahkan Timestamp ke data, kita perlu mengatur ulang nilai timer kembali ke 0 detik sebelum mulai mengumpulkan data.
  • # Tambahkan kode inisialisasi pengatur waktu
    brain.timer.clear()
  • Sebelum menggunakan instruksi yang mengambil data dari VEX IQ Brain (2nd) dan mencatat data dalam buffer, kita perlu memahaminya terlebih dahulu.
    Instruksi berikut menambahkan nilai timer saat ini ke variabel data_buffer dalam format tertentu.

    Sebaris kode Python disorot dalam beberapa bagian untuk menjelaskannya secara rinci. Baris kode berbunyi data_buffer += 1.3f % brain.timer.value() + koma. Pertama, operator += disorot dan diberi label Tambahkan data ke string data_buffer. Berikutnya, string 1.3f disorot dan diberi label Format string. Berikutnya, tanda persen disorot dan diberi label Operator modulo string. Berikutnya, perintah brain.timer.value() disorot dan diberi label Nilai timer saat ini. Terakhir, penambahan string koma di akhir disorot dan berbunyi Tambahkan koma di akhir untuk memisahkan data.

    Mari kita uraikan string format “%1.3f”

    • “%”: Memperkenalkan penentu konversi.
    • “1”: Menunjukkan jumlah digit minimum yang harus ada dalam string
    • “.3”: Menentukan jumlah tempat desimal yang akan disertakan dalam angka yang diformat.
    • “f”: Menunjukkan bahwa nilai yang akan diformat adalah angka floating-point.

    Dengan demikian, kita dapat menggunakan string format “%1.3f” untuk memformat angka floating-point dengan lebar minimum 1 digit dan presisi 3 tempat desimal.

  • Sekarang, kita dapat membaca Timer dan nilai percepatan dari Sensor Inersia yang dibangun di VEX IQ Brain (ke-2) dan kemudian menambahkan data ke variabel data_buffer dalam format yang ditentukan.
  • # Perintah untuk menulis data ke buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    Kode sebelumnya dijelaskan secara rinci. Baris data_buffer pertama yang menggunakan brain.timer.value() diberi label Tambahkan Stempel Waktu ke buffer. Tiga baris berikutnya diberi label Tambahkan nilai percepatan sepanjang sumbu X, Y, dan Z ke buffer.

    Catatan: “\n” adalah karakter Baris Baru. Ini menunjukkan bahwa baris berakhir di sini dan awal baris baru.
  • Kemudian, untuk merekam sejumlah entri data tertentu ke dalam variabel data_buffer , kita dapat menggunakan loop for untuk berulang kali mengeksekusi instruksi yang mengambil data dan menambahkan data ke variabel data_buffer untuk sejumlah iterasi. Strategi kami adalah menggunakan nilai variabel numOfDataEntries untuk menentukan jumlah iterasi.
  • # Pembuatan Data
    untuk i dalam rentang(0, numOfDataEntries):

    # Perintah untuk menulis data ke buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
  • Sejauh ini, program kami mencatat data secepat mungkin. Namun, kami ingin merekam data pada interval waktu tertentu. Oleh karena itu, kita dapat menggunakan fungsi wait() dalam loop for untuk menghentikan program guna menambahkan interval waktu tertentu di antara dua pembacaan. Kami menggunakan nilai variabel polling_delay_msec untuk menentukan nilai interval waktu.
  • # Pembuatan Data
    untuk i dalam rentang(0, numOfDataEntries):

    # Perintah untuk menulis data ke buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    wait(polling_delay_msec, MSEC)

Selamat! Kami telah menyelesaikan program untuk mendapatkan pembacaan (data percepatan) dari Sensor Inersia yang terpasang di VEX Brain. Berikutnya, kita akan menjelajahi cara menulis data ke berkas CSV pada kartu SD.

# Library mengimpor
dari vex import *

# Brain seharusnya sudah didefinisikan secara default
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# Tambahkan kode inisialisasi timer
brain.timer.clear()

# Pembuatan Data
for i in range(0, numOfDataEntries):

# Perintah untuk menulis data ke buffer
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

tunggu(polling_delay_msec, MSEC)

Memasang Kartu SD ke VEX Brain

Sebelum menulis data ke berkas di kartu SD, masukkan kartu SD ke dalam slot kartu SD VEX Brain terlebih dahulu.

EXP Brain ditampilkan dengan slot kartu SD-nya disorot. Slot kartu SD berada di sisi Brain, di sebelah kanan port USB-C.

Catatan: Format kartu SD ke FAT32 untuk penulisan data. Kami sarankan Anda menggunakan kartu SD yang berukuran 32GB atau kurang.

Untuk memastikan bahwa penulisan data ke berkas di kartu SD dapat dilakukan dalam kondisi yang tepat, kita perlu menambahkan kode untuk memeriksa apakah kartu SD dimasukkan dengan benar ke dalam VEX IQ Brain (ke-2).

  • Gunakan fungsi brain.sdcard.is_inserted() untuk memeriksa apakah kartu SD telah dimasukkan. Jika kartu SD tidak dimasukkan, tampilkan pesan yang sesuai pada Layar Otak VEX IQ dan tahan programnya.
  • # Tahan program jika kartu SD tidak dimasukkan
    jika tidak brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("Kartu SD Hilang")
    while(True):
    wait(5, MSEC)
    Catatan: brain.sdcard.is_inserted() fungsi mengembalikan True jika kartu SD dimasukkan ke dalam Brain.

Menulis Data ke file CSV di Kartu SD

Sejauh ini, program kami dapat mengumpulkan data dengan VEX IQ Brain (ke-2). Untuk menyelesaikan proyek pencatatan data, kita perlu menulis data ke file Comma-Separated Values (CSV) pada kartu SD untuk pemeriksaan dan analisis di masa mendatang.

  • Saat menulis berbagai jenis data ke berkas CSV, kita ingin mengetahui jenis data apa yang terdapat pada setiap kolom. Untuk melakukan ini, kita dapat menambahkan teks header CSV ke variabel data_buffer sebelum merekam data.
    Jadi, tambahkan kode untuk mendeklarasikan variabel csvHeaderText untuk menyimpan teks header CSV untuk menentukan nama kolom untuk file CSV dan mendeklarasikan variabel sd_file_name untuk menyimpan nama file CSV yang akan ditulis ke kartu SD.
  • csvHeaderText = "waktu, x, y, z"
    sd_file_name = "myDataPY.csv"

Catatan: Pastikan header berada dalam urutan yang sama dengan data yang disimpan dalam variabel data_buffer.

  • Berikutnya, tambahkan teks header CSV ke string data_buffer sebelum for loop untuk pengumpulan data.
  • # Buat Header CSV
    data_buffer = csvHeaderText + "\n"

    # Pembuatan Data CSV
    for i in range(0, numOfDataEntries):

    # Perintah untuk menulis data ke buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    wait(polling_delay_msec, MSEC
  • Sebelum menulis data ke berkas di kartu SD, mari kita pahami cara menggunakan fungsi brain.sdcard.savefile() terlebih dahulu.

    Sebaris kode Python disorot dalam beberapa bagian untuk menjelaskannya secara rinci. Baris kode tersebut berbunyi brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). Pertama, bagian brain.sdcard.savefile disorot dan diberi label Simpan bytearray ke dalam file bernama di kartu SD. Berikutnya, bagian sd_file_name disorot dan diberi label Nama File. Terakhir, bytearray(data_buffer, 'utf-8') di akhir disorot dan diberi label Buffer.


    Instruksi ini menulis data yang disimpan dalam variabel data_buffer ke file CSV bernama di kartu SD.
    Mari kita uraikan:
    • brain.sdcard.savefile(): Fungsi ini menyimpan bytearray ke dalam file bernama di kartu SD. Fungsi ini mengembalikan jumlah byte yang ditulis ke berkas.

    • sd_file_name: Parameter pertama fungsi. Menunjukkan nama berkas yang akan ditulis. Dalam proyek ini, nama file disimpan dalam variabel sd_file_name.

    • bytearray(datat_buffer,'utf-8'): Parameter kedua dari fungsi. Mewakili bytearray yang akan ditulis ke dalam berkas.

        • bytearray(): Metode ini membuat bytearray yang dapat diubah. Dalam instruksi ini, kami menggunakannya untuk mengubah string menjadi bytearray dengan menentukan pengkodean.
        • data_buffer: Parameter pertama metode. Menunjukkan sumber yang akan diubah ke bytearray. Dalam proyek ini, sumbernya adalah data yang disimpan dalam variabel data_buffer. 
        • 'utf-8': Parameter kedua dari metode ini. Menunjukkan pengodean tertentu yang digunakan untuk mengodekan string. Pengkodean dalam instruksi ini adalah 'utf-8'. 
  • Setelah for loop untuk pengumpulan data, gunakan fungsi brain.sdcard.savefile() untuk menulis data yang disimpan dalam variabel data_buffer ke file CSV pada kartu SD. Selain itu, tambahkan kode untuk memeriksa nilai pengembalian dari fungsi brain.sdcard.savefile() untuk memverifikasi apakah data telah berhasil ditulis ke file dan tampilkan pesan yang sesuai di VEX IQ Brain Screen untuk mendapatkan umpan balik waktu nyata.
  • # Pembuatan Data CSV
    untuk i dalam rentang(0, numOfDataEntries):

    # Perintah untuk menulis data ke buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    tunggu(polling_delay_msec, MSEC)

    # Tulis data ke Kartu SD
    brain.screen.set_cursor(4,1)
    jika brain.sdcard.savefile(nama_file_sd, bytearray(data_buffer,'utf-8')) == 0:
    brain.screen.print("Kesalahan Penulisan SD")
    else:
    brain.screen.print("Data Ditulis")
    Catatan: Fungsi brain.sdcard.savefile() mengembalikan jumlah byte yang ditulis ke file. Dalam proyek ini, kami menggunakannya untuk menulis data yang dikumpulkan ke berkas CSV, jadi jumlah byte yang ditulis ke berkas harus lebih besar dari nol. Dengan kata lain, jika fungsi brain.sdcard.savefile() mengembalikan 0, kita dapat menyimpulkan bahwa data belum berhasil ditulis ke file. Jika tidak, data telah ditulis dalam file.

Selamat! Kami telah mengembangkan proyek pencatatan data yang mengumpulkan data akselerasi dengan VEX IQ Brain (ke-2) dan menyimpannya ke dalam file CSV pada kartu SD. Selanjutnya, kita akan menjelajahi cara membuka file CSV untuk analisis data. 

# Library mengimpor
dari vex import *

# Brain seharusnya sudah didefinisikan secara default
brain = Brain()
brain_inertial = Inertial()

csvHeaderText = "time, x, y, z"
sd_file_name = "myDataPY.csv"
polling_delay_msec = 50
numOfDataEntries = 100
data_buffer = ""

# Tahan program jika kartu SD tidak dimasukkan
jika tidak brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("Kartu SD Hilang")
while(True):
wait(5, MSEC)

# Tambahkan kode inisialisasi sensor & timer di sini
brain.timer.clear()

# Buat Header CSV
data_buffer = csvHeaderText + "\n"

# Pembuatan Data CSV
for i in range(0, numOfDataEntries):

# Perintah untuk menulis data ke buffer
data_buffer += "%1.3f" % brain.timer.value() + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

wait(polling_delay_msec, MSEC)

# Tulis data ke Kartu SD
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("Kesalahan Penulisan SD")
else:
brain.screen.print("Data Tertulis")

Membuka File CSV untuk Analisis Data

Setelah data ditulis ke berkas CSV pada kartu SD, kita dapat menggunakan aplikasi spreadsheet untuk membuka berkas tersebut guna membaca dan menganalisis data. 

Catatan: Dua aplikasi spreadsheet yang paling umum adalah Google Sheets dan Microsoft Excel. Dalam artikel ini, kita akan menggunakan Google Sheets (Berbasis Web) untuk membuka file CSV di kartu SD. Proses penggunaan aplikasi lain serupa.

  • Keluarkan kartu SD dari slot kartu SD VEX IQ Brain. Jika komputer memiliki slot kartu Micro SD bawaan, kita dapat memasukkan kartu SD langsung ke slot tersebut. Jika tidak, masukkan kartu SD ke adaptor kartu SD lalu sambungkan adaptor ke komputer. 
  • Masuk ke akun Google kami dan buka Google Sheets. Buat lembar kerja baru.
  • Pada spreadsheet, buka menu “File” , pilih “Impor” -> “Unggah” -> “Telusuri” tombol, lalu pilih file CSV di komputer. Setelah mengunggah file CSV, klik tombol “Impor Data”. Setelah mengimpor data, klik “Buka sekarang” untuk melihat data yang dikumpulkan dalam file CSV.

    Data CSV proyek dibuka dalam dokumen Google Sheets. Ada empat kolom yang bertuliskan Waktu, X, Y, dan Z. Ada banyak baris data yang mendokumentasikan percepatan pada setiap cap waktu.

  • (Opsional) Salah satu cara mudah untuk menganalisis data adalah dengan menggambar grafik, lalu mencari tren dalam data. Pada lembar kerja, buka menu “Sisipkan” dan pilih “Bagan” untuk menggambar grafik menggunakan data dalam file CSV. Grafik berikut adalah hasil data percepatan yang dikumpulkan dengan VEX IQ Brain (ke-2).

    Chart of the data is opened in Google Sheets, showing the acceleration of the X, Y, and Z axes over time. The Z value stays near negative one, and the X and Y values stay near zero.


    Catatan: Kita dapat menggunakan Editor Grafik untuk memilih Jenis Grafik yang berbeda atau mengedit grafik berdasarkan kebutuhan kita.

Sampai titik ini, kami telah menyelesaikan proyek pencatatan data yang mengumpulkan data dengan VEX IQ Brain (2nd) dan menyimpannya dalam file CSV di kartu SD. Kami juga telah mempelajari cara membaca berkas CSV pada kartu SD menggunakan Google Sheets dan bahkan membuat grafik untuk analisis lebih lanjut. Apa selanjutnya? Mari kita coba merencanakan eksperimen yang lebih menarik menggunakan Robot VEX untuk pencatatan data, untuk mengamati bagaimana perubahan faktor lingkungan memengaruhi berbagai jenis data dan mendapatkan pemahaman yang lebih dalam tentang dunia di sekitar kita.

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

Last Updated: