Ievads
Šajā rakstā mēs apspriedīsim, kā izveidot datu reģistrēšanas projektu, kas uzdod VEX Robot apkopot datus ar VEX Brain un saglabāt tos CSV failā SD kartē datu analīzei.
Datu reģistrēšana ir spēcīgs rīks, ko varam izmantot, lai palīdzētu zinātniskiem pētījumiem, veiktu savus eksperimentus un risinātu konkrētas problēmas. Ir dažādi jautri un aizraujoši uzdevumi, kurus mēs varam vadīt ar VEX robotu, lai veiktu ar datu reģistrēšanu. Tālāk ir sniegti daži piemēri.
- Datu vākšana ar attāluma sensoru, lai aprēķinātu robota ātrumu
- Robota vadīšana pa klasi un datu vākšana ar optisko sensoru, lai novērotu gaismas izmaiņas dažādās vietās.
- Dodiet robotu piedzīvojumā un ierakstiet GPS koordinātu datus, lai izveidotu karti.
Kodēšanas prasmes, kas nepieciešamas datu reģistrēšanas projekta izstrādei
- Izmantojiet dažādas komandas, lai savāktu datus ar VEX Brain/Sensors un pievienotu tos datu struktūrai.
- Ierakstiet datus komatatdalīto vērtību (CSV) failā SD kartē.
Datu reģistrēšanai nepieciešamā aparatūra:
- A VEX Brain (IQ, V5, EXP)
- SD karte
- Sensors vai vairāki sensori (pēc izvēles, atkarībā no nepieciešamajiem datiem)
Datu iegūšana no sensora
Mēs varam ieprogrammēt VEX Robot (IQ, V5, EXP), lai uztvertu datus no šādiem sensoriem:
- Inerciālais sensors
- Attāluma sensors
- Optiskais sensors
- Redzes sensors
- Rotācijas sensors (V5, EXP)
- GPS sensors (V5)
Piezīme: VEX IQ (2. paaudzes) smadzenēm un VEX EXP smadzenēm ir iebūvēts inerciālais sensors. Mēs varam savākt inerciālo sensoru datus ar šiem VEX Brians.
Šajā rakstā mēs izstrādāsim datu reģistrēšanas projektu, kas apkopo paātrinājuma datus ar VEX IQ Brain (2.) un saglabā tos SD kartē.
Pirmkārt, mums ir jāuzraksta īsa programma, lai iegūtu rādījumus no taimera un inerciālā sensora, kas iebūvēts VEX IQ Brain (2.).
- Šīs programmas sākumā mums būs jāimportē Python moduļi, lai vadītu VEX IQ Brain (2.) un no tā iegūtu datus. Tāpēc sāciet ar šo instrukciju pievienošanu projektam.
-
# Bibliotēka importē
no vex import *
# Pēc noklusējuma jābūt definētam Brain
brain = Brain()
brain_inertial = Inertial() - Pēc tam pievienojiet kodu, lai deklarētu mainīgo
numOfDataEntries, lai saglabātu datu ierakstu skaitu ierakstīšanai, deklarējiet mainīgopolling_delay_msec, lai saglabātu datu nolasīšanas laika intervāla vērtību, un izveidojiet tukšu virknes mainīgodata_buffer, lai saglabātu. no sensora nolasītie dati. -
numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = "" - Tā kā laika zīmoga pievienošanai datiem izmantosim taimera pašreizējo vērtību, pirms datu vākšanas mums ir jāiestata taimera vērtība atpakaļ uz 0 sekundēm.
-
# Pievienot taimera inicializācijas kodu
brain.timer.clear() - Pirms izmantot instrukciju, kas ienes datus no VEX IQ Brain (2.) un ieraksta datus buferī, mums vispirms tas ir jāsaprot.
Šī instrukcija pievieno pašreizējo taimera vērtību mainīgajamdata_buffernoteiktā formātā.Sadalīsim formāta virkni
“%1.3f”:- “%”: ievieš reklāmguvumu norādītāju.
- “1”: norāda minimālo ciparu skaitu, kas jāiekļauj virknē
- “.3”: norāda formatētajā ciparā iekļaujamo zīmju skaitu aiz komata.
- “f”: norāda, ka formatējamā vērtība ir peldošā komata skaitlis.
Tādējādi mēs varam izmantot formāta virkni “%1.3f”, lai formatētu peldošā komata skaitli ar minimālo platumu 1 cipara un ar precizitāti līdz 3 zīmēm aiz komata.
- Tagad mēs varam nolasīt taimeri un VEX IQ Brain iebūvētā inerciālā sensora paātrinājuma vērtību (2.) un pēc tam pievienot datus mainīgajam
data_buffernorādītajā formātā. -
# Komandas datu rakstīšanai buferī
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" - Piezīme: “\n” ir New Line rakstzīme. Tas norāda, ka rinda beidzas šeit un iezīmē jaunas rindas sākumu.
- Pēc tam, lai ierakstītu noteiktu skaitu datu ierakstu mainīgajā
data_buffer, mēs varam izmantotfor loop, lai atkārtoti izpildītu instrukcijas, kas izgūst datus, un pievienotu datus mainīgajamdata_buffervairākām iterācijām. Mūsu stratēģija ir izmantot mainīgānumOfDataEntriesvērtību, lai noteiktu iterāciju skaitu. -
# Datu ģenerēšana
i diapazonā (0, numOfDataEntries):
# Komandas datu ierakstīšanai buferī
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" - Līdz šim mūsu programma ieraksta datus tik ātri, cik vien iespējams. Tomēr mēs vēlamies ierakstīt datus noteiktos laika intervālos. Tāpēc mēs varam izmantot funkciju
wait()cilpāfor, lai apturētu programmu un pievienotu noteiktu laika intervālu starp diviem nolasījumiem. Lai noteiktu laika intervāla vērtību, mēs izmantojam mainīgāpolling_delay_msecvērtību. -
# Datu ģenerēšana
i diapazonā (0, numOfDataEntries):
# Komandas datu ierakstīšanai buferī
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)
Apsveicam! Mēs esam pabeiguši programmu, lai iegūtu rādījumus (paātrinājuma datus) no inerciālā sensora, kas iebūvēts VEX Brain. Tālāk mēs izpētīsim, kā ierakstīt datus CSV failā SD kartē.
# Bibliotēka importē
no vex import *
# Pēc noklusējuma jābūt definētam Brain
brain = Brain()
brain_inertial = Inertial()
numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""
# Pievienot taimera inicializācijas kodu
brain.timer.clear()
# Datu ģenerēšana
priekš i diapazonā(0, numOfDataEntries):
# Komandas datu ierakstīšanai buferī
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 kartes pievienošana VEX Brain
Pirms datu ierakstīšanas failā SD kartē, vispirms ievietojiet SD karti VEX Brain SD kartes slotā.
Piezīme: Formatējiet SD karti uz FAT32 datu rakstīšanai. Mēs iesakām izmantot SD kartes, kuru izmērs ir 32 GB vai mazāks.
Lai nodrošinātu, ka datu ierakstīšanu failā SD kartē var veikt atbilstošos apstākļos, mums būs jāpievieno kods, lai pārbaudītu, vai SD karte ir pareizi ievietota VEX IQ Brain (2.).
- Izmantojiet funkciju
brain.sdcard.is_inserted(), lai pārbaudītu, vai SD karte ir ievietota. Ja SD karte nav ievietota, parādiet atbilstošo ziņojumu VEX IQ Brain ekrānā un turiet programmu. -
# Apturēt programmu, ja SD karte nav ievietota
, ja nav brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("Trūkst SD kartes")
while(True):
wait(5, MSEC) -
Piezīme:
brain.sdcard.is_inserted()funkcija atgriež vērtību True, ja SD karte ir ievietota smadzenēs.
Datu ierakstīšana CSV failā SD kartē
Līdz šim mūsu programma var vākt datus, izmantojot VEX IQ Brain (2.). Lai pabeigtu datu reģistrēšanas projektu, mums ir jāieraksta dati SD kartes komatatdalīto vērtību (CSV) failā turpmākai pārbaudei un analīzei.
- Rakstot dažāda veida datus CSV failā, mēs vēlamies zināt, kāda veida datus satur katra kolonna. Lai to izdarītu, pirms datu ierakstīšanas mainīgajam
data_buffervaram pievienot CSV galvenes tekstu.
Tādējādi pievienojiet kodu, lai deklarētu mainīgocsvHeaderText, lai saglabātu CSV galvenes tekstu, lai norādītu CSV faila kolonnu nosaukumus, un deklarējiet mainīgosd_file_name, lai saglabātu CSV faila nosaukumu, ko rakstīt. SD karte. -
csvHeaderText = "laiks, x, y, z"
sd_file_name = "myDataPY.csv"
Piezīme. Pārliecinieties, vai galvenes ir tādā pašā secībā kā dati, kas saglabāti mainīgajā data_buffer.
- Pēc tam pievienojiet CSV galvenes tekstu virknei
data_bufferpirmscilpasdatu apkopošanai. -
# Izveidot CSV galveni
data_buffer = csvHeaderText + "\n"
# CSV datu ģenerēšana
priekš i diapazonā(0, numOfDataEntries):
# Komandas datu rakstīšanai buferī
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) - Pirms datu ierakstīšanas failā SD kartē, vispirms sapratīsim, kā izmantot funkciju
brain.sdcard.savefile().
Šī instrukcija ieraksta datus, kas saglabāti mainīgajādata_buffer, nosauktā CSV failā SD kartē.
Sadalīsim to:-
brain.sdcard.savefile(): funkcija saglabā baitu masīvu nosauktā failā SD kartē. Funkcija atgriež failā ierakstīto baitu skaitu.
-
sd_file_name: pirmais funkcijas parametrs. Norāda rakstāmā faila nosaukumu. Šajā projektā faila nosaukums tiek saglabāts mainīgajā
sd_file_name. -
bytearray(datat_buffer,'utf-8'): otrais funkcijas parametrs. Apzīmē failā ierakstāmo baitu masīvu.
-
- bytearray(): metode izveido mainīgu baitu masīvu. Šajā instrukcijā mēs to izmantojam, lai pārvērstu virkni baitu masīvā, norādot kodējumu.
- data_buffer: pirmais metodes parametrs. Norāda avotu, kas jāpārvērš baitu masīvā. Šajā projektā avots ir dati, kas glabājas mainīgajā
data_buffer. - "utf-8": metodes otrais parametrs. Norāda norādīto kodējumu, kas izmantots virknes kodēšanai. Šajā instrukcijā kodējums ir "utf-8".
-
-
- Pēc
cilpasdatu apkopošanai izmantojiet funkcijubrain.sdcard.savefile(), lai ierakstītu datus, kas saglabāti mainīgajādata_buffer, CSV failā SD kartē. Turklāt pievienojiet kodu, lai pārbaudītu funkcijasbrain.sdcard.savefile()atgriezto vērtību, lai pārliecinātos, vai dati ir veiksmīgi ierakstīti failā, un parādītu atbilstošo ziņojumu VEX IQ smadzeņu ekrānā, lai saņemtu reāllaika atsauksmes. Beigās esošais if priekšraksts pievieno ziņojumu, lai parādītu faila statusu, izdrukājot vai nuSD rakstīšanas kļūda, vaiData Written. -
# CSV datu ģenerēšana
i diapazonā (0, numOfDataEntries):
# Komandas datu ierakstīšanai buferī
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)
# Ierakstīt datus SD kartē
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("SD rakstīšanas kļūda")
citādi:
brain.screen.print("Dati ierakstīti") -
Piezīme: Funkcija
brain.sdcard.savefile()atgriež failā ierakstīto baitu skaitu. Šajā projektā mēs to izmantojam, lai savāktos datus ierakstītu CSV failā, tāpēc failā ierakstīto baitu skaitam ir jābūt lielākam par nulli. Citiem vārdiem sakot, ja funkcija() atgriež, mēs varam secināt, ka dati nav veiksmīgi ierakstīti failā. Pretējā gadījumā dati ir ierakstīti failā.
Apsveicam! Mēs esam izstrādājuši datu reģistrēšanas projektu, kas apkopo paātrinājuma datus ar VEX IQ Brain (2.) un saglabā tos CSV failā SD kartē. Tālāk mēs izpētīsim, kā atvērt CSV failu datu analīzei.
# Bibliotēka importē
no vex import *
# Pēc noklusējuma jābūt definētam Brain
brain = Brain()
brain_inertial = Inertial()
csvHeaderText = "time, x, y, z"
sd_file_name = "myDataPY.csv"
polling_delay_msec = 50
numOfDataEntries = 100
data_buffer = ""
# Apturēt programmu, ja SD karte nav ievietota
if not brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("Trūkst SD kartes")
while(True):
wait(5, MSEC)
# Pievienot jebkuru sensoru & taimera inicializācijas kodu šeit
brain.timer.clear()
# Izveidot CSV galveni
data_buffer = csvHeaderText + "\n"
# CSV datu ģenerēšana
priekš i diapazonā(0, numOfDataEntries):
# Komandas datu ierakstīšanai buferī
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)
# Ierakstīt datus SD kartē
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("SD rakstīšanas kļūda")
citādi:
brain.screen.print("Dati ierakstīti")
CSV faila atvēršana datu analīzei
Kad dati ir ierakstīti CSV failā SD kartē, mēs varam izmantot izklājlapu lietojumprogrammu, lai atvērtu failu datu lasīšanai un analīzei.
Piezīme. Divas no visizplatītākajām izklājlapu lietojumprogrammām ir Google izklājlapas un Microsoft Excel. Šajā rakstā mēs izmantosim Google izklājlapas (tīmeklī), lai atvērtu CSV failu SD kartē. Citu lietojumprogrammu izmantošanas process ir līdzīgs.
- Izņemiet SD karti no VEX IQ Brain SD kartes slota. Ja datoram ir iebūvēts Micro SD kartes slots, mēs varam ievietot SD karti tieši šajā slotā. Pretējā gadījumā ievietojiet SD karti SD kartes adapterī un pēc tam pievienojiet adapteri datoram.
- Piesakieties mūsu Google kontā un atveriet Google izklājlapas. Izveidojiet jaunu izklājlapu.
- Izklājlapā atveriet izvēlni “Fails” , atlasiet “Importēt” -> “Augšupielādēt” -> “Pārlūkot” un pēc tam izvēlieties CSV failu datorā. Pēc CSV faila augšupielādes noklikšķiniet uz pogas “Import Data”. Pēc datu importēšanas noklikšķiniet uz “Atvērt tūlīt” lai skatītu apkopotos datus CSV failā.
- (Neobligāti) Viens vienkāršs veids, kā analizēt datus, ir uzzīmēt diagrammu un pēc tam meklēt datos tendences. Izklājlapā atveriet izvēlni “ Ievietot” un atlasiet “Diagramma” , lai uzzīmētu diagrammu, izmantojot CSV failā esošos datus. Šis grafiks ir ar VEX IQ Brain (2.) apkopoto paātrinājuma datu rezultāts.
Piezīme: Mēs varam izmantot Diagrammu redaktoru , lai izvēlētos citu diagrammas veidu vai rediģētu diagrammu atbilstoši mūsu vajadzībām.
Līdz šim mēs esam pabeiguši datu reģistrēšanas projektu, kas apkopo datus ar VEX IQ Brain (2.) un saglabā tos CSV failā SD kartē. Mēs arī esam iemācījušies nolasīt CSV failu SD kartē, izmantojot Google izklājlapas, un pat izveidot grafiku turpmākai analīzei. Kas tālāk? Mēģināsim plānot aizraujošākus eksperimentus, izmantojot VEX Robot datu reģistrēšanai, lai novērotu, kā mainīgie vides faktori ietekmē dažāda veida datus un iegūtu dziļāku izpratni par apkārtējo pasauli.