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
numOfDataEntriesdeğişkenini bildirmek için kodu ekleyin, verileri okumak için zaman aralığı değerini depolamak içinpolling_delay_msecdeğişkenini bildirin ve depolamak için boş bir dize değişkenidata_bufferoluş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ğerinidata_bufferdeğişkenine belirli bir formatta ekler.“%1.3f”biçim dizesini parçalayalı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'de (2.) yerleşik olan Atalet Sensörünün Zamanlayıcısını ve hızlanma değerini okuyabilir ve ardından verileri belirtilen formatta
data_bufferdeğ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" - Not: “\n” Yeni Satır karakteridir. Burada satırın bittiğini ve yeni bir satırın başladığını belirtir.
- Daha sonra,
data_bufferdeğ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çindata_bufferdeğişkenine eklemek için döngü içinkullanabiliriz. Stratejimiz yineleme sayısını belirlemek içinnumOfDataEntriesdeğ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çinpolling_delay_msecdeğ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.
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_bufferdeğişkenine ekleyebiliriz.
Böylece, CSV dosyası için sütun adlarını belirtmek üzere CSV başlık metnini saklamak içincsvHeaderTextdeğişkenini bildirmek için kodu ekleyin ve üzerine yazılacak CSV dosyasının adını tutacaksd_file_namedeğ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üöncedata_bufferdizesine 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.
Bu komut,data_bufferdeğ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_bufferdeğişkeninde saklanan verileri SD karttaki CSV dosyasına yazmak içinbrain.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çinbrain.sdcard.savefile()fonksiyonundan dönen değeri kontrol eden kodu ekleyin. Sonundaki if ifadesi dosyanın durumunu gösteren bir mesaj ekler veSD Yazma HatasıveyaVeri Yazıldıyazdırır. -
# 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 halde veri dosyaya yazılmış olur.
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.
- (İ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.
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.