সুচিপত্র:

E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন: 7 টি ধাপ (ছবি সহ)
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন: 7 টি ধাপ (ছবি সহ)

ভিডিও: E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন: 7 টি ধাপ (ছবি সহ)

ভিডিও: E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন: 7 টি ধাপ (ছবি সহ)
ভিডিও: RUSH E 2024, জুলাই
Anonim
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন
E ওয়েডিনেটর☠ পার্ট 2: স্যাটেলাইট নেভিগেশন

উইডিনেটর নেভিগেশন সিস্টেমের জন্ম!

একটি রোভিং কৃষি রোবট যা একটি স্মার্ট ফোন দ্বারা নিয়ন্ত্রিত হতে পারে।

… এবং এটা কিভাবে একত্রিত করা হয় তার নিয়মিত প্রক্রিয়ার মধ্য দিয়ে যাওয়ার পরিবর্তে আমি ভেবেছিলাম আমি চেষ্টা করব এবং ব্যাখ্যা করব যে এটি আসলে কীভাবে কাজ করে - স্পষ্টতই সবকিছু নয় কিন্তু সবচেয়ে গুরুত্বপূর্ণ এবং আকর্ষণীয় বিট। অনুগ্রহ করে শ্লেষ ক্ষমা করুন, কিন্তু এইভাবে কিভাবে পৃথক মডিউলগুলির মধ্যে তথ্য প্রবাহিত হয় যা আমি আকর্ষণীয় মনে করি এবং এটিকে সর্বনিম্ন হরায় বিভক্ত করি আমরা প্রকৃত "বিট" - শূন্য এবং একের সাথে শেষ করি। আপনি যদি কখনও বিট, বাইট, অক্ষর এবং স্ট্রিং সম্পর্কে বিভ্রান্ত হয়ে থাকেন তবে এখনই অসংযত হওয়ার সময় হতে পারে? আমি 'ত্রুটি বাতিল' নামে একটি সামান্য বিমূর্ত ধারণা চেষ্টা এবং unconfuse করতে যাচ্ছি।

সিস্টেম নিজেই বৈশিষ্ট্য:

  • GPS/GNSS: Ublox C94 M8M (রোভার এবং বেস)
  • 9DOF রেজার IMU MO ডিজিটাল কম্পাস
  • Fona 800H 2G GPRS সেলুলার
  • 2.2 "টিএফটি স্ক্রিন
  • Arduino ডিউ 'মাস্টার'
  • বিভিন্ন Arduino 'দাস'

অদ্ভুতভাবে, অনেক স্যাট নভের একটি ডিজিটাল কম্পাস নেই যার অর্থ আপনি যদি স্থির থাকেন এবং হারিয়ে যান তবে ডিভাইসটি আপনাকে স্যাটেলাইট থেকে সঠিক দিক দেখানোর আগে আপনাকে যেকোনো এলোমেলো পথে হাঁটতে বা চালাতে হবে। যদি আপনি একটি ঘন জঙ্গলে বা ভূগর্ভস্থ গাড়ি পার্ক হারিয়ে যান আপনি স্টাফ!

ধাপ 1: এটি কিভাবে কাজ করে

কিভাবে এটা কাজ করে
কিভাবে এটা কাজ করে

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

জিপিআরএস ফোনা 2 জি সেলুলার নেটওয়ার্কের মাধ্যমে একটি অনলাইন ডাটাবেস অ্যাক্সেস করতে এবং Arduino Nano এর মাধ্যমে Arduino ডিউতে স্থানাঙ্কগুলি গ্রহণ এবং প্রেরণ করতে ব্যবহৃত হয়। ডু হল মাস্টার এবং I2C এবং সিরিয়াল বাসের মাধ্যমে ক্রীতদাস হিসাবে অন্যান্য Arduinos এর একটি অ্যারে নিয়ন্ত্রণ করে। ডিউ উব্লক্স এবং রেজার থেকে লাইভ ডেটার সাথে ইন্টারঅ্যাক্ট করতে পারে এবং এর আরডুইনো ক্রীতদাসদের দ্বারা গণনা করা একটি শিরোনাম প্রদর্শন করতে পারে।

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

সম্পূর্ণ সিস্টেমটি জটিল বলে মনে হয়, কিন্তু আসলে এটি নির্মাণ করা মোটামুটি সহজ, হয় একটি নন পরিবাহী পৃষ্ঠে আলগা বা আমার ডিজাইন করা PCB ব্যবহার করে, যা সমস্ত মডিউলগুলিকে নিরাপদে বোল্ট করার অনুমতি দেয়। ভবিষ্যতের বিকাশ PCB- এর উপর নির্মিত, যার ফলে স্টিয়ারিং, ফরওয়ার্ড মোশন এবং অন-বোর্ড CNC মেশিন নিয়ন্ত্রণের জন্য মোটরগুলিকে নিয়ন্ত্রণ করার জন্য Arduinos- এর একটি বিস্তৃত অ্যারে অন্তর্ভুক্ত করা যায়। ক্যামেরা ব্যবহার করে কমপক্ষে একটি বস্তু শনাক্তকরণ সিস্টেম দ্বারা ন্যাভিগেশনকেও সাহায্য করা হবে রঙিন বস্তু, উদাহরণস্বরূপ ফ্লুরোসেন্ট গল্ফ বল, যা সাবধানে কোন ধরণের গ্রিডে রাখা আছে - এই স্থানটি দেখুন!

ধাপ 2: উপাদান

উপাদান
উপাদান
উপাদান
উপাদান
উপাদান
উপাদান
  • Ublox C94 M8M (Rover and Base) x 2 of
  • 9DOF রেজার IMU MO ডিজিটাল কম্পাস
  • Fona 800H 2G GPRS সেলুলার 1946
  • Arduino ডিউ
  • Arduino Nano x 2 of
  • স্পার্কফুন প্রো মাইক্রো
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (সংযুক্ত Gerber ফাইল দেখুন) x 2 এর
  • 1206 SMD শূন্য ওহম প্রতিরোধক x 12 এর
  • 1206 LEDs x 24 এর

PCB ফাইলটি 'ডিজাইন স্পার্ক' সফটওয়্যার দিয়ে খোলে।

ধাপ 3: মডিউলগুলি সংযুক্ত করা

মডিউল আপ তারের
মডিউল আপ তারের

এটি সহজ অংশ - বিশেষ করে পিসিবি যা আমি তৈরি করেছি - কেবল উপরের চিত্রটি অনুসরণ করুন। সিরিয়াল এবং I2C লাইনে এমনকি 3v মডিউল 5v তে এড়ানোর জন্য যত্ন প্রয়োজন।

ধাপ 4: কোড

কোড
কোড

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

উইডিনেটর কন্ট্রোলার মূলত একটি 8 বিট সিস্টেম যা অনেকগুলি পৃথক Arduinos, বা 'MCU এর। যখন 8 বিটকে প্রকৃত বাইনারি শূন্য হিসাবে বর্ণনা করা হয় এবং এটি এইরকম দেখতে পারে: B01100101 যা সমান হবে:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

দশমিক ডিজিট মান 128 64 32 16 8 4 2 1
বাইনারি ডিজিট মান 0 1 1 0 0 1 0 1

= 101

এবং সম্ভাব্য সর্বোচ্চ মান হল 255…। সুতরাং সর্বোচ্চ পূর্ণসংখ্যা 'বাইট' আমরা I এর মাধ্যমে প্রেরণ করতে পারি2C হল 255, যা খুবই সীমিত!

একটি Arduino তে আমরা I ব্যবহার করে একটি সময়ে 32 ASCII অক্ষর বা বাইট পর্যন্ত প্রেরণ করতে পারি2C, যা অনেক বেশি উপযোগী, এবং অক্ষর সেটের মধ্যে সংখ্যা, অক্ষর এবং নিয়ন্ত্রণ অক্ষর 7 বিট বিন্যাসে রয়েছে:

ছবি
ছবি

সৌভাগ্যবশত, Arduino কম্পাইলার ব্যাকগ্রাউন্ডে অক্ষর থেকে বাইনারি রূপান্তরের সমস্ত কাজ করে, কিন্তু এটি এখনও ডেটা ট্রান্সমিশনের জন্য সঠিক ধরনের চরিত্র আশা করে এবং এটি 'স্ট্রিং' গ্রহণ করবে না।

এখন যখন জিনিসগুলি বিভ্রান্তিকর হতে পারে। অক্ষরগুলি বর্ণ সংজ্ঞা ব্যবহার করে একক অক্ষর হিসাবে বা চরিত্র [20] ব্যবহার করে 20 অক্ষরের একটি মাত্রিক অ্যারে হিসাবে প্রকাশ করা যেতে পারে। একটি Arduino স্ট্রিং একটি অক্ষর অ্যারের অনুরূপ এবং আক্ষরিকভাবে অক্ষরের একটি স্ট্রিং যা প্রায়ই মানুষের মস্তিষ্ক দ্বারা 'শব্দ' হিসাবে ব্যাখ্যা করা হয়।

// অক্ষর তৈরি করে 'দূরত্বের চরিত্র':

স্ট্রিং ইনিশিয়েটর = ""; distanceString = initiator + distanceString; int n = distanceString.length (); জন্য (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

উপরের কোডটি অক্ষরের একটি দীর্ঘ স্ট্রিংকে একটি অক্ষরের অ্যারেতে রূপান্তর করতে পারে যা পরে I এর মাধ্যমে প্রেরণ করা যেতে পারে2সি বা সিরিয়াল।

ট্রান্সমিশন লাইনের অন্য প্রান্তে, নিম্নলিখিত কোডটি ব্যবহার করে ডেটা স্ট্রিংয়ে রূপান্তর করা যেতে পারে:

distanceString = distanceString + c; // স্ট্রিং = স্ট্রিং + অক্ষর

একটি অক্ষর অ্যারে সরাসরি একটি পূর্ণসংখ্যায় রূপান্তরিত করা যাবে না এবং প্রথমে স্ট্রিং ফরম্যাটে যেতে হবে, কিন্তু নিম্নলিখিত কোডটি একটি স্ট্রিং থেকে পূর্ণসংখ্যায় রূপান্তরিত হবে:

int ফলাফল = (distanceString).toInt ();

int distanceMetres = ফলাফল;

এখন আমাদের একটি পূর্ণসংখ্যা আছে যা আমরা গণনা করতে ব্যবহার করতে পারি। ফ্লোটস (দশমিক বিন্দু সহ সংখ্যাগুলি) সংক্রমণ পর্যায়ে পূর্ণসংখ্যায় রূপান্তরিত করতে হবে এবং তারপর দুই দশমিক জায়গার জন্য 100 দিয়ে ভাগ করতে হবে যেমন:

ভাসমান দূরত্ব মিটার = দূরত্ব এমএম / 1000;

পরিশেষে, অক্ষর এবং পূর্ণসংখ্যার মিশ্রণ থেকে একটি স্ট্রিং তৈরি করা যায় যেমন:

// এই যেখানে ডেটা একটি অক্ষরে সংকলিত হয়:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // 32 অক্ষরে সীমাবদ্ধ // স্ট্রিং = স্ট্রিং + অক্ষর + পূর্ণসংখ্যা + অক্ষর + পূর্ণসংখ্যা।

বাকি কোডটি হল স্ট্যান্ডার্ড Arduino স্টাফ যা Arduino লাইব্রেরিতে বিভিন্ন উদাহরণে পাওয়া যাবে। 'উদাহরণ >>>> স্ট্রিং' উদাহরণ এবং 'তারের' লাইব্রেরির উদাহরণ দেখুন।

এখানে একটি ফ্লোট প্রেরণ এবং গ্রহণের জন্য সম্পূর্ণ প্রক্রিয়া:

ভাসমান ➜ পূর্ণসংখ্যা ➜ স্ট্রিং ➜ অক্ষর অ্যারে রূপান্তর করুন ….. তারপর মাস্টার থেকে অক্ষর অ্যারে স্থানান্তর করুন

S দাসে স্বতন্ত্র চরিত্রগুলি গ্রহণ করুন…। তারপর অক্ষর ➜ স্ট্রিং ➜ পূর্ণসংখ্যা ➜ ফ্লোট রূপান্তর করুন

ধাপ 5: ডাটাবেস এবং ওয়েবপেজ

ডাটাবেস এবং ওয়েবপেজ
ডাটাবেস এবং ওয়েবপেজ
ডাটাবেস এবং ওয়েবপেজ
ডাটাবেস এবং ওয়েবপেজ

উপরে ডাটাবেস কাঠামো দেখানো হয়েছে এবং পিএইচপি এবং এইচটিএমএল কোড ফাইল সংযুক্ত করা হয়েছে। নিরাপত্তার জন্য ব্যবহারকারীর নাম, ডাটাবেসের নাম, টেবিলের নাম এবং পাসওয়ার্ড ফাঁকা।

ধাপ 6: নেভিগেশন টেস্ট

নেভিগেশন টেস্ট
নেভিগেশন টেস্ট
নেভিগেশন টেস্ট
নেভিগেশন টেস্ট
নেভিগেশন টেস্ট
নেভিগেশন টেস্ট

আমি I2C এর মাধ্যমে উইডিনেটর কন্ট্রোল বোর্ডে একটি ডেটালগার সংযুক্ত করতে পেরেছি এবং Ublox M8M স্যাটেলাইট পজিশনিং পারফরম্যান্স সম্পর্কে কিছু ধারণা পেয়েছি:

সবুজ গ্রাফ দ্বারা দেখানো 'কোল্ড স্টার্ট' -এ, মডিউলটি অনেক ত্রুটির সাথে শুরু হয়েছিল, যা একটি' স্বাভাবিক 'জিপিএস -এর অনুরূপ, এবং ধীরে ধীরে ত্রুটি কমতে থাকে, প্রায় 2 ঘন্টা পরে, এটি রোভারের মধ্যে একটি RTK ফিক্স পায় এবং বেস (রেড ক্রস হিসাবে দেখানো হয়েছে)। সেই 2 ঘন্টার সময়কালে, বেস মডিউল ক্রমাগত অক্ষাংশ এবং দ্রাঘিমাংশের গড় মান গড়ে তুলছে এবং আপডেট করছে এবং প্রাক-প্রোগ্রামযুক্ত সময়ের ব্যবধানে সিদ্ধান্ত নেয় যে এটি একটি ভাল সমাধান পেয়েছে। পরবর্তী 2 টি গ্রাফ একটি 'গরম শুরুর পরে আচরণ দেখায় 'যেখানে বেস মডিউল ইতিমধ্যে একটি ভাল গড় গণনা করেছে। উপরের গ্রাফটি 200 মিনিটেরও বেশি সময় ধরে এবং মাঝে মাঝে ফিক্সটি হারিয়ে যায় এবং রোভার উইডিনেটরকে একটি NMEA বার্তা পাঠায় যে ফিক্সটি সাময়িকভাবে অবিশ্বস্ত হয়ে উঠেছে।

নীচের নীল গ্রাফটি উপরের গ্রাফের লাল বাক্সে একটি 'জুম ইন' এবং 40 মিলিমিটারের মোট বিচ্যুতি সহ উব্লক্স পারফরম্যান্সের একটি ভাল প্রতিনিধি স্ন্যাপ শট দেখায়, যা উইডিনেটরকে তার লোকেশনে গাইড করার জন্য যথেষ্ট ভাল।, কিন্তু সম্ভবত পৃথক উদ্ভিদের চারপাশে মাটি চাষ করার জন্য যথেষ্ট ভাল নয়?

তৃতীয় গ্রাফটি রোভার এবং বেসের সাথে 100 মিটার দূরে সংগৃহীত ডেটা দেখায় - কোনও অতিরিক্ত ত্রুটি সনাক্ত করা হয়নি - পৃথকীকরণের দূরত্ব নির্ভুলতার সাথে কোনও পার্থক্য করে নি।

ধাপ 7: চূড়ান্ত

প্রস্তাবিত: