Adatnaplózás VEX Brain/Szenzorokkal (Python verzió)

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.

    image5.png

  • 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 egy polling_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 üres data_buffer változót a tároláshoz. az érzékelőből kiolvasott adatok.

    image9.png

  • 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.

    image13.png

  • 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 az data_buffer változóhoz.

    image14.png

    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.

    image7.png

    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 a for loop , hogy ismételten végrehajtsuk az adatokat lekérő utasításokat, és hozzáfűzzük az adatokat a data_buffer változóhoz számos iterációhoz. A stratégiánk az, hogy a numOfDataEntries változó értékét használjuk az iterációk számának meghatározásához.

    image12.png

  • 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 a for 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 a polling_delay_msec változó értékét használjuk.

    image8.png

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.

image1.png




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.

IQ kártyaolvasó kiemelés (1).png

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.

    image17.png


    Megjegyzés: a brain.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ához csvHeaderText a CSV fejlécszöveg tárolásához, hogy megadja a CSV-fájl oszlopneveit, és deklaráljon egy sd_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.

    image10.png

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 a for loop előtt az adatgyűjtéshez.

    image15.png

  • 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.

    image4.png


    Ez az utasítás a data_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 a brain.sdcard.savefile() függvényt, hogy a data_buffer változóban tárolt adatokat az SD-kártya CSV-fájljába írja. Ezenkívül adja hozzá a kódot a brain.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.

    image6.png


    Megjegyzés: A brain.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 a brain.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. 

image16.png

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.

    image11.png

  • (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.

    image3.png


    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.

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

Last Updated: