Arduino এবং MPU6050 ভিত্তিক ডিজিটাল স্পিরিট লেভেল: 3 ধাপ
Arduino এবং MPU6050 ভিত্তিক ডিজিটাল স্পিরিট লেভেল: 3 ধাপ
Anonim
Image
Image
সার্কিট
সার্কিট

আমার প্রথম কখনও নির্দেশযোগ্য স্বাগতম! আমি আশা করি আপনি এটি তথ্যপূর্ণ পাবেন। ইতিবাচক বা নেতিবাচক মতামত জানান নির্দ্বিধায়।

এই প্রকল্পটি একটি arduino এবং MPU6050 ভিত্তিক ডিজিটাল স্পিরিট লেভেল তৈরি করা। যদিও সমাপ্ত নকশা এবং কোডটি আমার, মূল ধারণা এবং আমি যে কোড থেকে কাজ করেছি তার বেশিরভাগই নয়। আমি চুরি চর্চায় নই, তাই আমি যাদের ধারণা তৈরি করেছি তাদের কৃতিত্ব দিতে আমি বেশি খুশি। ইউটিউবারের পল ম্যাকওয়ার্টার এবং ড্রোনবট ওয়ার্কশপ যে 2 জনকে আমি চিৎকার করতে চাই। আমি আমার ইউটিউব দরকারী লিঙ্ক PDF এ তাদের লিঙ্ক অন্তর্ভুক্ত। বহিরাগত লাইব্রেরি ছাড়াই মডিউল থেকে সেটআপ এবং পড়া সহ MPU6050 ব্যবহার করার বিষয়ে তার তথ্যবহুল ভিডিওর জন্য EEEnthusiast কে ধন্যবাদ।

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

আপনার ক্ষুধা মেটাতে কিছু বৈশিষ্ট্য:

পিচ এবং রোল কোণ একটি ডিগ্রির 0.1 এর মধ্যে উপলব্ধ।

গাইরো ইউনিটের ওরিয়েন্টেশনের স্বয়ংক্রিয় সনাক্তকরণ (অনুভূমিক বা উল্লম্ব)

ফলাফল সহ সম্পূর্ণ ক্রমাঙ্কন স্বয়ংক্রিয়ভাবে eeprom এ সংরক্ষিত

LED ইঙ্গিত -2 থেকে +2 ডিগ্রী (কোড পরিবর্তনযোগ্য)

স্তরের অতিরিক্ত শ্রবণযোগ্য ইঙ্গিত (ফ্লাইতে চালু/বন্ধ করা যেতে পারে)

কমপ্যাক্ট কার্কুটের জন্য ন্যূনতম উপাদান প্রয়োজন

চল শুরু করি.

সরবরাহ

এই প্রকল্প (যেমন আছে) নিম্নলিখিত আইটেম ব্যবহার করে:

1 এক্স Arduino ন্যানো (আমার একটি ক্লোন)

1 x MPU6050 গাইরো/অ্যাকসিলরোমিটার মডিউল

1 x LCD - 16 x 2 + I2C সংযোগ

সুইচ করতে 1 এক্স পুশ করুন

1 এক্স পাইজো বুজার

1 x সবুজ LED

2 x হলুদ LED এর

2 x লাল LED এর

5 x 220 ওহম প্রতিরোধক

বিভিন্ন জাম্পার ক্যাবল

ব্রেডবোর্ড

পাওয়ার সাপ্লাই (আমার পিসিতে সংযুক্ত না হলে আমার একটি 5v ইউএসবি পাওয়ার ব্যাঙ্ক ব্যবহার করা হয়েছে, কিন্তু আপনি যথাযথভাবে সংযুক্ত ব্যাটারি ব্যবহার করতে পারেন)

ধাপ 1: সার্কিট

সার্কিট
সার্কিট
সার্কিট
সার্কিট

আপনার সমস্ত উপাদান আছে বলে ধরে নিলে, আপনাকে আপনার ব্রেডবোর্ড তৈরি করতে হবে।

আমি গাইড হিসাবে আমার সেটআপ দেখাই, কিন্তু সংযোগগুলি নিম্নরূপ:

Arduino পিন D2 ধাক্কা সুইচের 1 পাশে সংযোগ করে। ধাক্কা সুইচের অন্য দিকটি মাটিতে সংযুক্ত

Arduino পিন D3 220 ohm প্রতিরোধকের 1 পাশে সংযুক্ত করে। প্রতিরোধকের অন্য দিকটি লাল LED এর অ্যানোডের সাথে সংযুক্ত। লাল এলইডি ক্যাথোড মাটিতে চলে যায়।

Arduino পিন D4 220 ohm প্রতিরোধকের 1 পাশে সংযুক্ত করে। প্রতিরোধকের অন্য দিক হলুদ LED এর অ্যানোডের সাথে সংযোগ স্থাপন করে। হলুদ এলইডি ক্যাথোড মাটিতে যায়।

Arduino পিন D5 220 ওহম প্রতিরোধকের 1 পাশে সংযুক্ত করে। প্রতিরোধকের অন্য দিকটি সবুজ LED এর অ্যানোডের সাথে সংযুক্ত। সবুজ LED এর ক্যাথোড মাটিতে চলে যায়।

Arduino পিন D6 220 ohm প্রতিরোধকের 1 পাশে সংযুক্ত করে। প্রতিরোধকের অন্য দিক হলুদ LED এর অ্যানোডের সাথে সংযোগ স্থাপন করে। হলুদ এলইডি ক্যাথোড মাটিতে যায়।

Arduino পিন D7 220 ohm প্রতিরোধকের 1 পাশে সংযুক্ত করে। প্রতিরোধকের অন্য দিকটি লাল LED এর অ্যানোডের সাথে সংযুক্ত। লাল এলইডি ক্যাথোড মাটিতে চলে যায়।

Arduino পিন D8 Piezo buzzer এর এক পাশে সংযুক্ত। বুজারের অন্য দিকটি মাটির সাথে সংযুক্ত।

Arduino পিন A4 MPU6050 এবং LCD- তে SDA পিনের সাথে সংযোগ স্থাপন করে।

আরডুইনো পিন A5 MPU6050 এবং LCD- তে এসসিএল পিনের সাথে সংযুক্ত

MPU6050 এবং LCD এর জন্য 5v শক্তি এবং Gnd যথাক্রমে Arduino Nano 5v এবং GND পিন থেকে আসে।

একবার সম্পূর্ণ হয়ে গেলে, এটি আমার দেখানো সেটআপের অনুরূপ হওয়া উচিত। আমি এমপিইউ 50০৫০ এর নীচে ব্লু টাক রাখি যাতে এটি চলাচল বন্ধ করতে পারে এবং এলসিডিতেও তা ব্রেডবোর্ডের প্রান্তে রাখতে হয়।

ধাপ 2: কোড

সংযুক্ত কোড হল এই কোডটি যা আমি এই প্রকল্পের জন্য ব্যবহার করেছি। একমাত্র লাইব্রেরিতে আপনার সমস্যা হতে পারে

LiquidCrystal_I2C.h লাইব্রেরি হিসাবে আমি এটি আমদানি করেছি যখন আমি প্রথম LCD এর সাথে কাজ শুরু করি। দুর্ভাগ্যক্রমে, কয়েকটি লাইব্রেরি রয়েছে যা একই #অন্তর্ভুক্ত বিবৃতি ব্যবহার করে তবে কিছুটা আলাদা। আপনার যদি আপনার সমস্যা হয়, অন্য LCD কোড খুঁজুন যা আপনার জন্য কাজ করে এবং সেই অনুযায়ী কোড পরিবর্তন করে। এটি শুধুমাত্র সেটআপ হতে পারে যা ভিন্ন। সমস্ত 'মুদ্রণ' কমান্ড একই কাজ করা উচিত।

সমস্ত কোড মন্তব্য করা হয়েছে এবং ধরে নিচ্ছি যে আমি এটি সঠিকভাবে করেছি, সেখানে সবকিছু ব্যাখ্যা করে একটি ভিডিওও থাকবে, তবে এখানে কয়েকটি পয়েন্ট লক্ষ্য করা দরকার:

LiquidCrystal_I2C lcd (0x27, 16, 2);

উপরের কোডটি আমার LCD এর জন্য সেটআপ। যদি আপনার লাইব্রেরি ভিন্ন হয়, তাহলে আপনাকে কেবল আপনার লাইব্রেরি নয়, এই লাইনটিও পরিবর্তন করতে হতে পারে।

{lcd.setCursor (0, 1); lcd.print ("অনুভূমিক!"); অভিমুখ = HORIZONTAL; // MPU-6050 থেকে 1000 বার (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // gyro_x_cal পরিবর্তনশীল gyro_x_cal += gyro_x- এ gyro x অফসেট যোগ করুন; // gyro_y_cal পরিবর্তনশীল gyro_y_cal += gyro_y- এ gyro y অফসেট যোগ করুন; // gyro_z_cal ভেরিয়েবলে gyro_z_cal += gyro_z- এ অফসেট যোগ করুন; // acc_x_cal পরিবর্তনশীল acc_x_cal += acc_x- এ acc x অফসেট যোগ করুন; // acc_y_cal পরিবর্তনশীল acc_y_cal += acc_y- এ acc y অফসেট যুক্ত করুন; } // গড় অফসেট পেতে সব ফলাফল 1000 দিয়ে ভাগ করুন gyro_x_cal /= 1000.0; gyro_y_cal /= 1000.0; gyro_z_cal /= 1000.0; acc_x_cal /= 1000.0; acc_y_cal /= 1000.0; দিগন্তীয় ক্রমাঙ্কন = 255; eeprom_address = 0; EEPROM.put (eeprom_address, দিগন্ত ক্যালিব্রেশন); eeprom_address += sizeof (int); EEPROM.put (eeprom_address, gyro_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (float); // দ্রষ্টব্য আমরা মাধ্যাকর্ষণের কারণে acc_z এর জন্য একটি অফসেট সংরক্ষণ করছি না! বিলম্ব (500); }

কোডের উপরের ব্লক ক্রমাঙ্কন রুটিন চালায়। এই কোডটি অনুভূমিক ক্রমাঙ্কনের জন্য। উল্লম্ব ক্রমাঙ্কনের জন্য কাছাকাছি অভিন্ন কোড রয়েছে (মনে রাখবেন, কোডটি আপনার MPU6050 অনুভূমিকভাবে বা উল্লম্বভাবে মাউন্ট করা আছে কিনা তা জানে!)। MPU6050, 1000 বার পড়া হয়েছে। যথাযথ মানগুলি সংযোজনীয়ভাবে যোগ করা হয় তারপর 1000 দিয়ে ভাগ করলে গড় 'অফসেট' মান পাওয়া যায়। এই মানগুলি তারপর ন্যানো ইপ্রমে সংরক্ষণ করা হয়। সমস্ত অনুভূমিক ক্রমাঙ্কন মানগুলি eeprom ঠিকানা থেকে শুরু করে সংরক্ষণ করা হয়। সমস্ত উল্লম্ব মানগুলি eeprom ঠিকানা 24 এ সংরক্ষণ করা হয়।

/ * * পরবর্তী কয়েকটি লাইন কাঁচা তথ্য প্রক্রিয়া করে এটিকে কোণে পরিণত করে যা LCD এবং LED এর আউটপুট হতে পারে। * 4096 এর মান, যা ত্বরণ তথ্য দ্বারা বিভক্ত করা হয় MPU6050 ডেটশীট থেকে নেওয়া এবং নমুনা হারের উপর ভিত্তি করে। * 9.8 এর মান মাধ্যাকর্ষণ /2/3.141592656 * 360; // কাঁচা তথ্য phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // কাঁচা তথ্য dt = (millis ()-millisOld)/1000.; মিলিস ওল্ড = মিলিস (); / * * এই বিভাগটি সিস্টেমকে আরও প্রতিক্রিয়াশীল করার জন্য গাইরো ডেটা ব্যবহার করে 65.5)*dt)*.96 + thetaM*.04; // নিম্ন পাস ফিল্টার phi = (phi + (gyro_x/65.5)*dt)*। 96 + phiM*.04; // নিম্ন পাস ফিল্টার

উপরের কোডটি এমন জিনিস যা কোণ গণনা করে। আশা করি মন্তব্যগুলি এটি কীভাবে কাজ করে সে সম্পর্কে একটু অন্তর্দৃষ্টি দেয়, কিন্তু গভীরভাবে ব্যাখ্যা করার জন্য, সংযুক্ত পিডিএফ -এ সংযুক্ত পল ম্যাকওয়ার্টার্স ভিডিওটি দেখুন। আমি যা বলব তা হল আপনি গাইরো এবং অ্যাকসিলরোমিটারের নমুনা হার পরিবর্তন করতে পারেন (যা আমার কোডের নীচে সেটআপ MPU6050 সাবরুটিনে করা হয়)। আপনি যদি নমুনার হার পরিবর্তন করেন, তাহলে আপনাকে কাঁচা ডেটা কত ভাগে ভাগ করতে হবে তাও পরিবর্তন করতে হবে। অ্যাকসিলরোমিটার ডেটার জন্য, বর্তমান মান 4096। গাইরোর জন্য, বর্তমান মান 65.5।

স্যাম্পলিং এবং অফসেট মানগুলি কীভাবে পাওয়া যায় সে সম্পর্কে আরও বিস্তারিত তথ্যের জন্য EEEntusiast (সংযুক্ত পিডিএফ -এ লিঙ্ক) দ্বারা সংযুক্ত ডেটা শীট এবং ভিডিওটি দেখুন।

ধাপ 3: পরবর্তী পদক্ষেপ

এই মুহুর্তে আশা করা যায় এই প্রকল্পটি তৈরি করা হবে, কিন্তু এখন কি?

প্রথমত, কেন আপনি এটি ব্যবহার করতে পারেন এমন একটি আত্মিক স্তরে তৈরি করবেন না। আপনি একটি সস্তা স্পিরিট লেভেল কিনতে পারেন (নিশ্চিত করুন যে এটি বক্সের ধরন) যা আপনি মানিয়ে নিতে পারেন, অথবা যদি আপনার কিট থাকে তবে আপনার নিজের লেভেল/বক্স প্রিন্ট করুন।

সম্ভবত গাইরো এবং অ্যাকসিলরোমিটারের নমুনার হারের সাথে একটি খেলা আছে যাতে দেখা যায় যে তারা অন্যের চেয়ে এক হারে ভাল কাজ করে কিনা।

কোডটি আরও পরিমার্জিত করার চেষ্টা করুন। উদাহরণস্বরূপ, বর্তমানে, 45 ডিগ্রী অতিক্রম, বর্ণিত কোণ অন্তত বলতে মোটামুটি। এটা কাছাকাছি একটি উপায় আছে?

যদি আপনার কোন প্রশ্ন থাকে, সেগুলি যতই সহজ মনে হোক না কেন, দয়া করে জিজ্ঞাসা করুন। যদি আমি সাহায্য করতে পারি, আমি করব।

যদি আপনি এই নির্দেশযোগ্য পছন্দ করেন, দয়া করে এটি একটি লাইক দিন, যাতে আমি জানি।

যদি আপনি এটি তৈরি করেন, দয়া করে আমাকে দেখান (বিশেষত যদি এটি একটি কাজের ক্ষেত্রে হয়)।

ধন্যবাদ

প্রস্তাবিত: