Სარჩევი:

ციფრული კომპასი და სათაურის მაძიებელი: 6 ნაბიჯი
ციფრული კომპასი და სათაურის მაძიებელი: 6 ნაბიჯი

ვიდეო: ციფრული კომპასი და სათაურის მაძიებელი: 6 ნაბიჯი

ვიდეო: ციფრული კომპასი და სათაურის მაძიებელი: 6 ნაბიჯი
ვიდეო: ფორმარული და ციფრული კომუნიკაცია / Formal and Digital Communication 2024, ივლისი
Anonim
ციფრული კომპასი და სათაურის მაძიებელი
ციფრული კომპასი და სათაურის მაძიებელი

ავტორები:

კალან უელანი

ენდრიუ ლუფტი

ბლეიკ ჯონსონი

მადლიერება:

კალიფორნიის საზღვაო აკადემია

ევან ჩანგ-სიუ

შესავალი:

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

მასალები:

- DIYmall 6M GPS მოდული

- HiLetgo MPU9250/6500 9-Axis 9 DOF 16 ბიტი

- Adafruit NeoPixel ბეჭედი 16

- MakerFocus 4pcs 3.7V ლითიუმის დატენვის ბატარეა

- ELEGOO MEGA 2560 R3 დაფა

- Adafruit Mini Lipo w/Mini -B USB jack - USB LiIon/LiPoly დამტენი - v1

- 2.8 TFT LCD სენსორული გარღვევის დაფით, MicroSD სოკეტით

ნაბიჯი 1: პროექტის ფუნქციონირების შემუშავება

პროექტის ფუნქციონირების შემუშავება
პროექტის ფუნქციონირების შემუშავება

პირველი ნაბიჯი არის ლოგიკის გაგება და საბოლოო ოპერატიული ფუნქციონირება. ეს ლოგიკური დიაგრამა ასახავს მოწყობილობის სამ მდგომარეობას და ორ სენსორის მდგომარეობას.

მდგომარეობა 1: დატვირთვის მდგომარეობა

დატვირთვის მდგომარეობა გამოიყენება Arduino Mega– სთვის, რომ მიიღოს მონაცემები ორი სენსორიდან დაწყებისთანავე. მოწყობილობა აჩვენებს ეკრანზე ჩატვირთვას, გაასუფთავებს ყველა რიცხვის მნიშვნელობას ეკრანზე და NeoPixel ბეჭდის LED- ები ანათებს წრეში.

მდგომარეობა 2: კომპასის რეჟიმი

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

მდგომარეობა 3: სათაურის თვალთვალის რეჟიმი

ამ მდგომარეობაში მოწყობილობა ახლა დაეხმარება მომხმარებელს დაადგინოს სასურველი სათაური. მოწყობილობა ახლა აჩვენებს მოწყობილობების სათაურს და მომხმარებლების სათავეს LCD ეკრანზე გრძედის და გრძედის მონაცემებთან ერთად. NeoPixel ბეჭედი ახლა აანთებს, რათა მიუთითოს მომხმარებლები, რომლებიც მიდიან მოწყობილობების ორიენტაციასთან მიმართებაში.

ორივე შტატში 2 და მდგომარეობა 3 არის ორი სენსორული მდგომარეობა, ეს სენსორული მდგომარეობები საშუალებას აძლევს მოწყობილობას ამოიღოს მონაცემები სენსორიდან, რომელიც უზრუნველყოფს ყველაზე ზუსტ მონაცემებს მოწყობილობის საოპერაციო მდგომარეობიდან გამომდინარე.

სენსორის მდგომარეობა 1: MPU

თუ მოწყობილობა არ მოძრაობს, სათაურის მონაცემები ამოღებული იქნება MPU– დან, რადგან ეს არის ყველაზე ზუსტი მონაცემები, როდესაც მოწყობილობა არ მოძრაობს.

სენსორის მდგომარეობა 2: GPS

თუ მოწყობილობა მოძრაობს, სათაურის მონაცემები ამოღებული იქნება GPS ჩიპიდან, რადგან ეს არის ყველაზე ზუსტი მონაცემები ამ მდგომარეობაში.

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

ნაბიჯი 2: დაყენება და მავთულის დიაგრამა

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

პროექტი იყენებს და Arduino Mega კლონირებული დაფის მსგავსი ფორუმში ზემოთ. პროექტის ყველა კომპონენტი იქნება დაკავშირებული ამ დაფასთან. ზემოთ მოცემულია დეტალური დიაგრამები, თუ როგორ უნდა დააკავშიროთ ამ პროექტის კომპონენტები. ღილაკებს არ აქვთ დეტალური წრე, რადგან მათი დაყენება შესაძლებელია მრავალი გზით. ამ პროექტში ისინი იყენებენ 100K ჩამოსაშლელ რეზისტორს და მარტივ ღილაკს 3 ვოლტიანი სიგნალის გასაგზავნად მის დანიშნულ პინზე.

ნაბიჯი 3: კომპონენტების და ძირითადი კოდის ტესტირება

პროექტი ამოიღებს მონაცემებს როგორც MPU- დან, ასევე GPS ჩიპიდან, როგორც აღწერილია ადრე. მიმაგრებულია სამი კოდი, რომელიც საშუალებას გაძლევთ შეამოწმოთ მონაცემების MPU, GPS და MPU ეკრანზე ნაწილების ფუნქციონირების შესამოწმებლად. მნიშვნელოვანია, რომ კომპონენტები ამ ეტაპზე ამოქმედდეს, რადგან კოდი ცალკეა თითოეული ჩიპისთვის და ნებისმიერი საკითხი შეიძლება მოგვარდეს შიშის გარეშე, რომ გამოიწვიოს საბოლოო კოდში გაუთვალისწინებელი შეცდომები.

საჭირო ბიბლიოთეკები:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

ადაფრუტი_ILI9341.ჰ

TinyGPS ++. თ

ადაფრუტ_ნეოპიქსელი. თ

MPU9250.სთ

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

ნაბიჯი 4: MPU კალიბრაცია

MPU კალიბრაცია
MPU კალიბრაცია

სათაური, რომელიც ნაპოვნია MPU– ს მიერ მე –2 და მე –3 შტატებში, იყოფა ოთხ კვადრატად. ეს აუცილებელი იყო, რადგან ჩვენი დაკალიბრების მეთოდი მოითხოვდა მაგნიტომეტრიდან მინიმალური და მაქსიმალური სიდიდის პოვნას მისი x და y ღერძების გასწვრივ. ეს გაკეთდა მოწყობილობის შემთხვევით ბრუნვის გზით მისი სამი ღერძის გარშემო, ყოველგვარი მნიშვნელოვანი ელექტრომაგნიტური ველისგან განსხვავებული, ვიდრე დედამიწა. შემდეგ ჩვენ ავიღეთ მინიმალური და მაქსიმალური მნიშვნელობები x და y ღერძის გასწვრივ და ჩავრთეთ ისინი სკალირების განტოლებაში, რათა შევზღუდოთ სიდიდეები უარყოფით ერთსა და ერთს შორის. ზემოთ მოყვანილ ფიგურაში BigX და BigY არის მაგნიტომეტრის მონაცემების მაქსიმალური მნიშვნელობები x და y ღერძის შესაბამისად, LittleX და LittleY არის მაგნიტომეტრის მონაცემების მინიმალური მნიშვნელობები x და y ღერძის გასწვრივ, შესაბამისად, IMU.getMagX_uT () და IMU.getMagY_uT () არის მნიშვნელობები, რომლებიც ამოღებულია მაგნიტომეტრიდან ნებისმიერ დროს შესაბამისად x და y ღერძის გასწვრივ, ხოლო Mx და My არის ახალი მასშტაბური მნიშვნელობები, რომლებიც გამოიყენება სათაურის გამოსათვლელად.

ნაბიჯი 5: საბოლოო კოდი

საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი
საბოლოო კოდი

ბოლო ნაბიჯი არის საბოლოო კოდის შექმნა. მე დავურთე პროექტების საბოლოო კოდის ასლი. შენიშვნები გაკეთდა კოდის ნავიგაციის დასახმარებლად. ამ განყოფილების ყველაზე დიდი გამოწვევა იყო კვადრატების სწორად მუშაობა. კვადრატების განხორციელება იმაზე დამღლელი და ლოგიკურად დამამცირებელი აღმოჩნდა, ვიდრე ჩვენ წარმოგვიდგენია. ჩვენ თავდაპირველად განვახორციელეთ ძირითადი არქტანი (My/Mx) და შემდეგ რადიანიდან გადავიყვანეთ გრადუსზე, ვინაიდან არდუინო სტანდარტულად გამოსცემს რადიანებს. თუმცა, ერთადერთი კვადრატი, რომელშიც ეს მუშაობდა იყო 90 გრადუსიდან 180 გრადუსამდე, რამაც უარყოფითი შედეგი მოგვცა და საბოლოოდ მე –3 კვადრანტი გავხდით. ამის გადაწყვეტა იყო აბსოლუტური მნიშვნელობის აღება, რადგან ის მაინც გაიზარდა სწორად. ეს მნიშვნელობა გამოაკლდა 360 -დან, რათა განათებულიყო NeoPixel სწორი LED მდგომარეობა 2 -ში და მსგავსი მათემატიკური ოპერაცია გამოიყენებოდა მე -3 მდგომარეობაში, თუ სათაური უფრო დიდი იყო თუ პატარა მომხმარებლის შეყვანის სათაურზე, ორივე მათგანი ჩანს ზემოთ კოდი. ზემოთ მოყვანილ ფიგურებში, სათაური შეესაბამება NeoPixel სინათლეს, რომელიც განათდება მოწყობილობის სათაურსა და ჩრდილოეთიდან გადახრის სხვაობას შორის მდგომარეობის 2 და მომხმარებლის სათაურის მიხედვით. ამ შემთხვევაში, 90 -დან 180 გრადუსამდე შეესაბამება III კვადრატს. ორივე შემთხვევაში, tft.print იწვევს ეკრანს წაიკითხოს მოწყობილობა ჩრდილოეთიდან.

დანარჩენი სამი კვადრატისთვის, არქტანის (My/Mx) განხორციელებამ გამოიწვია ინვერსიის ინვერსია მოწყობილობის ბრუნვისას, ანუ სათაურის კუთხე ითვლიდა, როცა ითვლებოდა და პირიქით. ამ პრობლემის გადაწყვეტა იყო არქტანგენენტის არქტანის (Mx/My) ფორმაში გადატანა. მიუხედავად იმისა, რომ ამან გადაჭრა ინვერსიის ინვერსია, მან არ მისცა მოწყობილობის სწორი სათაური, სადაც კვადრატები ამოქმედდა. ამის მარტივი გამოსავალი იყო ცვლის დამატება შესაბამისი კვადრატის საფუძველზე. ეს ჩანს შემდეგ ფიგურებში, რომლებიც კიდევ ერთხელ წარმოადგენს თითოეული კვადრატის მე -2 და მე –3 შტატების კოდის ნაწილებს.

პირველი if განცხადება ხორციელდება თუ სათაური, რომელიც გამოითვლება MPU– ს განტოლებით, უფრო დიდია ვიდრე მომხმარებლის სათაური. ამ პირობებში მომხმარებლის შეყვანის სათაური ემატება მოწყობილობის სათაურს და შესაბამისი მნიშვნელობა გამოაკლდება 360 -დან. ეს პირობები განხორციელდა იმისათვის, რომ არა მხოლოდ NeoPixel– ის ზუსტი მნიშვნელობა მივიღოთ, არამედ თავიდან ავიცილოთ მნიშვნელობის მიღწევა მისაღები დიაპაზონის მიღმა, რომელიც არის 0 – დან 359 გრადუსამდე.

გირჩევთ: