Záznam dat pomocí VEX Brain/Sensors (verze Python)

Úvod

V tomto článku budeme diskutovat o tom, jak vytvořit projekt protokolování dat, který dá robotu VEX pokyn, aby sbíral data pomocí VEX Brain a ukládal je do souboru CSV na SD kartu pro analýzu dat.

Záznam dat je mocný nástroj, který můžeme použít k podpoře vědeckého výzkumu, provádění vlastních experimentů a řešení konkrétních problémů. Existují různé zábavné a vzrušující úkoly, které můžeme řídit robotem VEX pomocí protokolování dat. Následuje několik příkladů:

  • Sběr dat pomocí senzoru vzdálenosti pro výpočet rychlosti robota
  • Řízení robota po třídě a shromažďování dat pomocí optického senzoru pro sledování změn světla na různých místech.
  • Vezměte robota na dobrodružství a zaznamenejte data souřadnic GPS pro vytvoření mapy.

Dovednosti kódování potřebné pro vývoj projektu protokolování dat

  • Pomocí různých příkazů shromažďujte data pomocí VEX Brain/Sensors a přidejte je do datové struktury.
  • Zapište data do souboru CSV (Comma-Separated Values) na SD kartě.

Hardware požadovaný pro protokolování dat:

  • Mozek VEX (IQ, V5, EXP)
  • SD karta
  • Senzor nebo více senzorů (volitelné, podle požadovaných údajů)

Získávání dat ze senzoru

Můžeme naprogramovat robota VEX (IQ, V5, EXP), aby zachytil data z následujících senzorů:

  • Inerciální senzor
  • Snímač vzdálenosti
  • Optický senzor
  • Vision Sensor
  • Rotační senzor (V5, EXP)
  • GPS senzor (V5)

Poznámka: VEX IQ (2. generace) Brain a VEX EXP Brain mají zabudovaný inerciální senzor. S těmito VEX Briany můžeme sbírat data inerciálního senzoru.

V tomto článku vyvineme projekt protokolování dat, který shromažďuje data o zrychlení pomocí VEX IQ Brain (2.) a ukládá je na SD kartu. 

