Სარჩევი:

Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი): 9 ნაბიჯი
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი): 9 ნაბიჯი

ვიდეო: Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი): 9 ნაბიჯი

ვიდეო: Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი): 9 ნაბიჯი
ვიდეო: Leap Motion SDK 2024, ივლისი
Anonim
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)
Smart Motorcycle HUD პროტოტიპი (მორიგეობით ნავიგაცია და სხვა მრავალი)

გამარჯობა!

ეს ინსტრუქცია არის ისტორია იმის შესახებ, თუ როგორ შევქმენი და ავაშენე HUD (Heads-Up Display) პლატფორმა, რომელიც შექმნილია მოტოციკლის ჩაფხუტებზე დასაყენებლად. იგი დაიწერა "რუქების" კონკურსის კონტექსტში. სამწუხაროდ, მე ვერ შევძელი მთლიანად დავასრულო ეს პროექტი კონკურსის ბოლო ვადაში, მაგრამ მე მაინც მინდოდა გამეზიარებინა ჩემი პროგრესი, ასევე დამეწერა ყველა ის საცდელი და შეცდომა, რაც მე მივიღე.

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

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

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

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

რაც მუშაობს დღემდე

როგორც აღვნიშნეთ, ეს პროექტი ჯერ კიდევ ძალიან განვითარებად მდგომარეობაშია და ეს არის ის, რაც ამჟამად მუშაობს.

- კომუნიკაცია სმარტფონსა და ESP32 დაფაზე (ტელეფონი გაღვიძებულია)

- ოპტიკის დიზაინი დასრულებულია (შეიძლება დაგჭირდეთ მცირე კორექტირება გრძელვადიან პერსპექტივაში)

- Android ნავიგაციის აპლიკაცია Mapbox– ის ნავიგაციის SDK– ს გამოყენებით:

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

- შეუძლია Bluetooth მოწყობილობასთან დაკავშირება (მოწყობილობის MAC მისამართი არის მყარად კოდირებული)

- შეუძლია რეალურ დროში ნავიგაცია, მათ შორის მომავალი მანევრის ინფორმაციის მოპოვება და გაგზავნა სერიული Bluetooth– ით (ჯერჯერობით მხოლოდ ბრუნვებს უჭერს მხარს)

რასაც მუშაობა სჭირდება

ეს სია შეიცავს ელემენტებს, რომლებიც აბსოლუტურად აუცილებელია HUD– ის დანიშნულებით, მაგრამ ჯერ არ არის მზად განსახორციელებლად.

- საერთო დიზაინი (ჩაფხუტის მიმაგრება, რეფლექტორის კუთხის რეგულირების მექანიზმი,..)

- Android აპლიკაცია:

- განახორციელეთ გამავლობის გამოვლენა და შესწორება

- მომხმარებლისთვის დანიშნულების მისამართის შეყვანის შესაძლებლობა

- საგზაო წერტილები?

- ერგონომიკა / ესთეტიკა

მასალები:

აუცილებელი

- esp32 დაფუძნებული განვითარების დაფა

- ნებისმიერი ცოტა ხნის წინ android სმარტფონი (Bluetooth ჩართულია)

- SSD1306 ან სხვა ჩართული 96 "OLED ეკრანი (ჩემი იყო 128x64 პიქსელი, იხილეთ ნაწილი" ტვინი: მიკროკონტროლერი და ეკრანი ")

- რეფლექტორი (აკრილის/მინის/პლექსიგლასის ნებისმიერი ნაჭერი გააკეთებს)

- ფრესელის ობიექტივი (ჩემსას ჰქონდა F. სიგრძე დაახლოებით 13 სმ, იხილეთ ნაწილი "ობიექტივის არჩევანი")

ინსტრუმენტები

- შესადუღებელი რკინა

- პურის დაფა

- რამდენიმე ჯუმბერის კაბელი

- 3D პრინტერი / 3D ბეჭდვის სერვისი

ნაბიჯი 1: როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი

როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი
როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი
როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი
როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი
როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი
როგორ მუშაობს ეს ყველაფერი: ახსნილია დიზაინის არჩევანი

Heads Up Display– ის ძირითადი იდეა არის გამოსახულების ჩვენება ვიღაცის ხედვის წინ, ასე რომ მათ არ მოუწევთ თვალი აარიდონ იმას რასაც აკეთებენ (იქნება ეს თვითმფრინავის პილოტირება, თუ მოტოციკლის მართვა, რაც იქნება ჩვენი მაგალითი შემთხვევა).

ოპტიკა

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

თუმცა, ამ მიდგომას აქვს უზარმაზარი ნაკლი: ფაქტობრივი ეკრანი, როგორც წესი, მომხმარებლის თვალთან უფრო ახლოს არის, ვიდრე ის, რასაც მომხმარებელი რეალურად უნდა გაამახვილოს ყურადღება (მაგ. მის წინ მიმავალი გზა). ეს ნიშნავს, რომ იმისათვის, რომ წავიკითხოთ ის, რაც ამრეკლ ზედაპირზეა, მომხმარებლის თვალები უნდა მოერგოს ეკრანის მანძილს მისი თვალებიდან (ვთქვათ 20 სმ) და შემდეგ კვლავ მოერგოს, რათა წინ მიმავალ გზაზე გაამახვილოს ყურადღება. (~ 2/5 მეტრი). მთელი ამ ოპერაციის ჩატარების დრო არის ძვირფასი დრო, რომელიც უნდა დაიხარჯოს გზის საყურებლად და ხშირად ადაპტირება შეიძლება მომხმარებლისთვის არასასიამოვნო იყოს მხოლოდ რამდენიმე წუთის შემდეგ.

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

სმარტფონის როლი

რადგან არარეალური იყო მთლიანი სანავიგაციო პროგრამის განხორციელება მხოლოდ ESP32– ზე, გადავწყვიტე შემექმნა android აპლიკაცია, რომელიც იზრუნებდა ამაზე. შემდეგ აპლიკაციამ უბრალოდ უნდა უთხრას ESP32– ს რა უნდა გააკეთოს მომხმარებელმა დანიშნულების ადგილამდე მისასვლელად, და ESP32 ამ ინფორმაციას ავრცელებს HUD– ით (იხ. ფიგურა "როგორ მუშაობს მოდული").

ნაბიჯი 2: ნაწილები - ტვინი: მიკროკონტროლერი და ეკრანი

ნაწილები - ტვინი: მიკროკონტროლი და ეკრანი
ნაწილები - ტვინი: მიკროკონტროლი და ეკრანი
ნაწილები - ტვინი: მიკროკონტროლი და ეკრანი
ნაწილები - ტვინი: მიკროკონტროლი და ეკრანი

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

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

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

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

ნაბიჯი 3: ნაწილები - ოპტიკა: კომპრომისის პოვნა

ნაწილები - ოპტიკა: კომპრომისის პოვნა
ნაწილები - ოპტიკა: კომპრომისის პოვნა
ნაწილები - ოპტიკა: კომპრომისის პოვნა
ნაწილები - ოპტიკა: კომპრომისის პოვნა
ნაწილები - ოპტიკა: კომპრომისის პოვნა
ნაწილები - ოპტიკა: კომპრომისის პოვნა

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

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

ძირითადად, აქ შეასრულა ყველაფერი კომპრომისის პოვნა შორის:

- გონივრული ვირტუალური გამოსახულების მანძილი (ანუ რამდენად შორს იქნება HUD მომხმარებლისთვის, ან რამდენად შორს მოუწევს მომხმარებელს თვალის მორგება, რომ ნახოთ რა არის HUD– ზე)

- ტექსტი ეკრანზე არ იყოს ძალიან გადიდებული ობიექტივით (რაც ძირითადად გამადიდებელია)

- გონივრული მანძილი OLED ეკრანსა და ლინზებს შორის, რაც სხვაგვარად გამოიწვევს ძალიან დიდ მოდულს

მე პირადად შევუკვეთე რამდენიმე განსხვავებული ლინზა ამაზონზე და განვსაზღვრე მათი შესაბამისი ფოკუსური მანძილი, სანამ არჩევდი ერთს, რომლის სიგრძეა დაახლოებით 13 სმ. მე ვიპოვე ეს F.length, OLED-Lens მანძილით 9 სმ, მომცა დამაკმაყოფილებელი სურათი ჩემს რეფლექტორზე (იხ. ბოლო რამდენიმე სურათი ზემოთ).

როგორც ხედავთ ჩემს ილუსტრაციებზე, იმისათვის, რომ სათანადოდ გაამახვილოთ ყურადღება ნაჩვენებ ტექსტზე, კამერა, რომელიც გამოიყენება ამ სურათების გადასაღებად, უნდა მოერგოს ისე, თითქოს ფოკუსირებული იყოს შორეულ ობიექტზე, რაც ყველაფერს იმავე სიბრტყეზე აკეთებს, როგორც რეფლექტორი ბუნდოვანი. რა ეს არის ზუსტად ის, რაც ჩვენ გვინდა ჩვენი HUD– ისთვის.

თქვენ შეგიძლიათ იხილოთ ლინზების დამჭერისთვის 3D ფაილები აქ.

ნაბიჯი 4: ნაწილები - კონტეინერი ყველაფრის შესანახად

ნაწილები - კონტეინერი ყველაფრის შესანახად
ნაწილები - კონტეინერი ყველაფრის შესანახად
ნაწილები - კონტეინერი ყველაფრის შესანახად
ნაწილები - კონტეინერი ყველაფრის შესანახად

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

ნაბიჯი 5: პროტოკოლის შექმნა ჩვენი მოდულისთვის

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

ამ ინსტრუქციის წერის დროს, ინფორმაცია, რომელიც უნდა გადაეცათ ტელეფონიდან მოდულთან ნავიგაციისთვის, იყო:

- მომავალი მანევრის ტიპი (მარტივი შემობრუნება, შემოვლითი გზა, სხვა გზაზე შერწყმა, …)

- მომავალი მანევრის ზუსტი მითითებები (დამოკიდებულია მანევრის ტიპზე: მარჯვნივ/მარცხნივ მოსახვევში; რომელი გასასვლელი უნდა მიიღოთ წრეზე, …)

- მანძილი, რომელიც დარჩა მანევრის წინ (ჯერჯერობით მეტრებში)

მე გადავწყვიტე ამ მონაცემების ორგანიზება შემდეგი ჩარჩო სტრუქტურის გამოყენებით:

: ტიპი. ინსტრუქციები, მანძილი;

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

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

ნაბიჯი 6: კოდი: ESP32 გვერდი

კოდი: ESP32 გვერდი
კოდი: ESP32 გვერდი
კოდი: ESP32 გვერდი
კოდი: ESP32 გვერდი

ESP32– ის კოდი ამჟამად საკმაოდ მარტივია. ის იყენებს U8g2lib ბიბლიოთეკას, რომელიც საშუალებას იძლევა ადვილად გააკონტროლონ OLED ეკრანი (ნაჩვენები სურათის სარკისებლობის შესაძლებლობისას).

ძირითადად, ყველაფერი რაც ESP32 აკეთებს არის სერიული მონაცემების მიღებას Bluetooth– ის საშუალებით, როდესაც აპლიკაცია აგზავნის მას, აანალიზებს მას და აჩვენებს ამ მონაცემებს ან მონაცემებს (ანუ ისრის ჩვენება წინადადების ნაცვლად „მოუხვიე მარცხნივ/მარჯვნივ“). აი კოდი:

/*პროგრამა HUD– ის გასაკონტროლებლად android აპლიკაციიდან სერიული bluetooth*/#მოიცავს „BluetoothSerial.h“// სერიული Bluetooth– ის სათაურის ფაილი, სტანდარტულად დაემატება Arduino– ს#მოიცავს#მოიცავს#მოიცავს #ifdef U8X8_HAVE_HW_SPI#მოიცავს#endif# ifdef U8X8_HAVE_HW_I2C #მოიცავს #endif // OLED ბიბლიოთეკის კონსტრუქტორს, შესაბამისად უნდა შეიცვალოს თქვენს ეკრანზე // სახელმწიფო მანქანამ გამოავლინა ველების მნიშვნელობები + ცვლადი#განსაზღვრეთ მანევრირება 1#განსაზღვრეთ ინსტრუქცია ველი 2#განსაზღვრეთ მანძილი ველი 3#განსაზღვრეთ endOfFrame 4 არ არის გამოვლენილი_ ველი = endOfFrame; BluetoothSerial serialBT; // ობიექტი Bluetoothchar incoming_char; char მანევრი [10]; char მითითებები [10]; char მანძილი [10]; char tempManeuver [10]; char tempInstructions [10]; char tempDistance [10]; int nbr_char_maneuver = 0; int nbr_char_instructions = 0; int nbr_char_distance = 0; ლოგიკური სრული გამოთქმა = ყალბი; void setup () {Serial.begin (9600); // სერიული მონიტორის დაწყება 9600 bauds in u8g2.begin (); // დაწყებული OLED კონტროლის serialBT.begin ("ESP32_BT"); // Bluetooth სიგნალის დაყოვნების სახელი (20); Serial.println ("Bluetooth მოწყობილობა მზადაა დასაწყვილებლად");} void loop () {if (serialBT.available () &&! Fullsentence) // სიმბოლოების მიღება Bluetooth სერიული საშუალებით {incoming_char = serialBT.read (); Serial.print ("მიღებულია:"); Serial.println (შემომავალი_ჩარი); } გადართვა (აღმოჩენილი_ ველი) {case maneuverField: Serial.println ("აღმოჩენილი ველი: მანევრი"); თუ (შემომავალი_ჩარი == '.') // გამოვლენილია შემდეგი ველი {აღმოჩენილი_ ველი = მითითებებიField; } else {// შეავსეთ მანევრის ტიპის ინფორმაციის მასივის მანევრი [nbr_char_maneuver] = შემომავალი_ჩარი; nbr_char_maneuver ++; } შესვენება; საქმის ინსტრუქცია ველი: Serial.println ("აღმოჩენილი ველი: ინსტრუქცია"); თუ (შემომავალი_ჩარი == ',') // გამოვლენილია შემდეგი ველი {აღმოჩენილი_ ველი = მანძილიფილდი; } else {// შეავსეთ ინსტრუქციის ინფორმაცია მასივის ინსტრუქციები [nbr_char_instructions] = შემომავალი_ჩართი; nbr_char_instructions ++; } შესვენება; საქმის მანძილი ველი: Serial.println ("აღმოჩენილი ველი: მანძილი"); თუ (შემომავალი_ჩარი == ';') // აღმოჩენილია ჩარჩოს დასასრული {dete_field = endOfFrame; Serial.print ("მანევრირება:"); Serial.println (მანევრი); Serial.print ("ინსტრუქცია:"); Serial.println (ინსტრუქცია); Serial.print ("მანძილი:"); Serial.println (მანძილი); სრულად = ჭეშმარიტი; update_Display (); // სრული ჩარჩო მიღებულია, გაანალიზეთ და აჩვენეთ მიმღების მონაცემები} სხვა {// შეავსეთ მანძილის ინფორმაციის მასივის მანძილი [nbr_char_distance] = შემომავალი_ჩარი; nbr_char_distance ++; } შესვენება; case endOfFrame: if (incoming_char == ':') found_field = maneuverField; // ახალი ჩარჩო გამოვლენილი შესვენება; ნაგულისხმევი: // არაფერი დაარღვიო; } შეფერხება (20);} void update_Display () {// ქეშირება თითოეული char მასივი, რათა თავიდან ავიცილოთ შესაძლო კონფლიქტები memcpy (tempManeuver, maneuver, nbr_char_maneuver); memcpy (tempInstructions, ინსტრუქციები, nbr_char_instructions); memcpy (tempDistance, distance, nbr_char_distance); parseCache (); // ჩაანაცვლეთ და დაამუშავეთ char მასივები სრულმნიშვნელობა = ყალბი; // წინადადება დამუშავებულია, მზად არის მომდევნო} void parseCache () {u8g2.clearBuffer (); // გაასუფთავეთ შიდა მეხსიერება u8g2.setFont (u8g2_font_ncenB10_tr); // აირჩიე შესაფერისი შრიფტი // char მასივები -> string სავალდებულოა substring () ფუნქციის გამოსაყენებლად String maneuverString = tempManeuver; სიმებიანი ინსტრუქციაString = tempInstructions; // პროტოკოლის განხორციელება აქ. ჯერჯერობით მხოლოდ შემობრუნებებს უჭერს მხარს. if (maneuverString.substring (0, 4) == "შემობრუნება") {// მანევრის ტიპის შემოწმება Serial.print ("TURN DETECTED"); if (მითითებებიString.substring (0, 5) == "მარჯვნივ") {// შეამოწმეთ კონკრეტული ინსტრუქციები და შესაბამისად აჩვენეთ u8g2.drawStr (5, 15, "-"); } else if (მითითებებიString.substring (0, 4) == "მარცხნივ") {// შეამოწმეთ კონკრეტული ინსტრუქციები და შესაბამისად აჩვენეთ u8g2.drawStr (5, 15, "<---"); } else u8g2.drawStr (5, 15, "Err."); // ინსტრუქციის არასწორი ველი}/ * განახორციელეთ მანევრის სხვა ტიპები (შემოვლითი წრეები და სხვა..) * სხვა შემთხვევაში (tempManeuver == "rdbt") { * *] */ u8g2.drawStr (5, 30, tempDistance); // დარჩენილი მანძილის ჩვენება u8g2.sendBuffer (); // შიდა მეხსიერების გადატანა ეკრანზე // გადატვირთეთ ყველა char მასივი მომდევნო წაკითხვის მემფეტამდე (მანევრირება, 0, 10); მემსეტი (ინსტრუქცია, 0, 10); მემსეტი (მანძილი, 0, 10); memset (tempManeuver, 0, 10); memset (tempInstructions, 0, 10); memset (tempDistance, 0, 10); // ელემენტების რაოდენობის გადატვირთვა მასივებში nbr_char_distance = 0; nbr_char_instructions = 0; nbr_char_maneuver = 0;}

ნაბიჯი 7: კოდი: Android Side

კოდი: Android Side
კოდი: Android Side
კოდი: Android Side
კოდი: Android Side
კოდი: Android Side
კოდი: Android Side

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

თუ გსურთ ამ აპლიკაციის აშენება სახლში, თქვენ უნდა მიიღოთ Mapbox წვდომის ნიშანი, რომელიც თვეში გარკვეული რაოდენობის მოთხოვნის გარეშეა უფასო. თქვენ უნდა ჩაწეროთ ეს ნიშანი კოდში და შექმნათ აპლიკაცია თქვენს მხარეს. თქვენ ასევე დაგჭირდებათ კოდი თქვენი ESP32– ის Bluetooth MAC მისამართში.

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

თქვენ შეგიძლიათ იპოვოთ მთლიანი წყაროს კოდი ჩემს github– ზე.

ნაბიჯი 8: რა არის შემდეგი?

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

როდესაც ეს ყველაფერი გაკეთდება, მე გავაუმჯობესებ კონტეინერს და მის მიმაგრების მექანიზმს, ვბეჭდავ 3D მას და ვცდილობ, რომ მოდული პირველად გამოვიყენო.

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

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

ნაბიჯი 9: დასკვნა და განსაკუთრებული მადლობა

დასკვნა და განსაკუთრებული მადლობა!
დასკვნა და განსაკუთრებული მადლობა!

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

მინდა უღრმესი მადლობა გადავუხადო Awall99- ს და Danel Quintana- ს, რომელთა შესაბამისი რეალობის პროექტმა დიდი შთაგონება მომცა ამ მოდულის შექმნაში.

გმადლობთ ყველას ყურადღებისთვის, მე აუცილებლად გამოვაქვეყნებ განახლებას, როდესაც ეს პროექტი გაუმჯობესდება უახლოეს მომავალში. ამასობაში, მოგვიანებით გნახავთ ყველას!

გირჩევთ: