Bevezetés
Ebben a cikkben megvitatjuk, hogyan lehet olyan adatnaplózási projektet létrehozni, amely arra utasítja a VEX Robotot, hogy adatokat gyűjtsön a VEX Brain segítségével, és mentse azokat CSV-fájlba az SD-kártyára adatelemzés céljából.
Az adatnaplózás egy hatékony eszköz, amellyel segíthetünk a tudományos kutatásban, saját kísérleteinket végezhetjük el, és megoldhatunk konkrét problémákat. Különféle szórakoztató és izgalmas feladatokat hajthatunk végre a VEX Robot segítségével adatnaplózással. Íme néhány példa:
- Adatgyűjtés a távolságérzékelővel a robot sebességének kiszámításához
- A robot körbevezetése az osztályteremben és adatok gyűjtése az optikai érzékelővel, hogy megfigyelje a fényváltozásokat különböző helyeken.
- Kalandra vigye a robotot, és rögzítse a GPS-koordináták adatait egy térkép elkészítéséhez.
Adatnaplózási projekt fejlesztéséhez szükséges kódolási ismeretek
- Különféle parancsok segítségével gyűjtsön adatokat a VEX Brain/Sensors segítségével, és adja hozzá az adatstruktúrához.
- Írja az adatokat egy vesszővel tagolt értékek (CSV) fájlba az SD-kártyán.
Az adatnaplózáshoz szükséges hardver:
- A VEX Brain (IQ, V5, EXP)
- Egy SD kártya
- Egy érzékelő vagy több érzékelő (opcionális, a szükséges adatoktól függően)
Adatok lekérése az érzékelőből
A VEX Robotot (IQ, V5, EXP) programozhatjuk úgy, hogy az alábbi érzékelők adatait rögzítse:
- Inerciális érzékelő
- Távolság érzékelő
- Optikai érzékelő
- Látásérzékelő
- Forgásérzékelő (V5, EXP)
- GPS-érzékelő (V5)
Megjegyzés: A VEX IQ (2. generációs) Brain és a VEX EXP Brain beépített inerciális érzékelővel rendelkezik. Ezekkel a VEX Brian-ekkel gyűjthetjük az inerciális érzékelő adatait.
Ebben a cikkben egy olyan adatnaplózási projektet fogunk kidolgozni, amely a VEX IQ Brain (2.) segítségével gyűjti össze a gyorsulási adatokat, és tárolja azokat egy SD-kártyán.
Először egy rövid programot kell írnunk, hogy leolvassuk az időzítőt és a VEX IQ Brainbe épített inerciális érzékelőt (2.).
- A program elején importálnunk kell a Python modulokat a VEX IQ Brain (2.) vezérléséhez, és le kell kérnünk onnan az adatokat. Ezért kezdje azzal, hogy hozzáadja ezeket az utasításokat a projekthez.
- Ezután adja hozzá a kódot a
numOfDataEntries
változó deklarálásához a rögzítéshez szükséges adatbejegyzések számának tárolásához, deklaráljon egypolling_delay_msec
változót az adatok kiolvasásához szükséges időintervallum értékének tárolásához, és hozzon létre egy üresdata_buffer
változót a tároláshoz. az érzékelőből kiolvasott adatok. - Mivel az időzítő aktuális értékét fogjuk használni az időbélyegző hozzáadásához az adatokhoz, vissza kell állítanunk az időzítő értékét 0 másodpercre az adatgyűjtés megkezdése előtt.
- Mielőtt használnánk azt az utasítást, amely lekéri az adatokat a VEX IQ Brainből (2.), és rögzíti az adatokat a pufferben, először meg kell értenünk.
A következő utasítás egy adott formátumban hozzáfűzi az időzítő aktuális értékét azdata_buffer
változóhoz.Bontsuk fel a
“%1.3f”
formátumú karakterláncot:- „%”: Bemutatja a konverzióspecifikátort.
- „1”: A karakterláncban jelenlévő számjegyek minimális számát jelzi
- „.3”: Megadja a formázott számba belefoglalandó tizedesjegyek számát.
- „f”: Azt jelzi, hogy a formázandó érték egy lebegőpontos szám.
Így a „%1.3f” formátumú karakterlánc segítségével formázhatunk egy lebegőpontos számot legalább 1 számjegy szélességgel és 3 tizedesjegy pontossággal.
- Most leolvashatjuk a VEX IQ Brainben (2.) beépített inerciális érzékelő időzítőjét és gyorsulási értékét, majd a megadott formátumban hozzáfűzhetjük az adatokat a
data_buffer
változóhoz.Megjegyzés: "\n" az új sor karakter. Azt jelzi, hogy a sor itt ér véget, és egy új sor kezdete.
- Ezután bizonyos számú adatbejegyzés rögzítéséhez a
data_buffer
változóba használhatjuk afor loop
, hogy ismételten végrehajtsuk az adatokat lekérő utasításokat, és hozzáfűzzük az adatokat adata_buffer
változóhoz számos iterációhoz. A stratégiánk az, hogy anumOfDataEntries
változó értékét használjuk az iterációk számának meghatározásához.
- Eddig a programunk olyan gyorsan rögzíti az adatokat, amennyire csak lehetséges. Az adatokat azonban meghatározott időközönként szeretnénk rögzíteni. Ezért használhatunk egy
wait()
függvényt afor ciklusban
a program szüneteltetésére, hogy hozzáadjuk a két leolvasás közötti meghatározott időintervallumot. Az időintervallum értékének meghatározásához apolling_delay_msec
változó értékét használjuk.
Gratulálunk! Befejeztük a VEX Brainbe épített inerciális érzékelő leolvasási (gyorsulási adatok) leolvasási programját. Ezután megvizsgáljuk, hogyan írhatjuk az adatokat egy CSV-fájlba az SD-kártyán.
Az SD-kártya csatlakoztatása a VEX Brainhez
Mielőtt az adatokat egy SD-kártyán lévő fájlba írná, először helyezze be az SD-kártyát a VEX Brain SD-kártyanyílásába.
Megjegyzés: Formázza az SD-kártyát FAT32-re az adatíráshoz. Javasoljuk, hogy 32 GB-os vagy kisebb méretű SD-kártyákat használjon.
Annak biztosítására, hogy az SD-kártyán lévő fájlba való adatírás megfelelő körülmények között végrehajtható legyen, kódot kell hozzáadnunk annak ellenőrzésére, hogy az SD-kártya megfelelően van-e behelyezve a VEX IQ Brainbe (2.).
- A
brain.sdcard.is_inserted()
függvény segítségével ellenőrizze, hogy az SD-kártya be van-e helyezve. Ha az SD-kártya nincs behelyezve, jelenítse meg a megfelelő üzenetet a VEX IQ Brain képernyőn, és tartsa lenyomva a programot.
Megjegyzés: abrain.sdcard.is_inserted()
függvény True értéket ad vissza, ha SD-kártya van behelyezve az agyba.
Az adatok írása egy CSV-fájlba az SD-kártyán
Programunk eddig a VEX IQ Brain (2.) segítségével tud adatokat gyűjteni. Az adatnaplózási projekt befejezéséhez az adatokat egy vesszővel elválasztott értékek (CSV) fájlba kell írnunk az SD-kártyán a jövőbeni vizsgálat és elemzés céljából.
- Amikor különböző típusú adatokat írunk egy CSV-fájlba, tudni szeretnénk, hogy az egyes oszlopok milyen típusú adatokat tartalmaznak. Ehhez az adatok rögzítése előtt hozzáfűzhetjük a CSV fejléc szövegét a
data_buffer
változóhoz.
Így adja hozzá a kódot egy változó deklarálásáhozcsvHeaderText
a CSV fejlécszöveg tárolásához, hogy megadja a CSV-fájl oszlopneveit, és deklaráljon egysd_file_name
változót a CSV-fájl nevének rögzítéséhez, amelyet a CSV-fájlra írhat. SD kártya.
Megjegyzés: Győződjön meg arról, hogy a fejlécek ugyanabban a sorrendben vannak, mint a data_buffer
változóban tárolt adatok.
- Ezután fűzze hozzá a CSV-fejléc szövegét a
data_buffer
karakterlánchoz afor loop
előtt az adatgyűjtéshez.
- Mielőtt adatokat írna egy fájlba az SD-kártyán, először ismerje meg a
brain.sdcard.savefile()
függvény használatát.
Ez az utasítás adata_buffer
változóban tárolt adatokat egy elnevezett CSV fájlba írja az SD kártyán.
Bontsuk fel:-
brain.sdcard.savefile(): A funkció egy bájttömböt ment el egy elnevezett fájlba az SD-kártyán. A függvény a fájlba írt bájtok számát adja vissza.
-
sd_file_name: A függvény első paramétere. Az írandó fájl nevét jelzi. Ebben a projektben a fájlnév a
sd_file_name változóban van tárolva.
-
bytearray(datat_buffer,'utf-8'): A függvény második paramétere. A fájlba írandó bájttömböt jelöli.
-
- bytearray(): A metódus módosítható bytearray-t hoz létre. Ebben az utasításban a kódolás megadásával egy karakterláncot bytearray-vé alakítunk.
- data_buffer: A metódus első paramétere. Jelzi a bájttömbbé konvertálandó forrást. Ebben a projektben a forrás a
data_buffer változóban tárolt adatok.
- 'utf-8': A metódus második paramétere. A karakterlánc kódolásához használt megadott kódolást jelzi. Ebben az utasításban a kódolás 'utf-8'.
-
-
- A
for loop
után az adatgyűjtéshez használja abrain.sdcard.savefile()
függvényt, hogy adata_buffer
változóban tárolt adatokat az SD-kártya CSV-fájljába írja. Ezenkívül adja hozzá a kódot abrain.sdcard.savefile()
függvény visszatérési értékének ellenőrzéséhez, és ellenőrizze, hogy az adatok sikeresen beírásra kerültek-e a fájlba, és jelenítse meg a megfelelő üzenetet a VEX IQ Brain Screen-en a valódi időbeli visszajelzés.
Megjegyzés: Abrain.sdcard.savefile()
függvény a fájlba írt bájtok számát adja vissza. Ebben a projektben az összegyűjtött adatokat CSV fájlba írjuk, így a fájlba írt bájtok számának nullánál nagyobbnak kell lennie. Más szóval, ha abrain.sdcard.savefile()
függvény 0-t ad vissza, akkor arra a következtetésre juthatunk, hogy az adatok nem lettek sikeresen beírva a fájlba. Ellenkező esetben az adatok be lettek írva a fájlba.
Gratulálunk! Kifejlesztettünk egy adatnaplózási projektet, amely a VEX IQ Brain (2.) segítségével összegyűjti a gyorsulási adatokat, és egy CSV-fájlban tárolja az SD-kártyán. Ezután megvizsgáljuk, hogyan lehet megnyitni a CSV-fájlt adatelemzés céljából.
A CSV-fájl megnyitása adatelemzéshez
Miután az adatokat az SD-kártyán lévő CSV-fájlba írtuk, egy táblázatkezelő alkalmazás segítségével megnyithatjuk a fájlt az adatok olvasásához és elemzéséhez.
Megjegyzés: A két leggyakoribb táblázatkezelő alkalmazás a Google Táblázatok és a Microsoft Excel. Ebben a cikkben a Google Táblázatok (web alapú) segítségével nyitjuk meg az SD-kártyán lévő CSV-fájlt. Más alkalmazások használatának folyamata hasonló.
- Vegye ki az SD-kártyát a VEX IQ Brain SD-kártyanyílásából. Ha a számítógép rendelkezik beépített Micro SD kártyanyílással, akkor az SD kártyát közvetlenül ebbe a nyílásba helyezhetjük. Ellenkező esetben helyezze be az SD-kártyát egy SD-kártya-adapterbe, majd csatlakoztassa az adaptert a számítógéphez.
- Jelentkezzen be Google fiókunkba, és nyissa meg a Google Táblázatokat. Hozzon létre egy új táblázatot.
- A táblázatban nyissa meg a „Fájl” menüt, válassza az „Importálás” -> „Feltöltés” -> „Tallózás” gombot, majd válassza ki a CSV-fájlt a számítógépen. A CSV fájl feltöltése után kattintson a „Import Data” gombra. Az adatok importálása után kattintson a „Megnyitás most” gombra az összegyűjtött adatok CSV-fájlban való megtekintéséhez.
- (Opcionális) Az adatok elemzésének egyik egyszerű módja, ha rajzol egy grafikont, majd megkeresi az adatok tendenciáit. A táblázatban nyissa meg a „Beszúrás” menüt, és válassza a „Chart” lehetőséget, hogy a CSV-fájl adatai alapján grafikont rajzoljon. A következő grafikon a VEX IQ Brain (2.) segítségével gyűjtött gyorsulási adatok eredménye.
Megjegyzés: Használhatjuk a Chart szerkesztőt egy másik Chart Type kiválasztásához, vagy szerkeszthetjük a diagramot igényeink szerint.
Eddig a pontig befejeztük az adatnaplózási projektet, amely adatokat gyűjt a VEX IQ Brain (2.) segítségével, és CSV-fájlba menti az SD-kártyára. Azt is megtanultuk, hogyan kell beolvasni az SD-kártyán lévő CSV-fájlt a Google Táblázatok segítségével, és még grafikont is készíthetünk további elemzéshez. Mi a következő? Próbáljunk meg izgalmasabb kísérleteket tervezni a VEX Robot adatnaplózással, hogy megfigyeljük, hogyan hatnak a változó környezeti tényezők a különböző típusú adatokra, és mélyebben megérthetjük a minket körülvevő világot.