সুচিপত্র:

আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম MPU-6050/A0 ডেটা লগিং: 7 টি ধাপ (ছবি সহ)
আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম MPU-6050/A0 ডেটা লগিং: 7 টি ধাপ (ছবি সহ)

ভিডিও: আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম MPU-6050/A0 ডেটা লগিং: 7 টি ধাপ (ছবি সহ)

ভিডিও: আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম MPU-6050/A0 ডেটা লগিং: 7 টি ধাপ (ছবি সহ)
ভিডিও: What is Arduino? | আরডুইনো কী? | Basic Electronics #06 | 2024, নভেম্বর
Anonim
আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম এমপিইউ -6050/এ 0 ডেটা লগিং
আরডুইনো এবং অ্যান্ড্রয়েডের সাথে রিয়েলটাইম এমপিইউ -6050/এ 0 ডেটা লগিং

আমি মেশিন লার্নিং এর জন্য Arduino ব্যবহার করতে আগ্রহী। প্রথম ধাপ হিসাবে, আমি একটি অ্যান্ড্রয়েড ডিভাইসের সাথে একটি রিয়েলটাইম (বা এর খুব কাছাকাছি) ডেটা প্রদর্শন এবং লগার তৈরি করতে চাই। আমি MPU-6050 থেকে অ্যাকসিলরোমিটার ডেটা ক্যাপচার করতে চাই তাই আমি HC-05 ব্যবহার করে 115200 বডিতে বিল্ড ডিজাইন করেছি। এই কনফিগারেশনের মাধ্যমে 4 টি চ্যানেল ডেটা প্রতি সেকেন্ডে 250 টি নমুনায় প্রেরণ করা যায়।

বিল্ডের কয়েকটি ধাপ রয়েছে:

  • Shাল বা ব্রেডবোর্ড তৈরি করুন
  • Arduino প্রোগ্রাম করুন
  • গুগল প্লে থেকে অ্যান্ড্রয়েড অ্যাপটি লোড করুন বা গিটহাব শাখা করুন এবং এটি নিজেই সংকলন করুন
  • এমপিইউ -6050 কে এমন কিছু আকর্ষণীয় করে তুলুন যা কম্পন করে (আমি একটি আর/সি গাড়ি ব্যবহার করেছি)
  • Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন
  • ডেটা প্লট করুন, আগ্রহী হলে সেভ করুন
  • আরও ব্যবহারের জন্য পাইথন (বা অন্যান্য প্ল্যাটফর্ম) এ আমদানি করুন

চল শুরু করি!

ধাপ 1: শিল্ড/ব্রেডবোর্ড তৈরি করুন

শিল্ড/ব্রেডবোর্ড তৈরি করুন
শিল্ড/ব্রেডবোর্ড তৈরি করুন
শিল্ড/ব্রেডবোর্ড তৈরি করুন
শিল্ড/ব্রেডবোর্ড তৈরি করুন

এটি Arduino, HC-05, এবং MPU-6050 এর জন্য তারের চিত্র। MPU-6050 ছাড়াও আমার কাছে এনালগ ইনপুট A0 একটি হালকা সেন্সরের সাথে যুক্ত করে দেখায় যে ADC কাজ করছে। কোন 0-5 ভোল্ট সংকেত A0 এডিসিতে আনা যেতে পারে। এই উপাদানগুলি আমি নির্মাণের জন্য ব্যবহার করেছি:

  • আরডুইনো উনো
  • HC-05 (HC-06 খুব কাজ করা উচিত, কিন্তু আমার বিল্ড HC-05 এর সাথে ছিল)
  • এমপিইউ -6050
  • স্পার্কফুন ফটোরিসিস্টর
  • 10kOhm প্রতিরোধক (বাদামী-কালো-কমলা)

বেশিরভাগ HC-05 ব্লুটুথ মডিউল 9600 বডিতে ডিফল্ট। সফলভাবে ডেটা প্রেরণের জন্য আপনাকে 115200 বড রেটের জন্য এটি পুনরায় প্রোগ্রাম করতে হবে। একটি ভাল HC-05/HC-06 AT কমান্ড ইন্সট্রাকটেবল আছে যা ব্যাখ্যা করে কিভাবে এটি করতে হয়।

ধাপ 2: Arduino প্রোগ্রাম করুন

Arduino প্রোগ্রাম করুন
Arduino প্রোগ্রাম করুন
Arduino প্রোগ্রাম করুন
Arduino প্রোগ্রাম করুন

আমি Arduino প্রোগ্রাম করার জন্য Arduino IDE রিলিজ 1.6.7 ব্যবহার করেছি। এই ধাপে লিঙ্কগুলি থেকে বা গিটহাব রেপো থেকে কোড ডাউনলোড করা যাবে। আমি তিনটি সংস্করণ অন্তর্ভুক্ত করেছি: Firmware125.ino হল 125 হার্টজ সংস্করণ, Firmware250.ino হল 250 হার্টজ সংস্করণ, এবং Firmware500.ino হল 500 হার্টজ সংস্করণ। 500 হার্টজ এ Arduino সাইকেল পেতে, A0 ADC সংগ্রহ করা হয় না।

ফার্মওয়্যারে পিন 9 -এ একটি ঘড়ি রয়েছে যা আমি সময় পরীক্ষা করার জন্য ব্যবহার করতাম। ট্রেস দেখায় চক্রের সময় 4 এমএস (1/250 হার্টজ সমতুল্য)। আমি দেখেছি যে যদি সিরিয়াল লিঙ্ক সমস্যা থাকে তবে সময়টি অভিন্ন হবে না।

Arduino কোড প্রতিটি প্যাকেটে একটি চ্যানেল নম্বর যোগ করার জন্য বিট মাস্কিং ব্যবহার করে কারণ নমুনা কখনও কখনও ব্লুটুথের উপর পড়ে। আমি একটি চ্যানেল নম্বর সংরক্ষণের জন্য তিনটি সবচেয়ে গুরুত্বপূর্ণ বিট ব্যবহার করি। স্বাক্ষরিত পূর্ণসংখ্যার জন্য সবচেয়ে গুরুত্বপূর্ণ বিট (MSB) চিহ্নের জন্য সংরক্ষিত। যেহেতু আমি আমার ঠিকানার জন্য MSB ব্যবহার করতে চাই, পূর্ণসংখ্যার চিহ্নের পরিবর্তে, আমাকে স্বাক্ষরিত অ্যাক্সিলরোমিটারের সমস্ত মানকে স্বাক্ষরবিহীন পূর্ণসংখ্যায় রূপান্তর করতে হবে। আমি প্রতিটি মান 32768 যোগ করে এটা করি

(স্বাক্ষরবিহীন int) ((দীর্ঘ) iAccelData+32767);

প্রতিটি অ্যাকসিলরোমিটার এবং A0 পোর্টের জন্য চ্যানেল নম্বর একই, যাতে চ্যানেল নম্বরগুলি অর্ডার না থাকলে ড্রপ করা প্যাকেট সনাক্ত করা যায়। আরডুইনোতে ব্লুটুথ থেকে আসা প্যাকেটের জন্য, বাইনারি প্যাটার্নটি (লক্ষণগুলি বিট-ভিত্তিক স্থানান্তর):

(xacc 3 ঠিকানা বিট = 0x00, 13bit স্বাক্ষরবিহীন) (yacc 3 ঠিকানা বিট = 0x01, 13bit স্বাক্ষরবিহীন) (zacc 3 ঠিকানা বিট = 0x02, 13bit স্বাক্ষরবিহীন) (3 ঠিকানা বিট = 0x03, iadc13bit স্বাক্ষরবিহীন)

(xacc 3 ঠিকানা বিট = 0x00, 13bit স্বাক্ষরবিহীন) (yacc 3 ঠিকানা বিট = 0x01, 13bit স্বাক্ষরবিহীন) (zacc 3 ঠিকানা বিট = 0x02, 13bit স্বাক্ষরবিহীন) (3 ঠিকানা বিট = 0x03, iadc13bit স্বাক্ষরবিহীন) (xacc 3 ঠিকানা বিট = 0x00, 13bit স্বাক্ষরবিহীন) (yacc 3 ঠিকানা বিট = 0x01, 13bit স্বাক্ষরবিহীন) (zacc 3 ঠিকানা বিট = 0x02, 13bit স্বাক্ষরবিহীন) (3 ঠিকানা বিট = 0x03, iadc13bit স্বাক্ষরবিহীন)…

যদি ব্লুটুথ ডেটা পড়ার জন্য অ্যাকসেল প্লট অ্যান্ড্রয়েড অ্যাপ ছাড়া অন্য কিছু ব্যবহার করা হয়, তাহলে ঠিকানাটি বের করার ধাপগুলি (আমি গিটহাব রেপো থেকে অ্যাকসেল প্লট ব্লুটুথ। জাভা ফাইল থেকে পরিবর্তনশীল নাম ব্যবহার করছি):

- 16 স্বাক্ষরবিহীন int তে পড়ুন

- উচ্চ বাইট নিষ্কাশন করুন এবং এটি btHigh এ সংরক্ষণ করুন।

- কম বাইট নিষ্কাশন করুন এবং এটি btLow এ সংরক্ষণ করুন।

- btHigh ব্যবহার করে ঠিকানা পুনরুদ্ধার করুন: (btHigh >> 5) এবং 0x07। এই বিবৃতিটি তিনটি অ্যাড্রেস বিটকে সর্বনিম্ন তিনটি রেজিস্টারে সরানোর জন্য btHigh 5 বিট ডানদিকে স্থানান্তর করে। & চিহ্নটি একটি যৌক্তিক এবং যা 4 এবং উচ্চতর বিটকে শূন্য হতে বাধ্য করে এবং শেষ তিনটি বিট ঠিকানা বিটের সাথে মেলে। এই বিবৃতির ফলাফল হল আপনার ঠিকানা।

আপনি যদি এক্সেল প্লট ব্যবহার করে থাকেন তাহলে ঠিকানা নিষ্কাশন সম্পর্কে আপনাকে চিন্তা করতে হবে না।

ধাপ 3: গুগল প্লে থেকে অ্যান্ড্রয়েড অ্যাপ লোড করুন বা গিটহাব শাখা করুন

গুগল প্লে থেকে অ্যান্ড্রয়েড অ্যাপ লোড করুন বা গিটহাব শাখা করুন
গুগল প্লে থেকে অ্যান্ড্রয়েড অ্যাপ লোড করুন বা গিটহাব শাখা করুন

আপনার ডিভাইসে অ্যান্ড্রয়েড অ্যাপ লোড করার জন্য আপনার কয়েকটি পছন্দ আছে। আপনি যদি কোডিং এড়াতে চান, আপনি "অ্যাকসেল প্লট" অনুসন্ধান করতে পারেন এবং অ্যাপটি গুগল প্লে স্টোরে আসা উচিত। ইনস্টলেশনের জন্য দোকানের নির্দেশাবলী অনুসরণ করুন।

এই নির্দেশাবলীর সাথে আমার ইচ্ছা সত্যিই অন্যদেরকে প্রকল্প নির্মাণে উৎসাহিত করা তাই আমি কোডটি একটি গিটহাব রেপোতেও প্রকাশ করেছি। আপনি এই শাখা করতে সক্ষম হওয়া উচিত, এটি নির্মাণ, এবং আপনি উপযুক্ত হিসাবে এটি সংশোধন। আমি এমআইটি লাইসেন্সের অধীনে কোডটি প্রকাশ করেছি তাই মজা করুন!

ধাপ 4: আকর্ষণীয় কিছুতে Arduino এর সাথে সংযোগ করুন (আমি একটি R/C গাড়ি ব্যবহার করেছি)

Arduino এর সাথে কিছু আকর্ষণীয় কিছু সংযুক্ত করুন (আমি একটি R/C গাড়ি ব্যবহার করেছি)
Arduino এর সাথে কিছু আকর্ষণীয় কিছু সংযুক্ত করুন (আমি একটি R/C গাড়ি ব্যবহার করেছি)

আমি অবশেষে রাস্তা পৃষ্ঠ সনাক্তকরণের জন্য ডিভাইসটি ব্যবহার করতে চাই তাই আমি ভেবেছিলাম একটি ছোট রিমোট নিয়ন্ত্রিত (R/C) গাড়ি উপযুক্ত হবে। আমি মনে করি এটি পরবর্তী ধাপে সাহায্য করে যদি অ্যাকসেলগুলি এমন কিছুতে থাকতে পারে যা সরানো বা কম্পন করে।

ধাপ 5: Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।

Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।
Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।
Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।
Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।
Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।
Arduino এর সাথে সংযোগ করতে Android ডিভাইস ব্যবহার করুন।

যদি আপনি ইতিমধ্যেই তা না করে থাকেন, তাহলে আপনাকে প্রথমে আপনার Android ডিভাইসে HC-05 যুক্ত করতে হবে। আমি বিশ্বাস করি যে বেশিরভাগ ডিভাইসে আপনি সেটিংসে গিয়ে এটি করতে পারেন। বেশিরভাগ HC-05 ডিভাইসের জন্য ডিফল্ট পিন হবে 1234 বা 1111।

অ্যান্ড্রয়েড ডিভাইসে AccelPlot অ্যাপটি খুলুন। যখন অ্যাপটি খোলে, এবং আপনি HC-05 এর সাথে সংযোগ করার আগে, আপনি নমুনার হার (এটি Arduino কোডে সেট করা আছে), অ্যাকসিলরোমিটার স্কেল (Arduino কোডেও সেট করা আছে), এবং সেভ করা নমুনার সংখ্যা পরিবর্তন করতে পারেন।

এই সেটিংস তৈরি হয়ে গেলে "কানেক্ট" বোতামে ক্লিক করুন। এটি ব্লুটুথ ডিভাইসগুলি নিয়ে আসা উচিত এবং আপনার ডিভাইসটি তালিকাভুক্ত হওয়া উচিত। এটি নির্বাচন করুন এবং একবার কোডটি সংযোগ স্থাপন করলে আপনি একটি "সংযুক্ত" টোস্ট পপ আপ দেখতে পাবেন।

অ্যাকসেল প্লটে ফিরে যাওয়ার জন্য পিছনের তীর বোতামটি ব্যবহার করুন। HC-05 ডিভাইস থেকে ডেটা প্রদর্শন করতে "স্ট্রিম স্টার্ট" বোতামটি আলতো চাপুন। আপনার ডেটা সংরক্ষণ করতে বা অডিও জ্যাকের মাধ্যমে ফ্রিকোয়েন্সি মডুলেটেড সামগ্রী চালানোর জন্য উপলব্ধ বোতামগুলিও থাকা উচিত।

ধাপ 6: ডেটা অর্জন এবং প্লট করুন

Image
Image
আরও ব্যবহারের জন্য পাইথনে (বা অন্যান্য প্ল্যাটফর্ম) আমদানি করুন
আরও ব্যবহারের জন্য পাইথনে (বা অন্যান্য প্ল্যাটফর্ম) আমদানি করুন

"স্ট্রিম স্টার্ট" বোতামটি সক্ষম করা উচিত। স্ক্রিনে ডেটা স্ট্রিমিং শুরু করতে এটি আলতো চাপুন।

"ডেটা সংরক্ষণ করুন" বোতামটিও সক্ষম করা হবে, ডেটা সঞ্চয় করতে এটি আলতো চাপুন।

অ্যাকসেল প্লটে অডিও চ্যানেলগুলিতে একটি মডুলেটেড সিগন্যাল আউটপুট করার বিকল্পও অন্তর্ভুক্ত রয়েছে। অ্যাকসেল প্লট অ্যাপের 2 টি চ্যানেল অ্যান্ড্রয়েড ডিভাইসে অডিও আউট জ্যাকের বাম এবং ডান চ্যানেলগুলি উল্লেখ করে। যদি আপনি একটি জাতীয় যন্ত্রের মতো MPU-6050 ডেটা একটি পৃথক ডেটা লগিং সিস্টেমে আনতে চান তবে এটি কার্যকর।

ভিডিওটি একটি R/C গাড়িতে ডেটা সংগ্রহ করার সিস্টেমের একটি উদাহরণ দেখায়।

ধাপ 7: আরও ব্যবহারের জন্য পাইথনে (বা অন্যান্য প্ল্যাটফর্ম) আমদানি করুন

আরও ব্যবহারের জন্য পাইথনে (বা অন্যান্য প্ল্যাটফর্ম) আমদানি করুন
আরও ব্যবহারের জন্য পাইথনে (বা অন্যান্য প্ল্যাটফর্ম) আমদানি করুন

ফাইলগুলি অ্যান্ড্রয়েড ডিভাইসে সংরক্ষণ করা হয়। অ্যান্ড্রয়েড এপিআই 18 এবং তার বেশি বয়সের জন্য ফাইলগুলি "অ্যাকসেলপ্লট" ডিরেক্টরিতে সংরক্ষণ করা হবে। কোডটি এপিআই 19 (কিটক্যাট 4.4) এবং উচ্চতর জন্য "\ ট্যাবলেট ocu ডকুমেন্টস / অ্যাকসেলপ্লট" ফোল্ডারে.dat ফাইলগুলি রাখে। ইউএসবি -র মাধ্যমে সংযুক্ত হওয়ার সময় কিছু অ্যান্ড্রয়েড ডিভাইসে ফাইল দেখাতে আমার সমস্যা হয়েছে। কিছু কিছু ক্ষেত্রে আমাকে অ্যান্ড্রয়েড ডিভাইসটি দেখানোর জন্য রিবুট করতে হয়েছিল। এটি কেন হয় তা নিশ্চিত নন, তবে প্রতিটি চ্যানেলের জন্য চারটি ফাইল থাকা উচিত। এগুলি অতিরিক্ত কাজের জন্য স্থানীয় ডিরেক্টরিতে অনুলিপি করা যেতে পারে।

আমি ফাইলগুলি খুলতে এবং ডেটা প্রদর্শন করতে অ্যানাকোন্ডা/পাইথন 2.7 ব্যবহার করেছি। "ExploratoryAnalysis.ipynb" ফাইলে IPython নোটবুক ফাইল আছে যা সমস্ত ডেটা ফাইল খুলে নমুনা ডেটা চক্রান্ত করবে। নমুনা ফাইলগুলি গিটহাব রেপোতে অন্তর্ভুক্ত রয়েছে। ডেটা বিগ-এন্ডিয়ান 4 বাইট ফ্লোটস ('> f') হিসাবে সংরক্ষিত হয় তাই যেকোন বিশ্লেষণ প্রোগ্রাম তাদের খুলতে সক্ষম হওয়া উচিত।

আমি "ReadDataFiles.ipynb" নামক একটি সরল ফাইলও অন্তর্ভুক্ত করেছি যা দেখায় কিভাবে একটি একক ফাইলে নাম দিয়ে পড়তে হয়।

প্রস্তাবিত: