VEX Beyin/Sensörler ile Veri Kaydı (Python Versiyonu)

giriiş

Bu yazımızda VEX Robotuna VEX Brain ile veri toplaması ve veri analizi için SD karttaki CSV dosyasına kaydetmesi talimatını veren bir veri kayıt projesinin nasıl oluşturulacağını tartışacağız.

Veri kaydı, bilimsel araştırmalara yardımcı olmak, kendi deneylerimizi yürütmek ve belirli sorunları çözmek için kullanabileceğimiz güçlü bir araçtır. Veri kaydıyla VEX Robotunu gerçekleştirmeye yönlendirebileceğimiz çeşitli eğlenceli ve heyecan verici görevler vardır. Aşağıda bazı örnekler verilmiştir:

  • Robotun hızını hesaplamak için Mesafe Sensörü ile veri toplama
  • Robotu sınıfta gezdirmek ve çeşitli konumlardaki ışık değişikliklerini gözlemlemek için Optik Sensör ile veri toplamak.
  • Robotu bir maceraya çıkarmak ve bir harita oluşturmak için GPS koordinat verilerini kaydetmek.

Veri Günlüğü Projesi geliştirmek için gereken kodlama becerileri

  • VEX Brain/Sensors ile veri toplamak ve bunu bir veri yapısına eklemek için çeşitli komutları kullanın.
  • Verileri SD karttaki Virgülle Ayrılmış Değerler (CSV) dosyasına yazın.

Veri Kaydı için Gerekli Donanım:

  • VEX Beyin (IQ, V5, EXP)
  • Bir SD kart
  • Bir Sensör veya birden fazla Sensör (Gerekli verilere göre isteğe bağlı)

Sensörden Veri Alma

VEX Robotunu (IQ, V5, EXP) aşağıdaki sensörlerden veri alacak şekilde programlayabiliriz:

  • Atalet Sensörü
  • Mesafe Sensörü
  • Optik sensör
  • Görüş Sensörü
  • Dönüş Sensörü (V5, EXP)
  • GPS Sensörü (V5)

Not: VEX IQ (2. nesil) Beyin ve VEX EXP Beyinde yerleşik bir Atalet Sensörü bulunur. Atalet Sensörü verilerini bu VEX Brian'larla toplayabiliyoruz.

Bu yazımızda VEX IQ Brain (2.) ile hızlanma verilerini toplayan ve SD karta saklayan bir veri kayıt projesi geliştireceğiz. 

Öncelikle VEX IQ Beyinde (2.) yerleşik Zamanlayıcı ve Atalet Sensöründen okumalar almak için kısa bir program yazmamız gerekiyor.

  • Bu programın başlangıcında VEX IQ Brain'i (2.) kontrol etmek ve verileri ondan almak için Python modüllerini içe aktarmamız gerekecek. Bu nedenle, bu talimatları projeye ekleyerek başlayın.
  • # Kütüphane
    vex'ten içe aktarır *

    # Beyin varsayılan olarak tanımlanmalıdır
    beyin = Beyin()
    beyin_eylemsizliği = Eylemsizlik()
  • Daha sonra, kayıt için veri girişi sayısını depolamak üzere numOfDataEntries değişkenini bildirmek için kodu ekleyin, verileri okumak için zaman aralığı değerini depolamak için polling_delay_msec değişkenini bildirin ve depolamak için boş bir dize değişkeni data_buffer oluşturun. sensörden okunan veriler.
  • VeriGirişleri sayısı = 100
    yoklama_gecikmesi_msn = 50
    veri_arabelleği = ""
  • Verilere Zaman Damgası eklemek için Zamanlayıcının mevcut değerini kullanacağımızdan, veri toplamaya başlamadan önce zamanlayıcı değerini 0 saniyeye sıfırlamamız gerekiyor.
  • # Zamanlayıcı başlatma kodu
    brain.timer.clear() eklendi
  • VEX IQ Brain'den (2.) veriyi alıp tampon belleğe kaydeden komutu kullanmadan önce öncelikle onu anlamamız gerekiyor.
    Aşağıdaki talimat geçerli zamanlayıcı değerini data_buffer değişkenine belirli bir formatta ekler.

    Python kodunun bir satırı, ayrıntılı olarak açıklanabilmesi için parçalar halinde vurgulanmıştır. Kod satırı data_buffer += 1.3f % brain.timer.value() + virgül şeklinde okunur. Öncelikle += operatörü vurgulanır ve data_buffer dizesine veri ekle olarak etiketlenir. Daha sonra 1.3f dizesi vurgulanır ve Biçim dizesi olarak etiketlenir. Daha sonra yüzde işareti vurgulanır ve String modulo operatörü olarak etiketlenir. Daha sonra brain.timer.value() komutu vurgulanır ve Zamanlayıcının geçerli değeri olarak etiketlenir. Son olarak, sonuna eklenen virgül dizisi vurgulanır ve "Verileri ayırmak için sonuna virgül ekleyin" ifadesi okunur.

    Biçim dizesini “%1.3f”ayıralım: 

    • “%”: Dönüşüm belirtecini tanıtır.
    • “1”: String içerisinde bulunabilecek minimum rakam sayısını belirtir.
    • “.3”: Biçimlendirilmiş sayıya dahil edilecek ondalık basamak sayısını belirtir.
    • “f”: Formatlanacak değerin kayan noktalı sayı olduğunu belirtir.

    Böylece, minimum 1 basamak genişliğinde ve 3 ondalık basamak hassasiyetinde kayan noktalı bir sayıyı biçimlendirmek için “%1.3f” biçim dizesini kullanabiliriz.

  • Artık VEX IQ Brain (2.) üzerinde yerleşik olan Atalet Sensörünün Zamanlayıcısını ve ivme değerini okuyabilir ve ardından verileri belirtilen formatta data_buffer değişkenine ekleyebiliriz.
  • # Verileri tampon belleğe yazma komutları
    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"

    Önceki kod detaylı olarak açıklanmıştır. brain.timer.value() fonksiyonunu kullanan ilk data_buffer satırı Add Timestamp to buffer olarak etiketlenmiştir. Sonraki üç satır, X, Y ve Z eksenleri boyunca ivme değerini tampona ekle olarak etiketlenmiştir.

    Not: “\n” Yeni Satır karakteridir. Satırın burada bittiğini ve yeni bir satırın başladığını belirtir.
  • Daha sonra, data_buffer değişkenine belirli sayıda veri girişini kaydetmek için, verileri getiren talimatları tekrar tekrar yürütmek ve verileri bir dizi yineleme için data_buffer değişkenine eklemek için döngü için kullanabiliriz. Stratejimiz yineleme sayısını belirlemek için numOfDataEntries değişkeninin değerini kullanmaktır.
  • # Veri Üretimi
    for i in range(0, numOfDataEntries):

    # Verileri tampon belleğe yazma komutları
    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"
  • Şu ana kadar programımız verileri olabildiğince hızlı kaydediyor. Ancak belirli zaman aralıklarında veri kaydetmek istiyoruz. Bu nedenle, iki okuma arasına belirli bir zaman aralığı eklemek amacıyla programı duraklatmak için for döngüsü wait() fonksiyonunu kullanabiliriz. Zaman aralığının değerini belirlemek için polling_delay_msec değişkeninin değerini kullanıyoruz.
  • # Veri Üretimi
    for i in range(0, numOfDataEntries):

    # Verileri tampon belleğe yazma komutları
    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)

Tebrikler! VEX Brain'de yerleşik Atalet Sensöründen okumalar (hızlanma verileri) almak için programı tamamladık. Daha sonra, verileri SD karttaki bir CSV dosyasına nasıl yazacağımızı keşfedeceğiz.

# Kütüphane
vex'ten içe aktarır import *

# Brain varsayılan olarak tanımlanmalıdır
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# Zamanlayıcı başlatma kodunu ekle
brain.timer.clear()

# Veri Üretimi
for i in range(0, numOfDataEntries):

# Verileri tampona yazma komutları
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(yoklama_gecikmesi_msec, MSEC)

SD Kartı VEX Brain'e Takma

Verileri SD kartındaki bir dosyaya yazmadan önce SD kartını VEX Brain'in SD kart yuvasına takın.

EXP Brain, SD kart yuvası vurgulanmış şekilde gösteriliyor. SD kart yuvası, Brain'in yan tarafında, USB-C portunun sağında yer alıyor.

Not: Veri yazmak için SD kartı FAT32 olarak biçimlendirin. Boyutu 32 GB veya daha küçük olan SD kartları kullanmanızı öneririz.

SD karttaki bir dosyaya veri yazmanın uygun koşullar altında gerçekleştirilebildiğinden emin olmak için SD kartın VEX IQ Brain'e (2.) düzgün şekilde takılıp takılmadığını kontrol etmek üzere kod eklememiz gerekecek.

  • SD kartın takılı olup olmadığını kontrol etmek için brain.sdcard.is_inserted() işlevini kullanın. SD kart takılı değilse VEX IQ Brain Screen'de ilgili mesajı görüntüleyin ve programı basılı tutun.
  • # SD kart takılı değilse programı tut
    değilse brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("SD Kart Eksik")
    while(True):
    wait(5, MSEC)
    Not: brain.sdcard.is_inserted() fonksiyonu, bir SD kart Beyne takılırsa True değerini döndürür.

Verileri SD Karttaki bir CSV dosyasına yazma

Şu ana kadar programımız VEX IQ Brain (2.) ile veri toplayabilmektedir. Veri kaydı projesini tamamlamak için, gelecekte inceleme ve analiz amacıyla verileri SD karttaki Virgülle Ayrılmış Değerler (CSV) dosyasına yazmamız gerekir.

  • Bir CSV dosyasına farklı türde veriler yazarken, her sütunun hangi tür verileri içerdiğini bilmek isteriz. Bunu yapmak için verileri kaydetmeden önce CSV başlık metnini data_buffer değişkenine ekleyebiliriz.
    Böylece, bir değişken bildirmek için kodu ekleyin CSV dosyası için sütun adlarını belirtmek amacıyla CSV başlık metnini saklamak için csvHeaderText ve üzerine yazılacak CSV dosyasının adını tutacak sd_file_name değişkenini bildirin. Hafıza kartı.
  • csvHeaderText = "zaman, x, y, z"
    sd_file_name = "myDataPY.csv"

Not: Başlıkların, data_buffer değişkeninde saklanan verilerle aynı sırada olduğundan emin olun.

  • Daha sonra, veri toplama için CSV başlık metnini for döngüsü önce data_buffer dizesine ekleyin.
  • # CSV Başlığı Oluştur
    data_buffer = csvHeaderText + "\n"

    # CSV Veri Üretimi
    for i in range(0, numOfDataEntries):

    # Verileri tampon belleğe yazma komutları
    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
  • SD karttaki bir dosyaya veri yazmadan önce brain.sdcard.savefile() fonksiyonunun nasıl kullanılacağını öğrenelim.

    Python kodunun bir satırı, ayrıntılı olarak açıklanabilmesi için parçalar halinde vurgulanmıştır. Kod satırı şu şekildedir: brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). Öncelikle brain.sdcard.savefile bölümü vurgulanır ve Save a bytearray into a named file on SD card etiketi eklenir. Daha sonra sd_file_name bölümü vurgulanır ve Dosya adı olarak etiketlenir. Son olarak, sondaki bytearray(data_buffer, 'utf-8') vurgulanır ve Buffer olarak etiketlenir.


    Bu komut, data_buffer değişkeninde saklanan verileri SD karttaki adlandırılmış bir CSV dosyasına yazar.
    Şimdi bunu parçalara ayıralım:
    • brain.sdcard.savefile(): İşlev, bir bytearray'i SD karttaki adlandırılmış bir dosyaya kaydeder. İşlev, dosyaya yazılan bayt sayısını döndürür.

    • sd_file_name: Fonksiyonun ilk parametresi. Yazılacak dosyanın adını belirtir. Bu projede dosya adı sd_file_name değişkeninde saklanır.

    • bytearray(datat_buffer,'utf-8'): Fonksiyonun ikinci parametresi. Dosyaya yazılacak bayt dizisini temsil eder.

        • bytearray(): Yöntem, değiştirilebilir bir bytearray oluşturur. Bu talimatta, kodlamayı belirterek bir dizeyi bytearray'e dönüştürmek için bunu kullanıyoruz.
        • data_buffer: Yöntemin ilk parametresi. Bytearray'e dönüştürülecek kaynağı belirtir. Bu projede kaynak, data_buffer değişkeninde saklanan verilerdir. 
        • 'utf-8': Yöntemin ikinci parametresi. Dizeyi kodlamak için kullanılan belirtilen kodlamayı gösterir. Bu talimattaki kodlama 'utf-8'dir. 
  • Veri toplama için for döngüsü sonra, data_buffer değişkeninde saklanan verileri SD karttaki CSV dosyasına yazmak için brain.sdcard.savefile() işlevini kullanın. Ayrıca, verilerin dosyaya başarıyla yazılıp yazılmadığını doğrulamak ve VEX IQ Beyin Ekranında ilgili mesajı görüntüleyerek gerçek zamanlı geri bildirim almak için brain.sdcard.savefile() fonksiyonundan dönen değeri kontrol eden kodu ekleyin.
  • # CSV Veri Üretimi
    for i in range(0, numOfDataEntries):

    # Verileri tampon belleğe yazma komutları
    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)

    # Verileri SD Karta Yaz
    brain.screen.set_cursor(4,1)
    if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
    brain.screen.print("SD Yazma Hatası")
    else:
    brain.screen.print("Veri Yazıldı")
    Not: brain.sdcard.savefile() fonksiyonu dosyaya yazılan bayt sayısını döndürür. Bu projede, toplanan verileri bir CSV dosyasına yazmak için kullanıyoruz, bu nedenle dosyaya yazılan bayt sayısı sıfırdan büyük olmalıdır. Başka bir deyişle, brain.sdcard.savefile() fonksiyonu 0 değerini döndürüyorsa, verinin dosyaya başarıyla yazılmadığını söyleyebiliriz. Aksi takdirde veriler dosyaya yazılmıştır.

Tebrikler! VEX IQ Brain (2.) ile hızlanma verilerini toplayan ve bunları SD karttaki bir CSV dosyasına saklayan bir veri kayıt projesi geliştirdik. Daha sonra, veri analizi için CSV dosyasının nasıl açılacağını keşfedeceğiz. 

# Kütüphane
vex'ten içe aktarır *

# Brain varsayılan olarak tanımlanmalıdır
brain = Brain()
brain_inertial = Inertial()

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

# SD kart takılı değilse programı tut
değilse brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("SD Kart Eksik")
while(True):
wait(5, MSEC)

# Herhangi bir sensör ekle & zamanlayıcı başlatma kodu buraya
brain.timer.clear()

# CSV Başlığı Oluştur
data_buffer = csvHeaderText + "\n"

# CSV Veri Üretimi
for i in range(0, numOfDataEntries):

# Verileri tampon belleğe yazma komutları
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)

# Verileri SD Karta Yaz
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("SD Yazma Hatası")
else:
brain.screen.print("Veri Yazıldı")

Veri Analizi için CSV Dosyasını Açma

Veriler SD karttaki CSV dosyasına yazıldıktan sonra, verileri okumak ve analiz etmek amacıyla dosyayı açmak için bir elektronik tablo uygulaması kullanabiliriz. 

Not: En yaygın elektronik tablo uygulamalarından ikisi Google E-Tablolar ve Microsoft Excel'dir. Bu yazımızda SD karttaki CSV dosyasını açmak için Google E-Tablolar (Web Tabanlı) kullanacağız. Diğer uygulamaları kullanma süreci benzerdir.

  • SD kartı VEX IQ Brain'in SD kart yuvasından çıkarın. Eğer bilgisayarda yerleşik bir Micro SD kart yuvası varsa, SD kartı doğrudan o yuvaya takabiliriz. Aksi takdirde, SD kartını bir SD kart adaptörüne takın ve ardından adaptörü bilgisayara bağlayın. 
  • Google hesabımıza giriş yapın ve Google E-Tablolar'ı açın. Yeni bir e-tablo oluşturun.
  • Elektronik tabloda “Dosya” menüsünü açın, “İçe Aktar” -> “Yükle” -> “Gözat” düğmesini seçin, ardından bilgisayardaki CSV dosyasını seçin. CSV dosyasını yükledikten sonra “Verileri İçe Aktar” butonuna tıklayın. Verileri içe aktardıktan sonra, toplanan verileri CSV dosyasında görmek için “Şimdi aç” öğesine tıklayın.

    Projenin CSV verileri Google E-Tablolar belgesinde açıldı. Zaman, X, Y ve Z olmak üzere dört sütun vardır. Her zaman damgasındaki ivmeyi belgelendiren birçok veri satırı vardır.

  • (İsteğe bağlı) Verileri analiz etmenin kolay bir yolu, bir grafik çizip verilerdeki eğilimleri aramaktır. Elektronik tabloda “Ekle” menüsünü açın ve CSV dosyasındaki verileri kullanarak bir grafik çizmek için “Grafik” seçin. Aşağıdaki grafik, VEX IQ Brain (2.) ile toplanan ivme verilerinin sonucudur.

    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.


    Not: Farklı bir Grafik Türü seçmek veya grafiği ihtiyaçlarımıza göre düzenlemek için Grafik düzenleyiciyi kullanabiliriz.

Bu noktaya kadar VEX IQ Brain (2.) ile veri toplayan ve SD karttaki CSV dosyasına kaydeden veri kayıt projesini tamamladık. Ayrıca SD karttaki CSV dosyasını Google E-Tablolar'ı kullanarak nasıl okuyacağımızı ve hatta daha fazla analiz için bir grafik oluşturmayı da öğrendik. Sırada ne var? Veri kaydı için VEX Robotunu kullanarak daha heyecan verici deneyler planlamaya çalışalım, değişen çevresel faktörlerin çeşitli veri türlerini nasıl etkilediğini gözlemleyelim ve etrafımızdaki dünyayı daha derinlemesine anlayalım.

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

Last Updated: