Სარჩევი:
- ნაბიჯი 1: როგორ მუშაობს
- ნაბიჯი 2: კომპონენტები
- ნაბიჯი 3: მოდულების გაყვანილობა
- ნაბიჯი 4: კოდი
- ნაბიჯი 5: მონაცემთა ბაზა და ვებ გვერდი
- ნაბიჯი 6: ნავიგაციის ტესტები
- ნაბიჯი 7: საბოლოო
ვიდეო: EWEEDINATOR☠ ნაწილი 2: სატელიტური ნავიგაცია: 7 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
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: საბოლოო
გირჩევთ:
Raspberry Pi ხმოვანი ნავიგაცია უსინათლოთა დასახმარებლად: 7 ნაბიჯი (სურათებით)
Raspberry Pi ხმოვანი ნავიგაცია უსინათლოთა დახმარება: გამარჯობა ამ სასწავლო ინსტრუქციაში ჩვენ ვნახავთ, თუ როგორ შეიძლება ჟოლოს პი დაეხმაროს ბრმებს, მომხმარებლის მიერ განსაზღვრული ხმოვანი ინსტრუქციის გამოყენებით. ხმა უხელმძღვანელებს ბრმებს კითხვებზე
ნავიგაცია Raspberry Pi– ს პროგრამულ უზრუნველყოფაზე: ნაწილი 1: 14 ნაბიჯი
ნავიგაცია Raspberry Pi– ს პროგრამულ უზრუნველყოფაზე: ნაწილი 1: ამ გაკვეთილზე თქვენ შეისწავლით თუ როგორ უნდა მართოთ თქვენი Raspberry Pi ბრძანების ხაზის ინტერფეისის გამოყენებით. თქვენ შექმნით საქაღალდეებს, გადახვალთ ერთი დირექტორიადან მეორეზე და ისწავლით თუ როგორ უნდა გადაიღოთ ეკრანის ანაბეჭდი, რომ გადაიღოთ მთელი თქვენი ნამუშევარი კლასში! ჩვენ
ნავიგაცია Raspberry Pi– ს პროგრამულ უზრუნველყოფაზე: ნაწილი 2: 10 ნაბიჯი
ნავიგაცია Raspberry Pi– ს პროგრამულ უზრუნველყოფაზე: ნაწილი 2: ეს გაკვეთილი არის თქვენი ბრძანების ხაზის განათლების გაგრძელება. Raspberry Pi– სთან მუშაობისას თქვენ უდავოდ დააინსტალირებთ ახალ პროგრამულ უზრუნველყოფას, რომ ისწავლოთ, გამოსცადოთ და შექმნათ. ამ გაკვეთილზე თქვენ შეისწავლით თუ როგორ უნდა დააინსტალიროთ პროგრამული პაკეტები და
EWEEDINATOR☠ ნაწილი 4: დიფერენციალური მართვის გეომეტრიის კოდი: 3 ნაბიჯი
EWEEDINATOR☠ ნაწილი 4: დიფერენციალური მართვის გეომეტრიის კოდი: თუ თქვენ გაქვთ დრო უყუროთ ზემოხსენებულ ვიდეოს, შეამჩნევთ რომ უცნაური ხმაური გამოწვეულია საჭეზე ჩამორჩენილი ძრავების მიერ ყოველ ჯერზე, როდესაც WEEDINATOR ნავიგაცია 3 წერტილის შემობრუნება. ძრავები არსებითად იჭრება
EWEEDINATOR☠ ნაწილი 3: შასის მშენებლობა: 8 ნაბიჯი (სურათებით)
EWEEDINATOR☠ ნაწილი 3: შასის აგება: ზამთარი შესანიშნავი დროა მანქანების ასაშენებლად, განსაკუთრებით მაშინ, როდესაც შედუღება და პლაზმური ჭრა არის ჩართული, რადგან ორივე უზრუნველყოფს საკმარის სითბოს. თუ გაინტერესებთ რა არის პლაზმური საჭრელი, მაშინ წაიკითხეთ სიღრმისეული პროცედურები. თუ იყავით