পাইথন ব্যবহার করে একটি VEX মস্তিষ্ক এবং সেন্সর দিয়ে ডেটা লগিং

ভূমিকা

এই নিবন্ধে, আমরা কীভাবে একটি ডেটা লগিং প্রকল্প তৈরি করব তা নিয়ে আলোচনা করব যা VEX রোবটকে VEX মস্তিষ্কের সাথে ডেটা সংগ্রহ করতে এবং ডেটা বিশ্লেষণের জন্য SD কার্ডে একটি CSV ফাইলে সংরক্ষণ করার নির্দেশ দেয়৷

ডেটা লগিং একটি শক্তিশালী হাতিয়ার যা আমরা বৈজ্ঞানিক গবেষণায় সহায়তা করতে, আমাদের নিজস্ব পরীক্ষা-নিরীক্ষা পরিচালনা করতে এবং নির্দিষ্ট সমস্যার সমাধান করতে ব্যবহার করতে পারি। বিভিন্ন মজার এবং উত্তেজনাপূর্ণ কাজ আছে যা আমরা VEX রোবট চালাতে পারি ডেটা লগিং এর মাধ্যমে সম্পন্ন করতে। নিচে কিছু উদাহরণ দেওয়া হল:

  • রোবটের গতি গণনা করতে দূরত্ব সেন্সরের সাথে ডেটা সংগ্রহ করা।
  • শ্রেণীকক্ষের চারপাশে রোবট চালানো এবং বিভিন্ন স্থানে আলোর পরিবর্তন পর্যবেক্ষণ করতে অপটিক্যাল সেন্সর দিয়ে ডেটা সংগ্রহ করা।
  • রোবটটিকে একটি অ্যাডভেঞ্চারে নিয়ে যাওয়া এবং জিপিএস রেকর্ডিং একটি মানচিত্র তৈরি করার জন্য ডেটা সমন্বয় করে।

একটি ডেটা লগিং প্রকল্পের বিকাশের জন্য প্রয়োজনীয় কোডিং দক্ষতা

  • VEX Brain/Sensors দিয়ে ডেটা সংগ্রহ করতে এবং এটিকে একটি ডেটা স্ট্রাকচারে যুক্ত করতে বিভিন্ন কমান্ড ব্যবহার করুন।
  • SD কার্ডে একটি কমা-সেপারেটেড ভ্যালুস (CSV) ফাইলে ডেটা লিখুন।

ডেটা লগিংয়ের জন্য প্রয়োজনীয় হার্ডওয়্যার:

  • একটি VEX মস্তিষ্ক (IQ, V5, EXP)
  • একটি এসডি কার্ড
  • একটি সেন্সর বা একাধিক সেন্সর (ঐচ্ছিক, প্রয়োজনীয় তথ্য অনুযায়ী)

সেন্সর থেকে ডেটা পাওয়া

আমরা নিম্নলিখিত সেন্সর থেকে ডেটা ক্যাপচার করতে VEX রোবট (IQ, V5, EXP) প্রোগ্রাম করতে পারি:

  • ইনর্শিয়াল সেন্সর
  • দূরত্ব সেন্সর
  • অপটিক্যাল সেন্সর
  • ভিশন সেন্সর
  • ঘূর্ণন সেন্সর (V5, EXP)
  • GPS সেন্সর (V5)

দ্রষ্টব্য: VEX IQ (2nd জেনারেশন) ব্রেন এবং VEX EXP ব্রেইনে একটি ইনর্শিয়াল সেন্সর বিল্ট ইন আছে। আমরা এই VEX মস্তিষ্কের মাধ্যমে Inertial Sensor ডেটা সংগ্রহ করতে পারি।

এই নিবন্ধে, আমরা একটি ডেটা লগিং প্রজেক্ট তৈরি করব যা VEX IQ Brain (2nd gen) দিয়ে ত্বরণ ডেটা সংগ্রহ করে এবং এটি একটি SD কার্ডে সংরক্ষণ করে। 

প্রথমে, VEX IQ Brain (2nd gen) এ নির্মিত টাইমার এবং ইনর্শিয়াল সেন্সর থেকে রিডিং পেতে আমাদের একটি ছোট প্রোগ্রাম লিখতে হবে।

  • এই প্রোগ্রামের শুরুতে, আমাদের VEX IQ Brain (2nd gen) নিয়ন্ত্রণ করতে পাইথন মডিউল আমদানি করতে হবে এবং এটি থেকে ডেটা আনতে হবে। সুতরাং, প্রকল্পে এই নির্দেশাবলী যোগ করে শুরু করুন।

    # লাইব্রেরি ইম্পোর্ট
    from vex import *
    
    # Brain ডিফল্টরূপে সংজ্ঞায়িত থাকা উচিত
    brain = Brain()
    brain_inertial = Inertial()
  • এরপরে, রেকর্ডিংয়ের জন্য ডেটা এন্ট্রির সংখ্যা সংরক্ষণ করতে একটি ভেরিয়েবল numOfDataEntries ঘোষণা করতে কোডটি যুক্ত করুন, ডেটা পড়ার জন্য সময়ের ব্যবধানের মান সংরক্ষণ করতে একটি ভেরিয়েবল polling_delay_msec ঘোষণা করুন এবং সংরক্ষণ করার জন্য একটি খালি স্ট্রিং ভেরিয়েবল data_buffer তৈরি করুন। সেন্সর থেকে তথ্য পড়া.

    numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • যেহেতু আমরা ডেটাতে টাইমস্ট্যাম্প যোগ করার জন্য টাইমারের বর্তমান মান ব্যবহার করব, তাই ডেটা সংগ্রহ শুরু করার আগে টাইমারের মান পুনরায় ০ সেকেন্ডে সেট করতে হবে।

    # টাইমার প্রারম্ভিক কোড
    যোগ করুন brain.timer.clear()
  • VEX IQ Brain (2nd) থেকে ডেটা নিয়ে আসা এবং বাফারে ডেটা রেকর্ড করার নির্দেশনা ব্যবহার করার আগে, আমাদের প্রথমে এটি বুঝতে হবে।
    নিম্নলিখিত নির্দেশনা একটি নির্দিষ্ট বিন্যাসে বর্তমান টাইমার মান data_buffer ভেরিয়েবলের সাথে যুক্ত করে।

    পাইথন কোডের একটি লাইন বিস্তারিতভাবে ব্যাখ্যা করার জন্য অংশবিশেষে হাইলাইট করা হয়েছে। কোডের লাইনটি হলো data_buffer += 1.3f % brain.timer.value() + comma। প্রথমে, += অপারেটরটিকে হাইলাইট করা হয় এবং 'data_buffer' স্ট্রিং-এ ডেটা যুক্ত করুন হিসেবে লেবেল করা হয়। এরপর, 1.3f স্ট্রিংটি হাইলাইট করা হয় এবং ফরম্যাট স্ট্রিং হিসেবে চিহ্নিত করা হয়। এরপর, শতাংশ চিহ্নটিকে হাইলাইট করে 'স্ট্রিং মডুলো অপারেটর' হিসেবে চিহ্নিত করা হয়। এরপরে, brain.timer.value() কমান্ডটি হাইলাইট করা হয় এবং এটিকে 'টাইমারের বর্তমান মান' হিসেবে লেবেল করা হয়। সবশেষে, স্ট্রিংটির শেষে কমা যোগ করার বিষয়টি হাইলাইট করা হয় এবং লেখা থাকে, "ডেটা আলাদা করতে শেষে একটি কমা যোগ করুন।"

    চলুন বিন্যাস স্ট্রিং “%1.3f”ভাঙ্গা যাক : 

    • "%": রূপান্তর স্পেসিফায়ার প্রবর্তন করে।
    • "1": স্ট্রিংটিতে উপস্থিত থাকা সংখ্যার ন্যূনতম সংখ্যা নির্দেশ করে।
    • “.3”: বিন্যাসিত সংখ্যায় অন্তর্ভুক্ত করার জন্য দশমিক স্থানের সংখ্যা নির্দিষ্ট করে।
    • "f": নির্দেশ করে যে মানটি ফর্ম্যাট করা হবে একটি ফ্লোটিং-পয়েন্ট সংখ্যা।

    সুতরাং, ন্যূনতম 1 সংখ্যার প্রস্থ এবং 3 দশমিক স্থানের নির্ভুলতা সহ একটি ফ্লোটিং-পয়েন্ট নম্বর ফরম্যাট করতে আমরা ফর্ম্যাট স্ট্রিং "%1.3f" ব্যবহার করতে পারি।

  • এখন, আমরা VEX IQ Brain (2nd gen) এ নির্মিত Inertial Sensor-এর টাইমার এবং ত্বরণ মান পড়তে পারি এবং তারপর নির্দিষ্ট বিন্যাসে 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 লাইনটির লেবেল হলো Add Timestamp to buffer। পরবর্তী তিনটি লাইনের শিরোনাম হলো: বাফারে X, Y, এবং Z অক্ষ বরাবর ত্বরণের মান যোগ করুন।

    দ্রষ্টব্য: “\n” হল নতুন লাইনের অক্ষর। এটি নির্দেশ করে যে লাইনটি এখানে শেষ এবং একটি নতুন লাইনের শুরু।

  • তারপরে, data_buffer ভেরিয়েবলে নির্দিষ্ট সংখ্যক ডেটা এন্ট্রি রেকর্ড করতে, আমরা এর জন্য লুপ ব্যবহার করতে পারি বারবার নির্দেশাবলী কার্যকর করতে যা ডেটা আনয়ন করে এবং ডেটা_বাফার ভেরিয়েবলে অনেকগুলি পুনরাবৃত্তির জন্য ডেটা যুক্ত করে। আমাদের কৌশল হল ভেরিয়েবল numOfDataEntries এর মান ব্যবহার করে পুনরাবৃত্তির সংখ্যা নির্ধারণ করা।

    # ডেটা তৈরি
    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"
  • এখন পর্যন্ত, আমাদের প্রোগ্রাম যত তাড়াতাড়ি সম্ভব ডেটা রেকর্ড করে। যাইহোক, আমরা নির্দিষ্ট সময়ের ব্যবধানে ডেটা রেকর্ড করতে চাই। তাই, আমরা for loop -এ একটি wait() ফাংশন ব্যবহার করতে পারি যাতে দুটি রিডিংয়ের মধ্যে নির্দিষ্ট সময়ের ব্যবধান যোগ করার জন্য প্রোগ্রামটি পজ করা যায়। সময়ের ব্যবধানের মান নির্ধারণ করতে আমরা polling_delay_msec ভেরিয়েবলের মান ব্যবহার করি।

    # ডেটা তৈরি
    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)

অভিনন্দন! VEX ব্রেইনে তৈরি ইনর্শিয়াল সেন্সর থেকে রিডিং (ত্বরণ ডেটা) পাওয়ার জন্য আমরা প্রোগ্রামটি শেষ করেছি। এর পরে, আমরা SD কার্ডে একটি CSV ফাইলে ডেটা কীভাবে লিখতে হয় তা অন্বেষণ করব।

# লাইব্রেরি ইম্পোর্ট
from vex import *

# Brain ডিফল্টভাবে সংজ্ঞায়িত থাকা উচিত
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# টাইমার ইনিশিয়ালাইজেশন কোড যোগ করুন
brain.timer.clear()

# ডেটা জেনারেশন
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)

VEX মস্তিষ্কে SD কার্ড সংযুক্ত করা হচ্ছে

একটি SD কার্ডে একটি ফাইলে ডেটা লেখার আগে, প্রথমে VEX মস্তিষ্কের SD কার্ড স্লটে SD কার্ডটি প্রবেশ করান৷

V5 Brain-এর এসডি কার্ড স্লটটি হাইলাইট করে দেখানো হয়েছে। এসডি কার্ড স্লটটি ব্রেইন-এর পাশে, এর ইউএসবি-সি পোর্টের ডান দিকে অবস্থিত।

দ্রষ্টব্য: ডেটা লেখার জন্য SD কার্ডটিকে FAT32 তে ফর্ম্যাট করুন৷ আমরা 32GB বা তার কম আকারের SD কার্ড ব্যবহার করার পরামর্শ দিই।

SD কার্ডে একটি ফাইলে ডেটা লেখা যথাযথ অবস্থার অধীনে করা যেতে পারে তা নিশ্চিত করতে, SD কার্ডটি VEX IQ Brain (2nd gen) এ সঠিকভাবে ঢোকানো হয়েছে কিনা তা পরীক্ষা করার জন্য আমাদের কোড যোগ করতে হবে।

  • এসডি কার্ড ঢোকানো হয়েছে কিনা তা পরীক্ষা করতে brain.sdcard.is_inserted() ফাংশন ব্যবহার করুন। যদি SD কার্ড ঢোকানো না হয়, VEX IQ ব্রেইন স্ক্রিনে সংশ্লিষ্ট বার্তাটি প্রদর্শন করুন এবং প্রোগ্রামটি ধরে রাখুন।

    # এসডি কার্ড ঢোকানো না থাকলে প্রোগ্রামটি থামিয়ে রাখুন
    if not brain.sdcard.is_inserted():
        brain.screen.set_cursor(1,1)
        brain.screen.print("এসডি কার্ড অনুপস্থিত")
        while(True):
            wait(5, MSEC)


    দ্রষ্টব্য: brain.sdcard.is_inserted() ফাংশনটি True রিটার্ন করে যদি Brain-এ একটি SD কার্ড ঢোকানো হয়।

SD কার্ডে একটি CSV ফাইলে ডেটা লেখা

এখন পর্যন্ত, আমাদের প্রোগ্রাম VEX IQ Brain (2nd gen) দিয়ে ডেটা সংগ্রহ করতে পারে। ডেটা লগিং প্রকল্পটি সম্পূর্ণ করতে, ভবিষ্যতে পরীক্ষা এবং বিশ্লেষণের জন্য আমাদের SD কার্ডে একটি কমা-সেপারেটেড ভ্যালুস (CSV) ফাইলে ডেটা লিখতে হবে।

  • একটি CSV ফাইলে বিভিন্ন ধরনের ডেটা লেখার সময়, আমরা জানতে চাই প্রতিটি কলামে কোন ধরনের ডেটা রয়েছে। এটি করার জন্য, ডেটা রেকর্ড করার আগে আমরা CSV হেডার টেক্সটটি যুক্ত করতে পারি।
    , CSV ফাইলের কলামের নাম নির্দিষ্ট করার জন্য CSV হেডার টেক্সট সংরক্ষণ করতে csvHeaderText একটি ভেরিয়েবল SD কার্ডে লেখার জন্য CSV ফাইলের নাম ধারণ করতে ভেরিয়েবল ঘোষণা করার কোড যোগ করুন।

    csvHeaderText = "সময়, x, y, z"
    sd_file_name = "myDataPY.csv"

দ্রষ্টব্য: নিশ্চিত করুন যে শিরোনামগুলি ডেটা_বাফার ভেরিয়েবলে সংরক্ষিত ডেটার মতো একই ক্রমে রয়েছে।

  • এরপরে, ডেটা সংগ্রহের জন্য for loop এর আগে 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)
  • এসডি কার্ডে একটি ফাইলে ডেটা লেখার আগে, আসুন প্রথমে brain.sdcard.savefile() ফাংশনটি কীভাবে ব্যবহার করবেন তা বুঝতে পারি।

    পাইথন কোডের একটি লাইন বিস্তারিতভাবে ব্যাখ্যা করার জন্য অংশবিশেষে হাইলাইট করা হয়েছে। কোডের লাইনটি হলো brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). প্রথমে, brain.sdcard.savefile অংশটি হাইলাইট করা হয় এবং এটিকে "এসডি কার্ডে একটি নির্দিষ্ট নামের ফাইলে বাইটঅ্যারে সংরক্ষণ করুন" হিসেবে লেবেল করা হয়। এরপর, sd_file_name অংশটি হাইলাইট করা হয় এবং Filename হিসেবে চিহ্নিত করা হয়। সবশেষে, শেষের 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: পদ্ধতির প্রথম প্যারামিটার। একটি বাইটয়ারে রূপান্তরিত হতে উৎস নির্দেশ করে। এই প্রকল্পে, উৎস হল ভেরিয়েবল ডেটা_বাফারে সংরক্ষিত ডেটা। 
        • 'utf-8': পদ্ধতির দ্বিতীয় প্যারামিটার। স্ট্রিং এনকোড করতে ব্যবহৃত নির্দিষ্ট এনকোডিং নির্দেশ করে। এই নির্দেশে এনকোডিং হল 'utf-8'। 
  • ডেটা সংগ্রহের জন্য লুপ পরে, data_buffer ভেরিয়েবলে সংরক্ষিত ডেটা SD কার্ডের CSV ফাইলে লিখতে 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 Write Error")
    else:
        brain.screen.print("Data Written")


    দ্রষ্টব্য: brain.sdcard.savefile() ফাংশনটি ফাইলে লেখা বাইটের সংখ্যা ফেরত দেয় এই প্রকল্পে, আমরা একটি CSV ফাইলে সংগৃহীত ডেটা লিখতে এটি ব্যবহার করি, তাই ফাইলটিতে লেখা বাইটের সংখ্যা অবশ্যই শূন্যের বেশি হতে হবে। অন্য কথায়, যদি brain.sdcard.savefile() ফাংশনটি রিটার্ন করে, আমরা এই সিদ্ধান্তে আসতে পারি যে ডেটা সফলভাবে ফাইলে লেখা হয়নি। অন্যথায়, ডেটাটি ফাইলে লেখা হয়েছে।

অভিনন্দন! আমরা একটি ডেটা লগিং প্রজেক্ট তৈরি করেছি যা VEX IQ Brain (2nd gen) দিয়ে ত্বরণ ডেটা সংগ্রহ করে এবং SD কার্ডে একটি CSV ফাইলে সংরক্ষণ করে। এর পরে, আমরা ডেটা বিশ্লেষণের জন্য CSV ফাইলটি কীভাবে খুলতে হয় তা অন্বেষণ করব। 

# লাইব্রেরি ইম্পোর্ট
from vex import *

# 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 কার্ড ঢোকানো না থাকলে প্রোগ্রামটি থামিয়ে রাখবে
if not brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("SD Card Missing")
    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 Write Error")
else:
    brain.screen.print("Data Written")

 

ডেটা বিশ্লেষণের জন্য CSV ফাইল খোলা হচ্ছে

একবার SD কার্ডে CSV ফাইলে ডেটা লেখা হয়ে গেলে, আমরা ডেটা পড়ার এবং বিশ্লেষণের জন্য ফাইলটি খুলতে একটি স্প্রেডশীট অ্যাপ্লিকেশন ব্যবহার করতে পারি। 

দ্রষ্টব্য: সর্বাধিক সাধারণ স্প্রেডশীট অ্যাপ্লিকেশনগুলির মধ্যে দুটি হল গুগল শীট এবং মাইক্রোসফ্ট এক্সেল। এই নিবন্ধে, আমরা SD কার্ডে CSV ফাইল খুলতে Google পত্রক (ওয়েব-ভিত্তিক) ব্যবহার করব। অন্যান্য অ্যাপ্লিকেশন ব্যবহার করার প্রক্রিয়া একই রকম।

  • VEX IQ Brain এর SD কার্ড স্লট থেকে SD কার্ডটি সরান৷ যদি কম্পিউটারে একটি বিল্ট-ইন মাইক্রো এসডি কার্ড স্লট থাকে, তাহলে আমরা সরাসরি সেই স্লটে এসডি কার্ড ঢোকাতে পারি। অন্যথায়, একটি SD কার্ড অ্যাডাপ্টারে SD কার্ডটি ঢোকান এবং তারপরে অ্যাডাপ্টারটিকে কম্পিউটারে সংযুক্ত করুন৷ 
  • আমাদের Google অ্যাকাউন্টে লগ ইন করুন এবং Google পত্রক খুলুন। একটি নতুন স্প্রেডশীট তৈরি করুন।
  • স্প্রেডশীটে, "ফাইল" মেনু খুলুন, "আমদানি" -> "আপলোড" -> "ব্রাউজ করুন" বোতাম নির্বাচন করুন, তারপরে কম্পিউটারে CSV ফাইলটি চয়ন করুন। CSV ফাইলটি আপলোড করার পরে, "আমদানি ডেটা" বোতামে ক্লিক করুন। ডেটা ইম্পোর্ট করার পর, CSV ফাইলে সংগৃহীত ডেটা দেখতে “খুলুন” এ ক্লিক করুন।

    প্রজেক্টের CSV ডেটা একটি গুগল শিটস ডকুমেন্টে খোলা হয়েছে। এখানে সময়, X, Y, এবং Z লেখা চারটি কলাম আছে। এখানে ডেটার অনেকগুলো সারি রয়েছে যা প্রতিটি টাইম স্ট্যাম্পে ত্বরণকে নথিভুক্ত করে।

  • (ঐচ্ছিক) ডেটা বিশ্লেষণ করার একটি সহজ উপায় হল একটি গ্রাফ আঁকা, এবং তারপর ডেটার প্রবণতাগুলি সন্ধান করা৷ স্প্রেডশীটে, "সন্নিবেশ" মেনু খুলুন এবং CSV ফাইলের ডেটা ব্যবহার করে একটি গ্রাফ আঁকার জন্য "চার্ট" নির্বাচন করুন। নিম্নলিখিত গ্রাফটি VEX IQ Brain (২য় প্রজন্ম) দিয়ে সংগৃহীত ত্বরণ ডেটার ফলাফল।

    গুগল শিটসে ডেটার একটি চার্ট খোলা হয়েছে, যেখানে সময়ের সাথে সাথে X, Y এবং Z অক্ষের ত্বরণ দেখানো হচ্ছে। Z-এর মান ঋণাত্মক একের কাছাকাছি থাকে এবং X ও Y-এর মান শূন্যের কাছাকাছি থাকে।


    দ্রষ্টব্য: আমরা চার্ট এডিটর ব্যবহার করে একটি ভিন্ন চার্ট টাইপ নির্বাচন করতে বা আমাদের প্রয়োজন অনুযায়ী চার্টটি সম্পাদনা করতে পারি।

এই মুহুর্তে, আমরা ডেটা লগিং প্রকল্পটি শেষ করেছি যা VEX IQ Brain (2nd gen) দিয়ে ডেটা সংগ্রহ করে এবং SD কার্ডে একটি CSV ফাইলে সংরক্ষণ করে। এছাড়াও, আমরা শিখেছি কিভাবে Google পত্রক ব্যবহার করে SD কার্ডে CSV ফাইল পড়তে হয় এবং এমনকি আরও বিশ্লেষণের জন্য একটি গ্রাফ তৈরি করতে হয়। এরপর কী? আসুন আমরা ডেটা লগিংয়ের জন্য VEX রোবট ব্যবহার করে আরও উত্তেজনাপূর্ণ পরীক্ষার পরিকল্পনা করার চেষ্টা করি, পরিবর্তিত পরিবেশগত কারণগুলি কীভাবে বিভিন্ন ধরণের ডেটাকে প্রভাবিত করে তা পর্যবেক্ষণ করতে এবং আমাদের চারপাশের বিশ্ব সম্পর্কে গভীরভাবে বোঝার চেষ্টা করি।

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

Last Updated: