সুচিপত্র:
- ধাপ 1: এটি কীভাবে কাজ করে: ডিজাইন পছন্দগুলি ব্যাখ্যা করা হয়েছে
- ধাপ 2: অংশ - মস্তিষ্ক: মাইক্রোকন্ট্রোলার এবং স্ক্রিন
- ধাপ 3: যন্ত্রাংশ - অপটিক্স: একটি আপোষ খোঁজা
- ধাপ 4: যন্ত্রাংশ - তাদের সব ধরে রাখার জন্য একটি ধারক
- ধাপ 5: আমাদের মডিউলের জন্য একটি প্রোটোকল তৈরি করা
- ধাপ 6: কোড: ESP32 সাইড
- ধাপ 7: কোড: অ্যান্ড্রয়েড সাইড
- ধাপ 8: এরপর কি?
- ধাপ 9: উপসংহার এবং বিশেষ ধন্যবাদ
ভিডিও: স্মার্ট মোটরসাইকেল এইচইউডি প্রোটোটাইপ (পালা-মোড় নেভিগেশন এবং আরও অনেক কিছু): Ste টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 07:56
ওহে !
এই ইন্সট্রাকটেবলগুলি হল কিভাবে আমি একটি HUD (হেডস-আপ ডিসপ্লে) প্ল্যাটফর্ম ডিজাইন করেছি এবং তৈরি করেছি যা মোটরসাইকেল হেলমেটে লাগানোর জন্য ডিজাইন করা হয়েছে। এটি "মানচিত্র" প্রতিযোগিতার প্রেক্ষাপটে লেখা হয়েছিল। দুlyখের বিষয়, প্রতিযোগিতার সময়সীমার জন্য আমি এই প্রকল্পটি পুরোপুরি শেষ করতে পারিনি, কিন্তু আমি এখনও এটিতে আমার অগ্রগতি ভাগ করতে চেয়েছিলাম, সেইসাথে এটি তৈরি করার মাধ্যমে আমি যে সমস্ত ট্রায়াল এবং ত্রুটি পেয়েছি তার নথিভুক্ত করতে চাই।
এই প্রজেক্টের আইডিয়াটি আমার কাছে প্রথম এসেছিল কয়েক বছর আগে, যখন আমি মোটরসাইকেলে উঠেছিলাম, এবং আমি আমার রাইডগুলিকে আরো উপভোগ্য করার জন্য কোন গিয়ার কিনতে হবে তা দেখতে শুরু করেছিলাম। সেই সময়ে, এটা আমাকে হতবাক করেছিল যে রাইডিংয়ের সময় কিছু মৌলিক জিপিএস নেভিগেশন পাওয়ার সর্বোত্তম উপায় ছিল মূলত আপনার স্মার্টফোনটিকে আপনার বাইকের হ্যান্ডেলবারের সাথে সংযুক্ত করা। যদিও আমি নিজের কাছে নিশ্চিত যে, উড়ে যাওয়ার সময় এই ধরনের তথ্য পাওয়ার আরও ভাল উপায় হতে পারে।
এটা যখন আমার কাছে আসে: আপনার ফোনের ব্যাটারি খালি না করে, এবং উপাদানগুলির কাছে প্রকাশ না করে, রাইডিংয়ের সময় হেড-আপ ডিসপ্লে নেভিগেশন পাওয়ার উপায় হতে পারে।
সময়ের সাথে সাথে, এই ধারণাটি আমার মনের মধ্যে পরিপক্ক হয়ে ওঠে, এবং আমি যদিও আমার সামনে সর্বদা একটি এইচইউডি থাকা সহজ নেভিগেশনের চেয়ে অনেক বেশি ব্যবহারের অনুমতি দেয়। এই কারণেই আমার প্ল্যাটফর্মটি পাবলিক এবং মডুলার করার জন্য, তাই যে কেউ একটি মডিউল তৈরি করতে পারে যা তাদের নিজস্ব HUD এ প্রয়োজনীয় তথ্য প্রদর্শন করে
যদিও বাণিজ্যিকভাবে উপলভ্য পণ্য রয়েছে যা এই কাজটি পূরণ করে, সেখানে এমন কিছু নেই যা আমার প্ল্যাটফর্মের মতো মডুলার, এবং সেগুলিও একটু দামি হয়ে থাকে। যাই হোক, এই প্রকল্পে আপনাকে স্বাগতম।
এখন পর্যন্ত কি কাজ করে
যেমনটি বলা হয়েছে, এই প্রকল্পটি এখনও একটি উন্নয়নশীল অবস্থায় রয়েছে এবং এটিই বর্তমানে কাজ করছে।
- একটি স্মার্টফোন এবং একটি ESP32 ভিত্তিক বোর্ডের মধ্যে যোগাযোগ (ফোন জাগ্রত)
- অপটিক্স ডিজাইন সম্পন্ন (দীর্ঘমেয়াদে ছোট সমন্বয় প্রয়োজন হতে পারে)
- ম্যাপবক্স নেভিগেশন SDK ব্যবহার করে অ্যান্ড্রয়েড নেভিগেশন অ্যাপ:
- একটি মানচিত্রে ব্যবহারকারীর অবস্থান গণনা এবং প্রদর্শন করতে সক্ষম, সেইসাথে এটি থেকে গন্তব্যে যাওয়ার একটি রুট
- একটি ব্লুটুথ ডিভাইসে সংযোগ করতে সক্ষম (ডিভাইসের ম্যাক ঠিকানা এখন পর্যন্ত হার্ডকোড করা হয়েছে)
- সিরিয়াল ব্লুটুথের মাধ্যমে আসন্ন কৌশলের তথ্য বের করা এবং পাঠানো সহ রিয়েল টাইম নেভিগেশনে সক্ষম (শুধুমাত্র আপাতত টার্ন সমর্থন করে)
কি কাজ প্রয়োজন
এই তালিকায় এমন আইটেম রয়েছে যা HUD- এর উদ্দেশ্যে ব্যবহারের জন্য একেবারে প্রয়োজনীয়, কিন্তু এখনো বাস্তবায়নের জন্য প্রস্তুত নয়।
- সামগ্রিক নকশা (হেলমেট সংযুক্তি, প্রতিফলকের কোণ সমন্বয় প্রক্রিয়া,..)
- অ্যান্ড্রয়েড অ্যাপ:
- অফ-রুট সনাক্তকরণ এবং সংশোধন বাস্তবায়ন করুন
- ব্যবহারকারীর গন্তব্যের ঠিকানা ইনপুট করার ক্ষমতা
- ওয়েপয়েন্ট?
- Ergonomics / Aesthetics
সরবরাহ:
অপরিহার্য
- একটি esp32 ভিত্তিক উন্নয়ন বোর্ড
- যেকোনো সাম্প্রতিক অ্যান্ড্রয়েড স্মার্টফোন (ব্লুটুথ সক্ষম)
- একটি SSD1306 বা অন্যান্য সক্রিয় 96 "OLED স্ক্রিন (আমার 128x64 পিক্সেল ছিল, দেখুন" মস্তিষ্ক: মাইক্রোকন্ট্রোলার এবং স্ক্রিন "অংশ)
- একটি প্রতিফলক (এক্রাইলিক/গ্লাস/প্লেক্সিগ্লাসের যেকোনো টুকরা করবে)
- একটি Fresnel লেন্স (আমার একটি F. দৈর্ঘ্য প্রায় 13cm ছিল, "লেন্স পছন্দ" অংশ দেখুন)
সরঞ্জাম
- তাতাল
- ব্রেডবোর্ড
- কয়েকটি জাম্পার কেবল
- 3 ডি প্রিন্টার / 3 ডি প্রিন্টিং সার্ভিস
ধাপ 1: এটি কীভাবে কাজ করে: ডিজাইন পছন্দগুলি ব্যাখ্যা করা হয়েছে
হেডস আপ ডিসপ্লের মূল ধারণা হল কারো দৃষ্টিভঙ্গির সামনে একটি ছবি প্রদর্শন করা, তাই তারা যা করছে তা থেকে তাদের দূরে সরে যেতে হবে না (এটি প্লেন চালানো হোক, অথবা মোটরসাইকেল চালানো হোক, যা আমাদের হবে উদাহরণ ক্ষেত্রে)।
অপটিক্স
টেকনিক্যালি, এটি সরাসরি ব্যবহারকারীর চোখের সামনে একটি স্ক্রিন লাগিয়ে অর্জন করা যেতে পারে। যাইহোক, একটি পর্দা স্বচ্ছ নয়, এবং সেইজন্য এটি ব্যবহারকারীর দৃষ্টিকে বাধাগ্রস্ত করবে। তারপর আপনি একটি প্রতিফলিত পৃষ্ঠের সামনে পর্দা রাখতে পারেন, যা পর্দার বিষয়বস্তু মিরর করবে এবং যথেষ্ট পরিমাণে দেখতে পাবে যে ব্যবহারকারী তার সামনে কী আছে তা দেখতে পাবে।
যাইহোক, এই পদ্ধতির একটি বিশাল ত্রুটি রয়েছে: প্রকৃত পর্দাটি সাধারণত ব্যবহারকারীর চোখের কাছাকাছি থাকে যা ব্যবহারকারীকে আসলে মনোযোগ দিতে হয় (যেমন তার সামনে রাস্তা)। এর মানে হল যে, প্রতিফলিত পৃষ্ঠায় কি আছে তা পড়ার জন্য, ব্যবহারকারীর চোখকে তার চোখ থেকে ডিসপ্লের দূরত্বের সাথে খাপ খাইয়ে নিতে হবে (ধরা যাক 20 সেমি), এবং তারপর সামনের রাস্তায় ফোকাস করার জন্য আবার মানিয়ে নিতে হবে (~ 2/5 মিটার)। এই পুরো অপারেশনটি যে সময় নেয় তা হল মূল্যবান সময় যা রাস্তার দিকে তাকিয়ে ব্যয় করা উচিত, এবং ঘন ঘন মানিয়ে নেওয়া ব্যবহারকারীর জন্য কয়েক মিনিটের পরে অস্বস্তিকর হতে পারে।
এই কারণেই আমি পর্দা এবং প্রতিফলকের মধ্যে একটি লেন্স যুক্ত করার সিদ্ধান্ত নিয়েছি। এই লেন্স, যদি সাবধানে নির্বাচন করা হয়, তাহলে স্ক্রিনের ভার্চুয়াল ইমেজ তৈরির অনুমতি দেওয়া উচিত (উপরে পরিকল্পিত দেখুন), যা তখন ব্যবহারকারীর চোখ থেকে আরও দূরে দেখা যাবে যেমন এটি আসলে, এইভাবে কম আকস্মিক অভিযোজন প্রয়োজন (অথবা কিছুই নয়, একটি নিখুঁত পরিস্থিতিতে)। এই নকশাটি ব্যবহারকারীকে দ্রুত প্রতিফলকের দিকে নজর দেওয়ার, তার প্রয়োজনীয় তথ্য পেতে এবং তাত্ক্ষণিকভাবে রাস্তার দিকে তাকানোর অনুমতি দেয়।
স্মার্টফোনের ভূমিকা
কারণ শুধুমাত্র ইএসপি 32 -এ একটি সম্পূর্ণ নেভিগেশন অ্যাপ্লিকেশন ব্যবহার করে তা বাস্তবায়ন করা অবাস্তব ছিল, তাই আমি একটি অ্যান্ড্রয়েড অ্যাপ বানানোর সিদ্ধান্ত নিয়েছি যা এর যত্ন নেবে। অ্যাপটি তখন শুধু ESP32 কে জানাতে হবে যে ব্যবহারকারীকে তার গন্তব্যে পৌঁছানোর জন্য কি করতে হবে এবং ESP32 সেই তথ্য রিলে দেয় যদিও HUD ("মডিউল কিভাবে কাজ করে" চিত্রটি দেখুন)।
ধাপ 2: অংশ - মস্তিষ্ক: মাইক্রোকন্ট্রোলার এবং স্ক্রিন
উপরে উল্লিখিত হিসাবে, আমি আমার মডিউল ডিসপ্লে নেভিগেশন তথ্য রাখার পরিকল্পনা করেছি, যখন এটি প্রকৃত অবস্থান, ট্র্যাকিং এবং রিয়েল-টাইম নেভিগেশন গণনা করে না। ব্যবহারকারীর ফোন পরিবর্তে মডিউলের সাথে যোগাযোগ করবে, এবং তথ্যটি HUD- এ প্রদর্শিত হবে।
ব্যবহারকারীর ফোন এবং মডিউলের মধ্যে যোগাযোগের সুবিধার্থে, আমি এই প্রকল্পের জন্য একটি ESP32 ভিত্তিক বোর্ড ব্যবহার করা বেছে নিয়েছি। এই পছন্দটি ছিল এই নির্দিষ্ট মডিউলের সমন্বিত ব্লুটুথ ক্ষমতা, সেইসাথে কয়েকটি অন্যান্য আকর্ষণীয় স্পেসিফিকেশন (নন-ভোলাটাইল স্টোরেজ ব্যবহার করা সহজ, ডুয়াল কোর সিপিইউ, I2C এর মাধ্যমে ওএলইডি ডিসপ্লে চালানোর জন্য যথেষ্ট র RAM্যাম, …)। ইএসপি 32 এর আশেপাশে পিসিবি ডিজাইন করা তুলনামূলকভাবে সহজ, যা আমি বিবেচনায় নিয়েছি। আমার ESP32 এর সাথে সার্কিট ব্যবহার এবং ডিজাইন করার পেশাগত অভিজ্ঞতা আছে, যা অবশ্যই আমার পছন্দকে প্রভাবিত করেছে।
স্ক্রিনের পছন্দটি মূলত আমি যা খুজে পাই তা নিচে নেমে আসে যে আমি যদিও আপনার ব্যবহারের জন্য যথেষ্ট উজ্জ্বল হব, এবং যতটা সম্ভব ছোটও। আমি স্ক্রিনের পিক্সেল সংখ্যা নিয়ে খুব বেশি চিন্তিত ছিলাম না, কারণ আমার উদ্দেশ্য ছিল খুব সহজ এবং সহজ UI থাকা।
এটি লক্ষ করা উচিত যে স্ক্রিন ড্রাইভারকে একটি লাইব্রেরি দ্বারা সমর্থিত করা উচিত যা ইমেজ মিররিংয়ের অনুমতি দেয়। এর কারণ হল যে প্রদর্শিত ছবিটি যখন লেন্সের মধ্য দিয়ে যায় এবং প্রতিফলকটিতে প্রদর্শিত হয়, এবং যা প্রদর্শিত হয় তা ম্যানুয়ালি বিপরীত না করা আমাদের নির্মাতা হিসাবে আমাদের কাঁধ থেকে একটি বিশাল ওজন।
ধাপ 3: যন্ত্রাংশ - অপটিক্স: একটি আপোষ খোঁজা
এই প্রকল্পের জন্য অপটিক্সের কাছে পৌঁছানো বেশ কঠিন ছিল, কারণ যখন আমি প্রথম এই প্রকল্পটি শুরু করি তখন আমি কী খুঁজছিলাম তা আমার কোনও ধারণা ছিল না। কিছু গবেষণার পরে, আমি বুঝতে পেরেছিলাম যে আমি যা করতে চেয়েছিলাম তা হল আমার OLED স্ক্রিনের একটি "ভার্চুয়াল ইমেজ" তৈরি করা, যা আসলে চোখের চেয়ে অনেক দূরে থাকবে। এই ভার্চুয়াল ইমেজ গঠনের জন্য আদর্শ দূরত্ব হবে ড্রাইভারের সামনে প্রায় 2-5 মিটার, এটি মনে হয় আমরা গাড়ি চালানোর সময় যে বস্তুর দিকে মনোযোগ দিই তার দূরত্ব (অন্যান্য গাড়ি, রাস্তায় বাধা ইত্যাদি))।
সেই লক্ষ্য অর্জনের জন্য, আমি একটি ফ্রেসেনেল লেন্স ব্যবহার করা বেছে নিলাম, কারণ এগুলি বেশ বড়, সস্তা, তারা আমার প্রকল্পের জন্য যথেষ্ট ভাল ফোকাল দূরত্বের প্রস্তাব দেয় এবং সেগুলি সাধারণ কাঁচি দিয়ে কাটা যেতে পারে (যা এর ক্ষেত্রে নয় আরো পরিমার্জিত গোল আকৃতির কাচের লেন্স)। Fresnel লেন্স "পকেট ম্যাগনিফায়ার" বা "রিডিং কার্ড ম্যাগনিফায়ার" এর মতো নাম পাওয়া যেতে পারে, কারণ সেগুলি খারাপ দৃষ্টিশক্তিকে পড়তে সাহায্য করার জন্য খুবই উপযুক্ত।
মূলত, এখানে কৌশলটি এর মধ্যে সঠিক সমঝোতা খোঁজার বিষয়ে ছিল:
- একটি যুক্তিসঙ্গত ভার্চুয়াল ইমেজ দূরত্ব (অর্থাৎ, ব্যবহারকারীর কাছে HUD কতদূর মনে হবে, অথবা HUD- এ কী আছে তা দেখতে ব্যবহারকারীকে তার চোখ কতটা সামঞ্জস্য করতে হবে)
- স্ক্রিনে টেক্সট থাকার ফলে লেন্স দ্বারা খুব বড় করা যাবে না (যা মূলত একটি ম্যাগনিফায়ার)
- OLED স্ক্রিন এবং লেন্সের মধ্যে যুক্তিসঙ্গত দূরত্ব থাকা, যা অন্যথায় একটি খুব ভারী মডিউল হতে পারে
আমি ব্যক্তিগতভাবে অ্যামাজনে কয়েকটি ভিন্ন লেন্স অর্ডার করেছি, এবং তাদের নিজ নিজ ফোকাল দৈর্ঘ্য নির্ধারণ করেছি, প্রায় 13 সেন্টিমিটার F. দৈর্ঘ্যের একটি বেছে নেওয়ার আগে। আমি 9 সেমি OLED- লেন্স দূরত্বের সাথে এই F. দৈর্ঘ্য খুঁজে পেয়েছি, আমাকে আমার প্রতিফলকটিতে একটি সন্তোষজনক চিত্র দিয়েছে (উপরের শেষ কয়েকটি ছবি দেখুন)।
যেমন আপনি আমার দৃষ্টান্তগুলিতে দেখবেন, প্রদর্শিত পাঠ্যের উপর যথাযথভাবে ফোকাস করার জন্য, এই ছবিগুলি তোলার জন্য ব্যবহৃত ক্যামেরাটি এমনভাবে সামঞ্জস্য করতে হবে যেন এটি একটি দূরবর্তী বস্তুর উপর ফোকাস করছে, যা প্রতিবিম্বের মতো একই সমতলে সবকিছুকে অস্পষ্ট মনে করে । আমরা আমাদের এইচইউডির জন্য ঠিক এটাই চাই।
আপনি এখানে লেন্স ধারকের জন্য 3 ডি ফাইলগুলি খুঁজে পেতে পারেন।
ধাপ 4: যন্ত্রাংশ - তাদের সব ধরে রাখার জন্য একটি ধারক
যেহেতু আমি এই নির্দেশাবলী লিখছি, আসল ধারক যা হেড-আপ ডিসপ্লের প্রতিটি অংশ ধরে রাখবে তা বেশ ডিজাইন করা হয়নি। তবে এর সাধারণ আকৃতি সম্পর্কে এবং কিছু নির্দিষ্ট সমস্যার সাথে কিভাবে যোগাযোগ করা যায় সে সম্পর্কে আমার কিছু ধারণা আছে (যেমন একটি প্রতিফলককে কীভাবে ধরে রাখা যায় এবং এটি 100+ কিমি/ঘন্টা বাতাস সহ্য করে)। এটি এখনও অনেক এগিয়ে চলছে।
ধাপ 5: আমাদের মডিউলের জন্য একটি প্রোটোকল তৈরি করা
ফোন থেকে ডেভেলপমেন্ট বোর্ডে নেভিগেশন নির্দেশাবলী পাঠানোর জন্য, আমাকে আমার নিজের একটি যোগাযোগ প্রোটোকল নিয়ে আসতে হয়েছিল যা আমাকে ফোন থেকে প্রয়োজনীয় ডেটা সহজেই প্রেরণের অনুমতি দেবে, এবং একবার এটির প্রসেসিংয়ের সুবিধাও দেবে।
এই নির্দেশাবলী লেখার সময়, মডিউল দিয়ে নেভিগেট করার জন্য ফোন থেকে যে তথ্য প্রেরণের প্রয়োজন ছিল সেগুলি হল:
- আসন্ন কৌশলের ধরন (সরল পালা, গোল চত্বর, অন্য রাস্তায় মিশে যাওয়া, …)
- আসন্ন কৌশলের সুনির্দিষ্ট নির্দেশাবলী (কৌশলের প্রকারের উপর নির্ভর করে: একটি পালার জন্য ডান/বাম; যা একটি চক্রের জন্য বেরিয়ে যেতে হবে, …)
- আসন্ন কৌশলের আগে অবশিষ্ট দূরত্ব (আপাতত মিটারে)
আমি নিম্নলিখিত ফ্রেম কাঠামো ব্যবহার করে এই ডেটা সংগঠিত করার সিদ্ধান্ত নিয়েছি:
: type.instructions, দূরত্ব;
একটি সুন্দর সমাধান না হওয়া সত্ত্বেও, এটি আমাদের আমাদের প্রোটোকলের প্রতিটি ক্ষেত্রকে সহজেই আলাদা এবং আলাদা করতে দেয়, যা ESP32 পাশে কোডিংকে সহজতর করে।
এটি মনে রাখা গুরুত্বপূর্ণ যে, ভবিষ্যতের বৈশিষ্ট্যগুলির জন্য, এই প্রোটোকলে অন্যান্য তথ্য যোগ করার প্রয়োজন হতে পারে (যেমন সঠিক দিন এবং সময়, অথবা ব্যবহারকারীর ফোনে বাজানো সঙ্গীত), যা একই ব্যবহার করে সহজেই সম্ভব হবে এখনকার মতো যুক্তি নির্মাণ।
ধাপ 6: কোড: ESP32 সাইড
ESP32 এর কোড বর্তমানে বেশ সহজ। এটি U8g2lib লাইব্রেরি ব্যবহার করে, যা OLED স্ক্রিনের সহজ নিয়ন্ত্রণ সক্ষম করে (প্রদর্শিত চিত্রের মিররিং সক্ষম করার সময়)।
মূলত, সমস্ত ESP32 ব্লুটুথের মাধ্যমে সিরিয়াল ডেটা গ্রহণ করে যখন অ্যাপটি এটি পাঠায়, এটি বিশ্লেষণ করে এবং এই ডেটার উপর ভিত্তি করে এই ডেটা বা ছবিগুলি প্রদর্শন করে (যেমন। "বাম/ডানদিকে" বাক্যের পরিবর্তে একটি তীর প্রদর্শন করা)। এখানে কোড:
/*সিরিয়াল ব্লুটুথের মাধ্যমে একটি অ্যান্ড্রয়েড অ্যাপ থেকে একটি HUD নিয়ন্ত্রণ করার প্রোগ্রাম*/#"BluetoothSerial.h" // সিরিয়াল ব্লুটুথের জন্য হেডার ফাইল, ডিফল্টরূপে Arduino এ যোগ করা হবে#অন্তর্ভুক্ত #include #ifdef U8X8_HAVE_HW_SPI#অন্তর্ভুক্ত#endif# ifdef U8X8_HAVE_HW_I2C #অন্তর্ভুক্ত #endif // OLED লাইব্রেরি কনস্ট্রাক্টর, আপনার স্ক্রিন অনুযায়ী সেই অনুযায়ী পরিবর্তন করতে হবে // স্টেট মেশিন সনাক্ত_ফিল্ড ভ্যালু + ভেরিয়েবল#ডিফাইন ম্যানুভারফিল্ড 1#নির্দেশাবলী নির্ধারণ করুন ফিল্ড 2#ডিস্টাইন ডিফাইন করুনফিল্ড 3#এন্ডঅফফ্রেম 4 এন্ট ডিটেক্ট_ফিল্ড = এন্ডঅফফ্রেম; ব্লুটুথ সিরিয়াল সিরিয়ালবিটি; // ব্লুটুথচার ইনকামিং_চারের জন্য অবজেক্ট; চর ম্যানুভার [10]; চার ইন্সট্রাকশন [10]; চার ডিস্টেন্স [10]; চার টেম্প ম্যানুভার [10]; চার টেম্প ইন্সট্রাকশন [10]; চার টেম্পডিস্টেন্স [10]; ইন্ট nbr_char_maneuver = 0; int nbr_char_instructions = 0; int nbr_char_distance = 0; বুলিয়ান ফুলসেন্টেন্স = মিথ্যা; অকার্যকর সেটআপ () {Serial.begin (9600); // 9600 bauds u8g2.begin () এ সিরিয়াল মনিটর শুরু করুন; // Init OLED কন্ট্রোল serialBT.begin ("ESP32_BT"); // ব্লুটুথ সিগন্যাল বিলম্বের নাম (20); Serial.println ("ব্লুটুথ ডিভাইস জোড়ার জন্য প্রস্তুত");} অকার্যকর লুপ () {যদি (serialBT.available () &&! Fullsentence) // ব্লুটুথ সিরিয়াল {incoming_char = serialBT.read (); সিরিয়াল.প্রিন্ট ("প্রাপ্ত:"); Serial.println (ইনকামিং_চার); } সুইচ (সনাক্ত করা_ফিল্ড) {কেস maneuverField: Serial.println ("সনাক্তকৃত ক্ষেত্র: কৌশল"); যদি (ইনকামিং_চার == '।') // পরবর্তী ক্ষেত্র সনাক্ত {detect_field = instructionsField; } অন্যথায় {// ম্যানুভার টাইপ ইনফো অ্যারে ম্যানুভার পূরণ করুন nbr_char_maneuver ++; } বিরতি; ক্ষেত্রে নির্দেশাবলী ক্ষেত্র: Serial.println ("সনাক্তকৃত ক্ষেত্র: নির্দেশাবলী"); যদি (ইনকামিং_চার == ',') // পরবর্তী ক্ষেত্র সনাক্ত {detect_field = distanceField; } অন্যথায় {// নির্দেশাবলী তথ্য অ্যারে নির্দেশাবলী পূরণ করুন nbr_char_instructions ++; } বিরতি; ক্ষেত্রে দূরত্বের ক্ষেত্র: Serial.println ("সনাক্তকৃত ক্ষেত্র: দূরত্ব"); যদি (ইনকামিং_চার == ';') // ফ্রেমের শেষ সনাক্ত করা হয়েছে {detect_field = endOfFrame; সিরিয়াল.প্রিন্ট ("কৌশলে:"); Serial.println (কৌশলে); সিরিয়াল.প্রিন্ট ("নির্দেশাবলী:"); Serial.println (নির্দেশাবলী); সিরিয়াল.প্রিন্ট ("দূরত্ব:"); Serial.println (দূরত্ব); fullsentence = সত্য; update_Display (); // সম্পূর্ণ ফ্রেম পেয়েছে, এটি বিশ্লেষণ করুন এবং রিসিভার ডেটা প্রদর্শন করুন} অন্যথায় {// দূরত্ব তথ্য অ্যারের দূরত্ব পূরণ করুন [nbr_char_distance] = ইনকামিং_চার; nbr_char_distance ++; } বিরতি; case endOfFrame: if (incoming_char == ':') detect_field = maneuverField; // নতুন ফ্রেম সনাক্ত করা বিরতি; ডিফল্ট: // কিছু বিরতি না; } বিলম্ব (২০); memcpy (tempInstructions, নির্দেশাবলী, nbr_char_instructions); memcpy (tempDistance, দূরত্ব, nbr_char_distance); parseCache (); // বিশ্লেষণ এবং প্রক্রিয়া চার অ্যারে fullsentence = মিথ্যা; // বাক্য প্রক্রিয়া করা হয়েছে, পরেরটির জন্য প্রস্তুত} void parseCache () {u8g2.clearBuffer (); // অভ্যন্তরীণ মেমরি পরিষ্কার করুন u8g2.setFont (u8g2_font_ncenB10_tr); // একটি উপযুক্ত ফন্ট চয়ন করুন // char অ্যারে -> স্ট্রিং সাবস্ট্রিং () ফাংশন ব্যবহার করতে বাধ্যতামূলক স্ট্রিং maneuverString = tempManeuver; স্ট্রিং নির্দেশাবলী স্ট্রিং = tempInstructions; // এখানে প্রোটোকল বাস্তবায়ন। আপাতত শুধুমাত্র পালা সমর্থন করে। যদি (maneuverString.substring (0, 4) == "turn") {// maneuver type Serial.print ("TURN DETECTED") পরীক্ষা করুন; যদি (instructionsString.substring (0, 5) == "right") {// নির্দিষ্ট নির্দেশাবলী পরীক্ষা করুন এবং সেই অনুযায়ী u8g2.drawStr (5, 15, "-") প্রদর্শন করুন; } অন্যথায় হলে } অন্যথায় u8g2.drawStr (5, 15, "Err।"); // অবৈধ নির্দেশাবলী ক্ষেত্র}/ * অন্য কৌশলের ধরন (রাউন্ডআউট ইত্যাদি) বাস্তবায়ন করুন * অন্যথায় (tempManeuver == "rdbt") { * *] */ u8g2.drawStr (5, 30, tempDistance); // অবশিষ্ট দূরত্ব প্রদর্শন u8g2.sendBuffer (); // ডিসপ্লেতে অভ্যন্তরীণ মেমরি স্থানান্তর করুন // পরবর্তী পড়ার মেমসেট (কৌশল, 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: কোড: অ্যান্ড্রয়েড সাইড
স্মার্টফোন অ্যাপের জন্য, আমি ম্যাপবক্সের ন্যাভিগেশন এসডিকে ব্যবহার করার সিদ্ধান্ত নিয়েছি, কারণ এটি শুরু থেকে নেভিগেশন মানচিত্র তৈরির ক্ষেত্রে অনেক দরকারী বৈশিষ্ট্য সরবরাহ করে। এটি অনেক দরকারী শ্রোতাদের ব্যবহারের অনুমতি দেয়, যা অবশ্যই এই মডিউলটিকে কাজ করতে সাহায্য করে। আমি অ্যান্ড্রয়েডের জন্য হ্যারি 1453 এর অ্যান্ড্রয়েড-ব্লুটুথ-সিরিয়াল লাইব্রেরি ব্যবহার করেছি, কারণ এটি ব্লুটুথ সিরিয়াল যোগাযোগকে একত্রিত করা অনেক সহজ করে দিয়েছে।
আপনি যদি বাড়িতে এই অ্যাপটি তৈরি করতে চান, তাহলে আপনাকে একটি ম্যাপবক্স অ্যাক্সেস টোকেন পেতে হবে, যা প্রতি মাসে নির্দিষ্ট সংখ্যক অনুরোধ পর্যন্ত বিনামূল্যে। আপনাকে কোডটিতে এই টোকেনটি রাখতে হবে এবং আপনার পাশে অ্যাপটি তৈরি করতে হবে। আপনার নিজের ESP32 এর ব্লুটুথ ম্যাক ঠিকানায় কোড করতে হবে।
এটি যেমন দাঁড়িয়ে আছে, অ্যাপটি আপনাকে আপনার বর্তমান অবস্থান থেকে যে কোনো স্থানে ম্যাপে ক্লিক করতে নির্দেশ দিতে পারে। ভূমিকাতে উল্লিখিত হিসাবে, তবে, এটি পালা ছাড়া অন্য কোন চালাকি সমর্থন করে না, এবং এখনও অফ-রুটগুলি পরিচালনা করে না।
আপনি আমার github এ পুরো উৎস কোড খুঁজে পেতে পারেন।
ধাপ 8: এরপর কি?
এখন যেহেতু অ্যাপটি তার ব্যবহারকারীকে একটি নির্দিষ্ট রুটে গাইড করার জন্য যথেষ্ট কার্যকরী (যদি সেট রুট থেকে কোন বিচ্যুতি না থাকে), আমার প্রধান ফোকাস হবে স্মার্টফোন অ্যাপের উন্নতি করা, এবং কয়েকটি সক্ষমতা বাস্তবায়ন করা যা মডিউলকে তৈরি করবে কার্যকর ন্যাভিগেশন ডিভাইস। এর মধ্যে রয়েছে স্ক্রিন বন্ধ থাকা সত্ত্বেও ফোন থেকে ব্লুটুথ যোগাযোগ সক্ষম করা, সেইসাথে অন্যান্য ধরণের কৌশলের জন্য সমর্থন (গোলাকার, মার্জ করা, …)। যদি ব্যবহারকারী মূল পথ থেকে বিচ্যুত হয় তবে আমি একটি পুনoutনির্মাণ বৈশিষ্ট্যও বাস্তবায়ন করব।
যখন এই সব সম্পন্ন করা হয়, আমি ধারক এবং তার সংযুক্তি প্রক্রিয়া উন্নত করব, এটি 3 ডি মুদ্রণ করব, এবং প্রথম রান করার জন্য মডিউলটি চেষ্টা করে নেব।
যদি সবকিছু ঠিক থাকে, আমার দীর্ঘমেয়াদী উদ্দেশ্য হল এই প্রকল্পের এমবেডেড ইলেকট্রনিক্সের জন্য একটি কাস্টম PCB ডিজাইন করা, যা চূড়ান্ত পণ্যের অনেক জায়গা বাঁচাবে।
আমি ভবিষ্যতে এই মডিউলটিতে আরও কিছু বৈশিষ্ট্য যোগ করতে পারি, যার মধ্যে একটি সময় প্রদর্শন, সেইসাথে একটি ফোন বিজ্ঞপ্তি অ্যালার্ম, যা ব্যবহারকারী একটি পাঠ্য বার্তা বা একটি কল পাওয়ার সময় একটি আইকন প্রদর্শিত করতে পারে। অবশেষে আমি এই মডিউলে Spotify ক্ষমতা যোগ করতে চাই, একটি বিশাল সঙ্গীত অনুরাগী হিসাবে। যাইহোক, এই সময়ে, এটি শুধুমাত্র একটি চমৎকার।
ধাপ 9: উপসংহার এবং বিশেষ ধন্যবাদ
ভূমিকায় বলা হয়েছে, যদিও এই প্রকল্পটি শেষ হওয়া থেকে অনেক দূরে, আমি সত্যিই এটি বিশ্বের সাথে ভাগ করতে চেয়েছিলাম, আশা করি এটি অন্য কাউকে অনুপ্রাণিত করবে।আমি এই বিষয়ে আমার গবেষণার নথিভুক্ত করতে চেয়েছিলাম, কারণ এআর এবং এইচইউডি -তে খুব বেশি শখের আগ্রহ নেই, যা আমি লজ্জাজনক মনে করি।
আমি Awall99 এবং Danel Quintana কে একটি বিশাল ধন্যবাদ দিতে চাই, যাদের নিজ নিজ বর্ধিত বাস্তবতা প্রকল্প আমাকে এই মডিউল তৈরিতে অনেক অনুপ্রাণিত করেছে।
আপনার মনোযোগের জন্য সবাইকে ধন্যবাদ, অদূর ভবিষ্যতে এই প্রকল্পটি উন্নত হলে আমি একটি আপডেট পোস্ট করতে ভুলব না। ইতিমধ্যে, পরে সব দেখা হবে!
প্রস্তাবিত:
VBScript বুনিয়াদি - আপনার স্ক্রিপ্ট শুরু, বিলম্ব এবং আরও অনেক কিছু !: ৫ টি ধাপ
VBScript বেসিক - আপনার স্ক্রিপ্ট শুরু করা, বিলম্ব এবং আরও অনেক কিছু! .Vbs ফাইল দিয়ে, আপনি কিছু মজার ঠাট্টা বা মারাত্মক ভাইরাস তৈরি করতে পারেন। এই টিউটোরিয়ালে, আমি আপনাকে আপনার স্ক্রিপ্ট শুরু করা, ফাইল খোলার এবং আরও অনেক কিছু করার মতো মৌলিক কমান্ড দেখাব। টি তে
আমি Nodemcu, L298N মোটর ড্রাইভ এবং আরও অনেক কিছু ব্যবহার করে ওয়াইফাই রোবটে একটি পুরানো সিডি ড্রাইভ তৈরি করেছি।: 5 টি ধাপ
আমি Nodemcu, L298N মোটর ড্রাইভ এবং আরও অনেক কিছু ব্যবহার করে ওয়াইফাই রোবটে একটি পুরনো সিডি ড্রাইভ তৈরি করেছি।: VX Robotics & ইলেকট্রনিক্স প্রেজেন্ট
নোটপ্যাডে একটি গেম তৈরি করা এবং আরও অনেক কিছু: 10 টি ধাপ
নোটপ্যাডে একটি গেম তৈরি করা এবং আরও অনেক কিছু: এটি আমার প্রথম নির্দেশযোগ্য। তাই আপনার কোন পরামর্শ থাকলে কমেন্ট করুন। চলুন শুরু করা যাক! যখন আমরা সবাই নোটপ্যাড শব্দটি শুনি তখন আমরা কিছু বিরক্তিকর অকেজো অ্যাপ্লিকেশনের কথা ভাবি যাতে জিনিস নোট করা যায়। ভাল নোটপ্যাড এর চেয়ে অনেক বেশি।
ভয়েস কন্ট্রোল লাইট ইলেকট্রনিক্স আরজিবি লেড স্ট্রিপস এবং আরও অনেক কিছু কর্টানা এবং আরডুইনো হোম অটোমেশনের সাথে: 3 টি ধাপ
ভয়েস কন্ট্রোল লাইট ইলেকট্রনিক্স আরজিবি লেড স্ট্রিপস এবং আরও অনেক কিছু কর্টানা এবং আরডুইনো হোম অটোমেশনের সাথে: আপনার ভয়েস দিয়ে জিনিসগুলি নিয়ন্ত্রণ করার আইডিয়ার মত? অথবা লাইট বন্ধ করতে বিছানা থেকে উঠতে পছন্দ করেন না? কিন্তু গুগল হোমের মতো সব বিদ্যমান সমাধান খুব ব্যয়বহুল? এখন আপনি 10 ডলারের নিচে এটি নিজেই তৈরি করতে পারেন। এবং আরও ভাল এটা খুব সহজ
পোষা খাদ্য (কুকুর, বিড়াল, মুরগি, ইত্যাদি), বল নিক্ষেপ এবং আরও অনেক কিছু করার জন্য স্বয়ংক্রিয় ক্যাটাপল্ট
পোষা খাদ্য (কুকুর, বিড়াল, মুরগি, ইত্যাদি), বল নিক্ষেপ এবং আরো অনেক কিছু করার জন্য স্বয়ংক্রিয় ক্যাটপাল্ট! আমি এটিকে ধীর করার উপায়গুলি তৈরি করছি, ভেতরের খাবারের সাথে বল থেকে পুরো বাড়ির উঠোনে ফেলে দেওয়া। আশ্চর্যজনকভাবে, সে