Nejprve musíme napsat krátký program, abychom získali údaje z časovače a inerciálního senzoru zabudovaného ve VEX IQ Brain (2.).

  • Na začátku tohoto programu budeme muset importovat moduly Pythonu pro ovládání VEX IQ Brain (2.) a načíst z něj data. Začněte tedy přidáním těchto pokynů do projektu.
  • # Knihovna importuje
    z vex import *

    # Brain by měl být definován standardně
    brain = Brain()
    brain_inertial = Inertial()
  • Dále přidejte kód pro deklarování proměnné numOfDataEntries pro uložení počtu datových záznamů pro záznam, deklarujte proměnnou polling_delay_msec pro uložení hodnoty časového intervalu pro čtení dat a vytvořte prázdnou řetězcovou proměnnou data_buffer k uložení. data načtená ze senzoru.
  • numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • Protože budeme k přidání časového razítka k datům používat aktuální hodnotu časovače, musíme před zahájením sběru dat resetovat hodnotu časovače zpět na 0 sekund.
  • # Přidání inicializačního kódu časovače
    brain.timer.clear()
  • Před použitím instrukce, která načítá data z VEX IQ Brain (2.) a zaznamenává data do vyrovnávací paměti, jí musíme nejprve porozumět.
    Následující instrukce připojí aktuální hodnotu časovače k ​​proměnné data_buffer ve specifickém formátu.

    Řádek kódu v Pythonu je zvýrazněn po částech pro podrobnější vysvětlení. Řádek kódu zní data_buffer += 1.3f % brain.timer.value() + comma. Nejprve se zvýrazní operátor += a označí se jako Přidat data k řetězci data_buffer. Dále je řetězec 1.3f zvýrazněn a označen jako Formátovat řetězec. Dále se zvýrazní znaménko procenta a označí se jako operátor řetězec modulo. Dále je příkaz brain.timer.value() zvýrazněn a označen jako Aktuální hodnota časovače. Nakonec je zvýrazněno přidání řetězce čárky na konci a je zobrazeno jako Přidejte čárku na konec pro oddělení dat.

    Rozdělme formátovací řetězec “%1.3f“

    • „%“: Zavádí specifikátor převodu.
    • „1“: Označuje minimální počet číslic, které má řetězec obsahovat
    • „.3“: Určuje počet desetinných míst, která mají být zahrnuta do formátovaného čísla.
    • „f“: Označuje, že hodnota, která má být formátována, je číslo s plovoucí desetinnou čárkou.

    Můžeme tedy použít formátovací řetězec „%1.3f“ pro formátování čísla s plovoucí desetinnou čárkou s minimální šířkou 1 číslice a přesností na 3 desetinná místa.

  • Nyní můžeme přečíst časovač a hodnotu zrychlení inerciálního senzoru vestavěného do VEX IQ Brain (2.) a poté připojit data k proměnné data_buffer ve specifikovaném formátu.
  • # Příkazy pro zápis dat do bufferu
    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"

    Předchozí kód je podrobně vysvětlen. První řádek data_buffer používající brain.timer.value() je označen jako Přidat časové razítko do bufferu. Další tři řádky jsou označeny jako Přidat hodnotu zrychlení podél os X, Y a Z do vyrovnávací paměti.

    Poznámka: „\n“ je znak nového řádku. Označuje, že řádek končí zde a začátek nového řádku.
  • Poté, abychom zaznamenali určitý počet datových záznamů do proměnné data_buffer , můžeme použít pro smyčku k opakovanému provádění instrukcí, které načítají data a připojují data k proměnné data_buffer po řadu iterací. Naší strategií je použít hodnotu proměnné numOfDataEntries k určení počtu iterací.
  • # Generování dat
    pro i v range(0, numOfDataEntries):

    # Příkazy pro zápis dat do bufferu
    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"
  • Náš program zatím zaznamenává data tak rychle, jak je to jen možné. Chceme však zaznamenávat data v určitých časových intervalech. Proto můžeme použít funkci wait() ve smyčce for k pozastavení programu a přidání specifického časového intervalu mezi dvěma čteními. Hodnotu proměnné polling_delay_msec použijeme k určení hodnoty časového intervalu.
  • # Generování dat
    pro i v range(0, numOfDataEntries):

    # Příkazy pro zápis dat do bufferu
    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)

Gratulujeme! Dokončili jsme program, abychom získali údaje (údaje o zrychlení) z inerciálního senzoru zabudovaného v mozku VEX. Dále prozkoumáme, jak zapsat data do souboru CSV na SD kartu.

# Knihovna importuje
z vex import *

# Brain by měl být definován standardně
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# Přidání inicializačního kódu časovače
brain.timer.clear()

# Generování dat
for i in range(0, numOfDataEntries):

# Příkazy pro zápis dat do bufferu
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)

Připojení SD karty k VEX Brain

Před zápisem dat do souboru na SD kartu nejprve vložte SD kartu do slotu pro SD kartu ve VEX Brain.

EXP Brain je zobrazen se zvýrazněným slotem pro SD kartu. Slot pro SD kartu se nachází na boku Brainu, napravo od portu USB-C.

Poznámka: Naformátujte SD kartu na FAT32 pro zápis dat. Doporučujeme používat karty SD o velikosti 32 GB nebo méně.

Aby bylo zajištěno, že zápis dat do souboru na SD kartě může být proveden za vhodných podmínek, budeme muset přidat kód pro kontrolu, zda je SD karta správně vložena do VEX IQ Brain (2.).

  • Pomocí funkce brain.sdcard.is_inserted() zkontrolujte, zda je vložena SD karta. Pokud není vložena SD karta, zobrazte odpovídající zprávu na obrazovce mozku VEX IQ a podržte program.
  • # Pozastaví program, pokud SD karta není vložena
    pokud ne brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("Chybí SD karta")
    while(True):
    wait(5, MSEC)
    Poznámka: () vrací hodnotu True, pokud je do Brainu vložena SD karta.

