PWM এর পূর্নরূপ হলো Pulse Width Modulation. বিভিন্ন কাজে, যেমন LED এর উজ্জ্বলতা নিয়ন্ত্রন, DC মোটরের গতি নিয়ন্ত্রন সহ নানা কাজে ব্যবহার করাহয় এই পদ্ধতিটি।
যে কোনো মাইক্রোকন্ট্রোলার ভোল্টেজ বলতে চেনে কেবল 0 Volt (0) অথবা 5 Volt(1). সুতরাং সেক্ষেত্রে গতি অথবা উজ্জ্বলতা নিয়ন্ত্রন করা সম্ভবপর হয়ে ওঠে না। দরকার পড়ে নতুন কোন পদ্ধতির। আর সেটি হল PWM ।
এই বিষয়ে আরও বিস্তারিত জানতে এখানে ক্লিক করুন
PWM হল এমন একটা উপায় যেখানে আমরা ডিজিটাল মানের সাহায্যে এনালগ মান প্রদর্শন করতে পারি।
তার আগে দুটি গুরুত্বপূর্ণ তথ্য বলে রাখি ।
১। আরডুইনো আউটপুটে সর্বনিম্ন ভোল্টেজ হচ্ছে ০ ভোল্ট। এবং সর্বোচ্চ হচ্ছে ৫ ভোল্ট।
২। আরডুইনো তে ৮ বিট এর PWM default ভাবে দেয়া থাকে। মানে আপনি ২^৮ = ২৫৬ =০ থেকে ২৫৫ পর্যন্ত ব্যবহার করতে পারেন।
সহজে বোঝার জন্য আমরা এই রকম একটা স্কেলিং করতে পারি ।
মানে যা দাড়ায় ডিজিটাল মান ১ = ৫/২৫৬ = ০.০১৯৫৩১২৫ ভোল্ট
এখন আর একটা নতুন জিনিস দেখি। আমরা কিভাবে বা কোন কমান্ড ব্যবহার করে প্রোগ্রাম এর ভিতর এইটা লিখব ।
analogWrite()
এখন আর একটা ছবি দেখলে পুরো ব্যাপার টা পরিষ্কার হয়ে যাবে।
এখানে আমি বলেছিলাম যে 127 [analogWrite(127)] = 2.5 V আসলে ওইটা বোঝার সুবিধার্থে।
এর সঠিক অর্থ হচ্ছে আউটপুট এর ডিউটি সাইকেল ৫০ পারসেন্ট।
এভাবে analogWrite(pwm pin, digital value ) এ মানের পরিমান বিভিন্ন দিয়ে আমরা বিভিন্ন ডিউটি সাইকেল ব্যাবহার করতে পারি ।
আমি নিচে একটি কোড উদাহরন হিসাবে দিচ্ছিঃ
int ledPin = 9; // LED connected to digital pin 9 void setup() { // nothing happens in setup } void loop() { // fade in from min to max in increments of 5 points: for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fade out from max to min in increments of 5 points: for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } } int ledPin = 9; // LED connected to digital pin 9 void setup() { // nothing happens in setup } void loop() { // fade in from min to max in increments of 5 points: for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fade out from max to min in increments of 5 points: for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } }
সাথে থাকার জন্য ধন্যবাদ।
কোডে ভুল আছে। একই কোড ২বার দেয়া হয়েছে, এবং ledPin প্রথমবার ডিক্লেয়ার করা হয়নি। কোডে ভ্যারিয়েবল এবং ফর লুপের ব্যবহার করা হয়েছে, কিন্তু এ দুইটি ব্যাপার সম্পর্কে আগের টিউটোরিয়ালগুলোতে কিছু বলা হয়নি। <=, -=, += অপারেটর এক্সপ্লেইন করা উচিত ছিল। এবং যেহেতু এটি একটি বাংলা ভাষার টিউটোরিয়াল এর সাইট, তাই কোডে ইংলিশে কমেন্ট না করে বাংলায় কোড এক্সপ্লেইন করা উচিত ছিল।
আশা করি পরের পর্বে এধরণের ভুল আর থাকবেনা। শুভ কামনা রইলো। 🙂