সুচিপত্র:

বাটার রোবট: অস্তিত্ব সংকটের সাথে আরডুইনো রোবট: 6 টি ধাপ (ছবি সহ)
বাটার রোবট: অস্তিত্ব সংকটের সাথে আরডুইনো রোবট: 6 টি ধাপ (ছবি সহ)

ভিডিও: বাটার রোবট: অস্তিত্ব সংকটের সাথে আরডুইনো রোবট: 6 টি ধাপ (ছবি সহ)

ভিডিও: বাটার রোবট: অস্তিত্ব সংকটের সাথে আরডুইনো রোবট: 6 টি ধাপ (ছবি সহ)
ভিডিও: নদীর নাব্য ফেরাতে ৩৩৫০ কোটি টাকার প্রকল্প! | River Route | Business | Somoy TV 2024, জুলাই
Anonim
Image
Image

এই প্রকল্পটি অ্যানিমেশন সিরিজ "রিক অ্যান্ড মর্টি" এর উপর ভিত্তি করে তৈরি। একটি পর্বে রিক একটি রোবট বানায় যার একমাত্র উদ্দেশ্য মাখন আনা। ব্রুফেস (ব্রাসেলস ফ্যাকাল্টি অফ ইঞ্জিনিয়ারিং) এর ছাত্র হিসাবে আমাদের মেকাট্রনিক্স প্রকল্পের জন্য একটি অ্যাসাইনমেন্ট আছে যা একটি প্রস্তাবিত বিষয়ের উপর ভিত্তি করে একটি রোবট তৈরি করা। এই প্রকল্পের জন্য কাজ হল: একটি রোবট তৈরি করুন যা শুধুমাত্র মাখন পরিবেশন করে। এটি একটি অস্তিত্বগত সংকট হতে পারে। অবশ্যই রিক এবং মর্টি পর্বের রোবটটি বেশ জটিল রোবট এবং কিছু সরলীকরণ করা দরকার:

যেহেতু এর একমাত্র উদ্দেশ্য হল মাখন আনা, তাই আরো সহজবোধ্য বিকল্প আছে। রোবটটিকে দেখতে এবং মাখন ধরার পরিবর্তে, এটি সঠিক ব্যক্তির কাছে আনার আগে, রোবটটি সব সময় মাখন বহন করতে পারে। মূল ধারণা হল এমন একটি কার্ট তৈরি করা যা মাখনকে যেখানে প্রয়োজন সেখানে নিয়ে যায়।

মাখন পরিবহন ছাড়াও, রোবটকে জানতে হবে যে তাকে মাখন কোথায় আনতে হবে। পর্বে, রিক রোবটকে কল এবং কমান্ড করার জন্য তার ভয়েস ব্যবহার করে। এর জন্য একটি ব্যয়বহুল ভয়েস স্বীকৃতি সিস্টেম প্রয়োজন এবং এটি জটিল হবে। পরিবর্তে, টেবিলে প্রত্যেকে একটি বোতাম পায়: একবার এই বোতামটি সক্রিয় হয়ে গেলে, রোবট এই বোতামটি সনাক্ত করতে পারে এবং তার দিকে এগিয়ে যেতে পারে।

পুনরুদ্ধার করতে, রোবটটির নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করতে হবে:

  • এটি নিরাপদ হওয়া প্রয়োজন: এটি অবশ্যই বাধা এড়াবে এবং টেবিলের পতন থেকে নিজেকে রোধ করবে;
  • রোবটটি ছোট হওয়া দরকার: টেবিলে স্থান সীমিত এবং কেউই এমন রোবট চাইবে না যা মাখন পরিবেশন করে কিন্তু টেবিলের অর্ধেক আকার;
  • রোবটের কাজ টেবিলের আকার বা আকৃতির উপর নির্ভর করতে পারে না, এইভাবে এটি বিভিন্ন টেবিলে ব্যবহার করা যেতে পারে;
  • এটি টেবিলে সঠিক ব্যক্তির কাছে মাখন আনতে হবে।

ধাপ 1: মূল ধারণা

পূর্বে উল্লিখিত প্রয়োজনীয়তা বিভিন্ন কৌশল ব্যবহার করে পূরণ করা যেতে পারে। যে মূল নকশাটি করা হয়েছিল সে সম্পর্কে সিদ্ধান্তগুলি এই ধাপে ব্যাখ্যা করা হয়েছে। এই ধারনাগুলি কিভাবে বাস্তবায়িত হয় সে সম্পর্কে বিস্তারিত নিম্নলিখিত ধাপে পাওয়া যাবে।

তার দায়িত্ব পালনের জন্য, রোবটটিকে গন্তব্যে না পৌঁছানো পর্যন্ত চলাচল করতে হবে। রোবটের প্রয়োগ বিবেচনা করে এটা সোজা যে "হাঁটার" গতির পরিবর্তে চাকা ব্যবহার করা এটিকে সরানো ভাল। যেহেতু একটি টেবিল একটি সমতল পৃষ্ঠ এবং রোবট খুব বেশি গতিতে পৌঁছাবে না, তাই দুটি সক্রিয় চাকা এবং একটি কাস্টার বল হল সবচেয়ে সহজ এবং নিয়ন্ত্রণের সহজ সমাধান। সক্রিয় চাকা দুটি মোটর দ্বারা চালিত করা প্রয়োজন। মোটরগুলির একটি বড় টর্ক থাকা দরকার কিন্তু তাদের উচ্চ গতিতে পৌঁছানোর দরকার নেই, সেজন্য ক্রমাগত সার্ভো মোটর ব্যবহার করা হবে। সার্ভো মোটরের আরেকটি সুবিধা হল একটি Arduino এর সাথে ব্যবহারের সরলতা।

একটি অতিস্বনক সেন্সর ব্যবহার করে বাধাগুলি সনাক্ত করা যেতে পারে যা পরিমাপের দিকটি নির্বাচন করার জন্য একটি সার্ভো মোটরের সাথে সংযুক্ত দূরত্ব পরিমাপ করে। এলডিআর সেন্সর ব্যবহার করে প্রান্তগুলি সনাক্ত করা যায়। এলডিআর সেন্সর ব্যবহার করে এমন একটি ডিভাইস নির্মাণের প্রয়োজন হবে যাতে একটি LED আলো এবং একটি LDR সেন্সর থাকবে। একটি এলডিআর সেন্সর প্রতিফলিত আলোকে পরিমাপ করে এবং এটি এক ধরণের দূরত্ব সেন্সর হিসাবে দেখা যায়। একই নীতি ইনফ্রারেড আলোর সাথে বিদ্যমান। কিছু ইনফ্রারেড প্রক্সিমিটি সেন্সর আছে যার ডিজিটাল আউটপুট আছে: বন্ধ বা বন্ধ না। রোবটের প্রান্তগুলি সনাক্ত করার জন্য ঠিক এটিই প্রয়োজন। দুটি পোকামাকড় অ্যান্টেনা এবং একটি সক্রিয় আল্ট্রাসোনিক সেন্সরের মতো 2 টি প্রান্ত সেন্সর একত্রিত করে, রোবটটি বাধা এবং প্রান্তগুলি এড়াতে সক্ষম হওয়া উচিত।

আইআর সেন্সর এবং এলইডি ব্যবহার করে বোতাম সনাক্তকরণও সম্পন্ন করা যায়। আইআর এর সুবিধা হল এটি অদৃশ্য যা টেবিলে থাকা লোকদের জন্য এটির ব্যবহার অ বিরক্তিকর করে তোলে। লেজারগুলিও ব্যবহার করা যেতে পারে, কিন্তু তারপর আলো দৃশ্যমান হবে এবং বিপজ্জনক হবে যখন কেউ লেজারটিকে অন্য ব্যক্তির চোখে নির্দেশ করবে। এছাড়াও, ব্যবহারকারীকে কেবল পাতলা লেজার রশ্মি দিয়ে রোবটের সেন্সরগুলি লক্ষ্য করতে হবে, যা বেশ বিরক্তিকর হবে। রোবটটিকে দুটি আইআর সেন্সর দিয়ে সজ্জিত করে এবং আইআর-এর নেতৃত্বে বোতামটি নির্মাণ করে, রোবট জানে যে কোন দিকে যেতে হবে আইআর-আলোর তীব্রতা অনুসরণ করে। যখন কোন বোতাম নেই তখন রোবট ঘুরতে পারে যতক্ষণ না একটি এলইডি একটি বোতাম থেকে সিগন্যাল ক্যাপচার করে।

মাখন রোবটের উপরে একটি বগিতে রাখা হয়। এই বগিটি বাক্সটি খুলতে একটি বাক্স এবং একটি সক্রিয় lাকনা নিয়ে গঠিত হতে পারে। Idাকনা খোলার জন্য এবং অতিস্বনক সেন্সরটি সরানোর জন্য স্ক্যান করতে এবং বাধাগুলি সনাক্ত করতে আমাদের দুটি মোটর প্রয়োজন এবং এই উদ্দেশ্যে, অবিচ্ছিন্ন সার্ভো মোটরগুলি আরও বেশি অভিযোজিত হয় কারণ মোটরগুলিকে একটি নির্দিষ্ট অবস্থানে যেতে হবে এবং সেই অবস্থানটি বজায় রাখতে হবে।

প্রকল্পের একটি অতিরিক্ত বৈশিষ্ট্য ছিল রোবট ভয়েস দিয়ে বাইরের পরিবেশের সাথে যোগাযোগ করা। একটি বুজার সহজ এবং এই উদ্দেশ্যে অভিযোজিত কিন্তু এটি যে কোন সময় ব্যবহার করা যাবে না কারণ নিরাময় ড্র বেশি।

প্রকল্পের প্রধান অসুবিধাগুলি কোডিংয়ের উপর নির্ভর করে, কারণ যান্ত্রিক অংশটি বেশ সোজা। আমাদের যে প্রধান সমস্যাগুলি সমাধান করতে হবে তা হল একটি বাধার কারণে আইআর সিগন্যাল হারানো এবং বোতামে পৌঁছলে থেমে যাওয়া!

ধাপ 2: উপকরণ

যান্ত্রিক যন্ত্রাংশ

  • থ্রিডি প্রিন্টার এবং লেজার কাটার মেশিন

    • পিএলএ 3D প্রিন্টিংয়ের জন্য ব্যবহার করা হবে কিন্তু আপনি ABS ব্যবহার করতে পারেন
    • লেজার কাটার জন্য 3 মিমি বার্চ প্লাইউডের একটি প্লেট ব্যবহার করা হবে কারণ এটি পরবর্তীতে সহজেই পরিবর্তন করার সম্ভাবনা দেয়, প্লেক্সিগ্লাসও ব্যবহার করা যেতে পারে কিন্তু এটিকে ধ্বংস না করে একবার লেজার কাটলে এটি সংশোধন করা আরও কঠিন।
  • বোল্ট, বাদাম, ওয়াশার

    বেশিরভাগ উপাদান এম 3 বাটনহেড বোল্ট, ওয়াশার এবং বাদাম ব্যবহার করে একসাথে রাখা হয়, কিন্তু তাদের মধ্যে কিছু এম 2 বা এম 4 বোল্ট সেট প্রয়োজন। বোল্টগুলির দৈর্ঘ্য 8-12 মিমি পরিসরে।

  • পিসিবি স্পেসার, 25 মিমি এবং 15 মিমি
  • 2 সামঞ্জস্যপূর্ণ চাকার সঙ্গে Servo মোটর
  • কিছু মোটা ধাতুর তারের ব্যাস প্রায় 1-2 মিমি

ইলেক্ট্রনিক অংশ

  • মাইক্রোকন্ট্রোলার

    1 আরডুইনো ইউএনও বোর্ড

  • সার্ভো মোটর

    • 2 বড় servo মোটর: Feetech ক্রমাগত 6Kg 360 ডিগ্রী
    • 2 মাইক্রো servo মোটর: Feetech FS90
  • সেন্সর

    • 1 অতিস্বনক সেন্সর
    • 2 আইআর প্রক্সিমিটি সেন্সর
    • 2 IR photodiodes
  • ব্যাটারি

    • 1 9V ব্যাটারি ধারক + ব্যাটারি
    • 1 4AA ব্যাটারি ধারক + ব্যাটারি
    • 1 9V ব্যাটারি বক্স + ব্যাটারি
  • অতিরিক্ত উপাদান

    • কিছু জাম্পিং তার, তার এবং সোল্ডার প্লেট
    • কিছু প্রতিরোধক
    • 1 IR LED
    • 3 সুইচ
    • 1 বজার
    • 1 বোতাম
    • 1 Arduino থেকে 9V ব্যাটারি সংযোগকারী

ধাপ 3: ইলেকট্রনিক্স পরীক্ষা করা

ইলেকট্রনিক্স পরীক্ষা করা
ইলেকট্রনিক্স পরীক্ষা করা
ইলেকট্রনিক্স পরীক্ষা করা
ইলেকট্রনিক্স পরীক্ষা করা

বোতাম তৈরি করা:

বোতামটি কেবল একটি সুইচ, একটি ইনফ্রারেড এলইডি এবং একটি Oh ভি ব্যাটারি দ্বারা চালিত সিরিজের একটি 220 ওহম প্রতিরোধক দ্বারা তৈরি করা হয়। এটি একটি কমপ্যাক্ট এবং ক্লিন ডিজাইনের জন্য একটি 9V ব্যাটারি প্যাকের মধ্যে রাখা হয়েছে।

ইনফ্রারেড রিসিভার মডিউল তৈরি করা:

এই মডিউলগুলি হোল সোল্ডারিং বোর্ড দিয়ে তৈরি করা হয়, যা পরে রোবটের সাথে স্ক্রু দিয়ে সংযুক্ত করা হবে। এই মডিউলগুলির সার্কিটগুলি সাধারণ স্কিম্যাটিক্সে চিত্রিত করা হয়েছে। ইনফ্রারেড আলোর তীব্রতা পরিমাপ করা নীতি। পরিমাপ উন্নত করতে, কোলিমেটরগুলি (সঙ্কুচিত টিউব দিয়ে তৈরি) আগ্রহের একটি নির্দিষ্ট দিকে ফোকাস করতে ব্যবহার করা যেতে পারে।

ইলেকট্রনিক ডিভাইস ব্যবহার করে প্রকল্পের বিভিন্ন প্রয়োজনীয়তা পূরণ করতে হবে। আপেক্ষিক কম জটিলতা বজায় রাখার জন্য ডিভাইসের সংখ্যা সীমিত হওয়া উচিত। এই ধাপে তারের স্কিম্যাটিক্স এবং প্রতিটি কোড আলাদাভাবে সমস্ত অংশ পরীক্ষা করার জন্য রয়েছে:

  • ক্রমাগত Servo মোটর;
  • অতিস্বনক সেন্সর;
  • অ ক্রমাগত Servo মোটর;
  • বুজার;
  • আইআর বোতাম দিক সনাক্তকরণ;
  • প্রক্সিমিটি সেন্সর দ্বারা প্রান্ত সনাক্তকরণ;

এই কোডগুলি শুরুতে উপাদানগুলি বুঝতে সাহায্য করতে পারে, তবে এটি পরবর্তী পর্যায়ে ডিবাগিংয়ের জন্যও খুব দরকারী। যদি একটি নির্দিষ্ট সমস্যা দেখা দেয়, তবে বাগটি সহজেই সনাক্ত করা যায় সমস্ত উপাদান আলাদাভাবে পরীক্ষা করে।

ধাপ 4: 3 ডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন

থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন
থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন
থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন
থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন
থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন
থ্রিডি প্রিন্টেড এবং লেজার কাট পিস ডিজাইন

লেজার কাটা টুকরা

সমাবেশটি তিনটি প্রধান অনুভূমিক প্লেট দিয়ে তৈরি করা হয় যা পিসিবি স্পেসার দ্বারা একসাথে রাখা হয় যাতে একটি খোলা নকশা পাওয়া যায় যাতে ইলেকট্রনিক্সে সহজে প্রবেশাধিকার পাওয়া যায়।

চূড়ান্ত সমাবেশের জন্য স্পেসার এবং অন্যান্য উপাদানগুলিকে স্ক্রু করার জন্য সেই প্লেটগুলির প্রয়োজনীয় গর্ত কাটা দরকার। প্রধানত, তিনটি প্লেটেরই স্পেসারের জন্য একই স্থানে গর্ত থাকে এবং প্রতিটি প্লেটে যথাক্রমে ইলেকট্রনিক্সের জন্য নির্দিষ্ট গর্ত থাকে। লক্ষ্য করুন যে মাঝের প্লেটের মাঝখানে তারের পাস করার জন্য একটি গর্ত আছে।

ছোট ছোট টুকরা সমাবেশে ঠিক করার জন্য বড় servo এর মাত্রা কাটা হয়।

3D মুদ্রিত টুকরা

লেজার কাটিং ছাড়াও, কিছু টুকরা 3D মুদ্রণ করা প্রয়োজন হবে:

  • অতিস্বনক সেন্সরের জন্য সমর্থন, যা এটিকে একটি মাইক্রো সার্ভো মোটর আর্মের সাথে সংযুক্ত করে
  • ক্যাস্টর হুইল এবং দুটি আইআর এজ সেন্সরের জন্য সমর্থন। আইআর সেন্সরের জন্য টুকরো টুকরো প্রকারের বিশেষ নকশা আইআর সংকেত নির্গত বোতাম এবং আইআর সেন্সরগুলির মধ্যে হস্তক্ষেপ এড়াতে একটি পর্দা হিসাবে কাজ করে যা কেবল মাটিতে কী ঘটছে তার উপর ফোকাস করতে হবে
  • মাইক্রো সার্ভো মোটর supportাকনা খোলার জন্য সমর্থন
  • এবং অবশেষে itselfাকনা নিজেই, দুটি টুকরো দিয়ে তৈরি একটি বড় অপারেটিং কোণ যাতে মাইক্রো সার্ভো মোটরের সাথে isionাকনা খোলার সাথে সংঘর্ষ এড়িয়ে যায়:

    • নীচের যা উপরের প্লেটে স্থির করা হবে
    • এবং শীর্ষ যা নীচে একটি কব্জা দ্বারা সংযুক্ত করা হয়, এবং একটি পুরু ধাতু তার ব্যবহার করে servo দ্বারা actuated। আমরা রোবটকে মাথা দিয়ে একটু ব্যক্তিত্ব যোগ করার সিদ্ধান্ত নিয়েছি।

একবার সমস্ত টুকরা ডিজাইন করা এবং ব্যবহৃত মেশিনের জন্য সঠিক ফরম্যাটে ফাইল রপ্তানি করা হলে, টুকরাগুলি আসলে তৈরি করা যেতে পারে। সচেতন থাকুন যে 3D মুদ্রণ অনেক সময় নেয়, বিশেষ করে idাকনার উপরের অংশের মাত্রার সাথে। সমস্ত টুকরা মুদ্রণের জন্য আপনার এক বা দুই দিনের প্রয়োজন হতে পারে। লেজার কাটিং অবশ্য মাত্র কয়েক মিনিটের ব্যাপার।

সমস্ত SOLIDWORKS- ফাইলগুলি জিপ করা ফোল্ডারে পাওয়া যাবে।

ধাপ 5: সমাবেশ এবং তারের

Image
Image
সমাবেশ এবং তারের
সমাবেশ এবং তারের
সমাবেশ এবং তারের
সমাবেশ এবং তারের
সমাবেশ এবং তারের
সমাবেশ এবং তারের

সমাবেশটি হবে তারের মিশ্রণ এবং উপাদানগুলিকে একসাথে স্ক্রু করা, নীচে থেকে শুরু করে উপরে।

নীচে প্লেট

নিচের প্লেটটি 4AA ব্যাটারি প্যাক, সার্ভো মোটর, মুদ্রিত অংশ (প্লেটের নীচে বল কাস্টার সংযুক্ত করা), দুটি প্রান্ত সেন্সর এবং 6 পুরুষ-মহিলা স্পেসারের সাথে একত্রিত হয়।

মাঝের প্লেট

পরবর্তী, মাঝারি প্লেটটি মাউন্ট করা যেতে পারে, দুটি প্লেটের মধ্যে সার্ভো মোটরগুলিকে সংকুচিত করে। এই প্লেটটি তারপরে আরেকটি স্পেসার সেট করে ঠিক করা যেতে পারে। কিছু তারের মধ্য গর্ত মাধ্যমে পাস করা যেতে পারে।

অতিস্বনক মডিউলটি একটি অবিচ্ছিন্ন সার্ভোর সাথে সংযুক্ত করা যেতে পারে, যা মাঝের প্লেটে Arduino, 9V ব্যাটারি প্যাক (arduino কে পাওয়ারিং) এবং রোবটের সামনে দুটি ইনফ্রারেড রিসিভার মডিউল দিয়ে সংযুক্ত করা যেতে পারে। এই মডিউলগুলি হোল সোল্ডারিং বোর্ড দিয়ে তৈরি করা হয় এবং প্লেটে স্ক্রু দিয়ে সংযুক্ত করা হয়। এই মডিউলগুলির সার্কিটগুলি সাধারণ স্কিম্যাটিক্সে চিত্রিত করা হয়েছে।

শীর্ষ প্লেট

সমাবেশের এই অংশে, সুইচগুলি স্থির করা হয় না কিন্তু রোবটটি alreadyাকনার প্রয়োজনীয় ক্রিয়াগুলি ছাড়া ইতিমধ্যে সবকিছু করতে পারে, এইভাবে এটি আমাদের ট্র্যাশহোল্ড সংশোধন করতে, আন্দোলনের কোড মানিয়ে নিতে এবং একটি সহজ করার জন্য কিছু পরীক্ষা করতে দেয় Arduino এর বন্দরগুলিতে অ্যাক্সেস।

যখন এই সব অর্জন করা হয়, উপরের প্লেট spacers সঙ্গে সংশোধন করা যেতে পারে। শেষ উপাদান যা দুটি সুইচ, বোতাম, সার্ভো, বজার এবং idাকনা সিস্টেম শেষ পর্যন্ত সমাবেশ শেষ করার জন্য উপরের প্লেটে স্থির করা যেতে পারে।

পরীক্ষা এবং সংশোধন করার শেষ জিনিসটি হল oাকনাটি সঠিকভাবে খোলার জন্য সার্ভোর কোণ।

প্রান্ত সেন্সরের থ্রেশহোল্ড বিভিন্ন টেবিল পৃষ্ঠের জন্য অন্তর্ভুক্ত পটেন্টিওমিটার (একটি সমতল স্ক্রু ড্রাইভার ব্যবহার করে) এর সাথে মানিয়ে নিতে হবে। একটি সাদা টেবিলে উদাহরণস্বরূপ বাদামী টেবিলের চেয়ে কম প্রান্তিক হওয়া উচিত। এছাড়াও সেন্সরের উচ্চতা প্রয়োজনীয় থ্রেশহোল্ডকে প্রভাবিত করবে।

এই ধাপের শেষে, সমাবেশ শেষ এবং শেষ অবশিষ্ট অংশ অনুপস্থিত কোড।

ধাপ 6: কোডিং: সবকিছু একসাথে রাখা

রোবটকে কাজ করার জন্য প্রয়োজনীয় সমস্ত কোড জিপ করা ফাইলে রয়েছে যা ডাউনলোড করা যায়। সবচেয়ে গুরুত্বপূর্ণ হল "প্রধান" কোড যা রোবটের সেটআপ এবং কার্যকরী লুপ অন্তর্ভুক্ত করে। অন্যান্য ফাংশনের অধিকাংশই সাব-ফাইলে লেখা থাকে (জিপ করা ফোল্ডারেও)। এই সাব-ফাইলগুলিকে Arduino তে আপলোড করার আগে মূল স্ক্রিপ্ট হিসাবে একই ফোল্ডারে (যার নাম "প্রধান") রাখা উচিত

প্রথমে রোবটের সাধারণ গতি সংজ্ঞায়িত করা হয় ভেরিয়েবল "রিমাইন্ড" এর সাথে। এই "রিমাইন্ড" হল একটি মান যা মনে রাখে রোবট কোন দিকে ঘুরছিল। যদি "রিমাইন্ড = 1" হয়, রোবটটি বাম দিকে ঘুরছিল/যদি "রিমাইন্ড = 2" হয়, তাহলে রোবটটি ডানে ঘুরছে/ঘুরছে।

int গতি = 9; // রোবটের সাধারণ গতি

int অনুস্মারক = 1; // প্রাথমিক দিক

রোবটের সেটে, প্রোগ্রামের বিভিন্ন সাব-ফাইলগুলি আরম্ভ করা হয়। এই সাব-ফাইলে, মোটর, সেন্সর, নিয়ন্ত্রণের মৌলিক কাজগুলি লেখা আছে। সেটআপের মধ্যে তাদের আরম্ভ করে, এই ফাইলের প্রতিটিতে বর্ণিত ফাংশনগুলি মূল লুপে ব্যবহার করা যেতে পারে। এটা শুরু হয় এখানে r2D2 () ফাংশনটি নিষ্ক্রিয় করা হয়েছে যাতে বাজারটি খুব বেশি কারেন্ট আঁকা থেকে বিরত থাকে।

// সেটআপ @ রিসেট // ----------------

অকার্যকর সেটআপ () {initialize_IR_sensors (); initialize_obstacles_and_edges (); initialize_movement (); initialize_lid (); initialize_buzzer (); // r2D2 (); int অনুস্মারক = 1; // প্রাথমিক দিক স্টার্টার (মনে করিয়ে দেওয়া); }

স্টার্টার (রিমাইন্ড) ফাংশনটি প্রথমে সেটআপে আহ্বান করা হয়। এই ফাংশনটি রোবটটিকে ঘুরিয়ে দেয় এবং একটি বোতামের আইআর সংকেত সন্ধান করে। একবার এটি বোতামটি খুঁজে পেলে, প্রোগ্রামটি ভেরিয়েবল 'cond' কে মিথ্যাতে পরিবর্তন করে স্টার্টার ফাংশন থেকে বেরিয়ে আসবে। এটি ঘুরে দাঁড়ানোর আগে প্রতিবার এটি পরীক্ষা করা হয়। একবার রোবট একটি বাধা বা একটি প্রান্ত সনাক্ত করে, এই বাধা বা প্রান্তগুলি এড়াতে প্রোটোকল কার্যকর করা হবে। এই প্রটোকলগুলি এই ধাপে পরে ব্যাখ্যা করা হবে। স্টার্টার ফাংশনে একটি পরিবর্তনশীল যা রিমাইন্ড ভেরিয়েবল যা আগে আলোচনা করা হয়েছিল। স্টার্টার ফাংশনকে রিমাইন্ড ভ্যালু দিয়ে, রোবট জানে যে বোতামটি সন্ধান করার জন্য এটি কোন দিকে ঘুরতে হবে।

// স্টার্টার লুপ: ঘুরে দেখুন এবং বোতামটি অনুসন্ধান করুন // ------------------------------------ ----------------

অকার্যকর স্টার্টার (int অনুস্মারক) {যদি (isedgeleft () || isedgeright ()) {// সনাক্ত করুন প্রান্ত edgeDetected (রিমাইন্ড); } অন্যথায় {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } অন্য {যদি (মনে করিয়ে দিন == 1) {// আমরা বাম দিকে ঘুরছিলাম যদি (isobstacleleft ()) {stoppeed (); এড়িয়ে চলুন } অন্যথায় যদি } অন্য {টার্নলেফট (গতি); }} অন্যথায় যদি (স্মরণ করান == 2) {যদি (isobstacleright ()) {স্টপস্পিড (); এড়িয়ে চলুন } অন্যথায় যদি } অন্য {টার্নরাইট (গতি); }}}}}}

যদি রোবটটি বোতামটি খুঁজে পায়, তবে প্রথম স্টার্টার লুপটি বের হয়ে যায় এবং রোবটের প্রধান, কার্যকরী লুপ শুরু হয়। এই প্রধান লুপটি প্রতিবারের থেকে বেশ জটিল, রোবটটির সামনে বাধা বা প্রান্ত আছে কিনা তা সনাক্ত করতে হবে। মূল ধারণা হল যে রোবটটি বোতামটি খুঁজে বের করে এবং এটি প্রতিবার হারায়। দুটি আইআর সেন্সর ব্যবহার করে, আমরা তিনটি পরিস্থিতি আলাদা করতে পারি:

  • বাম এবং ডান সেন্সর দ্বারা সনাক্ত করা আইআর আলোর মধ্যে পার্থক্য একটি নির্দিষ্ট প্রান্তিকের চেয়ে বড়, এবং একটি বোতাম রয়েছে।
  • আইআর আলোর পার্থক্য থ্রেশহোল্ডের চেয়ে ছোট, এবং রোবটের সামনে একটি বোতাম রয়েছে।
  • আইআর আলোর পার্থক্য থ্রেশহোল্ডের চেয়ে ছোট, এবং রোবটের সামনে কোন বোতাম নেই।

ট্র্যাকের রুটিন যেভাবে কাজ করে তা নিম্নরূপ: যখন বোতামটি সনাক্ত করা হয়, রোবটটি একই দিকে ঘুরিয়ে বোতামটির দিকে এগিয়ে যায় (রিমাইন্ড ভেরিয়েবল ব্যবহার করে) এবং একই সময়ে একটু এগিয়ে যান। যদি রোবটটি অনেক দূরে ঘুরে যায়, বোতামটি আবার হারিয়ে যাবে, এবং এই সময়ে রোবটটি মনে করে তাকে অন্য দিকে ঘুরতে হবে। এটি একটু এগিয়ে যাওয়ার সময়ও করা হয়। এটি করার মাধ্যমে রোবটটি ক্রমাগত বাম দিকে ঘুরছে এবং ডানদিকে ঘুরছে, কিন্তু মাঝামাঝি সময়ে বোতামটির দিকে এগিয়ে যাচ্ছে। যতবার রোবটটি বোতামটি খুঁজে পায়, এটি কেবল ততক্ষণ পর্যন্ত ঘুরতে থাকে যতক্ষণ না এটি হারিয়ে যায় এবং কোন ক্ষেত্রে এটি অন্য দিকে চলতে শুরু করে। "turnleft ()" বা "turnright ()", যখন প্রধান লুপ "moveleft ()" এবং "moveright ()" ব্যবহার করে। মুভ লেফট/রাইট ফাংশন শুধু রোবটকে ঘুরিয়ে দেয় না বরং একই সাথে তাকে এগিয়ে নিয়ে যায়।

/ * কার্যকরী লুপ ---------------------------- এখানে, শুধুমাত্র ট্র্যাক রুটিন আছে */

int হারিয়ে = 0; // যদি হারিয়ে যায় = 0 বোতামটি পাওয়া যায়, যদি হারিয়ে যায় = 1 বোতামটি হারিয়ে যায় অকার্যকর লুপ () {যদি (isedgeleft () || isedgeright ()) {

যদি (! isobstacle ()) {

সরানো (গতি); বিলম্ব (5); } অন্যথায় {avoid_obstacle (মনে করিয়ে দেওয়া); } অন্য {যদি (মনে করিয়ে দিন == 1 এবং যদি (! isobstacleright ()) {মুভারাইট (গতি); // বোতামটি খুঁজতে ঘুরুন} অন্যথায় {avoid_obstacle (মনে করিয়ে দিন); } মনে করান = 2; } অন্যথায় যদি (স্মরণ করান == 2 && হারিয়ে == 1) {স্টপস্পিড (); যদি (! isobstacleleft ()) {moveleft (speed); // আমরা ডানদিকে ঘুরছিলাম} অন্যথায় {avoid_obstacle (মনে করিয়ে দেওয়া); } মনে করান = 1; } অন্যথায় যদি (হারিয়ে == 0) {যদি (মনে করিয়ে দেন == 1) {// আমরা বাম দিকে ঘুরছিলাম যদি (! isobstacleleft ()) {moveleft (speed); // আমরা ডানদিকে ঘুরছিলাম} অন্য {স্টপস্পিড (); এড়িয়ে চলুন } //} অন্যথায় যদি (মনে করান == 2) {যদি (! isobstacleright ()) {মুভারাইট (গতি); // বোতামটি খুঁজতে ঘুরুন} অন্য {স্টপস্পিড (); এড়িয়ে চলুন }}} বিলম্ব (10); হারিয়ে = 0; }} //}}

এখন, দুটি সবচেয়ে জটিল রুটিনের সামান্য ব্যাখ্যা দেওয়া হল:

প্রান্তগুলি এড়িয়ে চলুন

প্রান্তগুলি এড়ানোর জন্য প্রোটোকলটি "edgeDetection ()" নামে একটি ফাংশনে সংজ্ঞায়িত করা হয়েছে যা "মুভমেন্ট" সাব-ফাইলে লেখা আছে। এই প্রোটোকলটি এই সত্যের উপর নির্ভর করে যে রোবটটি কেবল একটি প্রান্তের মুখোমুখি হবে যখন এটি তার গন্তব্যে পৌঁছেছে: বোতাম। একবার রোবট একটি প্রান্ত সনাক্ত করলে, প্রথম কাজটি হল এটি প্রান্ত থেকে নিরাপদ স্থানে থাকার জন্য একটু পিছনে সরে যাওয়া। একবার এটি হয়ে গেলে, রোবটটি 2 সেকেন্ডের জন্য অপেক্ষা করে। যদি কেউ সেই দুই সেকেন্ডের মধ্যে রোবটের সামনের বোতাম টিপতে পারে, রোবট জানে যে এটি সেই ব্যক্তির কাছে পৌঁছেছে যিনি মাখন চান এবং বাটার বগি খুলে মাখন উপস্থাপন করেন।এই সময়ে, কেউ রোবট থেকে মাখন নিতে পারে। কয়েক সেকেন্ড পর রোবট অপেক্ষা করতে করতে ক্লান্ত হয়ে পড়বে এবং শুধু মাখনের idাকনা বন্ধ করে দেবে। একবার theাকনা বন্ধ হয়ে গেলে রোবট স্টার্টার লুপটি চালাবে অন্য বোতামটি খুঁজতে। যদি এমন হয় যে রোবটটি তার গন্তব্যে পৌঁছানোর পূর্বে একটি প্রান্তের মুখোমুখি হয় এবং রোবটের সামনের বোতামটি না চাপলে রোবটটি মাখনের idাকনা খুলবে না এবং অবিলম্বে স্টার্টার লুপটি চালাবে।

বাধা এড়িয়ে চলুন

Avoid_obstacle () ফাংশনটি "মুভমেন্ট" সাব-ফাইলে অবস্থিত। বাধা এড়ানোর কঠিন অংশটি হল এই যে রোবটটির একটি বেশ বড় অন্ধ জায়গা রয়েছে। অতিস্বনক সেন্সরটি রোবটের সামনের অংশে স্থাপন করা হয়, যার অর্থ এটি বাধাগুলি সনাক্ত করতে পারে, কিন্তু কখন সে এটি অতিক্রম করবে তা জানে না। এটি সমাধানের জন্য, নিম্নলিখিত নীতিটি ব্যবহার করা হয়: একবার রোবট একটি বাধার সম্মুখীন হলে, এটি রিমিং ভেরিয়েবল ব্যবহার করে অন্য দিকে ঘুরতে থাকে। এইভাবে রোবট বাধা এড়ানো এড়ায়। যতক্ষণ না অতিস্বনক সেন্সর আর বাধা সনাক্ত না করে ততক্ষণ পর্যন্ত রোবটটি ঘুরতে থাকে। রোবট বাঁকানোর সময়, একটি কাউন্টার বাড়ানো হয় যতক্ষণ না বাধাটি আর ধরা না পড়ে। এই কাউন্টারটি তখন বাধার দৈর্ঘ্যের একটি আনুমানিকতা দেয়। তারপর এগিয়ে এবং একই সময়ে কাউন্টার হ্রাস করে বাধা এড়ানো যেতে পারে। কাউন্টারটি 0 এ পৌঁছে গেলে, স্টার্টার ফাংশনটি আবার বোতামটি স্থানান্তর করতে ব্যবহার করা যেতে পারে। অবশ্যই রোবটটি স্টার্টার ফাংশনটি সেই দিকের দিকে ঘুরিয়ে দেয় যেটি মনে রেখেছিল যে এটি বাধার সম্মুখীন হওয়ার আগে এটি চলছিল (আবার রিমাইন্ড ভেরিয়েবল ব্যবহার করে)।

এখন আপনি কোডটি পুরোপুরি বুঝতে পেরেছেন, আপনি এটি ব্যবহার শুরু করতে পারেন!

আপনার পরিবেশের সাথে থ্রেশহোল্ডগুলি মানিয়ে নিতে ভুলবেন না (উদাহরণস্বরূপ সাদা টেবিলে আইআর প্রতিফলন বেশি) এবং আপনার প্রয়োজনীয়তার সাথে বিভিন্ন পরামিতিগুলি মানিয়ে নিতে। এছাড়াও, বিভিন্ন মডিউলগুলির ক্ষমতার দিকে খুব মনোযোগ দেওয়া উচিত। এটি সর্বাধিক গুরুত্বপূর্ণ যে সার্ভো মোটরগুলি Arduino 5V পোর্ট দ্বারা চালিত হয় না, যেহেতু তারা প্রচুর কারেন্ট নেয় (এটি মাইক্রোকন্ট্রোলারের ক্ষতি করতে পারে)। যদি সেন্সরগুলির জন্য সার্ভিসগুলিকে পাওয়ার করার জন্য একই শক্তির উৎস ব্যবহার করা হয়, তবে কিছু পরিমাপের সমস্যার সম্মুখীন হতে পারে।

প্রস্তাবিত: