परिचय
इस लेख में, हम चर्चा करेंगे कि डेटा लॉगिंग प्रोजेक्ट कैसे बनाया जाए जो VEX रोबोट को VEX ब्रेन के साथ डेटा एकत्र करने और डेटा विश्लेषण के लिए इसे SD कार्ड पर CSV फ़ाइल में सहेजने का निर्देश देता है।
डेटा लॉगिंग एक शक्तिशाली उपकरण है जिसका उपयोग हम वैज्ञानिक अनुसंधान में सहायता करने, अपने स्वयं के प्रयोग करने और विशिष्ट समस्याओं को हल करने के लिए कर सकते हैं। ऐसे कई मजेदार और रोमांचक कार्य हैं जिन्हें हम डेटा लॉगिंग के साथ पूरा करने के लिए VEX रोबोट को चला सकते हैं। निम्नलिखित कुछ उदाहरण हैं:
- रोबोट की गति की गणना करने के लिए दूरी सेंसर के साथ डेटा एकत्र करना।
- कक्षा में रोबोट को चलाना तथा विभिन्न स्थानों पर प्रकाश परिवर्तनों का निरीक्षण करने के लिए ऑप्टिकल सेंसर से डेटा एकत्र करना।
- रोबोट को एक साहसिक यात्रा पर ले जाना तथा मानचित्र बनाने के लिए जीपीएस निर्देशांक डेटा रिकॉर्ड करना।
डेटा लॉगिंग प्रोजेक्ट विकसित करने के लिए आवश्यक कोडिंग कौशल
- VEX ब्रेन/सेंसर के साथ डेटा एकत्र करने और उसे डेटा संरचना में जोड़ने के लिए विभिन्न कमांड का उपयोग करें।
- डेटा को SD कार्ड पर कॉमा-सेपरेटेड वैल्यूज़ (CSV) फ़ाइल में लिखें।
डेटा लॉगिंग के लिए आवश्यक हार्डवेयर:
- एक VEX मस्तिष्क (IQ, V5, EXP)
- एक एसडी कार्ड
- एक सेंसर या एकाधिक सेंसर (वैकल्पिक, आवश्यक डेटा के अनुसार)
सेंसर से डेटा प्राप्त करना
हम VEX रोबोट (IQ, V5, EXP) को निम्नलिखित सेंसरों से डेटा कैप्चर करने के लिए प्रोग्राम कर सकते हैं:
- जड़त्वीय सेंसर
- दूरी सेंसर
- प्रकाशीय संवेदक
- दृष्टि संवेदक
- रोटेशन सेंसर (V5, EXP)
- जीपीएस सेंसर (V5)
नोट: VEX IQ (दूसरी पीढ़ी) ब्रेन और VEX EXP ब्रेन में एक इनर्शियल सेंसर अंतर्निहित है। हम इन VEX ब्रेन्स के साथ इनर्शियल सेंसर डेटा एकत्र कर सकते हैं।
इस लेख में, हम एक डेटा लॉगिंग परियोजना विकसित करेंगे जो VEX IQ ब्रेन (द्वितीय पीढ़ी) के साथ त्वरण डेटा एकत्र करेगा और इसे एक एसडी कार्ड में संग्रहीत करेगा।
सबसे पहले, हमें VEX IQ ब्रेन (द्वितीय पीढ़ी) में निर्मित टाइमर और इनर्शियल सेंसर से रीडिंग प्राप्त करने के लिए एक छोटा प्रोग्राम लिखना होगा।
-
इस कार्यक्रम की शुरुआत में, हमें VEX IQ Brain (2nd gen) को नियंत्रित करने के लिए पायथन मॉड्यूल को आयात करना होगा और उससे डेटा प्राप्त करना होगा। इसलिए, इन निर्देशों को परियोजना में जोड़कर शुरुआत करें।
# लाइब्रेरी आयात vex से आयात * # ब्रेन को डिफ़ॉल्ट रूप से परिभाषित किया जाना चाहिए ब्रेन = ब्रेन() ब्रेन_इनर्टियल = इनर्टियल() -
इसके बाद, रिकॉर्डिंग के लिए डेटा प्रविष्टियों की संख्या संग्रहीत करने के लिए एक चर
numOfDataEntriesघोषित करने के लिए कोड जोड़ें, डेटा पढ़ने के लिए समय अंतराल के मूल्य को संग्रहीत करने के लिए एक चरpolling_delay_msecघोषित करें, और सेंसर से पढ़े गए डेटा को संग्रहीत करने के लिए एक खाली स्ट्रिंग चरdata_bufferबनाएं।numOfDataEntries = 100 polling_delay_msec = 50 data_buffer = "" -
चूंकि हम डेटा में टाइमस्टैम्प जोड़ने के लिए टाइमर के वर्तमान मान का उपयोग करेंगे, इसलिए डेटा एकत्र करना शुरू करने से पहले हमें टाइमर के मान को वापस 0 सेकंड पर रीसेट करना होगा।
# टाइमर आरंभीकरण कोड जोड़ें brain.timer.clear() -
VEX IQ ब्रेन (दूसरा) से डेटा लाने और बफर में डेटा रिकॉर्ड करने वाले निर्देश का उपयोग करने से पहले, हमें पहले इसे समझने की आवश्यकता है।
निम्नलिखित निर्देश वर्तमान टाइमर मान कोdata_bufferचर में एक विशिष्ट प्रारूप में जोड़ता है।आइए प्रारूप स्ट्रिंग
“%1.3f”तोड़ें:- “%”: रूपांतरण निर्दिष्टकर्ता का परिचय देता है।
- “1”: स्ट्रिंग में मौजूद अंकों की न्यूनतम संख्या को इंगित करता है।
- “.3”: स्वरूपित संख्या में शामिल करने के लिए दशमलव स्थानों की संख्या निर्दिष्ट करता है।
- “f”: यह दर्शाता है कि स्वरूपित किया जाने वाला मान एक फ़्लोटिंग-पॉइंट संख्या है।
इस प्रकार, हम एक फ्लोटिंग-पॉइंट संख्या को न्यूनतम 1 अंक की चौड़ाई और 3 दशमलव स्थानों की परिशुद्धता के साथ प्रारूपित करने के लिए प्रारूप स्ट्रिंग “%1.3f” का उपयोग कर सकते हैं।
-
अब, हम VEX IQ ब्रेन (द्वितीय पीढ़ी) में निर्मित इनर्शियल सेंसर के टाइमर और त्वरण मान को पढ़ सकते हैं और फिर निर्दिष्ट प्रारूप में डेटा को
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"नोट: “\n” नई लाइन वर्ण है। यह इंगित करता है कि लाइन यहां समाप्त होती है और एक नई लाइन की शुरुआत होती है।
-
फिर,
data_bufferचर में डेटा प्रविष्टियों की एक निश्चित संख्या को रिकॉर्ड करने के लिए, हमfor loopका उपयोग करके उन निर्देशों को बार-बार निष्पादित कर सकते हैं जो डेटा को लाते हैं और डेटा को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"
-
अब तक हमारा कार्यक्रम यथासंभव शीघ्रता से डेटा रिकॉर्ड करता है। हालाँकि, हम विशिष्ट समय अंतराल पर डेटा रिकॉर्ड करना चाहते हैं। इसलिए, हम दो रीडिंग के बीच विशिष्ट समय अंतराल जोड़ने के लिए प्रोग्राम को रोकने के लिए
फॉर लूपमें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 ब्रेन में निर्मित जड़त्वीय सेंसर से रीडिंग (त्वरण डेटा) प्राप्त करने का कार्यक्रम पूरा कर लिया है। इसके बाद, हम यह पता लगाएंगे कि एसडी कार्ड पर डेटा को CSV फ़ाइल में कैसे लिखा जाए।
# लाइब्रेरी आयात
vex से आयात *
# ब्रेन को डिफ़ॉल्ट रूप से परिभाषित किया जाना चाहिए
ब्रेन = ब्रेन()
ब्रेन_इनर्टियल = इनर्टियल()
numOfDataEntries = 100
पोलिंग_डिले_मिलीसेकंड = 50
डेटा_बफर = ""
# टाइमर आरंभीकरण कोड जोड़ें
ब्रेन.टाइमर.क्लियर()
# डेटा जनरेशन
for i in range(0, numOfDataEntries):
# डेटा को बफर में लिखने के लिए कमांड
डेटा_बफर += "%1.3f" % ब्रेन.टाइमर.वैल्यू() + "\n"
डेटा_बफर += "%1.3f" % ब्रेन_इनर्टियल.एक्सेलरेशन(XAXIS) + ","
डेटा_बफर += "%1.3f" % ब्रेन_इनर्टियल.एक्सेलरेशन(YAXIS) + ","
डेटा_बफर += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(polling_delay_msec, MSEC)एसडी कार्ड को VEX ब्रेन से जोड़ना
एसडी कार्ड पर फ़ाइल में डेटा लिखने से पहले, एसडी कार्ड को पहले VEX ब्रेन के एसडी कार्ड स्लॉट में डालें।
नोट: डेटा लेखन के लिए SD कार्ड को FAT32 में फ़ॉर्मेट करें। हम 32GB या उससे कम आकार वाले SD कार्ड का उपयोग करने की सलाह देते हैं।
यह सुनिश्चित करने के लिए कि एसडी कार्ड पर फ़ाइल में डेटा लिखना उचित परिस्थितियों में किया जा सकता है, हमें यह जांचने के लिए कोड जोड़ने की आवश्यकता होगी कि क्या एसडी कार्ड VEX IQ ब्रेन (द्वितीय पीढ़ी) में ठीक से डाला गया है।
-
यह जांचने के लिए कि क्या SD कार्ड डाला गया है,
brain.sdcard.is_inserted()फ़ंक्शन का उपयोग करें। यदि SD कार्ड नहीं डाला गया है, तो VEX IQ ब्रेन स्क्रीन पर संबंधित संदेश प्रदर्शित करें और प्रोग्राम को दबाए रखें।# यदि एसडी कार्ड नहीं डाला गया है तो प्रोग्राम को रोकें यदि brain.sdcard.is_inserted() नहीं है: brain.screen.set_cursor(1,1) brain.screen.print("एसडी कार्ड गायब है") जबकि (सत्य): प्रतीक्षा करें(5, एमएसईसी)
नोट:brain.sdcard.is_inserted() फ़ंक्शन True लौटाता है यदि ब्रेन में SD कार्ड डाला गया है
SD कार्ड पर डेटा को CSV फ़ाइल में लिखना
अब तक, हमारा कार्यक्रम VEX IQ ब्रेन (द्वितीय पीढ़ी) के साथ डेटा एकत्र कर सकता है। डेटा लॉगिंग परियोजना को पूरा करने के लिए, हमें भविष्य में जांच और विश्लेषण के लिए डेटा को एसडी कार्ड पर कॉमा-सेपरेटेड वैल्यूज़ (सीएसवी) फ़ाइल में लिखना होगा।
-
CSV फ़ाइल में विभिन्न प्रकार के डेटा लिखते समय, हम यह जानना चाहते हैं कि प्रत्येक कॉलम में किस प्रकार का डेटा है। ऐसा करने के लिए, डेटा रिकॉर्ड करने से पहले हम CSV हेडर टेक्स्ट को
में जोड़ सकते हैं।
प्रकार, 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)
-
एसडी कार्ड पर फ़ाइल में डेटा लिखने से पहले, आइए पहले यह समझें कि
brain.sdcard.savefile()फ़ंक्शन का उपयोग कैसे करें।
यह निर्देश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' है।
-
-
डेटा संग्रहण के लिए
फॉर लूपके बाद,brain.sdcard.savefile()फ़ंक्शन का उपयोग करके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("एसडी राइट एरर") else: brain.screen.print("डेटा लिखा गया")
नोट:brain.sdcard.savefile()फ़ंक्शन फ़ाइल में लिखे गए बाइट्स की संख्या लौटाता है। इस परियोजना में, हम इसका उपयोग एकत्रित डेटा को CSV फ़ाइल में लिखने के लिए करते हैं, इसलिए फ़ाइल में लिखे गए बाइट्स की संख्या शून्य से अधिक होनी चाहिए। दूसरे शब्दों में, यदि brain.sdcard.savefile() फ़ंक्शनलौटाता है,हम यह निष्कर्ष निकाल सकते हैं कि डेटा फ़ाइल में सफलतापूर्वक नहीं लिखा गया है। अन्यथा, डेटा फाइल में लिखा जा चुका है।
बधाई हो! हमने एक डेटा लॉगिंग परियोजना विकसित की है जो VEX IQ ब्रेन (द्वितीय पीढ़ी) के साथ त्वरण डेटा एकत्र करती है और इसे SD कार्ड पर CSV फ़ाइल में संग्रहीत करती है। आगे, हम यह पता लगाएंगे कि डेटा विश्लेषण के लिए CSV फ़ाइल कैसे खोलें।
# लाइब्रेरी आयात
vex से आयात *
# ब्रेन डिफ़ॉल्ट रूप से परिभाषित होना चाहिए
ब्रेन = ब्रेन()
ब्रेन_इनर्टियल = इनर्टियल()
csvHeaderText = "समय, x, y, z"
sd_file_name = "myDataPY.csv"
पोलिंग_डिले_मिलीसेकंड = 50
numOfDataEntries = 100
डेटा_बफर = ""
# यदि SD कार्ड नहीं डाला गया है तो प्रोग्राम को रोकें
यदि brain.sdcard.is_inserted() नहीं है:
ब्रेन.स्क्रीन.सेट_कर्सर(1,1)
ब्रेन.स्क्रीन.प्रिंट("SD कार्ड गायब है")
जबकि(सही):
प्रतीक्षा करें(5, एमएसईसी)
# कोई भी सेंसर जोड़ें & टाइमर आरंभीकरण कोड यहां
ब्रेन.टाइमर.क्लियर()
# CSV हेडर बनाएं
डेटा_बफर = 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 राइट एरर")
else:
brain.screen.print("डेटा लिखा गया")
डेटा विश्लेषण के लिए CSV फ़ाइल खोलना
एक बार जब डेटा को SD कार्ड पर CSV फ़ाइल में लिख दिया जाता है, तो हम डेटा को पढ़ने और उसका विश्लेषण करने के लिए फ़ाइल को खोलने के लिए स्प्रेडशीट एप्लिकेशन का उपयोग कर सकते हैं।
नोट: सबसे आम स्प्रेडशीट अनुप्रयोगों में से दो हैं गूगल शीट्स और माइक्रोसॉफ्ट एक्सेल। इस लेख में, हम SD कार्ड पर CSV फ़ाइल खोलने के लिए Google शीट्स (वेब-आधारित) का उपयोग करेंगे। अन्य अनुप्रयोगों का उपयोग करने की प्रक्रिया समान है।
- VEX IQ Brain के SD कार्ड स्लॉट से SD कार्ड निकालें। यदि कंप्यूटर में अंतर्निहित माइक्रो एसडी कार्ड स्लॉट है, तो हम एसडी कार्ड को सीधे उस स्लॉट में डाल सकते हैं। अन्यथा, एसडी कार्ड को एसडी कार्ड एडाप्टर में डालें और फिर एडाप्टर को कंप्यूटर से कनेक्ट करें।
- अपने Google खाते में लॉग इन करें और Google शीट्स खोलें। एक नई स्प्रेडशीट बनाएं.
-
स्प्रेडशीट में, “फ़ाइल” मेनू खोलें, “आयात करें” -> “अपलोड करें” -> “ब्राउज़ करें” बटन का चयन करें, फिर कंप्यूटर पर CSV फ़ाइल चुनें। CSV फ़ाइल अपलोड करने के बाद, “डेटा आयात करें” बटन पर क्लिक करें। डेटा आयात करने के बाद, एकत्रित डेटा को CSV फ़ाइल में देखने के लिए “अभी खोलें” क्लिक करें।
-
(वैकल्पिक) डेटा का विश्लेषण करने का एक आसान तरीका है एक ग्राफ बनाना और फिर डेटा में रुझान देखना। स्प्रेडशीट में, “सम्मिलित करें” मेनू खोलें और CSV फ़ाइल में डेटा का उपयोग करके ग्राफ़ बनाने के लिए “चार्ट” चयन करें। निम्नलिखित ग्राफ VEX IQ ब्रेन (दूसरी पीढ़ी) से एकत्रित त्वरण डेटा का परिणाम है।
नोट: हम चार्ट संपादक का उपयोग करके अलग चार्ट प्रकार का चयन कर सकते हैं या अपनी आवश्यकताओं के अनुसार चार्ट को संपादित कर सकते हैं।
इस बिंदु तक, हमने डेटा लॉगिंग परियोजना पूरी कर ली है जो VEX IQ ब्रेन (द्वितीय पीढ़ी) के साथ डेटा एकत्र करती है और इसे SD कार्ड पर CSV फ़ाइल में सहेजती है। इसके अलावा, हमने यह भी सीखा कि गूगल शीट्स का उपयोग करके एसडी कार्ड पर सीएसवी फ़ाइल को कैसे पढ़ा जाए और आगे के विश्लेषण के लिए ग्राफ भी कैसे बनाया जाए। आगे क्या? आइए, डेटा लॉगिंग के लिए VEX रोबोट का उपयोग करते हुए अधिक रोमांचक प्रयोगों की योजना बनाने का प्रयास करें, ताकि यह देखा जा सके कि बदलते पर्यावरणीय कारक विभिन्न प्रकार के डेटा को किस प्रकार प्रभावित करते हैं, तथा हमारे आसपास की दुनिया के बारे में गहरी समझ प्राप्त की जा सके।