সুচিপত্র:

MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে: 5 টি ধাপ
MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে: 5 টি ধাপ

ভিডিও: MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে: 5 টি ধাপ

ভিডিও: MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে: 5 টি ধাপ
ভিডিও: আরডুইনো টিউটোরিয়াল: ভূমিকা, সূচনা করা এবং প্রকল্প তৈরি করা [উপশিরোনাম: সমস্ত ভাষা] 2024, জুলাই
Anonim
MPU 6050 Gyro, Arduino এর সাথে Accelerometer যোগাযোগ (Atmega328p)
MPU 6050 Gyro, Arduino এর সাথে Accelerometer যোগাযোগ (Atmega328p)
MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে
MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে
MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে
MPU 6050 Gyro, অ্যাক্সিডেরোমিটার যোগাযোগ Arduino (Atmega328p) এর সাথে

এমপিইউ 6050 আইএমইউতে 3-অ্যাক্সিস অ্যাকসিলরোমিটার এবং 3-অ্যাক্সিস জাইরোস্কোপ উভয়ই একক চিপে সংহত।

জাইরোস্কোপ X, Y এবং Z অক্ষ বরাবর ঘূর্ণন বেগ বা কৌণিক অবস্থানের পরিবর্তনের হার পরিমাপ করে।

জাইরোস্কোপের আউটপুট প্রতি সেকেন্ডে ডিগ্রিতে থাকে, তাই কৌণিক অবস্থান পেতে আমাদের কেবল কৌণিক বেগ সংহত করতে হবে।

অন্যদিকে, এমপিইউ 6050 অ্যাক্সিলারোমিটার 3 অক্ষ বরাবর মহাকর্ষীয় ত্বরণ পরিমাপ করে ত্বরণ পরিমাপ করে এবং কিছু ত্রিকোণমিতি গণিত ব্যবহার করে আমরা সেন্সরটি যে কোণে অবস্থিত তা গণনা করতে পারি। সুতরাং, যদি আমরা অ্যাকসিলরোমিটার এবং জাইরোস্কোপ ডেটা ফিউজ করি, অথবা একত্রিত করি তাহলে আমরা সেন্সর অভিযোজন সম্পর্কে খুব সঠিক তথ্য পেতে পারি।

3-অক্ষের জাইরোস্কোপ MPU-6050 একটি 3 অক্ষের জাইরোস্কোপ নিয়ে গঠিত যা মাইক্রো ইলেক্ট্রো মেকানিক্যাল সিস্টেম টেকনোলজি (MEMS) দিয়ে x, y, z অক্ষ বরাবর ঘূর্ণন বেগ সনাক্ত করতে পারে। যখন সেন্সরটি কোন অক্ষ বরাবর ঘোরানো হয় তখন একটি কম্পন তৈরি হয় Coriolis প্রভাবের কারণে যা MEMS.16-বিট ADC দ্বারা সনাক্ত করা হয় প্রতিটি অক্ষের নমুনার জন্য ভোল্টেজ ডিজিটাইজ করতে ব্যবহৃত হয়। +/- 250, +/- 500, +/- 1000, +/- 2000 হল আউটপুটের পূর্ণ স্কেল পরিসীমা। প্রতি সেকেন্ড ইউনিটে ডিগ্রীতে প্রতিটি অক্ষ বরাবর কৌণিক বেগ পরিমাপ করা হয়।

দরকারী লিঙ্ক: ……………

আরডুইনো বোর্ড: ………।

MPU6050 IMU ……………

ধাপ 1: MPU-6050 মডিউল

MPU-6050 মডিউল
MPU-6050 মডিউল

MPU-6050 মডিউলে 8 টি পিন রয়েছে,

INT: ডিজিটাল আউটপুট পিন ইন্টারাপ্ট।

AD0: I2C স্লেভ ঠিকানা LSB পিন। এটি ডিভাইসের 7-বিট স্লেভ ঠিকানায় 0 তম বিট। যদি ভিসিসির সাথে সংযুক্ত থাকে তবে এটি যুক্তি হিসাবে পড়ে এবং দাসের ঠিকানা পরিবর্তিত হয়।

এক্সসিএল: অক্জিলিয়ারী সিরিয়াল ক্লক পিন। এই পিনটি অন্যান্য I2C ইন্টারফেস সক্ষম সেন্সর এসসিএল পিনকে MPU-6050 এর সাথে সংযুক্ত করতে ব্যবহৃত হয়।

এক্সডিএ: অক্জিলিয়ারী সিরিয়াল ডেটা পিন। এই পিনটি অন্যান্য I2C ইন্টারফেস সক্ষম সেন্সর SDA পিনকে MPU-6050 এর সাথে সংযুক্ত করতে ব্যবহৃত হয়।

এসসিএল: সিরিয়াল ক্লক পিন। এই পিনটিকে মাইক্রোকন্ট্রোলার এসসিএল পিনের সাথে সংযুক্ত করুন। এসডিএ: সিরিয়াল ডেটা পিন। এই পিনটিকে মাইক্রোকন্ট্রোলার এসডিএ পিনের সাথে সংযুক্ত করুন।

GND: গ্রাউন্ড পিন। এই পিনটিকে গ্রাউন্ড কানেকশনে সংযুক্ত করুন।

ভিসিসি: পাওয়ার সাপ্লাই পিন। এই পিনটি +5V ডিসি সরবরাহের সাথে সংযুক্ত করুন। MPU-6050 মডিউলে রয়েছে স্লেভ অ্যাড্রেস (যখন AD0 = 0, যেমন এটি Vcc- এর সাথে সংযুক্ত নয়), দাস লেখার ঠিকানা (SLA+W): 0xD0

স্লেভ পড়ার ঠিকানা (SLA+R): 0xD1

ধাপ 2: গণনা

হিসাব
হিসাব

MPU6050 মডিউলের Gyroscope এবং Accelerometer সেন্সর ডেটা 2 এর পরিপূরক আকারে 16-বিট কাঁচা ডেটা নিয়ে গঠিত।

MPU6050 মডিউলের তাপমাত্রা সেন্সর ডেটা 16-বিট ডেটা নিয়ে গঠিত (2 এর পরিপূরক আকারে নয়)।

এখন ধরুন আমরা নির্বাচন করেছি,

  • - 16, 384 LSB (কাউন্ট)/g এর সংবেদনশীলতা স্কেল ফ্যাক্টর সহ +/- 2g এর অ্যাকসিলরোমিটার পূর্ণ স্কেল পরিসীমা।
  • - 131 এলএসবি (কাউন্ট)/°/সেকেন্ডের সংবেদনশীলতা স্কেল ফ্যাক্টর সহ +/- 250 °/s এর জিরোস্কোপ পূর্ণ স্কেল পরিসীমা। তারপর,

সেন্সরের কাঁচা তথ্য পেতে, আমাদের প্রথমে অ্যাকসিলরোমিটার এবং জাইরোস্কোপের সেন্সর ডেটাতে 2 এর পরিপূরক কাজ করতে হবে। সেন্সর কাঁচা তথ্য পাওয়ার পর আমরা সেন্সর কাঁচা ডেটাকে তাদের সংবেদনশীলতা স্কেল ফ্যাক্টর দিয়ে ভাগ করে ত্বরণ এবং কৌণিক বেগ গণনা করতে পারি-

অ্যাকসিলরোমিটারের মান g (g বল)

  • এক্স অক্ষ বরাবর ত্বরণ = (অ্যাকসিলরোমিটার এক্স অক্ষ কাঁচা তথ্য/16384) ছ।
  • Y অক্ষ বরাবর ত্বরণ = (Accelerometer Y অক্ষ কাঁচা তথ্য/16384) ছ।
  • Z অক্ষ বরাবর ত্বরণ = (Accelerometer Z axis raw data/16384) g।

জাইরোস্কোপ মান °/সেকেন্ডে (ডিগ্রি প্রতি সেকেন্ড)

  • X অক্ষ বরাবর কৌণিক বেগ = (Gyroscope X অক্ষ কাঁচা তথ্য/131) °/গুলি।
  • Y অক্ষ বরাবর কৌণিক বেগ = (Gyroscope Y অক্ষ কাঁচা তথ্য/131) °/গুলি।
  • Z অক্ষ বরাবর কৌণিক বেগ = (Gyroscope Z অক্ষ কাঁচা তথ্য/131) °/গুলি।

তাপমাত্রা মান °/c (ডিগ্রী প্রতি সেলসিয়াস)

ডিগ্রী C তে তাপমাত্রা = ((তাপমাত্রা সেন্সর ডেটা)/340 + 36.53) °/সি।

উদাহরণ স্বরূপ, ধরুন, 2’পরিপূরক হওয়ার পর আমরা অ্যাকসিলরোমিটার এক্স অক্ষের কাঁচা মান = +15454 পাই

তারপর Ax = +15454/16384 = 0.94 g।

আরো,

সুতরাং আমরা জানি যে আমরা +/- 2G এবং +/- 250deg/s এর সংবেদনশীলতায় চলছি কিন্তু আমাদের মানগুলি কিভাবে এই ত্বরণ/কোণের সাথে সামঞ্জস্যপূর্ণ।

এগুলি উভয়ই সরলরেখার গ্রাফ এবং আমরা তাদের থেকে কাজ করতে পারি যে 1G এর জন্য আমরা 16384 এবং 1 ডিগ্রী/সেকেন্ডের জন্য 131.07 পড়ব (যদিও.07 বাইনারি কারণে উপেক্ষা করা হবে) এই মানগুলি কেবল অঙ্কন করে কাজ করা হয়েছিল 32767 এ 2G এবং -2G এর সাথে সরল রেখার গ্রাফ -32768 এবং 250/-250 একই মানের।

তাই এখন আমরা আমাদের সংবেদনশীলতার মানগুলি জানি (16384 এবং 131.07) আমাদের কেবল আমাদের মান থেকে অফসেটগুলি বিয়োগ করতে হবে এবং তারপরে সংবেদনশীলতার উপর নির্ভর করতে হবে।

এইগুলি X এবং Y মানগুলির জন্য ভাল কাজ করবে কিন্তু যেহেতু Z 1G তে রেকর্ড করা হয়েছিল এবং 0 নয়, আমাদের সংবেদনশীলতা দ্বারা বিভক্ত হওয়ার আগে আমাদের 1G (16384) বন্ধ করতে হবে।

ধাপ 3: MPU6050-Atmega328p সংযোগ

MPU6050-Atmega328p সংযোগ
MPU6050-Atmega328p সংযোগ
MPU6050-Atmega328p সংযোগ
MPU6050-Atmega328p সংযোগ
MPU6050-Atmega328p সংযোগ
MPU6050-Atmega328p সংযোগ

শুধু ডায়াগ্রামে দেওয়া সবকিছুর সাথে সংযোগ করুন …

সংযোগগুলি নিম্নরূপ দেওয়া হল:-

MPU6050 Arduino Nano।

VCC 5v আউট পিন

GND গ্রাউন্ড পিন

এসডিএ এ 4 পিন // সিরিয়াল ডেটা

এসসিএল এ 5 পিন // সিরিয়াল ঘড়ি

পিচ এবং রোল গণনা: রোল হল x- অক্ষের চারদিকে ঘূর্ণন এবং পিচ হল y- অক্ষ বরাবর ঘূর্ণন।

ফলাফল রেডিয়ানে। (180 দ্বারা গুণ করে এবং pi দ্বারা ভাগ করে ডিগ্রীতে রূপান্তর করুন)

ধাপ 4: কোড এবং ব্যাখ্যা

কোড এবং ব্যাখ্যা
কোড এবং ব্যাখ্যা

/*

আরজিনো এবং এমপিইউ 6050 অ্যাকসিলারোমিটার এবং জাইরোস্কোপ সেন্সর টিজোরিয়াল দ্বারা দেজান, https://howtomechatronics.com */#inc const const MPU = 0x68; // MPU6050 I2C ঠিকানা ফ্লোট AccX, AccY, AccZ; ভাসা GyroX, GyroY, GyroZ; ভাসা accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ; ভাসমান রোল, পিচ, ইয়াও; ভাসা AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ; ভাসমান সময়, বর্তমান সময়, আগের সময়; int c = 0; অকার্যকর সেটআপ () {Serial.begin (19200); Wire.begin (); // কমিউনিকেশন Wire.beginTransmission (MPU) আরম্ভ করুন; // MPU6050 // MPU = 0x68 Wire.write (0x6B) এর সাথে যোগাযোগ শুরু করুন; // রেজিস্টার 6B Wire.write (0x00) এর সাথে কথা বলুন; // রিসেট করুন - 6B রেজিস্টারে একটি 0 রাখুন Wire.endTransmission (সত্য); // ট্রান্সমিশন শেষ করুন Wire.write (0x1C); // ACCEL_CONFIG রেজিস্টারে কথা বলুন (1C হেক্স) Wire.write (0x10); // রেজিস্টার বিটগুলিকে 00010000 (+/- 8g পূর্ণ স্কেল পরিসীমা) হিসাবে সেট করুন Wire.endTransmission (true); // Gyro সংবেদনশীলতা কনফিগার করুন - পূর্ণ স্কেল রেঞ্জ (ডিফল্ট +/- 250deg/গুলি) Wire.beginTransmission (MPU); Wire.write (0x1B); // GYRO_CONFIG রেজিস্টারে কথা বলুন (1B হেক্স) Wire.write (0x10); // রেজিস্টার বিটগুলিকে 00010000 (1000deg/s পূর্ণ স্কেল) Wire.endTransmission (true) হিসাবে সেট করুন; বিলম্ব (20); */ // এই ফাংশনটি কল করুন যদি আপনি আপনার মডিউল calc_IMU_error () এর জন্য IMU ত্রুটি মান পেতে চান; বিলম্ব (20); } অকার্যকর লুপ () {// === অ্যাকসিলরোমটার ডেটা পড়ুন === // Wire.beginTransmission (MPU); Wire.write (0x3B); // রেজিস্টার 0x3B (ACCEL_XOUT_H) Wire.endTransmission (মিথ্যা) দিয়ে শুরু করুন; Wire.requestFrom (MPU, 6, true); // মোট 6 টি রেজিস্টার পড়ুন, প্রতিটি অক্ষের মান 2 টি রেজিস্টারে সংরক্ষণ করা হয় // +-2g এর পরিসরের জন্য, ডেটশীট AccX = (Wire.read () << 8 অনুযায়ী 16384 দ্বারা আমাদের কাঁচা মান ভাগ করতে হবে | Wire.read ()) / 16384.0; // এক্স-অক্ষের মান AccY = (Wire.read () << 8 | Wire.read ()) / 16384.0; // Y- অক্ষ মান AccZ = (Wire.read () << 8 | Wire.read ()) / 16384.0; // জেড -অক্ষ মান // অ্যাকসিলরোমিটার ডেটা থেকে রোল এবং পিচ গণনা করে // AccErrorX 0.5 (0.58) বিস্তারিত জানার জন্য calc_IMU_error () কাস্টম ফাংশন দেখুন accAngleY = (atan (-1 * AccX / sqrt (pow (AccY, 2) + pow (AccZ, 2))) 1.58; // AccErrorY ~ (-1.58) // === জিরোস্কোপ ডেটা পড়ুন === // previousTime = currentTime; // পূর্ববর্তী সময় প্রকৃত সময়ের আগে সংরক্ষণ করা হয় currentTime = millis (); // বর্তমান সময় প্রকৃত সময় ইলসেডটাইম = (কারেন্টটাইম - আগের টাইম) / 1000 পড়ুন; // সেকেন্ড Wire.beginTransmission (MPU) পেতে 1000 দিয়ে ভাগ করুন; Wire.write (0x43); // গাইরো ডেটা প্রথমে রেজিস্টার ঠিকানা 0x43 Wire.endTransmission (মিথ্যা); Wire.requestFrom (MPU, 6, true); // মোট 4 টি রেজিস্টার পড়ুন, প্রতিটি অক্ষের মান 2 টি রেজিস্টারে সংরক্ষিত আছে GyroX = (Wire.read () << 8 | Wire.read ()) / 131.0; // একটি 250deg/ s পরিসরের জন্য আমাদের প্রথমে কাঁচা মান 131.0 দ্বারা ভাগ করতে হবে, ডেটশীট অনুযায়ী GyroY = (Wire.read () << 8 | Wire.read ())/ 131.0; GyroZ = (Wire.read () << 8 | Wire.read ()) / 131.0; // গণনা করা ত্রুটি মান GyroX = GyroX + 0.56 দিয়ে আউটপুট সংশোধন করুন; // GyroErrorX ~ (-0.56) GyroY = GyroY - 2; // GyroErrorY ~ (2) GyroZ = GyroZ + 0.79; // GyroErrorZ ~ (-0.8) // বর্তমানে কাঁচা মান প্রতি সেকেন্ডে ডিগ্রী/সেকেন্ডে আছে, তাই আমাদেরকে ডিগ্রিতে কোণ পেতে সেন্ডন্ড (গুলি) দিয়ে গুণ করতে হবে। // deg/s * s = deg gyroAngleY = gyroAngleY + GyroY * অতিবাহিত সময়; yaw = yaw + GyroZ * অতিবাহিত সময়; // পরিপূরক ফিল্টার - অ্যাকসিলরোমিটার এবং গাইরো এঙ্গেল ভ্যালু রোল = 0.96 * গাইরোএঙ্গেলএক্স + 0.04 * অ্যাকএঙ্গেলএক্স; পিচ = 0.96 * gyroAngleY + 0.04 * accAngleY; // সিরিয়াল মনিটরের মান প্রিন্ট করুন Serial.print (রোল); সিরিয়াল.প্রিন্ট ("/"); সিরিয়াল.প্রিন্ট (পিচ); সিরিয়াল.প্রিন্ট ("/"); Serial.println (yaw); } অকার্যকর calc_IMU_error () {// আমরা অ্যাকসিলরোমিটার এবং গাইরো ডেটা ত্রুটি গণনা করতে সেটআপ বিভাগে এই ফাংশনটি কল করতে পারি। এখান থেকে আমরা সিরিয়াল মনিটরে মুদ্রিত উপরের সমীকরণগুলিতে ব্যবহৃত ত্রুটির মানগুলি পাব। // লক্ষ্য করুন যে সঠিক মান পেতে আমাদের IMU ফ্ল্যাট রাখা উচিত, যাতে আমরা সঠিক মানগুলি পেতে পারি // অ্যাকসিলরোমিটার মান 200 বার পড়ুন যখন (c <200) {Wire.beginTransmission (MPU); Wire.write (0x3B); Wire.endTransmission (মিথ্যা); Wire.requestFrom (MPU, 6, true); AccX = (Wire.read () << 8 | Wire.read ()) / 16384.0; AccY = (Wire.read () << 8 | Wire.read ()) / 16384.0; AccZ = (Wire.read () << 8 | Wire.read ()) / 16384.0; // সমস্ত রিডিং সমূহ AccErrorX = AccErrorX + ({atan ((AccY) / sqrt (pow ((AccX), 2) + pow ((AccZ), 2))) * 180 / PI)); AccErrorY = AccErrorY + ({atan (-1 * (AccX) / sqrt (pow ((AccY), 2) + pow ((AccZ), 2))) * 180 / PI)); c ++; } // ত্রুটি মান AccErrorX = AccErrorX /200 পেতে যোগফলকে 200 দিয়ে ভাগ করুন; AccErrorY = AccErrorY / 200; c = 0; // গাইরো মান 200 বার পড়ুন যখন (c <200) {Wire.beginTransmission (MPU); Wire.write (0x43); Wire.endTransmission (মিথ্যা); Wire.requestFrom (MPU, 6, true); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read (); // সমস্ত রিডিংয়ের যোগফল GyroErrorX = GyroErrorX + (GyroX / 131.0); GyroErrorY = GyroErrorY + (GyroY / 131.0); GyroErrorZ = GyroErrorZ + (GyroZ / 131.0); c ++; } // ত্রুটি মান পেতে 200 দ্বারা যোগফল ভাগ করুন GyroErrorX = GyroErrorX /200; GyroErrorY = GyroErrorY / 200; GyroErrorZ = GyroErrorZ / 200; // সিরিয়াল মনিটর Serial.print ("AccErrorX:") এ ত্রুটির মান মুদ্রণ করুন; Serial.println (AccErrorX); Serial.print ("AccErrorY:"); Serial.println (AccErrorY); Serial.print ("GyroErrorX:"); Serial.println (GyroErrorX); Serial.print ("GyroErrorY:"); Serial.println (GyroErrorY); Serial.print ("GyroErrorZ:"); Serial.println (GyroErrorZ); } ------------------------------------------------- ---------------------------------------------- ফলাফল:-এক্স = Y = Z = --------------------------------------------------- ----------------------------------------------- গুরুত্বপূর্ণ তথ্য: ----------------

লুপ বিভাগে আমরা অ্যাকসিলরোমিটার ডেটা পড়ে শুরু করি। প্রতিটি অক্ষের জন্য ডেটা 2 বাইট বা রেজিস্টারে সংরক্ষিত থাকে এবং আমরা সেন্সরের ডেটশীট থেকে এই রেজিস্টারগুলির ঠিকানা দেখতে পারি।

এগুলি সব পড়ার জন্য, আমরা প্রথম রেজিস্টার দিয়ে শুরু করি, এবং requiestFrom () ফাংশন ব্যবহার করে আমরা X, Y এবং Z অক্ষের জন্য সমস্ত 6 টি রেজিস্টার পড়ার অনুরোধ করি। তারপরে আমরা প্রতিটি রেজিস্টার থেকে ডেটা পড়ি এবং আউটপুট দুটো পরিপূরক হওয়ায় সঠিক মান পেতে আমরা তাদের যথাযথভাবে একত্রিত করি।

ধাপ 5: টিল্ট এঙ্গেল বোঝা

অ্যাকসিলরোমিটার

পৃথিবীর মাধ্যাকর্ষণ একটি ধ্রুবক ত্বরণ যেখানে শক্তি সর্বদা পৃথিবীর কেন্দ্রের দিকে নির্দেশ করে।

যখন অ্যাকসিলরোমিটার মাধ্যাকর্ষণের সাথে সমান্তরাল হয়, তখন পরিমাপ করা ত্বরণ হবে 1 জি, যখন অ্যাকসিলরোমিটার মাধ্যাকর্ষণের সাথে লম্ব হবে, তখন এটি 0G পরিমাপ করবে।

এই সমীকরণটি ব্যবহার করে মাপা ত্বরণ থেকে কাত কোণ গণনা করা যেতে পারে:

sin = sin-1 (পরিমাপ করা ত্বরণ / মাধ্যাকর্ষণ ত্বরণ)

GyroGyro (a.k.a. রেট সেন্সর) কৌণিক বেগ (ω) পরিমাপ করতে ব্যবহৃত হয়।

রোবটের টিল্ট অ্যাঙ্গেল পেতে হলে, আমাদের নিচের সমীকরণে দেখানো গাইরো থেকে ডেটা সংহত করতে হবে:

ω = dθ / dt, θ = ∫ ω dt

Gyro এবং Accelerometer সেন্সর ফিউশন Gyro এবং accelerometer উভয়ের বৈশিষ্ট্য অধ্যয়ন করার পর, আমরা জানি যে তাদের নিজস্ব শক্তি এবং দুর্বলতা আছে। অ্যাকসিলরোমিটার ডেটা থেকে গণনা করা টিল্ট অ্যাঙ্গেলের ধীর প্রতিক্রিয়া সময় থাকে, যখন গাইরো ডেটা থেকে ইন্টিগ্রেটেড টিল্ট অ্যাঙ্গেল নির্দিষ্ট সময়ের মধ্যে ড্রিফট হয়। অন্য কথায়, আমরা বলতে পারি যে অ্যাকসিলরোমিটার ডেটা দীর্ঘমেয়াদী এবং গাইরো ডেটা স্বল্পমেয়াদী জন্য দরকারী।

ভাল বোঝার জন্য লিঙ্ক: এখানে ক্লিক করুন

প্রস্তাবিত: