فهرست مطالب:

EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای: 7 مرحله (همراه با تصاویر)
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای: 7 مرحله (همراه با تصاویر)

تصویری: EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای: 7 مرحله (همراه با تصاویر)

تصویری: EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای: 7 مرحله (همراه با تصاویر)
تصویری: Как спрятать данные в ячейках Excel? 2024, جولای
Anonim
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای
EWEEDINATOR☠ قسمت 2: ناوبری ماهواره ای

سیستم ناوبری Weedinator متولد شد!

یک ربات کشاورزی که می تواند توسط یک تلفن هوشمند کنترل شود.

… و به جای اینکه فقط از طریق روش معمول نحوه ترکیب آن را طی کنم ، فکر کردم سعی می کنم توضیح دهم که چگونه کار می کند - بدیهی است نه همه چیز ، بلکه مهمترین و جالب ترین موارد. لطفاً جمله را ببخشید ، اما این نحوه انتقال داده ها بین ماژول های فردی است که به نظرم جالب می آید و به کمترین مخرج تقسیم می شود و در نهایت به "بیت" واقعی - صفر و یک - می رسیم. اگر تا به حال در مورد بیت ها ، بایت ها ، کاراکترها و رشته ها گیج شده اید ، ممکن است اکنون زمان آن رسیده باشد که دچار سردرگمی نشوید؟ من همچنین سعی می کنم یک مفهوم کمی انتزاعی به نام "لغو خطا" را اشتباه بگیرم.

خود سیستم دارای ویژگی های زیر است:

  • GPS/GNSS: Ublox C94 M8M (مریخ نورد و پایه)
  • قطب نمای دیجیتال 9DOF Razor IMU MO
  • Fona 800H 2G GPRS تلفن همراه
  • صفحه نمایش 2.2 اینچی TFT
  • Arduino due 'Master'
  • برده های مختلف آردوینو.

به طرز عجیبی ، بسیاری از Sat Navs قطب نمای دیجیتالی ندارند ، این بدان معناست که اگر ساکن هستید و گم شده اید ، باید در هر جهت تصادفی راه بروید یا رانندگی کنید تا دستگاه بتواند جهت صحیح ماهواره ها را به شما نشان دهد. اگر در یک جنگل ضخیم یا پارکینگ زیر زمینی گم شوید ، پر می شوید!

مرحله 1: چگونه کار می کند

چگونه کار می کند
چگونه کار می کند

در حال حاضر ، یک جفت مختصات ساده از تلفن هوشمند یا رایانه بارگذاری می شود ، که سپس توسط Weedinator بارگیری می شود. سپس آنها را به عنوان درجه و فاصله برای حرکت بر حسب میلی متر تفسیر می کنند.

Fona GPRS برای دسترسی به پایگاه داده آنلاین از طریق شبکه تلفن همراه 2G و دریافت و انتقال مختصات به Arduino Due از طریق Arduino Nano استفاده می شود. The Due استاد است و مجموعه ای از دیگر Arduinos ها را به عنوان Slaves از طریق I2C و گذرگاه های سریال کنترل می کند. The Due می تواند با داده های زنده Ublox و Razor ارتباط برقرار کند و سرفصل محاسبه شده توسط یکی از بردگان آردوینو را نمایش دهد.

ردیاب ماهواره ای Ublox بسیار باهوش است زیرا از لغو خطا برای رفع اشکال بسیار دقیق استفاده می کند - انحراف نهایی نهایی حدود 40 میلی متر. این ماژول از یک جفت یکسان تشکیل شده است ، یکی از آنها ، "مریخ نورد" ، با Weedinator حرکت می کند ، و دیگری ، "پایه" بر روی یک قطب در جایی در فضای باز ثابت شده است. لغو خطا بدین صورت انجام می شود که پایگاه بتواند با استفاده از تعداد زیادی نمونه در طول زمان به یک رفع واقعاً دقیق برسد. سپس این نمونه ها به طور متوسط برای جبران تغییر شرایط جوی محاسبه می شوند. اگر دستگاه در حال حرکت بود ، بدیهی است که نمی تواند از هر نوع میانگین گیری برخوردار باشد و به طور کامل در حال تغییر محیط است. با این حال ، اگر یک دستگاه ایستا و متحرک با هم کار کنند ، تا زمانی که بتوانند بین یکدیگر ارتباط برقرار کنند ، می توانند از هر دو بهره ببرند. در هر زمان واحد واحد هنوز دارای خطا است اما همچنین دارای یک رفع فوق دقیق قبلا محاسبه شده است ، بنابراین می تواند خطای واقعی را با تفریق یک مجموعه مختصات از دیگری محاسبه کند. سپس خطای محاسبه شده را از طریق یک پیوند رادیویی به مریخ نورد ارسال می کند ، که سپس خطا را به مختصات خود اضافه می کند و ما در لغو خطا داریم! از نظر عملی ، لغو خطا بین 3 متر و 40 میلیمتر انحراف کل تفاوت ایجاد می کند.

سیستم کامل پیچیده به نظر می رسد ، اما در واقع ساخت آن نسبتاً آسان است ، چه روی یک سطح غیر رسانا شل باشد و چه با استفاده از PCB که من طراحی کرده ام ، که به همه ماژول ها اجازه می دهد به طور محکم به هم وصل شوند. توسعه آینده بر روی PCB ساخته شده است ، و اجازه می دهد تا طیف وسیعی از آردوینو را برای کنترل موتورهای فرمان ، حرکت رو به جلو و یک دستگاه CNC روی صفحه ادغام کنند. ناوبری همچنین با حداقل یک سیستم تشخیص شی با استفاده از دوربین ها برای تشخیص اشیاء رنگی ، به عنوان مثال توپ های گلف فلورسنت ، که با دقت در نوعی شبکه قرار گرفته اند ، کمک می کند - این فضا را تماشا کنید!

مرحله 2: اجزاء

اجزاء
اجزاء
اجزاء
اجزاء
اجزاء
اجزاء
  • Ublox C94 M8M (Rover and Base) x 2 از
  • قطب نمای دیجیتال 9DOF Razor IMU MO
  • Fona 800H 2G GPRS تلفن همراه 1946
  • آردوینو دوئه
  • آردوینو نانو x 2 از
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (به فایلهای Gerber پیوست شده مراجعه کنید) x 2 از
  • 1206 SMD مقاومت صفر اهم x 12 از
  • 1206 LED در 24

فایل PCB با نرم افزار "Design Spark" باز می شود.

مرحله 3: سیم کشی ماژول ها

سیم کشی ماژول ها
سیم کشی ماژول ها

این قسمت آسان است - مخصوصاً با PCB که من ساختم آسان است - فقط نمودار بالا را دنبال کنید. برای جلوگیری از سیم کشی ماژول های 3v به 5v ، حتی در خطوط سریال و I2C ، احتیاج است.

مرحله 4: کد

کد
کد

بیشتر کد مربوط به جابجایی منظم داده ها در سیستم است و اغلب نیاز به تبدیل فرمت داده ها از صحیح به شناور به رشته و به نویسه وجود دارد که می تواند بسیار گیج کننده باشد! پروتکل "سریال" فقط کاراکترها و در حالی که I را اداره می کند2پروتکل C از اعداد صحیح بسیار کوچک استفاده می کند ، من بهتر دیدم که آنها را به کاراکتر تبدیل کنم و سپس در انتهای دیگر خط انتقال به اعداد صحیح تبدیل کنم.

کنترل کننده Weedinator اساساً یک سیستم 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 است که بسیار محدود کننده است!

در آردوینو می توانیم تا 32 کاراکتر ASCII یا بایت را در یک زمان با استفاده از I ارسال کنیم2C ، که بسیار مفیدتر است و مجموعه کاراکترها شامل اعداد ، حروف و کاراکترهای کنترل در قالب 7 بیتی به شرح زیر است:

تصویر
تصویر

خوشبختانه ، کامپایلر آردوینو تمام کارهای تبدیل از کاراکتر به باینری را در پس زمینه انجام می دهد ، اما همچنان از نوع صحیح نویسه برای انتقال داده ها انتظار دارد و "رشته ها" را نمی پذیرد.

اکنون زمانی است که همه چیز می تواند گیج کننده باشد. کاراکترها را می توان با استفاده از تعریف char به صورت تک کاراکتر یا به صورت یک آرایه یک بعدی از 20 کاراکتر با استفاده از char [20] بیان کرد. یک رشته آردوینو بسیار شبیه به یک آرایه شخصیت است و به معنای واقعی کلمه رشته ای از شخصیت ها است که اغلب توسط مغز انسان به عنوان "کلمات" تفسیر می شود.

// کاراکتر 'distanceCharacter' را ایجاد می کند:

شروع کننده رشته = ""؛ distanceString = آغازگر + distanceString؛ int n = distanceString.length ()؛ برای (int aa = 0 ؛ aa <= n؛ aa ++) {distanceCharacter [aa] = distanceString [aa] ؛ }

کد بالا می تواند یک رشته طولانی از کاراکترها را به مجموعه ای از کاراکترها تبدیل کند که سپس می توانند از طریق I منتقل شوند2C یا سریال.

در انتهای دیگر خط انتقال ، داده ها را می توان با استفاده از کد زیر به یک رشته تبدیل کرد:

distanceString = distanceString + c؛ // string = string + کاراکتر

یک آرایه کاراکتر نمی تواند مستقیماً به یک عدد صحیح تبدیل شود و ابتدا باید به قالب رشته برود ، اما کد زیر از یک رشته به یک عدد صحیح تبدیل می شود:

int result = (distanceString).toInt ()؛

int distanceMetres = نتیجه ؛

اکنون یک عدد صحیح داریم که می توانیم برای محاسبه از آن استفاده کنیم. شناورها (اعداد دارای نقطه اعشار) باید در مرحله انتقال به اعداد صحیح تبدیل شوند و سپس بر 100 برای دو رقم اعشار تقسیم شوند ، به عنوان مثال:

float distanceMetres = distanceMm / 1000؛

در نهایت ، یک رشته می تواند از مخلوطی از کاراکترها و اعداد صحیح ایجاد شود ، به عنوان مثال:

// این جایی است که داده ها به یک کاراکتر کامپایل می شوند:

dataString = آغازگر + "BEAR" + zbearing + "DIST" + zdistance؛ // محدود به 32 کاراکتر // رشته = رشته + کاراکترها + عدد صحیح + کاراکترها + عدد صحیح.

بقیه کد موارد استاندارد آردوینو است که در نمونه های مختلف کتابخانه های آردوینو یافت می شود. به مثال ">> >>> رشته ها و نمونه های کتابخانه" سیم "مراجعه کنید.

در اینجا کل فرایند انتقال و دریافت شناور آمده است:

تبدیل Float ➜ Integer ➜ String ➜ Character array ….. سپس TRANSMIT array character from Master

➜➜ دریافت شخصیت های جداگانه در Slave…. سپس Character ➜ String ➜ Integer ➜ Float را تبدیل کنید

مرحله 5: پایگاه داده و صفحه وب

پایگاه داده و صفحه وب
پایگاه داده و صفحه وب
پایگاه داده و صفحه وب
پایگاه داده و صفحه وب

در بالا ساختار پایگاه داده نشان داده شده است و فایل های کد php و html ضمیمه شده اند. نام کاربری ، نام پایگاه داده ، نام جداول و گذرواژه ها از نظر امنیت خالی هستند.

مرحله 6: آزمایش های ناوبری

تست های ناوبری
تست های ناوبری
تست های ناوبری
تست های ناوبری
تست های ناوبری
تست های ناوبری

من موفق شدم یک دیتاگالر را از طریق I2C به برد کنترل Weedinator وصل کنم و از عملکرد موقعیت یابی ماهواره Ublox M8M ایده بگیرم:

در "شروع سرد" ، که با نمودار سبز نشان داده شده است ، ماژول با خطاهای زیادی شروع شد ، بسیار شبیه به GPS "معمولی" ، و به تدریج خطا کاهش یافت تا اینکه بعد از حدود 2 ساعت ، RTK بین مریخ نورد رفع شد. و پایه (به عنوان صلیب قرمز نشان داده شده است). در طول آن دوره 2 ساعته ، ماژول پایه به طور مداوم در حال ایجاد و به روزرسانی یک مقدار متوسط برای عرض و طول جغرافیایی است و پس از فاصله زمانی از پیش برنامه ریزی شده تصمیم می گیرد که به خوبی حل شده است. 2 نمودار بعدی رفتار پس از یک "شروع داغ" را نشان می دهد جایی که ماژول پایه قبلاً میانگین خوبی را محاسبه کرده است. نمودار بالا بیش از 200 دقیقه است و گاهی اوقات رفع می شود و مریخ نورد یک پیام NMEA به Weedinator می فرستد که این رفع موقت غیرقابل اعتماد است.

نمودار آبی پایین یک "بزرگنمایی" روی کادر قرمز در نمودار بالا است و یک عکس فوری از عملکرد Ublox با انحراف کلی 40 میلی متر نشان می دهد ، که بیش از حد خوب است تا Weedinator را به حالت استراحت هدایت کند. ، اما احتمالاً آنقدر خوب نیست که بتوان خاک اطراف گیاهان را کشت کرد؟

نمودار سوم داده های جمع آوری شده با Rover و Base 100 متری را نشان می دهد - هیچ خطای اضافی تشخیص داده نشد - فاصله جداسازی هیچ تفاوتی در دقت ایجاد نکرد.

مرحله 7: نهایی

توصیه شده: