Python көмегімен VEX миы және сенсорлары арқылы деректерді тіркеу

Кіріспе

Бұл мақалада біз VEX роботына VEX миымен деректерді жинауды және деректерді талдау үшін SD картасында CSV файлында сақтауды нұсқайтын деректерді тіркеу жобасын қалай жасау керектігін талқылаймыз.

Деректерді тіркеу - бұл ғылыми зерттеулерге көмектесу, өз тәжірибелерімізді жүргізу және нақты мәселелерді шешу үшін пайдалана алатын қуатты құрал. Біз VEX роботын деректерді тіркеу арқылы орындауға болатын әртүрлі қызықты және қызықты тапсырмалар бар. Төменде кейбір мысалдар келтірілген:

  • Роботтың жылдамдығын есептеу үшін қашықтық сенсорымен деректерді жинау.
  • Роботты сыныпта айдау және әртүрлі орындардағы жарық өзгерістерін бақылау үшін оптикалық сенсор арқылы деректерді жинау.
  • Роботты шытырман оқиғаға апару және GPS жазу карта жасау үшін деректерді үйлестіреді.

Деректерді тіркеу жобасын әзірлеу үшін қажет кодтау дағдылары

  • VEX Brain/Sensors көмегімен деректерді жинау және оны деректер құрылымына қосу үшін әртүрлі пәрмендерді пайдаланыңыз.
  • Деректерді SD картасындағы үтірмен бөлінген мәндер (CSV) файлына жазыңыз.

Деректерді тіркеу үшін қажетті жабдық:

  • VEX миы (IQ, V5, EXP)
  • SD картасы
  • Сенсор немесе бірнеше сенсорлар (қажетті деректерге сәйкес қосымша)

Сенсордан деректерді алу

Біз VEX роботын (IQ, V5, EXP) келесі сенсорлардан деректерді алу үшін бағдарламалай аламыз:

  • Инерциялық сенсор
  • Қашықтық сенсоры
  • Оптикалық сенсор
  • Көру сенсоры
  • Айналу сенсоры (V5, EXP)
  • GPS сенсоры (V5)

Ескертпе: VEX IQ (2-буын) миы мен VEX EXP миында инерциялық сенсор орнатылған. Біз инерциялық сенсор деректерін осы VEX милары арқылы жинай аламыз.

Бұл мақалада біз VEX IQ Brain (2-ші буын) көмегімен жеделдету деректерін жинайтын және оны SD картасына сақтайтын деректерді тіркеу жобасын әзірлейміз. 

Біріншіден, VEX IQ миында (2-ші буын) орнатылған таймер мен инерциялық сенсордан көрсеткіштерді алу үшін қысқа бағдарлама жазу керек.

  • Бұл бағдарламаның басында бізге VEX IQ Brain (2-ші буын) басқару және одан деректерді алу үшін Python модульдерін импорттау қажет болады. Осылайша, осы нұсқауларды жобаға қосу арқылы бастаңыз.

    # Кітапхана vex импортынан
    импорттайды *
    
    # Brain әдепкі бойынша анықталуы керек
    brain = Brain()
    brain_inertial = Inertial()
  • Әрі қарай, жазуға арналған деректер жазбаларының санын сақтау үшін numOfDataEntries айнымалы мәнін жариялау үшін кодты қосыңыз, деректерді оқуға арналған уақыт аралығының мәнін сақтау үшін polling_delay_msec айнымалы мәнін жариялаңыз және сақтау үшін бос жол айнымалысын data_buffer жасаңыз. сенсордан оқылатын деректер.

    numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • Уақыт белгісін деректерге қосу үшін таймердің ағымдағы мәнін пайдаланатындықтан, деректерді жинауды бастамас бұрын таймер мәнін 0 секундқа қалпына келтіруіміз керек.

    # Таймерді инициализациялау кодын қосыңыз
    brain.timer.clear()
  • VEX IQ миынан (2-ші) деректерді алатын және буфердегі деректерді жазатын нұсқауды қолданбас бұрын, алдымен оны түсінуіміз керек.
    Келесі нұсқау ағымдағы таймер мәнін нақты пішімдегі data_buffer айнымалысына қосады.

    Python кодының бір жолы оны егжей-тегжейлі түсіндіру үшін бөліктерге бөлініп көрсетілген. Код жолында data_buffer += 1.3f % brain.timer.value() + үтір деп оқылады. Алдымен += операторы белгіленіп, data_buffer жолына деректерді қосу деп белгіленеді. Келесіде, 1.3f жолы ерекшеленіп, «жол пішімі» деп белгіленеді. Келесіде, пайыз белгісі белгіленеді және String модульдік операторы деп белгіленеді. Келесіде, brain.timer.value() командасы ерекшеленіп, таймердің ағымдағы мәні деп белгіленеді. Соңында, соңына үтір қосылған жол ерекшеленіп, деректерді бөлу үшін compare at the end деп оқылады.

    “%1.3f”пішім жолын бөлейік: 

    • “%”: түрлендіру спецификаторын енгізеді.
    • «1»: жолда болатын цифрлардың ең аз санын көрсетеді.
    • “.3”: пішімделген санға қосылатын ондық таңбалардың санын көрсетеді.
    • “f”: пішімделетін мән өзгермелі нүктелі сан екенін көрсетеді.

    Осылайша, біз «%1.3f» пішім жолын ең аз ені 1 цифр және 3 ондық таңба дәлдігі бар өзгермелі нүктелі санды пішімдеу үшін пайдалана аламыз.

  • Енді біз VEX IQ миында (2-ші буын) орнатылған инерциялық сенсордың таймерін және үдеу мәнін оқи аламыз, содан кейін деректерді көрсетілген пішімде data_buffer айнымалысына қоса аламыз.

    # Деректерді буферге жазу командалары
    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"

    Алдыңғы код егжей-тегжейлі түсіндірілген. brain.timer.value() функциясын қолданатын бірінші data_buffer жолы буферге уақыт белгісін қосу деп белгіленеді. Келесі үш жол X, Y және Z осьтері бойынша үдеу мәнін буферге қосу деп белгіленген.

    Ескертпе: “\n” – Жаңа жол таңбасы. Ол жолдың осы жерде аяқталатынын және жаңа жолдың басын көрсетеді.

  • Содан кейін, data_buffer айнымалысына деректер жазбаларының белгілі бір санын жазу үшін, деректерді алатын нұсқауларды қайталап орындау және деректерді бірнеше итерациялар үшін data_buffer айнымалысына қосу үшін for циклін пайдалана аламыз. Біздің стратегиямыз итерациялар санын анықтау үшін numOfDataEntries айнымалы мәнін пайдалану болып табылады.

    # i in range(0, numOfDataEntries) үшін деректерді генерациялау
    :
    
        # Деректерді буферге жазу командалары
        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"
  • Әзірге біздің бағдарлама деректерді мүмкіндігінше жылдам жазады. Дегенмен, біз белгілі бір уақыт аралықтарында деректерді жазғымыз келеді. Сондықтан, біз екі оқу арасындағы нақты уақыт аралығын қосу үшін бағдарламаны кідірту үшін for циклінде циклде wait() функциясын пайдалана аламыз. Уақыт аралығының мәнін анықтау үшін polling_delay_msec айнымалысының мәнін қолданамыз.

    # i in range(0, numOfDataEntries) үшін деректерді генерациялау
    :
    
        # Деректерді буферге жазу командалары
        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)

Құттықтаймыз! Біз VEX миында орнатылған инерциялық сенсордан көрсеткіштерді (жеделдеу деректерін) алу үшін бағдарламаны аяқтадық. Әрі қарай, деректерді SD картасындағы CSV файлына қалай жазу керектігін қарастырамыз.

# Кітапхана vex-тен
импорттайды *

# Brain әдепкі бойынша анықталуы керек
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# Таймерді инициализациялау кодын қосу
brain.timer.clear()

# i үшін деректер генерациясы
in range(0, numOfDataEntries):

    # Деректерді буферге жазу командалары
    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 картасын VEX миына бекіту

Деректерді SD картасындағы файлға жазбас бұрын, алдымен SD картасын VEX Brain SD картасы ұясына салыңыз.

V5 Brain SD карта ұяшығы бөлектелген күйде көрсетілген. SD картасы ұясы Brain құрылғысының бүйірінде, USB-C портының оң жағында орналасқан.

Ескертпе: Деректерді жазу үшін SD картасын FAT32 форматына пішімдеңіз. Өлшемі 32 ГБ немесе одан аз SD карталарын пайдалануды ұсынамыз.

SD картасындағы файлға деректерді жазуды тиісті жағдайларда орындауға болатынына көз жеткізу үшін SD картасының VEX IQ миына (2-ші буын) дұрыс салынғанын тексеру үшін код қосуымыз керек.

  • SD картасының салынғанын тексеру үшін brain.sdcard.is_inserted() функциясын пайдаланыңыз. SD картасы салынбаған болса, VEX IQ ми экранында сәйкес хабарды көрсетіп, бағдарламаны ұстап тұрыңыз.

    # SD картасы салынбаған болса, бағдарламаны ұстап тұрыңыз, егер салынбаған болса
    brain.sdcard.is_inserted():
        brain.screen.set_cursor(1,1)
        brain.screen.print("SD картасы жоқ")
        while(True):
            wait(5, MSEC)


    Ескерту: brain.sdcard.is_inserted() функциясы миға SD картасы салынған болса, True мәнін қайтарады.

Деректерді SD картасындағы CSV файлына жазу

Әзірге біздің бағдарлама VEX IQ Brain (2-ші буын) көмегімен деректерді жинай алады. Деректерді тіркеу жобасын аяқтау үшін деректерді болашақта тексеру және талдау үшін SD картасындағы үтірмен бөлінген мәндер (CSV) файлына жазуымыз керек.

  • CSV файлына деректердің әртүрлі түрлерін жазғанда, біз әр бағандағы деректер түрін білгіміз келеді. Ол үшін деректерді жазбас бұрын CSV тақырыбының мәтінін data_buffer айнымалысына қоса аламыз.
    Осылайша, CSV файлының баған атауларын көрсету үшін CSV тақырыбының мәтінін сақтау үшін csvHeaderText айнымалысын жариялау кодын қосыңыз және SD картасына жазу үшін CSV файлының атауын сақтау үшін sd_file_name айнымалысын жариялаңыз.

    csvHeaderText = "уақыт, x, y, z"
    sd_file_name = "myDataPY.csv"

Ескертпе: Тақырыптардың data_buffer айнымалысында сақталған деректермен бірдей тәртіпте екенін тексеріңіз.

  • Келесі, CSV тақырыбының мәтінін деректерді жинауға арналған інен бұрын data_buffer жолына қосыңыз.

    # CSV тақырыбын жасау
    data_buffer = csvHeaderText + "\n"
    
    # CSV деректерін жасау
    for i in range(0, numOfDataEntries):
    
        # Деректерді буферге жазу командалары
        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 картасындағы файлға деректерді жазбас бұрын, алдымен brain.sdcard.savefile() функциясын қалай пайдалану керектігін түсініп алайық.

    Python кодының бір жолы оны егжей-тегжейлі түсіндіру үшін бөліктерге бөлініп көрсетілген. Код жолында brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')) деп оқылады. Алдымен, brain.sdcard.savefile бөлімі ерекшеленіп, SD картасындағы ат берілген файлға Save a bytearray деп белгіленеді. Келесіде, sd_file_name бөлімі ерекшеленіп, Файл атауы деп белгіленеді. Соңында, соңындағы bytearray(data_buffer, 'utf-8') ерекшеленіп, Buffer деп белгіленеді.


    Бұл нұсқаулық data_buffer айнымалысында сақталған деректерді SD картасындағы аталған CSV файлына жазады.
    Оны бөліп қарастырайық:

    • brain.sdcard.savefile(): Функция байт массивін SD картасындағы аталған файлға сақтайды. Функция файлға жазылған байттардың санын қайтарады.
    • sd_file_name: Функцияның бірінші параметрі. Жазылатын файлдың атын көрсетеді. Бұл жобада файл атауы sd_file_name айнымалысында сақталады.
    • bytearray(datat_buffer,'utf-8'): Функцияның екінші параметрі. Файлға жазылатын байт массивін көрсетеді.
      •  
        • bytearray(): Бұл әдіс өзгермелі байт массивін жасайды. Бұл нұсқаулықта біз оны кодтауды көрсету арқылы жолды байт массивіне түрлендіру үшін қолданамыз.
        • data_buffer: әдістің бірінші параметрі. Байтер массивіне түрлендірілетін көзді көрсетеді. Бұл жобада дереккөз data_buffer айнымалысында сақталған деректер болып табылады. 
        • 'utf-8': әдістің екінші параметрі. Жолды кодтау үшін пайдаланылатын көрсетілген кодтауды көрсетеді. Бұл нұсқаулықта кодтау «utf-8» болып табылады. 
  • Деректерді жинауға арналған for циклінен кейін SD картасындағы CSV файлына data_buffer айнымалысында сақталған деректерді жазу үшін brain.sdcard.savefile() функциясын пайдаланыңыз. Сонымен қатар, деректердің файлға сәтті жазылғанын тексеру үшін brain.sdcard.savefile() функциясынан қайтарылатын мәнді тексеру үшін кодты қосыңыз және нақты уақыттағы кері байланыс алу үшін VEX IQ ми экранында тиісті хабарламаны көрсетіңіз.

    # CSV деректерін генерациялау
    for i in range(0, numOfDataEntries):
    
        # Деректерді буферге жазу командалары
        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 картасына жазу
    brain.screen.set_cursor(4,1)
    if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
        brain.screen.print("SD жазу қатесі")
    басқа:
        brain.screen.print("Деректер жазылған")


    Ескерту: brain.sdcard.savefile() функциясы файлға жазылған байттар санын қайтарады. Бұл жобада біз оны жиналған деректерді CSV файлына жазу үшін қолданамыз, сондықтан файлға жазылған байттардың саны нөлден көп болуы керек. Басқаша айтқанда, егер brain.sdcard.savefile() функциясы 0 мәнін қайтарса, деректер файлға сәтті жазылмаған деген қорытынды жасауға болады. Әйтпесе, деректер файлға жазылған.

Құттықтаймыз! Біз VEX IQ Brain (2-ші буын) көмегімен жеделдету деректерін жинайтын және оны SD картасындағы CSV файлында сақтайтын деректерді тіркеу жобасын әзірледік. Әрі қарай, деректерді талдау үшін CSV файлын ашу жолын қарастырамыз. 

# Кітапхана vex бағдарламасынан
импорттайды *

# Brain әдепкі бойынша анықталуы керек
brain = Brain()
brain_inertial = Inertial()

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

# SD картасы салынбаған болса, бағдарламаны ұстап тұрыңыз
егер салынбаса, brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("SD картасы жоқ")
    while(True):
        wait(5, MSEC)

# Кез келген сенсорды қосыңыз & таймерді инициализациялау кодын осында қосыңыз
brain.timer.clear()

# CSV тақырыбын жасаңыз
data_buffer = csvHeaderText + "\n"

# CSV деректерін жасау
for i in range(0, numOfDataEntries):

    # Деректерді буферге жазу командалары
    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)

# Деректерді SD картасына жазу
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
    brain.screen.print("SD жазу қатесі")
басқа:
    brain.screen.print("Деректер жазылған")

 

Деректерді талдау үшін CSV файлын ашу

Деректер SD картасындағы CSV файлына жазылғаннан кейін біз деректерді оқу және талдау үшін файлды ашу үшін электрондық кесте қолданбасын пайдалана аламыз. 

Ескертпе: Ең кең тараған екі электрондық кесте қолданбасы – Google Sheets және Microsoft Excel. Бұл мақалада SD картасында CSV файлын ашу үшін Google Sheets (веб-негізінде) қолданамыз. Басқа қолданбаларды пайдалану процесі ұқсас.

  • SD картасын VEX IQ Brain SD картасы ұясынан шығарып алыңыз. Егер компьютерде кірістірілген Micro SD картасы ұясы болса, SD картасын тікелей сол ұяға салуға болады. Әйтпесе, SD картасын SD картасы адаптеріне салыңыз, содан кейін адаптерді компьютерге қосыңыз. 
  • Google есептік жазбамызға кіріп, Google Sheets ашыңыз. Жаңа электрондық кесте жасаңыз.
  • Электрондық кестеде «Файл» мәзірін ашыңыз, «Импорттау» -> «Жүктеп салу» -> «Шолу» түймешігін таңдаңыз, содан кейін компьютердегі CSV файлын таңдаңыз. CSV файлын жүктеп салғаннан кейін «Деректерді импорттау» түймесін басыңыз. Деректерді импорттағаннан кейін CSV файлында жиналған деректерді көру үшін «Қазір ашу» түймесін басыңыз.

    Жобаның CSV деректері Google Sheets құжатында ашылды. Уақыт, X, Y және Z деп жазылған төрт баған бар. Әрбір уақыт белгісіндегі үдеуді құжаттайтын көптеген деректер жолдары бар.

  • (Қосымша) Деректерді талдаудың бір оңай жолы - график салу, содан кейін деректердегі үрдістерді іздеу. Электрондық кестеде CSV файлындағы деректерді пайдаланып график салу үшін «Insert» мәзірін ашыңыз және «диаграмма» таңдаңыз. Төмендегі график VEX IQ Brain (2-ші буын) көмегімен жиналған үдеу деректерінің нәтижесі болып табылады.

    Google Sheets бағдарламасында X, Y және Z осьтерінің уақыт бойынша үдеуін көрсететін деректер кестесі ашылған. Z мәні теріс санға жақын, ал X және Y мәндері нөлге жақын қалады.


    Ескерту: Біз басқа диаграмма түрін таңдау немесе қажеттіліктерімізге байланысты диаграмманы өңдеу үшін Диаграмма редакторын пайдалана аламыз.

Осы уақытқа дейін біз VEX IQ Brain (2-ші буын) көмегімен деректерді жинайтын және оны SD картасындағы CSV файлында сақтайтын деректерді тіркеу жобасын аяқтадық. Сондай-ақ, біз Google Sheets көмегімен SD картасындағы CSV файлын оқуды және одан әрі талдау үшін графикті жасауды үйрендік. Әрі қарай ше? Қоршаған ортаның өзгеретін факторларының деректердің әртүрлі түрлеріне қалай әсер ететінін бақылау және бізді қоршаған әлемді тереңірек түсіну үшін деректерді тіркеу үшін VEX роботын пайдаланып, қызықты эксперименттерді жоспарлауға тырысайық.

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

Last Updated: