Სარჩევი:

EWEEDINATOR☠ ნაწილი 2: სატელიტური ნავიგაცია: 7 ნაბიჯი (სურათებით)
EWEEDINATOR☠ ნაწილი 2: სატელიტური ნავიგაცია: 7 ნაბიჯი (სურათებით)

ვიდეო: EWEEDINATOR☠ ნაწილი 2: სატელიტური ნავიგაცია: 7 ნაბიჯი (სურათებით)

ვიდეო: EWEEDINATOR☠ ნაწილი 2: სატელიტური ნავიგაცია: 7 ნაბიჯი (სურათებით)
ვიდეო: Безымянная звезда (1 серия) (1978) фильм 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 'ოსტატი'
  • სხვადასხვა არდუინოს 'მონები'.

უცნაურია, რომ ბევრ Sat Navs– ს არ აქვს ციფრული კომპასი, რაც იმას ნიშნავს, რომ თუ თქვენ სტაციონარული ხართ და დაკარგული ხართ, თქვენ უნდა იაროთ ან იმოძრაოთ ნებისმიერი შემთხვევითი მიმართულებით, სანამ მოწყობილობა გიჩვენებთ თანამგზავრების სწორი მიმართულებას. თუ დაიკარგებით სქელ ჯუნგლებში ან მიწისქვეშა ავტოსადგომში, თქვენ ჩაყრილხართ!

ნაბიჯი 1: როგორ მუშაობს

Როგორ მუშაობს
Როგორ მუშაობს

ამჟამად, სმარტფონიდან ან კომპიუტერიდან იტვირთება კოორდინატების უბრალო წყვილი, რომელსაც შემდეგ გადმოწერს Weedinator. შემდეგ ისინი განიმარტება სათაურში გრადუსებში და მანძილი მმ -ში.

GPRS ფონა გამოიყენება 2G ფიჭური ქსელის ონლაინ მონაცემთა ბაზაში შესასვლელად და Arduino Nano– ს საშუალებით კოორდინატების მისაღებად და გადასაცემად Arduino Due– ში. Due არის ოსტატი და აკონტროლებს სხვა Arduinos– ს მასივს როგორც Slaves I2C და სერიული ავტობუსების საშუალებით. იმის გამო, რომ შეუძლია შეხება Ublox და Razor– ის ცოცხალ მონაცემებთან და აჩვენოს სათაური, რომელიც გამოითვლება Arduino– ს ერთ – ერთი მონას მიერ.

Ublox სატელიტური თვალთვალი განსაკუთრებით ჭკვიანია, რადგან ის იყენებს შეცდომების გაუქმებას ძალიან ზუსტი შესწორებების მისაღებად - საბოლოო ნომინალური გადახრა დაახლოებით 40 მმ. მოდული შედგება იდენტური წყვილისგან, რომელთაგან ერთი, „როვერი“, მოძრაობს სარეველთან ერთად, ხოლო მეორე, „ბაზა“ფიქსირდება ბოძზე სადღაც ღია ადგილას. შეცდომის გაუქმება მიიღწევა იმით, რომ დროთა განმავლობაში დიდი რაოდენობის ნიმუშების გამოყენებით შეძლებს მიაღწიოს მართლაც ზუსტ გამოსწორებას. ეს ნიმუშები შემდეგ ხდება საშუალოდ ატმოსფერული პირობების ცვალებადობის კომპენსაციისთვის. თუ მოწყობილობა მოძრაობდა, ის აშკარად ვერ შეძლებდა რაიმე საშუალო მაჩვენებლის მიღებას და შეცვლილი გარემოს სრული წყალობით იქნებოდა. თუმცა, თუ სტატიკური და მოძრავი მოწყობილობა ერთად მუშაობს, რამდენადაც მათ შეუძლიათ ერთმანეთთან ურთიერთობა, მათ შეუძლიათ მიიღონ ორივეს სარგებელი. ნებისმიერ დროს, საბაზისო ერთეულს კვლავ აქვს შეცდომა, მაგრამ მას ასევე აქვს ადრე გამოთვლილი სუპერ ზუსტი დაფიქსირება, ასე რომ მას შეუძლია გამოთვალოს ფაქტობრივი შეცდომა კოორდინატების ერთი ნაკრების მეორეს გამოკლებით. შემდეგ ის აგზავნის გამოთვლილ შეცდომას როვერზე რადიო ბმულის საშუალებით, რომელიც შემდეგ ამატებს შეცდომას საკუთარ კოორდინატებზე და ჰო პრესტო, ჩვენ გვაქვს შეცდომის გაუქმება! პრაქტიკული თვალსაზრისით, შეცდომის გაუქმება ქმნის განსხვავებას 3 მეტრსა და 40 მმ საერთო გადახრას შორის.

სრული სისტემა რთულად გამოიყურება, მაგრამ რეალურად საკმაოდ ადვილი ასაშენებელია, ან ფხვიერი არაგამტარ ზედაპირზე, ან ჩემს მიერ შემუშავებული PCB- ის გამოყენებით, რაც ყველა მოდულის საიმედოდ მიმაგრების საშუალებას იძლევა. მომავალი განვითარება დაფუძნებულია PCB– ზე, რაც საშუალებას აძლევს Arduinos– ს ფართო სპექტრს ჩართული იყოს საჭის მართვის, წინსვლის და ბორტ CNC აპარატის ძრავების გასაკონტროლებლად. ნავიგაციას ასევე დაეხმარება ობიექტის ამოცნობის მინიმუმ ერთი სისტემა კამერების გამოყენებით ფერადი საგნების გასაგებად, მაგალითად გოლფის ფლუორესცენტური ბურთები, რომლებიც საგულდაგულოდ არის განლაგებული რაიმე სახის ბადეში - დააკვირდით ამ სივრცეს!

ნაბიჯი 2: კომპონენტები

კომპონენტები
კომპონენტები
კომპონენტები
კომპონენტები
კომპონენტები
კომპონენტები
  • Ublox C94 M8M (როვერი და ბაზა) x 2 of
  • 9DOF Razor IMU MO ციფრული კომპასი
  • Fona 800H 2G GPRS ფიჭური 1946 წ
  • არდუინო დუე
  • Arduino Nano x 2 of
  • SparkFun Pro მიკრო
  • ადაფრუტი 2.2 "TFT IL1940C 1480
  • PCB (იხილეთ გერბერის თანდართული ფაილები) x 2 დან
  • 1206 SMD ნულოვანი ომის რეზისტორები x 12 of
  • 1206 LED ნათურები x 24

PCB ფაილი იხსნება "Design Spark" პროგრამული უზრუნველყოფით.

ნაბიჯი 3: მოდულების გაყვანილობა

მოდულების გაყვანილობა
მოდულების გაყვანილობა

ეს არის მარტივი ნაწილი - განსაკუთრებით ადვილია მე დამზადებული PCB– ით - უბრალოდ მიჰყევით დიაგრამას ზემოთ. სიფრთხილეა საჭირო იმისათვის, რომ თავიდან ავიცილოთ 3v მოდულის გაყვანილობა 5V– მდე, თუნდაც სერიულ და I2C ხაზებზე.

ნაბიჯი 4: კოდი

კოდი
კოდი

კოდის უმეტესი ნაწილი ეხება მონაცემთა სისტემატიურად გადაადგილებას სისტემაში და საკმაოდ ხშირად საჭიროა მონაცემთა ფორმატების გადაყვანა რიცხვებიდან რიცხვებზე სტრიქონებად და სიმბოლოებად, რაც შეიძლება ძალიან დამაბნეველი იყოს! "სერიული" პროტოკოლი მხოლოდ პერსონაჟებს გაუმკლავდება, ხოლო მე2C პროტოკოლი გაუმკლავდება ძალიან მცირე რიცხვებს, მე უკეთესად გადავაქციე ისინი სიმბოლოებად და შემდეგ გადავიყვანო მთელ რიცხვზე გადამცემი ხაზის მეორე ბოლოში.

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, რაც ძალიან შეზღუდულია!

Arduino– ზე ჩვენ შეგვიძლია გადავიტანოთ 32 – მდე ASCII სიმბოლო, ან ბაიტი, ერთდროულად I– ის გამოყენებით2C, რაც ბევრად უფრო სასარგებლოა და სიმბოლოების ნაკრები მოიცავს ციფრებს, ასოებს და საკონტროლო სიმბოლოებს 7 ბიტიანი ფორმატით, როგორც ქვემოთ:

გამოსახულება
გამოსახულება

საბედნიეროდ, Arduino შემდგენელი ასრულებს ყველა მუშაობას პერსონაჟიდან ორობითი ფონზე, მაგრამ ის მაინც ელოდება მონაცემთა გადაცემის პერსონაჟის სწორ ტიპს და ის არ მიიღებს "სიმებს".

ახლა არის, როდესაც ყველაფერი შეიძლება გაუგებარი იყოს. პერსონაჟები შეიძლება გამოითქვას როგორც ერთჯერადი სიმბოლოები char განსაზღვრების გამოყენებით, ან როგორც ერთ განზომილებიანი მასივი 20 სიმბოლოს char- ის გამოყენებით [20]. არდუინოს სიმები ძალიან ჰგავს პერსონაჟების მასივს და ფაქტიურად წარმოადგენს სიმბოლოთა სიმებს, რომლებიც ხშირად ადამიანის ტვინის მიერ განიმარტება როგორც "სიტყვები".

// აყალიბებს პერსონაჟს 'distanceCharacter':

სიმებიანი ინიციატორი = ""; distanceString = ინიციატორი + distanceString; int n = distanceString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

ზემოთ მოყვანილ კოდს შეუძლია სიმბოლოების გრძელი სტრიქონი გადააქციოს სიმბოლოების მასივად, რომელიც შემდეგ შეიძლება გადაეცეს I- ზე2C ან სერიული.

გადამცემი ხაზის მეორე ბოლოში, მონაცემები შეიძლება გადაკეთდეს სტრიქონად შემდეგი კოდის გამოყენებით:

distanceString = distanceString + c; // string = string + სიმბოლო

სიმბოლოების მასივი არ შეიძლება გარდაიქმნას პირდაპირ მთელ რიცხვზე და ჯერ უნდა გადავიდეს სტრიქონის ფორმატში, მაგრამ შემდეგი კოდი სტრიქონიდან გადაიქცევა მთელ რიცხვზე:

int შედეგი = (distanceString).toInt ();

int distanceMetres = შედეგი;

ახლა ჩვენ გვაქვს მთელი რიცხვი, რომლის გამოყენებაც შეგვიძლია გამოთვლებისთვის. მცურავი (რიცხვები ათწილადის წერტილით) უნდა გადაკეთდეს მთელ რიცხვში გადაცემის ეტაპზე და შემდეგ იყოფა 100 – ზე ორ ათწილადზე, მაგ.:

float distanceMetres = მანძილი მმ / 1000;

დაბოლოს, სტრიქონი შეიძლება შეიქმნას სიმბოლოებისა და რიცხვების ნაზავიდან, მაგალითად:

// ეს არის სადაც მონაცემები შედგენილია სიმბოლოში:

dataString = ინიციატორი + "BEAR" + zbearing + "DIST" + zdistance; // შემოიფარგლება 32 სიმბოლოთი // სიმებიანი = სტრიქონი + სიმბოლოები + მთელი რიცხვი + სიმბოლოები + მთელი რიცხვი.

დანარჩენი კოდი არის სტანდარტული Arduino მასალა, რომელიც შეგიძლიათ იხილოთ Arduino ბიბლიოთეკების სხვადასხვა მაგალითებში. გადახედეთ "მაგალითებს >>>> სიმების მაგალითს და ბიბლიოთეკის" მავთულის "მაგალითებს.

აქ არის float– ის გადაცემის და მიღების მთელი პროცესი:

გადაიყვანეთ Float ➜ მთელი რიცხვი ring სიმებიანი ract სიმბოლოების მასივი….. შემდეგ გადაიტანეთ მასივის მასივი ოსტატიდან

➜➜ მიიღე ინდივიდუალური პერსონაჟები მონაზე…. შემდეგ გადაიყვანეთ სიმბოლო ➜ სიმებიანი ➜ მთელი რიცხვი ➜ Float

ნაბიჯი 5: მონაცემთა ბაზა და ვებ გვერდი

მონაცემთა ბაზა და ვებ გვერდი
მონაცემთა ბაზა და ვებ გვერდი
მონაცემთა ბაზა და ვებ გვერდი
მონაცემთა ბაზა და ვებ გვერდი

ზემოთ ნაჩვენებია მონაცემთა ბაზის სტრუქტურა და თან ერთვის php და html კოდის ფაილები. მომხმარებლის სახელები, მონაცემთა ბაზის სახელები, ცხრილების სახელები და პაროლები დაცულია უსაფრთხოების მიზნით.

ნაბიჯი 6: ნავიგაციის ტესტები

ნავიგაციის ტესტები
ნავიგაციის ტესტები
ნავიგაციის ტესტები
ნავიგაციის ტესტები
ნავიგაციის ტესტები
ნავიგაციის ტესტები

მე მოვახერხე მონაცემთა დამრიგებლის მიერთება Weedinator– ის საკონტროლო დაფაზე I2C– ით და მივიღე წარმოდგენა Ublox M8M თანამგზავრის პოზიციონირების მუშაობის შესახებ:

"ცივი დაწყების" დროს, რომელიც ნაჩვენებია მწვანე გრაფიკით, მოდული დაიწყო მრავალი შეცდომით, საკმაოდ მსგავსი "ნორმალური" GPS- ით და თანდათანობით შეცდომა შემცირდა მანამ, სანამ დაახლოებით 2 საათის შემდეგ მან არ მიიღო RTK გამოსწორება როვერს შორის. და ბაზა (ნაჩვენებია როგორც წითელი ჯვარი). იმ 2 საათიანი პერიოდის განმავლობაში, ბაზის მოდული მუდმივად აშენებს და განაახლებს საშუალო მნიშვნელობას გრძედის და გრძედისათვის და წინასწარ დაპროგრამებული დროის ინტერვალის შემდეგ გადაწყვეტს, რომ მას აქვს კარგი გამოსწორება. შემდეგი 2 გრაფიკი გვიჩვენებს ქცევას "ცხელი დაწყების" შემდეგ სადაც ბაზის მოდულმა უკვე გამოთვალა კარგი საშუალო. ზედა გრაფიკი 200 წუთზე მეტი ხნის განმავლობაშია და ზოგჯერ გამოსწორება იკარგება და როვერი NMEA შეტყობინებას უგზავნის Weedinator– ს, რომ შეკეთება დროებით არასანდო გახდა.

ქვედა ლურჯი დიაგრამა არის 'მასშტაბირება' წითელ ყუთში ზედა გრაფაში და გვიჩვენებს Ublox- ის შესრულების კარგ წარმომადგენლობით გადაღებულ კადრს, მთლიანი გადახრით 40 მმ, რაც საკმარისზე მეტია საკმარისად იმისთვის, რომ Weedinator- ი გაემგზავროს მის დასვენებაში, მაგრამ შესაძლებელია არ იყოს საკმარისი იმისათვის, რომ ცალკეული მცენარეების ირგვლივ ნიადაგი დამუშავდეს?

მესამე დიაგრამა გვიჩვენებს როვერსა და ბაზასთან ერთად 100 მეტრის დაშორებით შეგროვებულ მონაცემებს - დამატებითი შეცდომა არ გამოვლენილა - დაშორების მანძილს არანაირი მნიშვნელობა არ აქვს სიზუსტეში.

ნაბიჯი 7: საბოლოო

გირჩევთ: