VEX ബ്രെയിൻ/സെൻസറുകൾ ഉപയോഗിച്ചുള്ള ഡാറ്റ ലോഗിംഗ് (പൈത്തൺ പതിപ്പ്)

ആമുഖം

ഈ ലേഖനത്തിൽ, VEX ബ്രെയിൻ ഉപയോഗിച്ച് ഡാറ്റ ശേഖരിക്കാനും ഡാറ്റ വിശകലനത്തിനായി SD കാർഡിലെ ഒരു CSV ഫയലിൽ സംരക്ഷിക്കാനും VEX റോബോട്ടിനോട് നിർദ്ദേശിക്കുന്ന ഒരു ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് എങ്ങനെ സൃഷ്ടിക്കാമെന്ന് നമ്മൾ ചർച്ച ചെയ്യും.

ശാസ്ത്രീയ ഗവേഷണങ്ങളെ സഹായിക്കുന്നതിനും, നമ്മുടെ സ്വന്തം പരീക്ഷണങ്ങൾ നടത്തുന്നതിനും, പ്രത്യേക പ്രശ്നങ്ങൾ പരിഹരിക്കുന്നതിനും നമുക്ക് ഉപയോഗിക്കാൻ കഴിയുന്ന ശക്തമായ ഒരു ഉപകരണമാണ് ഡാറ്റ ലോഗിംഗ്. ഡാറ്റ ലോഗിംഗ് ഉപയോഗിച്ച് VEX റോബോട്ടിനെ നിർവ്വഹിക്കാൻ കഴിയുന്ന നിരവധി രസകരവും ആവേശകരവുമായ ജോലികളുണ്ട്. താഴെ പറയുന്ന ചില ഉദാഹരണങ്ങളാണ്:

  • റോബോട്ടിന്റെ വേഗത കണക്കാക്കാൻ ദൂര സെൻസർ ഉപയോഗിച്ച് ഡാറ്റ ശേഖരിക്കുന്നു.
  • ക്ലാസ് മുറിയിൽ റോബോട്ടിനെ ഓടിച്ചുകൊണ്ട് ഒപ്റ്റിക്കൽ സെൻസർ ഉപയോഗിച്ച് വിവിധ സ്ഥലങ്ങളിലെ പ്രകാശ മാറ്റങ്ങൾ നിരീക്ഷിക്കുന്നതിനായി ഡാറ്റ ശേഖരിക്കുന്നു.
  • റോബോട്ടിനെ ഒരു സാഹസിക യാത്രയിലേക്ക് കൊണ്ടുപോയി GPS കോർഡിനേറ്റ് ഡാറ്റ റെക്കോർഡുചെയ്‌ത് ഒരു മാപ്പ് സൃഷ്ടിക്കുന്നു.

ഒരു ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് വികസിപ്പിക്കുന്നതിന് ആവശ്യമായ കോഡിംഗ് കഴിവുകൾ.

  • VEX ബ്രെയിൻ/സെൻസറുകൾ ഉപയോഗിച്ച് ഡാറ്റ ശേഖരിച്ച് ഒരു ഡാറ്റാ ഘടനയിലേക്ക് ചേർക്കാൻ വിവിധ കമാൻഡുകൾ ഉപയോഗിക്കുക.
  • SD കാർഡിലെ ഒരു കോമ-സെപ്പറേറ്റഡ് വാല്യൂസ് (CSV) ഫയലിലേക്ക് ഡാറ്റ എഴുതുക.

ഡാറ്റ ലോഗിംഗിന് ആവശ്യമായ ഹാർഡ്‌വെയർ:

  • ഒരു VEX ബ്രെയിൻ (IQ, V5, EXP)
  • ഒരു SD കാർഡ്
  • ഒരു സെൻസർ അല്ലെങ്കിൽ ഒന്നിലധികം സെൻസറുകൾ (ഓപ്ഷണൽ, ആവശ്യമായ ഡാറ്റ അനുസരിച്ച്)

സെൻസറിൽ നിന്ന് ഡാറ്റ ലഭിക്കുന്നു

താഴെ പറയുന്ന സെൻസറുകളിൽ നിന്ന് ഡാറ്റ പിടിച്ചെടുക്കാൻ നമുക്ക് VEX റോബോട്ട് (IQ, V5, EXP) പ്രോഗ്രാം ചെയ്യാൻ കഴിയും:

  • ഇനേർഷ്യൽ സെൻസർ
  • ദൂര സെൻസർ
  • ഒപ്റ്റിക്കൽ സെൻസർ
  • വിഷൻ സെൻസർ
  • റൊട്ടേഷൻ സെൻസർ (V5, EXP)
  • ജിപിഎസ് സെൻസർ (V5)

കുറിപ്പ്: VEX IQ (രണ്ടാം തലമുറ) തലച്ചോറിലും VEX EXP തലച്ചോറിലും ഒരു ഇനേർഷ്യൽ സെൻസർ അന്തർനിർമ്മിതമാണ്. ഈ VEX ബ്രയണുകൾ ഉപയോഗിച്ച് നമുക്ക് ഇനേർഷ്യൽ സെൻസർ ഡാറ്റ ശേഖരിക്കാൻ കഴിയും.

ഈ ലേഖനത്തിൽ, VEX IQ ബ്രെയിൻ (രണ്ടാമത്തേത്) ഉപയോഗിച്ച് ആക്സിലറേഷൻ ഡാറ്റ ശേഖരിച്ച് ഒരു SD കാർഡിൽ സൂക്ഷിക്കുന്ന ഒരു ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് ഞങ്ങൾ വികസിപ്പിക്കും. 

ആദ്യം, VEX IQ ബ്രെയിനിൽ (രണ്ടാമത്തേത്) നിർമ്മിച്ച ടൈമറിൽ നിന്നും ഇനേർഷ്യൽ സെൻസറിൽ നിന്നും റീഡിംഗുകൾ ലഭിക്കുന്നതിന് നമ്മൾ ഒരു ചെറിയ പ്രോഗ്രാം എഴുതേണ്ടതുണ്ട്.

  • ഈ പ്രോഗ്രാമിന്റെ തുടക്കത്തിൽ, VEX IQ ബ്രെയിൻ (രണ്ടാമത്തേത്) നിയന്ത്രിക്കുന്നതിനും അതിൽ നിന്ന് ഡാറ്റ നേടുന്നതിനും നമ്മൾ പൈത്തൺ മൊഡ്യൂളുകൾ ഇറക്കുമതി ചെയ്യേണ്ടതുണ്ട്. അതിനാൽ, ഈ നിർദ്ദേശങ്ങൾ പ്രോജക്റ്റിലേക്ക് ചേർത്തുകൊണ്ട് ആരംഭിക്കുക.
  • # ലൈബ്രറി vex import ൽ നിന്ന്
    ഇംപോർട്ട് ചെയ്യുന്നു *

    # ബ്രെയിൻ ഡിഫോൾട്ടായി നിർവചിക്കണം
    ബ്രെയിൻ = ബ്രെയിൻ()
    ബ്രെയിൻ_ഇനർഷ്യൽ = ഇനർഷ്യൽ()
  • അടുത്തതായി, റെക്കോർഡിംഗിനുള്ള ഡാറ്റ എൻട്രികളുടെ എണ്ണം സംഭരിക്കുന്നതിന് numOfDataEntries എന്ന വേരിയബിളിനെ പ്രഖ്യാപിക്കുന്നതിനുള്ള കോഡ് ചേർക്കുക, ഡാറ്റ വായിക്കുന്നതിനുള്ള സമയ ഇടവേളയുടെ മൂല്യം സംഭരിക്കുന്നതിന് polling_delay_msec എന്ന വേരിയബിളിനെ പ്രഖ്യാപിക്കുക, സെൻസറിൽ നിന്ന് വായിക്കുന്ന ഡാറ്റ സംഭരിക്കുന്നതിന് ഒരു ശൂന്യമായ സ്ട്രിംഗ് വേരിയബിൾ data_buffer സൃഷ്ടിക്കുക.
  • numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • ഡാറ്റയിലേക്ക് ടൈംസ്റ്റാമ്പ് ചേർക്കാൻ നമ്മൾ ടൈമറിന്റെ നിലവിലെ മൂല്യം ഉപയോഗിക്കുന്നതിനാൽ, ഡാറ്റ ശേഖരിക്കാൻ തുടങ്ങുന്നതിനുമുമ്പ് ടൈമർ മൂല്യം 0 സെക്കൻഡിലേക്ക് പുനഃസജ്ജമാക്കേണ്ടതുണ്ട്.
  • # ടൈമർ ഇനീഷ്യലൈസേഷൻ കോഡ്
    ചേർക്കുക brain.timer.clear()
  • VEX IQ ബ്രെയിനിൽ (രണ്ടാമത്തേത്) നിന്ന് ഡാറ്റ ലഭ്യമാക്കുകയും ബഫറിൽ ഡാറ്റ രേഖപ്പെടുത്തുകയും ചെയ്യുന്ന നിർദ്ദേശം ഉപയോഗിക്കുന്നതിന് മുമ്പ്, നമ്മൾ ആദ്യം അത് മനസ്സിലാക്കേണ്ടതുണ്ട്.
    ഇനിപ്പറയുന്ന നിർദ്ദേശം നിലവിലെ ടൈമർ മൂല്യത്തെ ഒരു പ്രത്യേക ഫോർമാറ്റിൽ ഡാറ്റ_ബഫർ വേരിയബിളിലേക്ക് കൂട്ടിച്ചേർക്കുന്നു.

    വിശദമായി വിശദീകരിക്കുന്നതിനായി പൈത്തൺ കോഡിന്റെ ഒരു വരി ഭാഗങ്ങളായി ഹൈലൈറ്റ് ചെയ്തിരിക്കുന്നു. കോഡിന്റെ വരിയിൽ data_buffer += 1.3f % brain.timer.value() + comma എന്നാണ് കാണുന്നത്. ആദ്യം, += ഓപ്പറേറ്ററെ ഹൈലൈറ്റ് ചെയ്ത് ഡാറ്റ_ബഫർ സ്ട്രിംഗിലേക്ക് ഡാറ്റ ചേർക്കുക എന്ന് ലേബൽ ചെയ്യുന്നു. അടുത്തതായി, 1.3f സ്ട്രിംഗ് ഹൈലൈറ്റ് ചെയ്യുകയും ഫോർമാറ്റ് സ്ട്രിംഗ് എന്ന് ലേബൽ ചെയ്യുകയും ചെയ്യുന്നു. അടുത്തതായി, ശതമാനം ചിഹ്നം ഹൈലൈറ്റ് ചെയ്ത് String modulo operator എന്ന് ലേബൽ ചെയ്യുന്നു. അടുത്തതായി, brain.timer.value() കമാൻഡ് ഹൈലൈറ്റ് ചെയ്യുകയും ടൈമറിന്റെ നിലവിലെ മൂല്യം എന്ന് ലേബൽ ചെയ്യുകയും ചെയ്യുന്നു. അവസാനമായി, അവസാനം കോമ സ്ട്രിംഗ് ചേർക്കുന്നത് ഹൈലൈറ്റ് ചെയ്യുകയും 'ഡാറ്റ വേർതിരിക്കാൻ അവസാനം ഒരു കോമ ചേർക്കുക' വായിക്കുകയും ചെയ്യുന്നു.

    ഫോർമാറ്റ് സ്ട്രിംഗ് “%1.3f”വിഭജിക്കാം: 

    • “%”: പരിവർത്തന സ്പെസിഫയർ അവതരിപ്പിക്കുന്നു.
    • “1”: സ്ട്രിംഗിൽ ഉണ്ടായിരിക്കേണ്ട ഏറ്റവും കുറഞ്ഞ അക്കങ്ങളുടെ എണ്ണം സൂചിപ്പിക്കുന്നു.
    • “.3”: ഫോർമാറ്റ് ചെയ്ത സംഖ്യയിൽ ഉൾപ്പെടുത്തേണ്ട ദശാംശ സ്ഥാനങ്ങളുടെ എണ്ണം വ്യക്തമാക്കുന്നു.
    • “f”: ഫോർമാറ്റ് ചെയ്യേണ്ട മൂല്യം ഒരു ഫ്ലോട്ടിംഗ്-പോയിന്റ് സംഖ്യയാണെന്ന് സൂചിപ്പിക്കുന്നു.

    അങ്ങനെ, കുറഞ്ഞത് 1 അക്ക വീതിയും 3 ദശാംശ സ്ഥാന കൃത്യതയുമുള്ള ഒരു ഫ്ലോട്ടിംഗ്-പോയിന്റ് സംഖ്യയെ ഫോർമാറ്റ് ചെയ്യാൻ നമുക്ക് “%1.3f” എന്ന ഫോർമാറ്റ് സ്ട്രിംഗ് ഉപയോഗിക്കാം.

  • ഇനി, നമുക്ക് VEX IQ ബ്രെയിനിൽ (രണ്ടാമത്തേത്) നിർമ്മിച്ചിരിക്കുന്ന ഇനേർഷ്യൽ സെൻസറിന്റെ ടൈമറും ആക്സിലറേഷൻ മൂല്യവും വായിക്കാം, തുടർന്ന് നിർദ്ദിഷ്ട ഫോർമാറ്റിൽ ഡാറ്റ_ബഫർ വേരിയബിളിലേക്ക് ഡാറ്റ കൂട്ടിച്ചേർക്കാം.
  • # ഡാറ്റ ബഫറിലേക്ക് എഴുതാനുള്ള കമാൻഡുകൾ
    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 loop ഉപയോഗിക്കാം. ആവർത്തനങ്ങളുടെ എണ്ണം നിർണ്ണയിക്കാൻ numOfDataEntries എന്ന വേരിയബിളിന്റെ മൂല്യം ഉപയോഗിക്കുക എന്നതാണ് ഞങ്ങളുടെ തന്ത്രം.
  • # i യിലെ ഡാറ്റ ജനറേഷൻ
    ശ്രേണി(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 loop -ൽ wait() ഫംഗ്ഷൻ ഉപയോഗിക്കാം. സമയ ഇടവേളയുടെ മൂല്യം നിർണ്ണയിക്കാൻ നമ്മൾ polling_delay_msec വേരിയബിളിന്റെ മൂല്യം ഉപയോഗിക്കുന്നു.
  • # i യിലെ ഡാറ്റ ജനറേഷൻ
    (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 ഇമ്പോർട്ടിൽ നിന്ന്
ഇമ്പോർട്ടുചെയ്യുന്നു *

# ബ്രെയിൻ ഡിഫോൾട്ടായി നിർവചിക്കണം
ബ്രെയിൻ = ബ്രെയിൻ()
ബ്രെയിൻ_ഇനർഷ്യൽ = ഇനർഷ്യൽ()

നംഓഫ്ഡേറ്റാഎൻട്രികൾ = 100
പോളിംഗ്_ഡെലേ_എംസെക് = 50
ഡാറ്റാബഫർ = ""

# ടൈമർ ഇനീഷ്യലൈസേഷൻ കോഡ് ചേർക്കുക
brain.timer.clear()

# i-യിലെ (0, numOfDataEntries) ഡാറ്റ ജനറേഷൻ
:

# ബഫറിലേക്ക് ഡാറ്റ എഴുതാനുള്ള കമാൻഡുകൾ
ഡാറ്റ_ബഫർ += "%1.3f" % brain.timer.value() + "\n"
ഡാറ്റ_ബഫർ += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
ഡാറ്റ_ബഫർ += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
ഡാറ്റ_ബഫർ += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

കാത്തിരിക്കുക(പോളിംഗ്_ഡെലേ_എംസെക്, എംഎസ്ഇസി)

VEX ബ്രെയിനിലേക്ക് SD കാർഡ് ഘടിപ്പിക്കുന്നു

ഒരു SD കാർഡിലെ ഫയലിലേക്ക് ഡാറ്റ എഴുതുന്നതിനു മുമ്പ്, ആദ്യം VEX ബ്രെയിനിന്റെ SD കാർഡ് സ്ലോട്ടിലേക്ക് SD കാർഡ് ചേർക്കുക.

EXP ബ്രെയിൻ അതിന്റെ SD കാർഡ് സ്ലോട്ട് ഹൈലൈറ്റ് ചെയ്തിരിക്കുന്നതായി കാണിച്ചിരിക്കുന്നു. SD കാർഡ് സ്ലോട്ട് ബ്രെയിനിന്റെ വശത്താണ്, അതിന്റെ USB-C പോർട്ടിന്റെ വലതുവശത്താണ്.

കുറിപ്പ്: ഡാറ്റ റൈറ്റിംഗിനായി SD കാർഡ് FAT32 ലേക്ക് ഫോർമാറ്റ് ചെയ്യുക. 32GB അല്ലെങ്കിൽ അതിൽ കുറവ് വലിപ്പമുള്ള SD കാർഡുകൾ ഉപയോഗിക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.

SD കാർഡിലെ ഒരു ഫയലിലേക്ക് ഡാറ്റ എഴുതുന്നത് ഉചിതമായ സാഹചര്യങ്ങളിൽ ചെയ്യാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ, VEX IQ ബ്രെയിനിൽ (രണ്ടാമത്തേത്) SD കാർഡ് ശരിയായി ചേർത്തിട്ടുണ്ടോ എന്ന് പരിശോധിക്കാൻ നമ്മൾ കോഡ് ചേർക്കേണ്ടതുണ്ട്.

  • 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 ബ്രെയിൻ (രണ്ടാമത്) ഉപയോഗിച്ച് ഡാറ്റ ശേഖരിക്കാൻ കഴിയും. ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് പൂർത്തിയാക്കാൻ, ഭാവിയിലെ പരിശോധനയ്ക്കും വിശകലനത്തിനുമായി SD കാർഡിലെ ഒരു കോമ-സെപ്പറേറ്റഡ് വാല്യൂസ് (CSV) ഫയലിലേക്ക് ഡാറ്റ എഴുതേണ്ടതുണ്ട്.

  • ഒരു CSV ഫയലിലേക്ക് വ്യത്യസ്ത തരം ഡാറ്റ എഴുതുമ്പോൾ, ഓരോ നിരയിലും ഏത് തരം ഡാറ്റയാണ് അടങ്ങിയിരിക്കുന്നതെന്ന് നമുക്ക് അറിയണം. ഇത് ചെയ്യുന്നതിന്, ഡാറ്റ റെക്കോർഡ് ചെയ്യുന്നതിന് മുമ്പ് നമുക്ക് CSV ഹെഡർ ടെക്സ്റ്റ് data_buffer വേരിയബിളിലേക്ക് കൂട്ടിച്ചേർക്കാം.
    അങ്ങനെ, ഒരു വേരിയബിൾ പ്രഖ്യാപിക്കാൻ കോഡ് ചേർക്കുക csvHeaderText CSV ഫയലിനുള്ള കോളം നാമങ്ങൾ വ്യക്തമാക്കാൻ CSV ഹെഡർ ടെക്സ്റ്റ് സംഭരിക്കാനും ഒരു വേരിയബിൾ പ്രഖ്യാപിക്കാനും sd_file_name CSV ഫയലിന്റെ പേര് SD കാർഡിൽ എഴുതാൻ സൂക്ഷിക്കാനും.
  • csvHeaderText = "സമയം, x, y, z"
    sd_file_name = "myDataPY.csv"

കുറിപ്പ്: data_buffer വേരിയബിളിൽ സംഭരിച്ചിരിക്കുന്ന ഡാറ്റയുടെ അതേ ക്രമത്തിലാണ് ഹെഡറുകൾ എന്ന് ഉറപ്പാക്കുക.

  • അടുത്തതായി, ഡാറ്റ ശേഖരണത്തിനായുള്ള ലൂപ്പ് ന് മുമ്പുള്ള data_buffer സ്ട്രിംഗിലേക്ക് CSV ഹെഡർ ടെക്സ്റ്റ് കൂട്ടിച്ചേർക്കുക.
  • # CSV ഹെഡർ സൃഷ്ടിക്കുക
    data_buffer = csvHeaderText + "\n"

    # i-യിലെ range(0, numOfDataEntries)-നുള്ള CSV ഡാറ്റ ജനറേഷൻ
    :

    #
    ബഫറിലേക്ക് ഡാറ്റ എഴുതാനുള്ള കമാൻഡുകൾ 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() ഫംഗ്ഷൻ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ആദ്യം മനസ്സിലാക്കാം.

    വിശദമായി വിശദീകരിക്കുന്നതിനായി പൈത്തൺ കോഡിന്റെ ഒരു വരി ഭാഗങ്ങളായി ഹൈലൈറ്റ് ചെയ്തിരിക്കുന്നു. കോഡിന്റെ വരി brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')) എന്നാണ് വായിക്കുന്നത്. ആദ്യം, brain.sdcard.savefile വിഭാഗം ഹൈലൈറ്റ് ചെയ്യുകയും SD കാർഡിലെ ഒരു പേരുള്ള ഫയലിലേക്ക് ഒരു 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(): ഈ രീതി ഒരു മ്യൂട്ടബിൾ bytearray സൃഷ്ടിക്കുന്നു. ഈ നിർദ്ദേശത്തിൽ, എൻകോഡിംഗ് വ്യക്തമാക്കി ഒരു സ്ട്രിംഗിനെ ബൈറ്റിയർറേയിലേക്ക് പരിവർത്തനം ചെയ്യാൻ ഞങ്ങൾ ഇത് ഉപയോഗിക്കുന്നു.
        • data_buffer: രീതിയുടെ ആദ്യ പാരാമീറ്റർ. ഒരു ബൈടിയർറേയിലേക്ക് പരിവർത്തനം ചെയ്യേണ്ട ഉറവിടത്തെ സൂചിപ്പിക്കുന്നു. ഈ പ്രോജക്റ്റിൽ, ഉറവിടം വേരിയബിൾ data_buffer-ൽ സംഭരിച്ചിരിക്കുന്ന ഡാറ്റയാണ്. 
        • 'utf-8': രീതിയുടെ രണ്ടാമത്തെ പാരാമീറ്റർ. സ്ട്രിംഗ് എൻകോഡ് ചെയ്യാൻ ഉപയോഗിക്കുന്ന നിർദ്ദിഷ്ട എൻകോഡിംഗിനെ സൂചിപ്പിക്കുന്നു. ഈ നിർദ്ദേശത്തിലെ എൻകോഡിംഗ് 'utf-8' ആണ്. 
  • ഡാറ്റ ശേഖരണത്തിനായുള്ള ലൂപ്പ് നുള്ള ന് ശേഷം, data_buffer വേരിയബിളിൽ സംഭരിച്ചിരിക്കുന്ന ഡാറ്റ SD കാർഡിലെ CSV ഫയലിലേക്ക് എഴുതാൻ 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 ബ്രെയിൻ (രണ്ടാമത്തേത്) ഉപയോഗിച്ച് ആക്സിലറേഷൻ ഡാറ്റ ശേഖരിച്ച് SD കാർഡിലെ ഒരു CSV ഫയലിലേക്ക് സംഭരിക്കുന്ന ഒരു ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് ഞങ്ങൾ വികസിപ്പിച്ചിട്ടുണ്ട്. അടുത്തതായി, ഡാറ്റ വിശകലനത്തിനായി CSV ഫയൽ എങ്ങനെ തുറക്കാമെന്ന് നമ്മൾ പര്യവേക്ഷണം ചെയ്യും. 

# ലൈബ്രറി vex ഇമ്പോർട്ടിൽ നിന്ന്
ഇമ്പോർട്ടുചെയ്യുന്നു *

# ബ്രെയിൻ ഡിഫോൾട്ടായി നിർവചിക്കണം
ബ്രെയിൻ = ബ്രെയിൻ()
ബ്രെയിൻ_ഇനർഷ്യൽ = ഇനർഷ്യൽ()

csvHeaderText = "സമയം, 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"

# i in range(0, numOfDataEntries)-നുള്ള CSV ഡാറ്റ ജനറേഷൻ
:

# ബഫറിലേക്ക് ഡാറ്റ എഴുതാനുള്ള കമാൻഡുകൾ
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 റൈറ്റ് എറർ")
else:
brain.screen.print("ഡാറ്റ റൈറ്റൺ")

ഡാറ്റ വിശകലനത്തിനായി CSV ഫയൽ തുറക്കുന്നു

SD കാർഡിലെ CSV ഫയലിലേക്ക് ഡാറ്റ എഴുതിക്കഴിഞ്ഞാൽ, ഡാറ്റ വായിക്കുന്നതിനും വിശകലനം ചെയ്യുന്നതിനുമായി ഫയൽ തുറക്കാൻ നമുക്ക് ഒരു സ്പ്രെഡ്ഷീറ്റ് ആപ്ലിക്കേഷൻ ഉപയോഗിക്കാം. 

കുറിപ്പ്: ഏറ്റവും സാധാരണമായ രണ്ട് സ്പ്രെഡ്ഷീറ്റ് ആപ്ലിക്കേഷനുകളാണ് ഗൂഗിൾ ഷീറ്റുകളും മൈക്രോസോഫ്റ്റ് എക്സലും. ഈ ലേഖനത്തിൽ, SD കാർഡിൽ CSV ഫയൽ തുറക്കാൻ നമ്മൾ Google Sheets (വെബ് അധിഷ്ഠിതം) ഉപയോഗിക്കും. മറ്റ് ആപ്ലിക്കേഷനുകൾ ഉപയോഗിക്കുന്ന പ്രക്രിയയും സമാനമാണ്.

  • VEX IQ ബ്രെയിനിന്റെ SD കാർഡ് സ്ലോട്ടിൽ നിന്ന് SD കാർഡ് നീക്കം ചെയ്യുക. കമ്പ്യൂട്ടറിൽ ഒരു ബിൽറ്റ്-ഇൻ മൈക്രോ എസ്ഡി കാർഡ് സ്ലോട്ട് ഉണ്ടെങ്കിൽ, നമുക്ക് ആ സ്ലോട്ടിലേക്ക് നേരിട്ട് എസ്ഡി കാർഡ് ചേർക്കാം. അല്ലെങ്കിൽ, SD കാർഡ് ഒരു SD കാർഡ് അഡാപ്റ്ററിലേക്ക് തിരുകുക, തുടർന്ന് അഡാപ്റ്റർ കമ്പ്യൂട്ടറുമായി ബന്ധിപ്പിക്കുക. 
  • ഞങ്ങളുടെ ഗൂഗിൾ അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്ത് ഗൂഗിൾ ഷീറ്റ് തുറക്കുക. ഒരു പുതിയ സ്‌പ്രെഡ്‌ഷീറ്റ് സൃഷ്‌ടിക്കുക.
  • സ്പ്രെഡ്ഷീറ്റിൽ, “ഫയൽ” മെനു തുറന്ന്, “ഇംപോർട്ട്” -> “അപ്‌ലോഡ്” -> “ബ്രൗസ്” ബട്ടൺ തിരഞ്ഞെടുക്കുക, തുടർന്ന് കമ്പ്യൂട്ടറിലെ CSV ഫയൽ തിരഞ്ഞെടുക്കുക. CSV ഫയൽ അപ്‌ലോഡ് ചെയ്തതിനുശേഷം, “ഡാറ്റ ഇറക്കുമതി ചെയ്യുക” ബട്ടൺ ക്ലിക്കുചെയ്യുക. ഡാറ്റ ഇറക്കുമതി ചെയ്തതിനുശേഷം, ശേഖരിച്ച ഡാറ്റ CSV ഫയലിൽ കാണാൻ “ഇപ്പോൾ തുറക്കുക” ക്ലിക്ക് ചെയ്യുക.

    പ്രോജക്റ്റിന്റെ CSV ഡാറ്റ ഒരു Google ഷീറ്റ് ഡോക്യുമെന്റിൽ തുറന്നു. സമയം, X, Y, Z എന്നിങ്ങനെ നാല് കോളങ്ങൾ വായിക്കുന്നു. ഓരോ സമയ സ്റ്റാമ്പിലും ത്വരണം രേഖപ്പെടുത്തുന്ന നിരവധി നിര ഡാറ്റകളുണ്ട്.

  • (ഓപ്ഷണൽ) ഡാറ്റ വിശകലനം ചെയ്യാനുള്ള ഒരു എളുപ്പ മാർഗം ഒരു ഗ്രാഫ് വരയ്ക്കുക എന്നതാണ്, തുടർന്ന് ഡാറ്റയിലെ ട്രെൻഡുകൾക്കായി നോക്കുക. സ്പ്രെഡ്ഷീറ്റിൽ, “ഇൻസേർട്ട്” മെനു തുറന്ന് “ചാർട്ട്” തിരഞ്ഞെടുത്ത് CSV ഫയലിലെ ഡാറ്റ ഉപയോഗിച്ച് ഒരു ഗ്രാഫ് വരയ്ക്കുക. VEX IQ ബ്രെയിൻ (രണ്ടാമത്) ഉപയോഗിച്ച് ശേഖരിച്ച ആക്സിലറേഷൻ ഡാറ്റയുടെ ഫലമാണ് ഇനിപ്പറയുന്ന ഗ്രാഫ്.

    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.


    കുറിപ്പ്: വ്യത്യസ്തമായ ഒരു ചാർട്ട് തരം തിരഞ്ഞെടുക്കുന്നതിനോ നമ്മുടെ ആവശ്യങ്ങൾക്കനുസരിച്ച് ചാർട്ട് എഡിറ്റ് ചെയ്യുന്നതിനോ നമുക്ക് ചാർട്ട് എഡിറ്റർ ഉപയോഗിക്കാം.

ഇതുവരെ, VEX IQ ബ്രെയിൻ (രണ്ടാമത്തേത്) ഉപയോഗിച്ച് ഡാറ്റ ശേഖരിച്ച് SD കാർഡിലെ ഒരു CSV ഫയലിൽ സംരക്ഷിക്കുന്ന ഡാറ്റ ലോഗിംഗ് പ്രോജക്റ്റ് ഞങ്ങൾ പൂർത്തിയാക്കി. കൂടാതെ, ഗൂഗിൾ ഷീറ്റുകൾ ഉപയോഗിച്ച് SD കാർഡിലെ CSV ഫയൽ എങ്ങനെ വായിക്കാമെന്നും കൂടുതൽ വിശകലനത്തിനായി ഒരു ഗ്രാഫ് സൃഷ്ടിക്കാമെന്നും നമ്മൾ പഠിച്ചു. ഇനി എന്ത്? മാറിക്കൊണ്ടിരിക്കുന്ന പാരിസ്ഥിതിക ഘടകങ്ങൾ വിവിധ തരം ഡാറ്റകളെ എങ്ങനെ ബാധിക്കുന്നുവെന്ന് നിരീക്ഷിക്കുന്നതിനും നമുക്ക് ചുറ്റുമുള്ള ലോകത്തെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള ധാരണ നേടുന്നതിനും, ഡാറ്റ ലോഗിംഗിനായി VEX റോബോട്ട് ഉപയോഗിച്ച് കൂടുതൽ ആവേശകരമായ പരീക്ഷണങ്ങൾ ആസൂത്രണം ചെയ്യാൻ ശ്രമിക്കാം.

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

Last Updated: