VEXcode IQ

Beleženje podatkov z VEX Brain/senzorji (različica Python)

Uvod

V tem članku bomo opisali, kako ustvariti projekt za beleženje podatkov, ki VEX robotu naroči, da zbira podatke z VEX Brain enoto in jih shrani v datoteko CSV na pomnilniški kartici SD za analizo podatkov.

Beleženje podatkov je zmogljivo orodje, ki ga lahko uporabimo za pomoč pri znanstvenem raziskovanju, izvajanju lastnih poskusov in reševanju konkretnih problemov. Z beleženjem podatkov lahko VEX robotu zaupamo različne zanimive in vznemirljive naloge. Spodaj je navedenih nekaj primerov:

  • Zbiranje podatkov z razdaljemernim senzorjem za izračun hitrosti robota

  • Vožnja robota po učilnici in zbiranje podatkov z optičnim senzorjem za opazovanje sprememb svetlobe na različnih mestih.

  • Odprava robota na pot in snemanje koordinatnih podatkov GPS za ustvarjanje zemljevida.

Programerske veščine, potrebne za razvoj projekta za beleženje podatkov

  • Uporaba različnih ukazov za zbiranje podatkov z VEX Brain/senzorji in njihovo dodajanje v podatkovno strukturo.

  • Zapis podatkov v datoteko z vrednostmi, ločenimi z vejico (CSV), na pomnilniški kartici SD.

Strojna oprema, potrebna za beleženje podatkov:

  • VEX Brain (IQ, V5, EXP)

  • Pomnilniška kartica SD

  • En ali več senzorjev (neobvezno, glede na zahtevane podatke)

Pridobivanje podatkov iz senzorja

VEX robot (IQ, V5, EXP) lahko sprogramiramo tako, da zajema podatke iz naslednjih senzorjev:

  • Inercijski senzor

  • Razdaljemernik

  • Optični senzor

  • Vizijski senzor

  • Rotacijski senzor (V5, EXP)

  • GPS senzor (V5)

Opomba: VEX IQ Brain (2. generacija) in VEX EXP Brain imata vgrajen inercijski senzor. Podatke inercijskega senzorja lahko zbiramo neposredno z navedenih VEX Brain enot.

V tem članku bomo razvili projekt za beleženje podatkov, ki zbira podatke o pospeševanju z VEX IQ Brain enoto (2. gen.) in jih shranjuje na pomnilniško kartico SD.

Najprej moramo napisati kratki program za pridobivanje odčitkov iz časovnika in inercijskega senzorja, vgrajenega v VEX IQ Brain (2. gen.).

  • Na začetku programa moramo uvoziti Python module za upravljanje VEX IQ Brain enote (2. gen.) in pridobivanje podatkov iz nje. Začnite tako, da projektu dodate naslednje ukaze.

  • # Library imports
  • Nato dodajte kodo za deklaracijo spremenljivke numOfDataEntries, ki bo shranjevala število podatkovnih vnosov za snemanje, deklaracijo spremenljivke polling_delay_msec, ki bo shranjevala vrednost časovnega intervala za branje podatkov, ter ustvarite prazno spremenljivko tipa niz data_buffer za shranjevanje podatkov, prebranih iz senzorja.

  • numOfDataEntries = 100
  • Ker bomo za dodajanje časovnega žiga k podatkom uporabili trenutno vrednost časovnika, moramo vrednost časovnika ponastaviti na 0 sekund, preden začnemo zbirati podatke.

  • # Add timer initialization code
  • Preden uporabimo ukaz, ki pridobiva podatke iz VEX IQ Brain (2. gen.) in jih zapisuje v medpomnilnik, ga moramo najprej razumeti. Naslednji ukaz doda trenutno vrednost časovnika v spremenljivko data_buffer v določeni obliki.

    A line of Python code is highlighted in pieces to explain it in detail. The line of code reads data_buffer += 1.3f % brain.timer.value() + comma. First, the += operator is highlighted and labeled Append data to the data_buffer string. Next, the 1.3f string is highlighted and labeled Format string. Next, the percent sign is highlighted and labeled String modulo operator. Next, the brain.timer.value() command is highlighted and labeled The current value of the timer. Lastly, the addition of the comma string at the end is highlighted and reads Add a comma at the end to separate data.

    Razčlenimo oblikovni niz „%1.3f":

    • „%": Uvede pretvorni določevalnik.

    • „1": Označuje najmanjše število znakov, ki morajo biti prisotni v nizu.

    • „.3": Določa število decimalnih mest v oblikovani številki.

    • „f": Označuje, da je vrednost, ki jo je treba oblikovati, število s plavajočo vejico.

    Oblikovni niz „%1.3f" torej lahko uporabimo za oblikovanje števila s plavajočo vejico z najmanjšo širino 1 znaka in natančnostjo 3 decimalnih mest.

  • Zdaj lahko preberemo vrednost časovnika in vrednost pospeška inercijskega senzorja, vgrajenega v VEX IQ Brain (2. gen.), ter podatke dodamo v spremenljivko data_buffer v določeni obliki.

  • # Commands to write the data to buffer

    The previous code is explained in detail. The first data_buffer line using brain.timer.value() is labeled Add Timestamp to buffer. The next three lines are labeled Add the acceleration value along the X, Y, and Z axes to buffer.

  • Opomba: „\n" je znak za novo vrstico. Označuje konec trenutne vrstice in začetek nove.

  • Nato, da v spremenljivko data_buffer posnamemo določeno število podatkovnih vnosov, lahko uporabimo zanko for, ki bo večkrat izvedla ukaze za pridobivanje podatkov in njihovo dodajanje v spremenljivko data_buffer. Vrednost spremenljivke numOfDataEntries bo določala število ponovitev.

  • # Data Generation
  • Zaenkrat naš program snema podatke tako hitro, kot je le mogoče. Vendar pa želimo podatke snemati v določenih časovnih intervalih. Zato lahko v zanki for uporabimo funkcijo wait(), ki program zaustavi in s tem doda določen časovni interval med dvema odčitkoma. Vrednost spremenljivke polling_delay_msec bo določala vrednost časovnega intervala.

  • # Data Generation

Čestitamo! Zaključili smo program za pridobivanje odčitkov (podatkov o pospeševanju) iz inercijskega senzorja, vgrajenega v VEX Brain. Zdaj bomo spoznali, kako zapisati podatke v datoteko CSV na pomnilniški kartici SD.

# Library imports

Vstavljanje pomnilniške kartice SD v VEX Brain

Preden zapišemo podatke v datoteko na pomnilniški kartici SD, jo najprej vstavite v reže za kartico SD na VEX Brain enoti.

IQ (2nd gen) Brain is shown with its SD card slot highlighted. The SD card slot is on the side of the Brain, to the right of its USB-C port.

Opomba: Pomnilniško kartico SD formatirajte v sistem FAT32 za zapis podatkov. Priporočamo uporabo kartic SD z zmogljivostjo 32 GB ali manj.

Da zagotovimo, da se zapis podatkov v datoteko na pomnilniški kartici SD izvede pod ustreznimi pogoji, moramo dodati kodo za preverjanje, ali je kartica SD pravilno vstavljena v VEX IQ Brain (2. gen.).

  • Uporabite funkcijo brain.sdcard.is_inserted() za preverjanje, ali je kartica SD vstavljena. Če kartica SD ni vstavljena, se na zaslonu VEX IQ Brain prikaže ustrezno sporočilo in program se zaustavi.

  • # Hold the program if the SD card is not inserted
  • Opomba: Funkcija brain.sdcard.is_inserted() vrne vrednost True, če je kartica SD vstavljena v Brain enoto.

Zapis podatkov v datoteko CSV na pomnilniški kartici SD

Naš program zdaj zmore zbirati podatke z VEX IQ Brain (2. gen.). Da dokončamo projekt za beleženje podatkov, moramo zapisati podatke v datoteko z vrednostmi, ločenimi z vejico (CSV), na pomnilniški kartici SD za poznejši pregled in analizo.

  • Ko v datoteko CSV zapisujemo različne vrste podatkov, je koristno vedeti, katero vrsto podatkov vsebuje posamezni stolpec. To dosežemo tako, da v spremenljivko data_buffer pred snemanjem podatkov dodamo besedilo glave CSV. Dodajte torej kodo za deklaracijo spremenljivke csvHeaderText za shranjevanje besedila glave CSV z imeni stolpcev datoteke CSV ter deklaracijo spremenljivke sd_file_name za shranjevanje imena datoteke CSV, ki bo zapisana na pomnilniško kartico SD.

  • csvHeaderText = 

Opomba: Zagotovite, da so glave v enakem vrstnem redu kot podatki, shranjeni v spremenljivki data_buffer.

  • Nato dodajte besedilo glave CSV v niz data_buffer pred zanko for za zbiranje podatkov.

  • # Create CSV Header
  • Preden zapišemo podatke v datoteko na pomnilniški kartici SD, spoznajmo, kako uporabiti funkcijo brain.sdcard.savefile().

    A line of Python code is highlighted in pieces to explain it in detail. The line of code reads brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). First, the brain.sdcard.savefile section is highlighted and labeled Save a bytearray into a named file on the SD card. Next, the sd_file_name section is highlighted and labeled Filename. Lastly, the bytearray(data_buffer, 'utf-8') at the end is highlighted and labeled Buffer.

    Ta ukaz zapiše podatke, shranjene v spremenljivki data_buffer, v poimenovano datoteko CSV na pomnilniški kartici SD.
    Razčlenimo ga:
    • brain.sdcard.savefile(): Ta funkcija shrani polje bajtov (bytearray) v poimenovano datoteko na pomnilniški kartici SD. Funkcija vrne število bajtov, zapisanih v datoteko.

    • sd_file_name: Prvi parameter funkcije. Določa ime datoteke za zapis. V tem projektu je ime datoteke shranjeno v spremenljivki sd_file_name.

    • bytearray(data_buffer,'utf-8'): Drugi parameter funkcije. Predstavlja polje bajtov (bytearray), ki ga je treba zapisati v datoteko.

        • bytearray(): Ta metoda ustvari spremenljivo polje bajtov. V tem ukazu jo uporabimo za pretvorbo niza v polje bajtov z določitvijo kodiranja.

        • data_buffer: Prvi parameter metode. Določa vir, ki ga je treba pretvoriti v polje bajtov. V tem projektu je vir podatek, shranjen v spremenljivki data_buffer.

        • „utf-8": Drugi parameter metode. Določa kodiranje, uporabljeno za kodiranje niza. V tem ukazu je kodiranje „utf-8".

  • Po zanki for za zbiranje podatkov uporabite funkcijo brain.sdcard.savefile() za zapis podatkov, shranjenih v spremenljivki data_buffer, v datoteko CSV na pomnilniški kartici SD. Poleg tega dodajte kodo za preverjanje povratne vrednosti funkcije brain.sdcard.savefile(), s katero preverite, ali so bili podatki uspešno zapisani v datoteko, ter na zaslonu VEX IQ Brain prikažite ustrezno sporočilo za sprotne povratne informacije. Stavek if na koncu doda sporočilo o stanju datoteke — izpiše bodisi SD Write Error bodisi Data Written.

  • # CSV Data Generation
  • Opomba: Funkcija brain.sdcard.savefile() vrne število bajtov, zapisanih v datoteko. V tem projektu jo uporabimo za zapis zbranih podatkov v datoteko CSV, zato mora biti število zapisanih bajtov večje od nič. Z drugimi besedami: če funkcija brain.sdcard.savefile() vrne 0, lahko sklepamo, da podatki niso bili uspešno zapisani v datoteko. V nasprotnem primeru so bili podatki v datoteko zapisani.

Čestitamo! Razvili smo projekt za beleženje podatkov, ki zbira podatke o pospeševanju z VEX IQ Brain enoto (2. gen.) in jih shranjuje v datoteko CSV na pomnilniški kartici SD. Zdaj bomo spoznali, kako odpreti datoteko CSV za analizo podatkov.

# Library imports

Odpiranje datoteke CSV za analizo podatkov

Ko so podatki zapisani v datoteko CSV na pomnilniški kartici SD, jo lahko odpremo s pregledničarsko aplikacijo za branje in analizo podatkov.

Opomba: Dve najpogostejši pregledničarski aplikaciji sta Google Sheets in Microsoft Excel. V tem članku bomo za odpiranje datoteke CSV na pomnilniški kartici SD uporabili Google Sheets (spletna različica). Postopek z drugimi aplikacijami je podoben.

  • Odstranite kartico SD iz reže za kartico SD na VEX IQ Brain enoti. Če ima računalnik vgrajeno režo za kartico Micro SD, jo lahko vstavite neposredno vanjo. V nasprotnem primeru vstavite kartico SD v adapter za kartico SD in adapter priključite na računalnik.

  • Prijavite se v račun Google in odprite Google Sheets. Ustvarite novo preglednico.

  • V preglednici odprite meni „Datoteka", izberite „Uvozi" -> „Naloži" -> gumb „Prebrskaj", nato izberite datoteko CSV na računalniku. Po nalaganju datoteke CSV kliknite gumb „Uvozi podatke". Po uvozu podatkov kliknite „Odpri zdaj", da si ogledate zbrane podatke v datoteki CSV.

    Project's CSV data opened in a Google Sheets document. There are four columns reading Time, X, Y, and Z. There are many rows of data that document the acceleration at each time stamp.

  • (Neobvezno) Enostaven način analize podatkov je risanje grafa in iskanje trendov v podatkih. V preglednici odprite meni „Vstavi" in izberite „Graf", da narišete graf s podatki iz datoteke CSV. Spodnji graf prikazuje rezultat podatkov o pospeševanju, zbranih z VEX IQ Brain enoto (2. gen.).

    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.

    Opomba: Z urejevalnikom grafov (Chart editor) lahko izberete drugačno vrsto grafa ali ga urejate glede na svoje potrebe.

S tem smo zaključili projekt za beleženje podatkov, ki zbira podatke z VEX IQ Brain enoto (2. gen.) in jih shranjuje v datoteko CSV na pomnilniški kartici SD. Prav tako smo se naučili, kako brati datoteko CSV na pomnilniški kartici SD z aplikacijo Google Sheets in ustvariti graf za nadaljnjo analizo. Kaj sledi? Poskusite načrtovati bolj vznemirljive poskuse z VEX robotom za beleženje podatkov, opazujte, kako spreminjajoči se okoljski dejavniki vplivajo na različne vrste podatkov, in pridobite poglobljeno razumevanje sveta okoli nas.

Spletna trgovina

Potrebujete dodatne dele?

Originalni VEX deli, razširitveni seti in kompleti — vse za vaš naslednji robotski projekt na trgovina.robotech.si.

Pripravil RoboTech STEM Center
Stopite v stik

Imate
vprašanje?

Pišite nam — odgovorimo v najkrajšem možnem času.

Vaši podatki so varni in zaupni.