Zápis dat do souboru CSV na SD kartě

Náš program zatím dokáže sbírat data pomocí VEX IQ Brain (2.). K dokončení projektu protokolování dat musíme data zapsat do souboru CSV (Comma-Separated Values) na SD kartě pro budoucí zkoumání a analýzu.

  • Při zápisu různých typů dat do souboru CSV chceme vědět, jaký typ dat každý sloupec obsahuje. K tomu můžeme před záznamem dat připojit text hlavičky CSV k proměnné data_buffer .
    Přidejte tedy kód pro deklaraci proměnné csvHeaderText pro uložení textu hlavičky CSV pro specifikaci názvů sloupců pro soubor CSV a deklarování proměnné sd_file_name pro uložení názvu souboru CSV, do kterého se má zapisovat. SD karta.
  • csvHeaderText = "čas, x, y, z"
    sd_file_name = "myDataPY.csv"

Poznámka: Ujistěte se, že záhlaví jsou ve stejném pořadí jako data uložená v proměnné data_buffer.

  • Dále připojte text hlavičky CSV k řetězci data_buffer před smyčku for pro sběr dat.
  • # Vytvoření hlavičky CSV
    data_buffer = csvHeaderText + "\n"

    # Generování dat CSV
    for i in range(0, numOfDataEntries):

    # Příkazy pro zápis dat do bufferu
    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
  • Před zápisem dat do souboru na SD kartě se nejprve seznámíme s tím, jak používat funkci brain.sdcard.savefile().

    Řádek kódu v Pythonu je zvýrazněn po částech pro podrobnější vysvětlení. Řádek kódu zní brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). Nejprve se zvýrazní sekce brain.sdcard.savefile a označí se jako Uložit pole bytearray do pojmenovaného souboru na SD kartě. Dále je sekce sd_file_name zvýrazněna a označena jako Název souboru. Nakonec je zvýrazněn objekt bytearray(data_buffer, 'utf-8') na konci a označen jako Buffer.


    Tato instrukce zapíše data uložená v proměnné data_buffer do pojmenovaného souboru CSV na SD kartě.
    Pojďme si to rozebrat:
    • brain.sdcard.savefile(): Funkce uloží bajtray do pojmenovaného souboru na SD kartě. Funkce vrací počet bajtů zapsaných do souboru.

    • sd_file_name: První parametr funkce. Označuje název souboru, který se má zapsat. V tomto projektu je název souboru uložen v proměnné sd_file_name.

    • bytearray(datat_buffer,'utf-8'): Druhý parametr funkce. Představuje bajtray, který se má zapsat do souboru.

        • bytearray(): Metoda vytvoří proměnlivý bytearray. V této instrukci jej používáme k převodu řetězce na byearray zadáním kódování.
        • data_buffer: První parametr metody. Označuje zdroj, který má být převeden na byearray. V tomto projektu jsou zdrojem data uložená v proměnné data_buffer. 
        • 'utf-8': Druhý parametr metody. Označuje zadané kódování použité ke kódování řetězce. Kódování je v této instrukci 'utf-8'. 
  • Po smyčce for pro sběr dat použijte funkci brain.sdcard.savefile() k zápisu dat uložených v proměnné data_buffer do souboru CSV na SD kartě. Dále přidejte kód pro kontrolu návratové hodnoty z funkce brain.sdcard.savefile() , abyste ověřili, zda byla data do souboru úspěšně zapsána, a zobrazte odpovídající zprávu na obrazovce VEX IQ Brain pro získání zpětné vazby v reálném čase.
  • # Generování dat CSV
    pro i v range(0, numOfDataEntries):

    # Příkazy pro zápis dat do bufferu
    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)

    # Zápis dat na SD kartu
    brain.screen.set_cursor(4,1)
    if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
    brain.screen.print("Chyba zápisu na SD kartu")
    else:
    brain.screen.print("Zapsána data")
    Poznámka: Funkce () vracíbajtů souboru. V tomto projektu jej používáme k zápisu shromážděných dat do souboru CSV, takže počet bajtů zapsaných do souboru musí být větší než nula. Jinými slovy, pokud funkce brain.sdcard.savefile() vrátí 0, můžeme usoudit, že data nebyla do souboru úspěšně zapsána. Jinak byla data zapsána do souboru.

