সুচিপত্র:
- সরবরাহ
- ধাপ 1: রোবট সেট-আপ
- ধাপ 2: জয়স্টিক সেট-আপ
- ধাপ 3: জয়স্টিক মান পরীক্ষা করা
- ধাপ 4: এক্স এবং ওয়াই ভেরিয়েবল সামঞ্জস্য করা
- ধাপ 5: বাম এবং ডান মোটরগুলির জন্য X এবং Y- কে মানগুলিতে রূপান্তর করা
- ধাপ 6: রেডিও বার্তা হিসাবে মূল্য পাঠানো
- ধাপ 7: আপনার রোবটে বার্তাগুলি গ্রহণ করা
- ধাপ 8: রোবটের মোটরগুলিকে নিয়ন্ত্রণ করার জন্য আগত বার্তাগুলি ব্যবহার করা
- ধাপ 9: বোতামগুলি ব্যবহার করা - অতিরিক্ত বার্তা গ্রহণ করা
- ধাপ 10: কন্ট্রোলারের বোতাম ব্যবহার করে অতিরিক্ত বার্তা পাঠানো
- ধাপ 11: পরবর্তী পদক্ষেপ
ভিডিও: একটি মাইক্রো প্রোগ্রামিং: বিট রোবট এবং জয়স্টিক: মাইক্রো পাইথন সহ বিট কন্ট্রোলার: 11 টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:00
রোবোক্যাম্প ২০১,-এর জন্য, আমাদের গ্রীষ্মকালীন রোবোটিক্স ক্যাম্পে, ১০-১ aged বছর বয়সী যুবকরা সোল্ডারিং, প্রোগ্রামিং এবং বিবিসি মাইক্রো তৈরি করছে: বিট ভিত্তিক 'অ্যান্টওয়েট রোবট', পাশাপাশি রিমোট কন্ট্রোল হিসাবে ব্যবহার করার জন্য মাইক্রো: বিট প্রোগ্রামিং।
আপনি যদি বর্তমানে রোবোক্যাম্পে থাকেন, তাহলে ধাপ 3 এ যান, কারণ আমরা একটি গ্রুপ হিসাবে প্রথম দুটি ধাপ সম্পন্ন করেছি
এটি একটি মাইক্রো: বিট রোবট একটি জয়স্টিক: বিট কন্ট্রোলারের সাথে যোগাযোগ করার জন্য একটি ধাপে ধাপে নির্দেশিকা।
সবকিছু কাজ করার জন্য এটি দ্রুততম রুট নেয় না, তবে ছোট ছোট অংশে জিনিসগুলি চেষ্টা করে যাতে আপনি কোডটি যাচাই করার সময় পরীক্ষা করতে পারেন, এতে আপনার নিজের স্ট্যাম্প লাগাতে পারেন এবং বুঝতে পারেন যে আমরা যা করছি তা কেন করছি !
এই ক্রিয়াকলাপের জন্য, আমরা আমাদের নিজস্ব কাস্টম রোবট ব্যবহার করছি, কিন্তু এটি একটি L9110s এর মত একই মোটর ড্রাইভার ব্যবহার করে যেকোনো রোবটের সাথে কাজ করবে।
আমাদের রোবটের জন্য ডিজাইন ফাইল এখানে পাওয়া যাবে:
এই গাইডটি নতুনদের জন্য লেখা, কিন্তু যদি আপনি আগে কখনো মাইক্রোপিথন ব্যবহার না করেন, আমরা আপনাকে প্রথমে একটি সহজ প্রোগ্রাম ব্যবহার করার পরামর্শ দিচ্ছি, যেমন আমাদের নাম ব্যাজ নির্দেশযোগ্য: https://www.instructables.com/id/Felt -মাইক্রোবিট-নাম …
সরবরাহ
2x বিবিসি মাইক্রো: বিট
বিবিসি মাইক্রো দিয়ে কাজ করে এমন রোবট: বিট (উপরে ব্যাখ্যা দেখুন)
জয়স্টিক: বিট কন্ট্রোলার (আমরা কুল কম্পোনেন্ট থেকে আমাদের পেয়েছি)
ধাপ 1: রোবট সেট-আপ
আপনার মাইক্রো: বিট এর জন্য মাইক্রোপাইথন কোড লেখার জন্য আপনার কাছে কয়েকটি বিকল্প রয়েছে:
- মু, যা আপনি এখান থেকে ডাউনলোড এবং ইনস্টল করতে পারেন:
- অনলাইন সম্পাদক, যা আপনি এখানে পেতে পারেন:
এই নির্দেশাবলী অনুমান করে আপনি মু ব্যবহার করছেন।
Mu খুলুন, এবং আপনার মাইক্রো: বিট আপনার কম্পিউটারে প্লাগ করুন। Mu কে চিনতে হবে যে আপনি একটি মাইক্রো: বিট ব্যবহার করছেন এবং মাইক্রো: বিট 'মোড' নির্বাচন করুন, কিন্তু যদি তা না হয় তবে এটি ম্যানুয়ালি পরিবর্তন করুন।
এখান থেকে রোবট মোটর টেস্ট কোডের একটি কপি পান:
আপনি যদি গিথুবের সাথে অভ্যস্ত না হন তবে এটি অনিচ্ছাকৃত হতে পারে! এই কোডটি পাওয়ার দুটি সহজ উপায় হল:
- আপনার কম্পিউটারে কাঁচা ফাইলটি সংরক্ষণ করুন, তারপরে এটি মু -তে লোড করুন:
- প্রদত্ত কোডের সবকটি মুই -তে একটি নতুন ফাইলে পেস্ট করুন।
এখন আপনার নতুন কোডটি মাইক্রো: বিটে পাঠাতে মু এর টুলবার থেকে 'ফ্ল্যাশ' বোতামে ক্লিক করুন।
মাইক্রো: বিট প্লাগ ইন না করা পর্যন্ত এটি কাজ করবে না
মাইক্রো: বিটের পিছনে হলুদ আলো জ্বলতে শুরু করবে। এটি শেষ হয়ে গেলে, আপনার কোড স্থানান্তরিত করা হয়েছে।
মোটর নির্দেশনা সেট আপ
মাইক্রো: বিট -এ 'এ' বোতাম টিপলে এই প্রোগ্রামটি মোটরগুলিকে বিভিন্ন দিকে চালু করবে।
আপনি যা হতে চান তা হল:
- যখন 'A' প্রদর্শিত হয়, তখন বাম মোটর সামনের দিকে
- যখন 'B' প্রদর্শিত হয়, তখন মোটরটি পিছনের দিকে বামে
- যখন 'সি' প্রদর্শিত হয়, ডান মোটর এগিয়ে
- যখন 'ডি' প্রদর্শিত হয়, ডান মোটর পিছন দিকে
এটি সম্ভবত এমন হবে না, কারণ এটি নির্ভর করে আপনি কীভাবে আপনার রোবটটি তারের উপর যুক্ত করেছেন!
কোডের শীর্ষে, আপনি ভেরিয়েবলের একটি তালিকা পাবেন, যা মাইক্রোতে কোন পিন নির্ধারণ করে: বিট কোন মোটরের দিক নিয়ন্ত্রণ করে।
আপনি যদি আমাদের একটি রোবট (ফাইল) ব্যবহার করেন, তাহলে রোবটকে সঠিক দিকের দিকে নিয়ে যেতে চারপাশের পরিবর্তনশীল নামগুলি অদলবদল করুন:
আপনি যদি নিজের একটি রোবট ব্যবহার করেন, তাহলে কোড সম্পাদনা করার আগে মোটর ড্রাইভার কোন পিনের সাথে সংযুক্ত তা পরীক্ষা করুন।
ড্রাইভ পরীক্ষা করা
এখন পরীক্ষা করুন কিভাবে আপনার রোবটটি ড্রাইভ করে প্রধান লুপে পরীক্ষার কোডটি আপনার নিজের কিছু কোড দিয়ে।
আপনি ড্রাইভ () ফাংশন কল করে রোবটকে ড্রাইভ করতে বলুন। এটি দুটি যুক্তি নেয় - বাম মোটরের জন্য একটি মান এবং ডান মোটরের জন্য একটি মান, 0 (বন্ধ) এবং 1023 (সর্বোচ্চ গতি) এর মধ্যে।
ড্রাইভ (500, 500) কল করে, উদাহরণস্বরূপ, আপনি উভয় মোটরকে বলছেন, এগিয়ে দিকের দিকে, প্রায় অর্ধেক গতিতে।
এটি কতটা সোজা এবং কতটা ভালভাবে ঘুরছে তা অনুভব করার জন্য কয়েকটি বিকল্প ব্যবহার করে দেখুন।
ইঙ্গিত: মোটর পরীক্ষাগুলি কিছুক্ষণের মধ্যে ট্রু লুপ, এবং যদি একটি বিবৃতি উভয়ই ছিল - মোটরগুলি চালু হবে না যতক্ষণ না আপনি মাইক্রো: বিটে A বোতাম টিপেন এবং এটি চিরতরে পরীক্ষা করে দেখছে যে আপনি A বোতামটি টিপেছেন কিনা।
ইঙ্গিত: মোটরগুলি বন্ধ করা হবে না যতক্ষণ না আপনি তাদের বলবেন! তারা সর্বদা তাদের শেষ নির্দেশনা অব্যাহত রাখবে।
:চ্ছিক: একটি সরলরেখায় ড্রাইভিং উন্নত করা
যদি আপনার রোবটটি সরলরেখায় গাড়ি না চালায়, তাহলে আপনার একটি মোটর অন্যটির চেয়ে দ্রুত গতিতে ঘুরতে পারে।
শারীরিকভাবে চাকাটি অবাধে ঘুরতে বাধা দেওয়ার কিছু নেই তা যাচাই করার পরে, আপনি দ্রুত মোটরের গতি কমাতে ড্রাইভ ফাংশনে কোডটি সম্পাদনা করতে পারেন।
ড্রাইভ ফাংশনের সংজ্ঞা খুঁজে পেতে স্ক্রোল করুন এবং উপরের দুটি নির্দেশনা দেখুন:
ডিফ ড্রাইভ (এল, আর):
# নিচে মোটর গতির বৈষম্য L = int (L*1) R = int (R*1) সংশোধন করার জন্য একটি সমন্বয় করা হয়েছে
এই দুটি লাইন বর্তমানে L এবং R এর মান নেয়, তাদের 1 দ্বারা গুণ করে, তারপর নিশ্চিত করুন যে তারা এখনও পূর্ণ সংখ্যা (int)।
উদাহরণস্বরূপ, যদি আপনার বাম মোটরটি দ্রুত হয়, তবে তার লাইনের *1 * *0.9 এ পরিবর্তন করুন এবং দেখুন যে এটি জিনিসগুলিকে উন্নত করে কিনা।
আপনি এটিকে নিখুঁত করতে সক্ষম হবেন না, তবে এটি সামঞ্জস্য রাখতে পারেন যতক্ষণ না এটি স্ট্রেটার চালিত হয়।
রেডিও সেট আপ
এখন আপনার কোডের উপরে নিম্নলিখিত লাইন যোগ করে রেডিও সেট আপ করুন:
আমদানি রেডিও
radio.config (চ্যানেল = 7, গ্রুপ = 0, সারি = 1) radio.on ()
এটি আপনার রোবটকে অন্য মাইক্রো: বিট থেকে নির্দেশনা পেতে দেবে, কিন্তু এই মুহুর্তে এটি অন্য কোন মাইক্রো: বিট থেকে নির্দেশনা পাবে।
কারণ চ্যানেল 7 এবং গ্রুপ 0 ডিফল্ট চ্যানেল।
0-82 এর মধ্যে একটি চ্যানেল এবং 0-255 এর মধ্যে একটি গ্রুপ চয়ন করে এই সংখ্যাগুলি পরিবর্তন করুন। এখন আপনার মাইক্রো: বিট একই কনফিগারেশন তথ্য সহ অন্যদের কাছ থেকে নির্দেশনা পাবে।
queue = 1 মানে micro: bit শুধুমাত্র একটি ইনকামিং মেসেজ এক সময়ে রাখবে - এটি ডিফল্টের তুলনায় একটু দ্রুত রেসপন্স টাইম দেয়, যা 3।
এখন আপনি আপনার মূল লুপ কোডটি সম্পাদনা করতে হবে, যখন আপনি একটি বোতাম টিপুন তখন নির্দেশাবলী চালানোর পরিবর্তে, একটি আগত রেডিও বার্তার জন্য অপেক্ষা করুন এবং যথাযথভাবে সাড়া দিন।
একটি পরীক্ষা হিসাবে নিম্নলিখিত কোডটি চেষ্টা করুন (আপনি ধাপ 2 এ জয়স্টিক সেট না করা পর্যন্ত এটি কিছুই করবে না):
যখন সত্য:
message = radio.receive () যদি message == 'forward': drive (500, 500)
ধাপ 2: জয়স্টিক সেট-আপ
আপনার রোবটের মাইক্রো: বিটটি আনপ্লাগ করুন এবং পরিবর্তে আপনার জয়স্টিকের মাইক্রো: বিট লাগান।
এখান থেকে জয়স্টিক সেট আপ কোডের একটি অনুলিপি পান:
রোবটের জন্য একই কনফিগারেশন (চ্যানেল এবং গ্রুপ নম্বর) ব্যবহার করে রেডিও সেট আপ করুন - এটি দুজনকে একে অপরের সাথে যোগাযোগের অনুমতি দেবে।
প্রোগ্রাম শেষে, আপনার প্রধান লুপ শুরু করুন:
যখন সত্য:
if button_a.was_pressed (): radio.send ('forward')
এই কোডটি এখনও জয়স্টিক ব্যবহার করে না: বিট। এটি একটি বার্তা পাঠানোর জন্য মাইক্রো: বিট এ বোতাম ব্যবহার করে।
নিশ্চিত করুন যে আপনার রোবট এবং আপনার নিয়ামক মাইক্রো: বিট উভয়ই শক্তি আছে, তারপর আপনার বার্তা পাঠাতে বোতাম টিপুন।
যদি বার্তাটি সফলভাবে গৃহীত হয়, এবং আপনার রোবট চলে যায়… ভাল হয়েছে! আপনি সেট-আপ নির্দেশাবলী শেষ করেছেন।
ট্রাবলশুটিং টিপস
আপনি যদি আপনার কন্ট্রোলার মাইক্রো: বিট …
আপনি যদি আপনার রোবট মাইক্রো: বিট -এ একটি ত্রুটি বার্তা পান তবে আপনার রেডিও বার্তা সফলভাবে পাঠানো হয়েছে! কিন্তু রোবট তা বুঝতে পারে না, তাই আপনি যে বার্তাটি পাঠিয়েছেন এবং যে বার্তাটি আপনি রোবটকে বলেছিলেন তা মিলের জন্য শুনুন।
যদি কিছু না হয়
- নিশ্চিত করুন যে আপনি প্রতিটি মাইক্রোতে সঠিক কোডটি ফ্ল্যাশ করেছেন: বিট - ভুলভাবে ভুলটি ফ্ল্যাশ করা সহজ!
- নিশ্চিত করুন যে আপনার চ্যানেল এবং গ্রুপ নম্বর প্রতিটি মাইক্রো: বিটে মিলছে
ধাপ 3: জয়স্টিক মান পরীক্ষা করা
পরবর্তী কয়েকটি ধাপ সবই নিয়ামক কোড ব্যবহার করে।
আপনি আপনার কন্ট্রোলারে জয়স্টিক ব্যবহার করার আগে, আপনি লাঠিটি ধাক্কা দিলে আপনি কোন ধরনের মান পাবেন তা জানতে হবে।
নিম্নলিখিত কোড দিয়ে আপনার প্রধান লুপ প্রতিস্থাপন করুন:
যখন সত্য:
জয়স্টিক = জয়স্টিক_পশ () মুদ্রণ (জয়স্টিক) ঘুম (500)
এই কোডটি আপনার মাইক্রো: বিটে ফ্ল্যাশ করুন, তারপরে মু এর টুলবারে REPL বাটনে ক্লিক করুন। এটি সম্পাদকের নীচে একটি টার্মিনাল খুলবে, যা আপনাকে মাইক্রো: বিটের একটি রিয়েল-টাইম লিঙ্ক দেয়।
মাইক্রো: বিট প্লাগ ইন না করা পর্যন্ত এটি কাজ করবে না
REPL খোলার সাথে সাথে, আপনার মাইক্রো: বিটের পিছনে রিসেট বোতাম টিপুন।
আপনার স্ক্রিনে কিছু মান 'মুদ্রিত' আনা উচিত:
জয়স্টিকের লাঠি ধাক্কা দিন এবং সংখ্যাগুলির কী হবে তা দেখুন।
যখন জয়স্টিক কেন্দ্রের অবস্থানে থাকে তখন দেওয়া মানগুলির একটি নোট করুন - আমার ক্ষেত্রে (518, 523)।
মু এর টুলবারে REPL বাটনে আবার ক্লিক করুন এটি বন্ধ করার জন্য - আপনি মাইক্রো: বিট খোলা অবস্থায় নতুন কোড ফ্ল্যাশ করতে পারবেন না।
ধাপ 4: এক্স এবং ওয়াই ভেরিয়েবল সামঞ্জস্য করা
আপনি জয়স্টিক ফাংশন দ্বারা প্রদত্ত মান পরিবর্তন করতে চান, যাতে:
- কেন্দ্রে এটি শূন্য
- আপ ইতিবাচক
- নিচে নেতিবাচক।
এটি রোবটের প্রয়োজনীয় নির্দেশাবলীর সাথে মিলে যায় - এগিয়ে যাওয়ার জন্য একটি ধনাত্মক সংখ্যা এবং পিছনের দিকে গাড়ি চালানোর জন্য একটি নেতিবাচক সংখ্যা।
শেষ ধাপে আপনি যে সংখ্যাগুলি পেয়েছেন তা দেখুন। প্রথম সংখ্যাটি x, এবং দ্বিতীয় সংখ্যাটি y।
মূল থেকে আপনার মানগুলি বিয়োগ করতে, ইতিমধ্যে প্রোগ্রামে থাকা joystick_push () সংজ্ঞাটি সম্পাদনা করুন:
def joystick_push ():
x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 রিটার্ন x, y
আপনার নিজের নম্বরগুলি ব্যবহার করুন, সেগুলি আমার থেকে আলাদা হতে পারে
আপনার নতুন কোড ফ্ল্যাশ করুন, REPL খুলুন, মাইক্রো: বিট রিসেট বোতাম টিপুন এবং আপনার মানগুলি পরীক্ষা করুন।
আপনি কি (0, 0) পাচ্ছেন?
ধাপ 5: বাম এবং ডান মোটরগুলির জন্য X এবং Y- কে মানগুলিতে রূপান্তর করা
এই মুহুর্তে, এই জয়স্টিক রোবটটি চালানোর জন্য খুব কার্যকর হবে না। সব দিকে এগিয়ে গেলে, আপনি একটি মান পাবেন (0, 500)।
আপনি যদি রোবটটিকে এই নম্বরগুলি দেন, তাহলে এটি ডান মোটর চালু করবে কিন্তু বামটি নয়, যা আপনি ঘটতে চান না!
এই ডায়াগ্রামটি দেখায় যে আপনি যখন জয়স্টিকটি সরান তখন x এবং y মানগুলির কী হবে এবং আপনি যখন জয়স্টিকটি সরান তখন আমরা রোবটটি কী করতে চাই।
আপনাকে আরো কিছু উপযোগী করার জন্য x এবং y এর মান মিশ্রিত করার জন্য আপনাকে কিছু গণিত ব্যবহার করতে হবে।
n
গণিত
চলুন শুরু করা যাক জয়স্টিককে সামনে এগিয়ে নিয়ে যাওয়া।
আপনি যে মানগুলি পেতে পারেন তার একটি উদাহরণ হল:
x = 0
y = 500
রোবটের জন্য উপযোগী হতে, আপনি এর মত মান পেতে চান:
বাম = 500
ডান = 500
আসুন আমরা x এবং y যোগ করার চেষ্টা করি বিভিন্ন উপায়ে আমরা কোন সংখ্যাগুলি পাই তা দেখতে:
x + y = 0 + 500 = 500
x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500
এখন দেখা যাক জয়স্টিকটিকে ডানদিকে ঠেলে দিলে কি হয়।
আপনি যে মানগুলি পেতে পারেন তার একটি উদাহরণ হল:
x = 500
y = 0
রোবটকে ডানদিকে ঘুরিয়ে দিতে, আপনি বাম মোটরকে এগিয়ে নিয়ে যেতে চান, এবং ডান মোটরটি পিছনের দিকে চালাতে চান:
বাম = 500
অধিকার = -500
আসুন আমাদের সূত্রটি আবার চেষ্টা করি:
x + y = 500 + 0 = 500
x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500
কোন বিকল্পটি আপনাকে সঠিক বাম মান দেবে এবং কোন বিকল্পটি আপনাকে সঠিক সঠিক মান দেবে তা জানার জন্য সূত্রের দুটি সেট তুলনা করুন।
আপনার নিজের জয়স্টিক থেকে পাওয়া কিছু মান দিয়ে এটি ব্যবহার করে দেখুন, নিশ্চিত করুন যে আপনি যে সূত্রটি বেছে নিয়েছেন তা সব সময় কাজ করে।
n
জয়স্টিক ফাংশন প্রসারিত
বাম এবং ডান দুটি নতুন ভেরিয়েবল তৈরি করতে এবং x এবং y এর পরিবর্তে সেই মানগুলি ফেরত দেওয়ার জন্য জয়স্টিক ফাংশনটি প্রসারিত করুন এবং সম্পাদনা করুন:
def joystick_push ():
x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 বাম = ডান = ডান দিকে ফিরে, ডানে
আপনার নতুন কোড ফ্ল্যাশ করুন, REPL খুলুন, মাইক্রো: বিট রিসেট বোতাম টিপুন এবং আপনার মানগুলি পরীক্ষা করুন।
আপনি কি প্রত্যাশিত মান পাচ্ছেন?
যদি আপনার আরও কিছু সাহায্যের প্রয়োজন হয়, আমাদের উদাহরণ কোডটি এখানে দেখুন:
ধাপ 6: রেডিও বার্তা হিসাবে মূল্য পাঠানো
এখন আপনার রোবটকে পাঠানোর জন্য কিছু মান প্রস্তুত আছে।
আপনার প্রধান লুপ সম্পাদনা করুন, যাতে এটি জয়স্টিকের মান পরীক্ষা করে, কিন্তু তারপর মানগুলি মুদ্রণের পরিবর্তে, এটি তাদের রেডিও বার্তা হিসাবে পাঠানোর জন্য প্রস্তুত করে।
যখন সত্য:
জয়স্টিক = জয়স্টিক_পশ () বার্তা = স্ট্র (জয়স্টিক [0]) + "" + স্ট্র (জয়স্টিক [1])
এটি আসলে বার্তাটি পাঠাবে না!
কোডের এই নতুন লাইনে কি হচ্ছে?
- জয়স্টিক [0] মানে জয়স্টিক ফাংশন থেকে বেরিয়ে আসা প্রথম তথ্য
- জয়স্টিক [1] পরবর্তী তথ্য (ডান)
- str () এই দুটি সংখ্যাকে স্ট্রিং ফরম্যাটে রূপান্তর করে (সংখ্যার পরিবর্তে পাঠ্য) - রেডিওতে তথ্য পাঠাতে সক্ষম হওয়ার জন্য এটি প্রয়োজনীয়।
আপনি + যোগ করার অর্থ দেখতে অভ্যস্ত হয়ে যাবেন - এটি উভয়ই একসাথে সংখ্যা যোগ করতে পারে এবং স্ট্রিংগুলিকে সংহত করতে পারে, যার অর্থ এটি দুটি বিট তথ্যকে একসাথে আটকে রাখবে।
উদাহরণ:
150 + 100 = 250
str (150) + str (100) = 150100
সুতরাং সংযোজন আপনার বাম এবং ডান মান একসাথে থাকবে।
দুই বিটের তথ্যের মধ্যে (যাতে রোবট জানে যে তারা দুটি বিট তথ্যের মধ্যে) আলাদা করতে বাধ্য করতে, "" ব্যবহার করে তাদের মধ্যে একটি অতিরিক্ত স্ট্রিং সংযুক্ত করুন। স্পেসের চারপাশে বক্তৃতা চিহ্ন মানে এটি ইতিমধ্যে একটি স্ট্রিং।
অবশেষে, রেডিওতে এই নতুন তৈরি বার্তাটি পাঠানোর জন্য আপনার কোড প্রসারিত করুন:
radio.send (বার্তা)
ঘুম (10)
ঘুম বার্তা প্রেরণকে ধীর করে দেয় যাতে রিসিভিং মাইক্রো: বিট খুব বেশি তথ্য দিয়ে ওভারলোড না হয়!
আপনার কন্ট্রোলার মাইক্রো: বিটে এই কোডটি ফ্ল্যাশ করুন এবং পরবর্তী ধাপে যাওয়ার আগে যেকোনো ত্রুটি ডিবাগ করুন।
ধাপ 7: আপনার রোবটে বার্তাগুলি গ্রহণ করা
শুরু থেকে আপনার রোবট কোডে ফিরে যান - আপনার কন্ট্রোলার মাইক্রো: বিট আনপ্লাগ করতে মনে রাখবেন যাতে আপনি ভুলক্রমে রোবট কোডটি ফ্ল্যাশ না করেন
আপনার মূল লুপে স্ক্রোল করুন - পরীক্ষার কোডটি সরান এবং এর পরিবর্তে এটি যুক্ত করুন:
যখন সত্য:
বার্তা = রেডিও.প্রাপ্ত () মুদ্রণ (বার্তা) ঘুম (100)
এটি ইনকামিং মেসেজের সমান একটি ভেরিয়েবল সেট করে, এবং মেসেজটি REPL- এ প্রিন্ট করে - মেসেজগুলি প্রত্যাশিতভাবে আসছে কিনা তা পরীক্ষা করার জন্য।
REPL এর সাথে সংযুক্ত আপনার নতুন কোডটি ফ্ল্যাশ করুন, তারপর জয়স্টিক চাপুন।
আপনি এই মত কিছু পেতে হবে:
ট্রাবলশুটিং টিপস
আপনি যদি আপনার কন্ট্রোলার মাইক্রো: বিট …
আপনি যদি আপনার রোবট মাইক্রো: বিট -এ একটি ত্রুটি বার্তা পান তবে আপনার রেডিও বার্তা সফলভাবে পাঠানো হয়েছে! কিন্তু রোবট তা বুঝতে পারে না, তাই আপনি যে বার্তাটি পাঠিয়েছেন এবং যে বার্তাটি আপনি রোবটকে বলেছিলেন তা মিলের জন্য শুনুন।
যদি কিছু না হয়
- নিশ্চিত করুন যে আপনি প্রতিটি মাইক্রোতে সঠিক কোডটি ফ্ল্যাশ করেছেন: বিট - ভুলভাবে ভুলটি ফ্ল্যাশ করা সহজ!
- আপনার মাইক্রো: বিট -এ আপনার চ্যানেল এবং গ্রুপ নম্বর মিলেছে তা নিশ্চিত করুন
ধাপ 8: রোবটের মোটরগুলিকে নিয়ন্ত্রণ করার জন্য আগত বার্তাগুলি ব্যবহার করা
আপনি এখন রেডিওতে একটি স্ট্রিং হিসাবে দুটি নম্বর পাঠাচ্ছেন।
আপনাকে এই বার্তাটিকে দুটি স্ট্রিংয়ে বিভক্ত করতে হবে, তারপরে স্ট্রিংগুলিকে আবার সংখ্যায় রূপান্তর করুন এবং এটি ড্রাইভ ফাংশনে পাস করুন। একসাথে অনেক কিছু চলছে!
এটি করার আগে, আপনাকে যাচাই করতে হবে যে আপনি যে বার্তাটি পাচ্ছেন তা সঠিক বিন্যাসে আছে।
যদি কোন বার্তা না পাঠানো হয়, তাহলে আপনি এর পরিবর্তে 'কেউ না' পাবেন। আপনি যদি এটি চেষ্টা করে বিভক্ত করেন, আপনি একটি ত্রুটির বার্তা পাবেন।
যখন সত্য:
message = radio.receive () যদি বার্তাটি না হয়: message = message.split () drive (int (message [0]), int (message [1]))
এখানে কি হচ্ছে?
- নতুন কোডটি চলবে যদি বার্তাটি 'না' ছাড়া অন্য কিছু হয়।
- message.split () মেসেজে একটি স্পেস চেক করে (যা আমরা শেষ ধাপে যোগ করেছি), এবং মেসেজটিকে দুই ভাগে ভাগ করার জন্য এটি ব্যবহার করে।
- int (বার্তা [0]), int (বার্তা [1]) পূর্ববর্তী ধাপে আমরা যা করেছি তার বিপরীত কাজ করে - প্রতিটি তথ্য পৃথকভাবে পায় এবং এটি একটি পূর্ণসংখ্যায় (একটি পূর্ণ সংখ্যা) রূপান্তর করে।
- int (বার্তা [0]) ড্রাইভ ফাংশনে বাম মোটরের মান হিসাবে ব্যবহৃত হয় এবং ডান মোটরের মান হিসাবে int (বার্তা [1]) ব্যবহৃত হয়।
চেক করুন যে এটি কাজ করে - আপনি জয়স্টিক ধাক্কা যখন মোটর চালু?
যদি না হয় - কিছু ডিবাগ করার সময়!
যদি হ্যাঁ, চমত্কার! আপনি একটি কাজ রিমোট কন্ট্রোল রোবট আছে!
পরবর্তী ধাপে যাওয়ার আগে আপনার রোবটের সাথে অনুশীলনে কিছু সময় ব্যয় করুন। এটি কি আপনার প্রত্যাশা অনুযায়ী চালায়?
পরবর্তী ধাপগুলি আপনাকে দেখাবে কিভাবে আপনার রোবটে অতিরিক্ত কার্যকারিতা যোগ করতে জয়স্টিকের বোতামগুলি ব্যবহার করবেন।
আপনি যদি এখন পর্যন্ত এই কোডের আমাদের সংস্করণ দেখতে চান:
- রোবট:
- নিয়ামক:
ধাপ 9: বোতামগুলি ব্যবহার করা - অতিরিক্ত বার্তা গ্রহণ করা
এই মুহুর্তে, আপনার কোডটি এমন কোনও বার্তা বিভক্ত করার চেষ্টা করবে যা কিছুই নয়। এর মানে হল যে যদি এটি গ্রহণ করে, উদাহরণস্বরূপ, 'হ্যালো', তাহলে আপনি একটি ত্রুটি বার্তা পাবেন।
আপনার মাইক্রো: বিটকে অন্য বার্তাগুলি ব্যাখ্যা করার অনুমতি দেওয়ার জন্য, প্রথমে প্রতিটি প্রত্যাশিত বার্তাটি পরীক্ষা করতে হবে, তারপরে বার্তাটি কেবল তখনই বিভক্ত করুন যখন এটিকে অন্য কিছু করতে বলা হয়নি।
এইভাবে আপনার কোড প্রসারিত করুন:
যদি বার্তাটি না হয়:
যদি বার্তা == 'হ্যালো': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (message [0]), int (বার্তা [1]))
প্রথমত, এটি 'হ্যালো' বার্তাটি পেয়েছে কিনা তা পরীক্ষা করবে। যদি এটি থাকে তবে এটি একটি সুখী চিত্র প্রদর্শন করবে, তারপর লুপের শীর্ষে ফিরে যান এবং পরবর্তী বার্তাটি পরীক্ষা করুন।
যদি বার্তাটি হ্যালো না হয়, তাহলে পরবর্তী বার্তাটি 'ডাক' কিনা তা পরীক্ষা করবে।
যদি বার্তাটি 'হ্যালো' বা 'হাঁস না হয়, তবে এটি তালিকার শেষ কাজটি করবে, যা বার্তাটি বিভক্ত করে এবং মোটরগুলি চালু করে। এটি যদি 'হ্যালো' বা 'ডাক' পেয়ে থাকে তবে বার্তাটি বিভক্ত করার চেষ্টা করবে না, অর্থাত্ আপনি এই দুটি বার্তার মধ্যে একটি থেকে ত্রুটি বার্তা পাবেন না।
দ্বিগুণ সমান চিহ্ন গুরুত্বপূর্ণ - এর অর্থ হল 'সমান', একক সমান চিহ্নের তুলনায়, যা কিছু সেট করছে (তাই বার্তা = 'হ্যালো' মানে আমরা পরিবর্তনশীলকে 'হ্যালো', বার্তা == 'হ্যালো' তে সেট করছি মানে আমরা জিজ্ঞাসা করছি বার্তাটি 'হ্যালো' সমান কিনা)।
এটি পরীক্ষা করার জন্য আপাতত মাত্র দুটি অপশন দিয়ে চেষ্টা করুন - আপনি পরবর্তীতে আপনার পছন্দ মতো অন্যান্য বার্তা যোগ করতে পারেন।
কাজের কোডের লিঙ্ক:
ধাপ 10: কন্ট্রোলারের বোতাম ব্যবহার করে অতিরিক্ত বার্তা পাঠানো
আপনার রোবটের মাইক্রো: বিটটি আনপ্লাগ করুন এবং পরিবর্তে আপনার জয়স্টিকের মাইক্রো: বিট লাগান।
সম্পাদনা করতে আপনার নিয়ামক কোডে ফিরে যান।
রোবট কোডের অনুরূপ, আমরা জয়েস্টিক ভ্যালু পাঠানোর আগে কন্ট্রোলারকে আপনি অন্য কোন বার্তা পাঠানোর চেষ্টা করছেন কিনা তা পরীক্ষা করতে চান।
লুপের শীর্ষে, আমরা এখনও এটি জয়স্টিকের বর্তমান মানগুলি পরীক্ষা করতে চাই, তবে আমরা এটিও পরীক্ষা করতে চাই যে বর্তমানে একটি বোতাম চাপানো হচ্ছে কিনা:
যখন সত্য:
জয়স্টিক = জয়স্টিক_পশ () বোতাম = বোতাম_প্রেস ()
button_press () কোন মানটি A, B, C, D, E বা F প্রদান করে তার উপর নির্ভর করে কোন বোতামটি বর্তমানে চাপানো হচ্ছে (যদি কিছু চাপানো না হয় তবে এটি কোনটিই ফেরত দেয় না)।
এখন আমরা একটি if-elif-else বিবৃতি দিতে পারি, যেমনটি আমরা রোবট কোডের জন্য করেছি-দুটি বোতাম ব্যবহার করে, এবং কোন বোতাম না চাপলে জয়স্টিক মান পাঠানো হবে।
যদি বোতাম == 'এ':
radio.send ('হ্যালো') ঘুম (500) এলিফ বোতাম == 'বি': radio.send ('ডাক') ঘুম (500) অন্য: বার্তা = str (জয়স্টিক [0]) + "" + str (জয়স্টিক) [1]) radio.send (বার্তা) ঘুম (10)
যখন একটি বোতাম চাপানো হয়, আপনি রোবটকে যে বার্তাগুলি বলেছিলেন তার মধ্যে একটি পাঠান আগের ধাপে।
যখনই বোতাম টিপানো হচ্ছে বার্তা পাঠানো হবে, এবং কম্পিউটার মানুষের চেয়ে অনেক দ্রুত! তাই বোতামটি বন্ধ করার আগে এটি বার বার বার্তা পাঠাতে পারে।
মেসেজ পাঠানোর পর ঘুম এটাকে মন্থর করে দেয়, যাতে এটি আবার এত তাড়াতাড়ি বাটন চেক না করে - আপনার জন্য নিখুঁত সময় পেতে এখানে কয়েকটি নম্বর চেষ্টা করুন - খুব ধীরে ধীরে এবং এটি প্রতিক্রিয়াশীলও হবে না দ্রুত এবং আপনার রোবট এতগুলি বাটন বার্তা পাবে যে এটি জয়স্টিকে সাড়া দেওয়া বন্ধ করতে পারে!
এটা কি কাজ করে?
আপনি যদি ত্রুটির বার্তা পাচ্ছেন, আপনি কী পরিবর্তন করেছেন এবং কী ঘটছে তা সাবধানে চিন্তা করুন।
আপনি যদি আপনার নিয়ামকের একটি বোতাম টিপলে রোবটটিতে একটি ত্রুটি পান - আপনি জানেন যে বার্তাটি পাওয়া যাচ্ছে, কিন্তু এটি রোবটকে বিভ্রান্ত করছে। আপনি যে বার্তাটি পাঠিয়েছেন তা পরীক্ষা করুন এবং আপনি যে বার্তাটি রোবটকে খুঁজতে বলেছেন তা একই।
কাজের কোডের লিঙ্ক:
ধাপ 11: পরবর্তী পদক্ষেপ
আপনার রোবটের মোটর এবং আপনার জয়স্টিক: বিট কন্ট্রোলার দিয়ে কাজ করার জন্য আপনার এখন প্রয়োজনীয় জ্ঞান রয়েছে।
দুটি প্রোগ্রাম উন্নত করতে এবং তাদের আপনার নিজের করতে এই জ্ঞান ব্যবহার করুন। নীচে কিছু ধারণা!
আপনার নিয়ামকটিতে ছয়টি বোতাম রয়েছে! কি আপনি তাদের কাজ করতে চান?
- আপনার রোবটের কমান্ডের জন্য একটি নাচের রুটিন প্রোগ্রাম করার বিষয়ে কী? ড্রাইভ () কমান্ডের একটি অ্যালগরিদম লিখুন, ঘুম () কমান্ড দ্বারা আলাদা!
- আপনি কি রোবটটির গতিপথ পরিবর্তন করতে চান যাতে এটি সহজেই উল্টোদিকে চালাতে পারে? আপনার জয়স্টিকের x এবং y মান সম্পর্কে চিন্তা করুন। তারা কি প্রতিনিধিত্ব করে এবং কিভাবে আপনি তাদের ম্যানিপুলেট করতে পারেন?
- আপনার রোবটের কি এলইডি, স্পিকার বা সেন্সরের মতো অতিরিক্ত বৈশিষ্ট্য আছে (অথবা আপনি যোগ করতে পারেন!)?
কোড উন্নত করার ধারণা
- আপনি কি আপনার রোবটকে কোড/ট্রাই ব্যতীত অজানা বার্তাগুলি মোকাবেলা করতে সাহায্য করতে পারেন?
- জয়স্টিক থেকে বাম এবং ডান মান গণনা করার জন্য ব্যবহৃত গণিতগুলি আমাদের পূর্ণাঙ্গ মান দেয় না (রোবটের ড্রাইভ 1023 পর্যন্ত একটি সংখ্যা গ্রহণ করতে পারে)। আপনি একটি ভাল পরিসীমা পেতে এই কোড সম্পাদনা করতে পারেন?
- জয়স্টিক মানগুলি মেশানোর অন্যান্য পদ্ধতি রয়েছে - আপনি কি এটি করার আরও ভাল উপায় নিয়ে আসতে পারেন?
প্রস্তাবিত:
রাস্পবেরি পাই MMA8452Q 3-অক্ষ 12-বিট/8-বিট ডিজিটাল অ্যাকসিলরোমিটার পাইথন টিউটোরিয়াল: 4 ধাপ
Raspberry Pi MMA8452Q 3-Axis 12-bit/8-bit Digital Accelerometer Python Tutorial: MMA8452Q হল একটি স্মার্ট, লো-পাওয়ার, তিন-অক্ষ, ক্যাপাসিটিভ, 12 বিট রেজোলিউশনের মাইক্রো-মেশিন অ্যাকসিলরোমিটার। নমনীয় ব্যবহারকারী প্রোগ্রামযোগ্য বিকল্পগুলি অ্যাক্সিলরোমিটারে এম্বেডেড ফাংশনগুলির সাহায্যে সরবরাহ করা হয়, দুটি বাধায় কনফিগারযোগ্য
মজার মাইক্রো: বিট রোবট - সহজ এবং সস্তা !: 17 টি ধাপ (ছবি সহ)
মজার মাইক্রো: বিট রোবট - সহজ এবং সস্তা !: বিবিসি মাইক্রো: বিটগুলি দুর্দান্ত! তারা প্রোগ্রাম করা সহজ, তারা ব্লুটুথ এবং একটি অ্যাকসিলরোমিটারের মত বৈশিষ্ট্য দ্বারা পরিপূর্ণ এবং সেগুলি সস্তা। রোবট গাড়ি তৈরি করতে সক্ষম হওয়া কি দুর্দান্ত হবে না যার দাম কিছু না? এই প্রকল্প দ্বারা অনুপ্রাণিত
কিভাবে একটি প্রভাবশালী কাঠের রোবট আর্ম (পার্ট 2: বাধা এড়ানোর জন্য রোবট) - মাইক্রো উপর ভিত্তি করে: বিট: 3 ধাপ
কিভাবে একটি প্রভাবশালী কাঠের রোবট আর্ম (পার্ট 2: বাধা এড়ানোর জন্য রোবট)-মাইক্রো ভিত্তিক: বিট: পূর্বে আমরা লাইন-ট্র্যাকিং মোডে আর্মবিট চালু করেছি। এরপরে, আমরা কীভাবে বাধা মোড এড়ানোর জন্য আর্মবিট ইনস্টল করব তা পরিচয় করিয়ে দিই
কিভাবে একটি চিত্তাকর্ষক কাঠের রোবট আর্ম (পার্ট 1: লাইন-ট্র্যাকিংয়ের জন্য রোবট)-মাইক্রো: বিট: 9 ধাপের উপর ভিত্তি করে
কিভাবে একটি চিত্তাকর্ষক কাঠের রোবট আর্ম একত্রিত করা যায় (পার্ট 1: লাইন-ট্র্যাকিংয়ের জন্য রোবট)-মাইক্রো: বিট এর উপর ভিত্তি করে: এই কাঠের লোকটির তিনটি রূপ রয়েছে, এটি খুব আলাদা এবং চিত্তাকর্ষক। তাহলে একে একে একে আসি
Pimoroni Enviro দিয়ে হালকা এবং রঙ পরিমাপ: মাইক্রো জন্য বিট: বিট: 5 টি ধাপ
পিমোরোনি এনভিরো দিয়ে হালকা এবং রঙ পরিমাপ: মাইক্রো জন্য বিট: বিট: আমি এমন কিছু ডিভাইসে কাজ করছিলাম যা পূর্বে আলো এবং রঙ পরিমাপের অনুমতি দেয় এবং আপনি এই ধরনের পরিমাপের পিছনে তত্ত্ব সম্পর্কে অনেক কিছু খুঁজে পেতে পারেন নির্দেশিকা এখানে এবং এখানে। সম্প্রতি এনভিরো প্রকাশ করেছে: বিট, এম এর জন্য একটি অ্যাড-অন