Showing posts with label “Arduino শিখুন এক্সক্লুসিভ প্রজেক্ট তৈরি করুন”. Show all posts
Showing posts with label “Arduino শিখুন এক্সক্লুসিভ প্রজেক্ট তৈরি করুন”. Show all posts

পি ডব্লিউ এম (পালস ওয়াইডথ মডুলেশন)

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

পি ডব্লিউ এম বা পালস ওয়াইডথ মডুলেশন কিভাবে কাজ করে?

http://arduino.cc/en/Tutorial/PWM পেজটিতে PWM  বিষয়ে খুব ভালো একটা আলোচনা আছে।
আমরা উপরের ছবিতে ৫ টি PWM সিগন্যাল দেখতে পাচ্ছি । এখানে পাশাপাশি দুটি সবুজ দাগের মধ্যবর্তী অংশ টাইম প্রিয়োড বা এক সাইকেল নির্দেশ করে। অর্থাৎ PWM সিগন্যালের একটি পূর্ণ সাইকেল তৈরি করতে যে সময় প্রয়োজন হয় তাই হচ্ছে টাইম প্রিয়োড ।
আর একটা গুরুত্বপূর্ণ টার্ম হচ্ছে ফ্রিকোয়েন্সি। ১ সেকেন্ড সময়ের মধ্যে যতগুলো পূর্ণ সাইকেল সম্পন্ন হয় তাই হচ্ছে ফ্রিকোয়েন্সি।
এবার ডিউটি সাইকেল বিষয়ে কিছু কথা বলা যাক। PWM সিগন্যালের একটা পূর্ণ সাইকেল (পাশাপাশি দুটি সবুজ দাগের মধ্যবর্তী অংশ) এর শতকরা যতটুকু অংশ লজিক হাই থাকে তাই হচ্ছে ঐ PWM সিগন্যালের ডিউটি সাইকেল।
  • ছবিতে দেখানো ১ম সিগন্যালটির ডিউটি সাইকেল 0% । তাই এতে কোন লজিক হাই লেভেল নেই। এখানে লজিক হাই বলকে ভোল্টেজের একটা নির্দিষ্ট DC লেভেলকে নির্দেশ করে। সাধারণত এই মান DC 5V হয়ে থাকে, এবং ছবিতেও তাই দেখানো হয়েছে। আর লজিক লো বলতে সাধারণত DC 0V কে নির্দেশ করে।
  • ছবিতে দেখানো ২য় সিগন্যালটির ডিউটি সাইকেল 25% । অর্থাৎ একটা পূর্ণ সাইকেলের চার ভাগের একভাগ বা 25% সময় সিগন্যালটি লজিক হাই রয়েছে।
  • ছবিতে দেখানো ৩য় সিগন্যালটির ডিউটি সাইকেল 50% । অর্থাৎ একটা পূর্ণ সাইকেলের অর্ধেক বা 50% সময় সিগন্যালটি লজিক হাই রয়েছে।
  • ছবিতে দেখানো ৪র্থ সিগন্যালটির ডিউটি সাইকেল 75% । অর্থাৎ একটা পূর্ণ সাইকেলের চার ভাগের তিনভাগ বা 75% সময় সিগন্যালটি লজিক হাই রয়েছে।
  • ছবিতে দেখানো ৫ম সিগন্যালটির ডিউটি সাইকেল 100% । অর্থাৎ এটা একটা পূর্ণ DC ভোল্টেজ লেভেলকে নির্দেশ করে।
PWM সিগন্যালের এই ডিউটি সাইকেল পরিবর্তন করে আউটপুট ভোল্টেজের এভারেজ মান পরিবর্তন করা যায়। আর এই লজিকটি ব্যবহার করেই PWM এর মাধ্যমে বিভিন্ন এনালগ ডিভাইসকে নিয়ন্ত্রণ করা হয়।
আরো একটু বিস্তারিত ভাবে বিশ্লেষণ করা যাক।
আমরা যদি একটা ডিজিটাল পালস সিগন্যাল ব্যাবহার করি যার লজিক হাই লেভেল 5V এবং লজিক লো লেভেল 0V, এবং যদি সিগন্যালের ডিউটি সাইকেল 80% হয়, তাহলে আউটপুটে এভারেজ DC ভোল্টেজ পাওয়া যাবে 5x 0.8 = 4V ।  সিগন্যালের ডিউটি সাইকেল যদি 60% হয়, তাহলে আউটপুটে এভারেজ DC ভোল্টেজ পাওয়া যাবে 5x 0.6 = 3V ।
এই পদ্ধতি প্রয়োগ করে শুধুমাত্র সিগন্যালের ডিউটি সাইকেল পরিবর্তন করেই আমরা আউটপুট ভোল্টেজের এভারেজ মান পরিবর্তন করতে পারছি।

Arduino এবং PWM

Arduino UNO তে 3, 5, 6, 9, 10, এবং 11 নং পিন PWM তৈরি করতে পারে। এই পিন সমূহের বেশির ভাগই সর্বচ্চ 490kHz এর PWM তৈরি করতে পারে। তবে 5 এবং 6 নং পিন হাই ফ্রিকোয়েন্সির সর্বচ্চ 980kHz এর PWM তৈরি করতে পারে। এ সকল পিন ব্যবহার করে PWM তৈরি করার জন্য  analogWrite() ফাংশন ব্যবহার করা হয়। পরবর্তী পর্বে আমরা PWM ব্যবহার করে একটা প্রজেক্ট তৈরি করবো।
ছবিতে দেখানো Arduino UNO তে 3, 5, 6, 9, 10, এবং 11 নং পিনে (~) প্রকাশ করে যে এই পিনগুলো  PWM তৈরি করতে সক্ষম।
Continue Reading →

Arduino প্রোগ্রামিং বেসিক

Arduino এর জন্য লেখা যে কোন প্রগ্রামের দুইটা প্রধান ফাংশন থাকে
1
2
3
void setup(){
 
}
এবং
1
2
3
void loop() {
 
}
পিনমুড নির্ধারণ, ভেরিয়েবল ইনিশিয়ালাইজ করা, লাইব্র্রেরি ব্যবহার করা ইত্যাদি কাজের জন্য void setup(){} ফাংশন ব্যবহার করা হয় । প্রতিবার Arduino বোর্ডে পাওয়ার সাপ্লাই দেয়অর পর অথবা প্রতিবার Arduino বোর্ডের রিসেট বাটন চাপার পর void setup(){} ফাংশনটি মাত্র একবারের জন্য কাজ করে।
void loop(){} ফাংশনটির মধ্যেই প্রয়োজনীয় সকল কোড সমূহ রাখা হয়। void loop(){} ফাংশনটির মধ্যেকার সকল প্রোগ্রাম বারবার রিসাইকেল হতে থাকে।
Arduino এর জন্য লেখা যে কোন প্রোগ্রামকে sketch বলে । আমরা একটা sketch দেখি ।

এই প্রোগ্রামের হার্ডওয়ার সেটাপ একনজরে দেখে নেয়া যাক।
 
উপরের হর্ডওয়্যারটিতে মোট তিনটা LED ব্যবহার করা হয়েছে। প্রত্যেকটা LED কে 100ohm রেজিস্টরের মাধ্যমে Arduino বোর্ডের ১১নং, ১২নং এবং ১৩ নং ডিজিটাল ইনপুট পিন সমূহে যুক্ত করা হয়েছে।
উপরের প্রোগ্রামটি Arduino বোর্ডে লোড করলে প্রতিটা LED পর্যায়ক্রমিকভাবে জ্বলানেভা করতে থাকবে।

প্রোগ্রাম পর্যালোচনা

1
int led1 = 13;
এর মাধ্যমে একটা ইন্টিজার টাইপ ভেরিয়েবল ডিক্লেয়ার করা হয়েছে। সাধারণত কোন সংখ্যা বা ডাটা জমা রাখার জন্য ভেরিয়েবল ব্যবহার করা হয়। এখানে int হচ্ছে ভেরিয়েবলের ডাটা টাইপ, led1 ভেরিয়েবলের নাম । এবং 13 হচ্ছে ভেরিয়েবলের মান। অর্থাৎ প্রোগ্রামের মধ্যে কোথাও led1 ব্যবহার করলে তার মান 13 নির্দেশ করবে।
1
pinMode(led1, OUTPUT);
pinMode(); ফাংশন ব্যবহার করা হয় Arduino বোর্ডের বিশেষ কোন পিন কে ইনপুট হিসেবে ব্যবহার করা হবে না আউটপুট হিসেবে ব্যবহার করা হবে তা নির্দেশ করার জন্য।
pinMode(); ফাংশনের জন্য দুইটা অর্গুমেন্ট ব্যবহার করা হয়। একটা পিন নাম্বার নির্দেশ করে অন্যটা ঐ নাম্বারের পিনটা ইনপুট হবে না আউটপুট হবে তা নির্দেশ করে।
pinMode(led1, OUTPUT); এর মাধ্যমে led1 দ্বারা ১৩ নং পিনকে নির্দেশ করা হয়েছে আর OUTPUT দ্বারা বলা হয়েছে যে ১৩ নং পিনটি আউটপুট হিসেবে কাজ করবে।
আমরা যদি লেখি pinMode(9, INPUT); তাহলে ৯নং ডিজিটাল ইনপুট/আউটপুট পিনটি শুধুমাত্র ইনপুট হিসেবে কাজ করবে।
1
digitalWrite(led1, HIGH);
digitalWrite() ফাংশন ব্যবহার করা হয় কোন আউটপুট পিন কখন লজিক High আর কখন লজিক Low অবস্থায় থাকবে তা নির্ধারণ করার জন্য। এখানে কোন পিন লজিক High অবস্থায় আছে বলতে বোঝানো হচ্ছে ঐ পিনে পজিটিভ DC ভোল্টেজ আছে,  এই পজিটিভ DC ভোল্টেজ এর মান সাধারণত +5v বা তার কিছু কম হয়ে থাকে। কোন পিন লজিক Low অবস্থায় আছে বলতে বোঝানো হচ্ছে ঐ পিনে 0v রয়েছে।
digitalWrite(led1, HIGH); এর শাধ্যমে led1অর্থাৎ ১৩ নং পিন লজিক High অবস্থায় থাকবে। এই অবস্থায় ১৩ নং পিনে কোন LED সংযুক্ত থাকলে তা জ্বলতে থাকবে।
digitalWrite(led1, LOW); এর শাধ্যমে led1অর্থাৎ ১৩ নং পিন লজিক Low অবস্থায় থাকবে। এই অবস্থায় ১৩ নং পিনে কোন LED সংযুক্ত থাকলে তা জ্বলবে না।
1
delay(1000);
 delay(); ফাংশনটি ব্যবহার করে সময় বিরতি তৈরি করা হয়। এখানে আর্গুমেন্ট হিসেবে 1000 দেয়া হয়েছে এর অর্থ হচ্ছে 1000 মিলি সেকেন্ড বা ১ সেকেন্ড সময় বিরতি তৈরি করবে। আমরা যদি অর্ধ সেকেন্ড সময় বিরতি বা ডিলে তৈরি করতে চাই তাহলে লেখতে হবে। delay(500);

সম্পূর্ণ প্রোগ্রাম

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int led1 = 13;
int led2 = 12;
int led3 = 11;
 
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
 
void loop() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
delay(1000);
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(1000);
digitalWrite(led3, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led1, LOW);
delay(1000);
}
Continue Reading →

Find us on Facebook

Categories