Gratulujeme! Vyvinuli jsme projekt protokolování dat, který shromažďuje data o zrychlení pomocí VEX IQ Brain (2.) a ukládá je do souboru CSV na SD kartě. Dále prozkoumáme, jak otevřít soubor CSV pro analýzu dat. 

# Knihovna importuje
z vex import *

# Brain by měl být definován standardně
brain = Brain()
brain_inertial = Inertial()

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

# Pozastavit program, pokud SD karta není vložena
pokud ne brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("SD karta chybí")
while(True):
wait(5, MSEC)

# Přidat libovolný senzor & zde kód inicializace časovače
brain.timer.clear()

# Vytvořit CSV záhlaví
data_buffer = csvHeaderText + "\n"

# Generování dat CSV
for i in range(0, numOfDataEntries):

# Příkazy pro zápis dat do bufferu
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)

# Zápis dat na SD kartu
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(název_sd_file, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("Chyba zápisu na SD kartu")
else:
brain.screen.print("Zapsána data")

Otevření souboru CSV pro analýzu dat

Jakmile jsou data zapsána do souboru CSV na SD kartě, můžeme soubor otevřít pomocí tabulkového procesoru pro čtení a analýzu dat. 

Poznámka: Dvě z nejběžnějších tabulkových aplikací jsou Tabulky Google a Microsoft Excel. V tomto článku použijeme Tabulky Google (webové) k otevření souboru CSV na SD kartě. Proces používání jiných aplikací je podobný.

  • Vyjměte SD kartu ze slotu SD karty VEX IQ Brain. Pokud má počítač vestavěný slot pro Micro SD kartu, můžeme SD kartu vložit přímo do tohoto slotu. V opačném případě vložte kartu SD do adaptéru karty SD a poté adaptér připojte k počítači. 
  • Přihlaste se k našemu účtu Google a otevřete Tabulky Google. Vytvořte novou tabulku.
  • V tabulce otevřete nabídku „Soubor“ , vyberte „Importovat“ –> „Nahrát“ –> „Procházet“ a poté v počítači vyberte soubor CSV. Po nahrání souboru CSV klikněte na tlačítko „Importovat data“. Po importu dat klikněte na „Otevřít nyní“ pro zobrazení shromážděných dat v souboru CSV.

    Data projektu ve formátu CSV byla otevřena v dokumentu Tabulek Google. Jsou zde čtyři sloupce s údaji o čase, X, Y a Z. Existuje mnoho řádků dat, které dokumentují zrychlení v každém časovém razítku.

  • (Volitelné) Jeden snadný způsob, jak analyzovat data, je nakreslit graf a pak hledat trendy v datech. V tabulce otevřete nabídku „Insert“ a vyberte „Chart“ pro nakreslení grafu pomocí dat v souboru CSV. Následující graf je výsledkem dat o zrychlení shromážděných pomocí VEX IQ Brain (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.


    Poznámka: K výběru jiného typu grafu nebo k úpravě grafu podle našich potřeb můžeme použít editor grafů

Do této chvíle jsme dokončili projekt protokolování dat, který shromažďuje data pomocí VEX IQ Brain (2.) a ukládá je do souboru CSV na SD kartu. Také jsme se naučili číst soubor CSV na kartě SD pomocí Tabulek Google a dokonce vytvořit graf pro další analýzu. Co dál? Pokusme se naplánovat další vzrušující experimenty s využitím robota VEX pro záznam dat, abychom mohli sledovat, jak měnící se faktory prostředí ovlivňují různé typy dat, a hlouběji porozumět světu kolem nás.

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

Last Updated: