
সুচিপত্র:
2025 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2025-01-23 14:36

এটি এমন কিছু নয় যা আমি সাধারণত একটি নির্দেশযোগ্য করতে চাই, আমি আমার মেটালওয়ার্ক পছন্দ করি, কিন্তু যেহেতু আমি একজন বৈদ্যুতিক প্রকৌশলী ছাত্র এবং মাইক্রোকন্ট্রোলার (এমবেডেড সিস্টেম ডিজাইন) এ একটি ক্লাস নিতে হয়, আমি ভেবেছিলাম আমি একটি নির্দেশনা তৈরি করব আমার একটি প্রকল্প। যখন আমি মূলত এই ক্লাসের জন্য প্রজেক্ট এবং অন্যদের তৈরি করেছি, আমি দেখেছি যে খুব কম টিউটোরিয়াল আছে যা arduino লাইব্রেরি ফাংশন বা সিরিয়াল ফাংশন ব্যবহার করে না, এটি আরেকটি কারণ যা আমি ভেবেছিলাম এটি একটি ভাল নির্দেশযোগ্য হবে।
এই কোডটি Atmega 2560 মাইক্রোকন্ট্রোলারের জন্য ডিজাইন করা হয়েছে, তাই আপনি যদি এটি অন্য বোর্ডে প্রয়োগ করতে চান তাহলে আপনার কন্ট্রোলার ইউজার ম্যানুয়ালের উপর ভিত্তি করে কোডের ঠিকানা রেজিস্টারগুলি পরিবর্তন করতে হবে। কোডের পিছনে মৌলিক ধারণা হল যে যখনই আপনি সিরিয়াল মনিটরে কীবোর্ডের একটি কী প্রবেশ করান, তখন Arduino মেগা আপনি কোন কী টিপবেন তার উপর ভিত্তি করে একটি নির্দিষ্ট ফ্রিকোয়েন্সি আউটপুট করবে, "q" রিসেট করে। আমি এটা তৈরি করেছি যাতে "a" A সমতল ফ্রিকোয়েন্সি এবং "A" A ধারালো ফ্রিকোয়েন্সি আউটপুট করবে, "b" B ফ্ল্যাট ফ্রিকোয়েন্টি আউটপুট করবে, C ফ্ল্যাটের জন্য "c", C শার্পের জন্য "C" ইত্যাদি। সম্পূর্ণ কোডটি শেষ পর্যন্ত আপলোড করা হয়েছে, কিন্তু প্রতিটি ধাপে কোডটি টুকরো টুকরো হয়ে যাবে যাতে ব্যাখ্যা করা সহজ হয়।
ধাপ 1: নিবন্ধনের ঠিকানা নির্ধারণ করা

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



এখানে আমরা ফ্রিকোয়েন্সি অ্যারে সংজ্ঞায়িত করতে চাই যার প্রতিটি ফ্রিকোয়েন্সি থাকবে যা প্রতিটি কী আউটপুট করবে। এই মানগুলি আসল নোট ফ্রিকোয়েন্সি থেকে গণনা করা হয়, এবং সৎভাবে আমি ভুলে গিয়েছিলাম যে আমি কীভাবে তাদের পেয়েছি, কিন্তু এগুলি সঠিক মান কারণ আমি তাদের একটি অসিলোস্কোপে পরীক্ষা করে নিশ্চিত করেছি। আমরা নোট অ্যারে সংজ্ঞায়িত করছি যার মধ্যে প্রতিটি স্বরের জন্য চাপ দেওয়ার জন্য সমস্ত কী রয়েছে, সেইসাথে আমাদের পরবর্তী ফাংশনগুলির জন্য যে ভেরিয়েবলগুলির প্রয়োজন হবে।
ধাপ 3: "serial.begin" ফাংশন

আমরা আমাদের কাস্টম ফাংশনকে কল করব যা "serial.begin" ফাংশন U0init () এর প্রতিলিপি করে। এটি ইনপুট হিসাবে কাঙ্ক্ষিত বাউড্রেট নেয় এবং সেই বাডরেটে সিরিয়াল পোর্ট শুরু করে।
ধাপ 4: "serial.available" ফাংশন

আমরা "serial.available" U0kbhit () অনুকরণকারী ফাংশনটিকে কল করব। এটি ইনপুট নেয় না বরং RDA স্ট্যাটাস বিট ব্যবহার করে কীবোর্ডে কোন পরিবর্তন হয় কিনা তা সনাক্ত করে এবং পরিবর্তন সনাক্ত হলে সত্য ফিরে আসে।
ধাপ 5: "serial.read" ফাংশন

আমরা যে ফাংশনটিকে "serial.read" ফাংশন U0getchar () অনুকরণ করে কল করব, যা কোন ইনপুট নেয় না এবং কীবোর্ডে যে কোন পরিবর্তন করা হয়, যা UDR0 রেজিস্টারে সংরক্ষিত থাকে।
ধাপ 6: "serial.write" ফাংশন

আমরা "serial.write" U0putchar () অনুকরণকারী ফাংশনকে কল করব, যা UDR0 রেজিস্টার থেকে ডেটা গ্রহণ করে যখন একটি পরিবর্তন সনাক্ত এবং সংরক্ষণ করা হয়, এবং আউটপুট যা সিরিয়াল মনিটরে ফিরে আসে।
ধাপ 7: সেটআপ ফাংশন

এটি মৌলিক সেটআপ ফাংশন যা সিরিয়াল পোর্ট শুরু করার জন্য আমাদের "serial.begin" অনুকরণ ব্যবহার করবে, এবং টাইমার রেজিস্টারগুলির জন্য আমাদের বিট সেটিংস আরম্ভ করবে এবং PB6 কে আমাদের টোন আউটপুট করার জন্য সেট করবে।
ধাপ 8: লুপ এবং ISR ফাংশন

লুপ এইভাবে কাজ করে: যদি আমাদের "serial.available" ফাংশনের সাথে কোন পরিবর্তন ধরা পড়ে, তাহলে আমাদের "serial.read" ফাংশনটি পরিবর্তিত হয় এবং আমাদের "serial.write" ফাংশন সেই পরিবর্তনকে সিরিয়াল মনিটরে রাখে। যতক্ষণ একটি ভেরিয়েবল i ফ্রিকোয়েন্সি অ্যারের আকারের চেয়ে কম, এটি আউটপুটটিকে সেই অ্যারেতে i এর অবস্থান হিসাবে সেট করবে, সেই অবস্থানে ফ্রিকোয়েন্সি আউটপুট করবে। ISR রিসেট হিসাবে কাজ করে, যেখানে ফ্রিকোয়েন্সি অ্যারের অবস্থান 0 এর সমান না হলে (অন্য কথায় যদি "q" টিপানো না হয়), এটি ফ্রিকোয়েন্সি আউটপুট করবে, কিন্তু যখন "q" চাপবে তখন এটি পুনরায় সেট হবে। দয়া করে মনে রাখবেন: এই কোডটি ইন্টারাপ্ট ব্যবহার করে, কিন্তু এটি নিষ্ক্রিয় ইন্টারাপ্ট দিয়ে করা যেতে পারে। যদি আমি এর জন্য কোন অনুরোধ পাই তবে আমি বাধা ছাড়াই কোডটি পোস্ট করব, আমি শুধু মনে করি বাধা সংস্করণটি আরও মজাদার।
ধাপ 9: তারের

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

আরডুইনো এবং পাইথনের আরডুইনো মাস্টার লাইব্রেরি ব্যবহার করে হালকা তীব্রতার প্লট করা: আরডুইনো একটি অর্থনৈতিক কিন্তু অত্যন্ত দক্ষ এবং কার্যকরী হাতিয়ার, এটিকে এমবেডেড সি -তে প্রোগ্রাম করা প্রকল্পগুলিকে ক্লান্তিকর করে তোলে! পাইথনের আরডুইনো_মাস্টার মডিউল এটিকে সহজ করে এবং আমাদের গণনা করতে দেয়, আবর্জনার মান অপসারণ করে
একটি সাধারণ টোন জেনারেটর: 7 টি ধাপ (ছবি সহ)

একটি সাধারণ টোন জেনারেটর: আরডুইনো টোন জেনারেটর হল সুইচগুলির একটি সেট যা GND- এর সাথে একটি সাধারণ টার্মিনাল ভাগ করে নেয় যখন বাকি পিনগুলি 2, 3, 4, 5, 6, 7, 8, এবং 9 Arduino ডিজিটাল পিন এবং স্পিকারের সাথেও সংযুক্ত থাকে Arduino Uno থেকে GND এবং ডিজিটাল পিন 11 এর মধ্যে ইনস্টল করা হয়েছে
Arduino Pro Mini ব্যবহার করে টোন জেনারেটর "জিমিকি কামাল": 5 টি ধাপ

Arduino Pro Mini ব্যবহার করে টোন জেনারেটর "Jimikky Kammal": এটি Arduino Pro Mini ব্যবহার করে একটি সহজ টোন জেনারেটর প্রকল্প। সুপার হিট গানের একটি অংশ " জিমিকি কাম্মাল " " ভেলিপাদিন্তে পুস্তকাম " monotonic মধ্যে বিকশিত হয়। মিউজিক্যাল নোটগুলি প্রকৃতিতে মসৃণ এবং ঘূর্ণায়মান সাইনোসো হিসাবে ঘটে
মর্স টোন জেনারেটর (লো পাওয়ার সিডব্লিউ বীপার): 3 টি ধাপ

মর্স টোন জেনারেটর (লো পাওয়ার সিডব্লিউ বীপার): এখানে আমি বর্ণনা করেছি কিভাবে একটি সাধারণ লো পাওয়ার টোন জেনারেটর তৈরি করা যায় যা আমি আমার ছেলেকে মোর্স কোড শেখানোর জন্য ব্যবহার করি। এই চাবি দ্বিতীয় বিশ্বযুদ্ধের সময় জার্মান বাহিনী ব্যবহার করেছিল। কিয়ারের একটি ছিল
শূন্য খরচ ল্যাপটপ কুলার / স্ট্যান্ড (কোন আঠা, কোন ড্রিলিং, কোন বাদাম এবং বোল্ট, কোন স্ক্রু): 3 ধাপ

জিরো কস্ট ল্যাপটপ কুলার / স্ট্যান্ড (কোন আঠা, কোন ড্রিলিং, কোন বাদাম এবং বোল্ট, কোন স্ক্রু নেই): আপডেট: দয়া করে দয়া করে ভোট আমার জন্য প্রবেশ করুন www.instructables.com/id/Zero-Cost-Aluminium-Furnace-No-Propane-No-Glue-/ অথবা আমার সেরা বন্ধুদের জন্য মেইব ভোট