কিভাবে একটি WS2812B ঠিকানাযোগ্য LED স্ট্রিপ একটি Arduino এর সাথে সংযুক্ত করবেন
LED-ভিত্তিক আলো প্রযুক্তির বিকাশ ত্বরান্বিত হচ্ছে। গতকাল এটি একটি অলৌকিক ঘটনা বলে মনে হয়েছিল যে RGB ফিতা একটি নিয়ামক দ্বারা নিয়ন্ত্রিত, যার উজ্জ্বলতা এবং রঙ রিমোট কন্ট্রোল দ্বারা সামঞ্জস্য করা যেতে পারে। আজ, বাজারে আরও বেশি সম্ভাবনা রয়েছে।
WS2812B এর উপর ভিত্তি করে LED স্ট্রিপ
স্ট্যান্ডার্ড থেকে ঠিকানাযোগ্য LED স্ট্রিপের পার্থক্য আরজিবি তাই কি প্রতিটি উপাদানের উজ্জ্বলতা এবং রঙের অনুপাত আলাদাভাবে সামঞ্জস্যযোগ্য. এটি আপনাকে আলোর প্রভাবগুলি পেতে দেয় যা অন্যান্য ধরণের আলোর ফিক্সচারের জন্য উপলব্ধ নয়। LED স্ট্রিপ একটি সুপরিচিত উপায়ে নিয়ন্ত্রিত হয় - পালস প্রস্থ মড্যুলেশন দ্বারা। সিস্টেমের বিশেষত্ব হল প্রতিটি LED এর নিজস্ব PWM কন্ট্রোলার রয়েছে। WS2812B চিপ হল একটি ত্রি-রঙা আলো-নিঃসরণকারী ডায়োড এবং একটি কন্ট্রোল সার্কিট, একটি প্যাকেজে মিলিত৷
উপাদানগুলি সমান্তরালভাবে পাওয়ার সাপ্লাইয়ের একটি টেপে একত্রিত হয় এবং একটি সিরিয়াল বাসের মাধ্যমে নিয়ন্ত্রিত হয় - প্রথম উপাদানটির আউটপুট দ্বিতীয়টির নিয়ন্ত্রণ ইনপুটের সাথে সংযুক্ত থাকে এবং আরও অনেক কিছু। বেশিরভাগ ক্ষেত্রে সিরিয়াল বাস দুটি লাইনে নির্মিত হয়, যার মধ্যে একটি স্ট্রোব (সিঙ্ক্রোনাস ডাল) প্রেরণ করে এবং অন্যটি ডেটা।
WS2812B চিপের কন্ট্রোল বাসটি একটি লাইন নিয়ে গঠিত - এটি ডেটা প্রেরণ করে।ডেটা একটি ধ্রুবক ফ্রিকোয়েন্সির ডাল হিসাবে এনকোড করা হয়, তবে বিভিন্ন ফ্রিকোয়েন্সি সহ। এক নাড়ি এক বিট. প্রতিটি বিটের সময়কাল হল 1.25 µs, শূন্য বিটে উচ্চ স্তরের 0.4 µs এবং নিম্ন স্তরের 0.85 µs থাকে। ইউনিটটি 0.8 µs এর উচ্চ এবং নিম্ন 0.45 µs এর মত দেখাচ্ছে। 24 বিট (3 বাইট) এর একটি পার্সেল প্রতিটি LED-এ পাঠানো হয়, তারপর 50µs এর জন্য নিম্ন স্তরের আকারে একটি বিরতি দেওয়া হয়। এর মানে হল যে পরবর্তী LED-এর জন্য ডেটা পরবর্তীতে প্রেরণ করা হবে, এবং তাই চেইনের সমস্ত উপাদানগুলির জন্য। ডাটা ট্রান্সফার 100 µs বিরতির সাথে শেষ হয়। এর মানে হল যে রিবন প্রোগ্রামিং চক্র সম্পূর্ণ হয়েছে এবং পরবর্তী সেট ডাটা প্যাকেট পাঠানো যেতে পারে।
এই প্রোটোকল ডেটা ট্রান্সমিশনের জন্য একটি একক লাইনের অনুমতি দেয়, কিন্তু সুনির্দিষ্ট সময় প্রয়োজন। পার্থক্য 150 এনএসের বেশি নয়। এছাড়াও, এই বাসের শব্দ প্রতিরোধ ক্ষমতা খুবই কম। পর্যাপ্ত প্রশস্ততার কোনো হস্তক্ষেপ নিয়ামক দ্বারা ডেটা হিসাবে অনুভূত হতে পারে। এটি নিয়ন্ত্রণ সার্কিটরি থেকে তারের দৈর্ঘ্যের উপর সীমাবদ্ধতা আরোপ করে। অন্যদিকে, এটি করার ক্ষমতা প্রদান করে যে পটি যাচাই করতে অতিরিক্ত ডিভাইস ছাড়া। আপনি যদি লুমিনায়ারে শক্তি প্রয়োগ করেন এবং আপনার আঙুল দিয়ে কন্ট্রোল বাসের কন্টাক্ট প্যাড স্পর্শ করেন, কিছু LED বিশৃঙ্খলভাবে চালু এবং বন্ধ হতে পারে।
WS2812B উপাদানগুলির প্রযুক্তিগত বৈশিষ্ট্য
ঠিকানাযোগ্য ফিতার উপর ভিত্তি করে আলোক ব্যবস্থা তৈরি করতে আলো-নিঃসরণকারী উপাদানগুলির গুরুত্বপূর্ণ পরামিতিগুলি জানা প্রয়োজন।
LED মাত্রা | 5x5 মিমি |
PWM মড্যুলেশন ফ্রিকোয়েন্সি | 400 Hz |
সর্বাধিক উজ্জ্বলতায় বর্তমান খরচ | উপাদান প্রতি 60 mA |
সরবরাহ ভোল্টেজ | 5 ভোল্ট |
Arduino এবং WS2812B
বিশ্বের জনপ্রিয় Arduino প্ল্যাটফর্ম আপনাকে অ্যাড্রেসযোগ্য ফিতা নিয়ন্ত্রণ করতে স্কেচ (প্রোগ্রাম) তৈরি করতে দেয়। সিস্টেমের ক্ষমতা যথেষ্ট প্রশস্ত, কিন্তু যদি কিছু স্তরে সেগুলি আর পর্যাপ্ত না হয়, অর্জিত দক্ষতাগুলি নির্বিঘ্নে C++ বা এমনকি অ্যাসেম্বলারে স্যুইচ করার জন্য যথেষ্ট হবে। যদিও, আরডুইনোতে প্রাথমিক জ্ঞান পাওয়া সহজ।
একটি WS2812B ভিত্তিক পটি একটি Arduino Uno (Nano) এর সাথে সংযুক্ত করা হচ্ছে
প্রথম পর্যায়ে, একটি সাধারণ Arduino Uno বা Arduino Nano বোর্ডই যথেষ্ট। পরবর্তীতে, আরও জটিল বোর্ডগুলি আরও জটিল সিস্টেম তৈরি করতে ব্যবহার করা যেতে পারে। অ্যাড্রেসযোগ্য LED স্ট্রিপটিকে Arduino বোর্ডের সাথে শারীরিকভাবে সংযুক্ত করার সময়, আপনাকে নিশ্চিত করতে হবে যে কয়েকটি শর্ত পূরণ হয়েছে:
- কম শব্দ প্রতিরোধ ক্ষমতার কারণে, ডেটা লাইন সংযোগ কন্ডাক্টরগুলি যতটা সম্ভব ছোট হওয়া উচিত (আপনি তাদের 10 সেন্টিমিটারের মধ্যে তৈরি করার চেষ্টা করবেন);
- Arduino বোর্ডের একটি বিনামূল্যের ডিজিটাল আউটপুটে ডেটা ওয়্যার সংযোগ করুন - এটি সফ্টওয়্যার দ্বারা পরে নির্দেশিত হবে;
- উচ্চ শক্তি খরচের কারণে বোর্ড থেকে স্ট্রিপটি পাওয়ার প্রয়োজন হয় না - এই উদ্দেশ্যে আলাদা পাওয়ার সাপ্লাই সরবরাহ করা হয়।
luminaire এবং Arduino এর সাধারণ পাওয়ার সাপ্লাই তারের সাথে সংযোগ স্থাপন করা প্রয়োজন।
WS2812B সফ্টওয়্যার নিয়ন্ত্রণের মৌলিক বিষয়
এটি ইতিমধ্যে উল্লেখ করা হয়েছে যে WS2812B চিপগুলি নিয়ন্ত্রণ করতে আপনাকে উচ্চ নির্ভুলতা সহ্য করে একটি নির্দিষ্ট দৈর্ঘ্যের সাথে ডাল তৈরি করতে হবে। আরডুইনো ভাষায় সংক্ষিপ্ত ডাল গঠনের আদেশ রয়েছে বিলম্ব মাইক্রোসেকেন্ড и মাইক্রোস. সমস্যা হল এই কমান্ডগুলির রেজোলিউশন হল 4 মাইক্রোসেকেন্ড। অর্থাৎ, প্রদত্ত নির্ভুলতার সাথে সময় বিলম্ব গঠন করা সম্ভব নয়। C++ বা অ্যাসেম্বলার টুলে যেতে হবে। এই উদ্দেশ্যে বিশেষভাবে তৈরি করা লাইব্রেরির সাহায্যে Arduino-এর মাধ্যমে অ্যাড্রেসযোগ্য LED স্ট্রিপ নিয়ন্ত্রণ করা সম্ভব। আপনি ব্লিঙ্ক প্রোগ্রাম দিয়ে শুরু করতে পারেন, যা আলো-নিঃসরণকারী উপাদানগুলিকে মিটমিট করে তোলে।
ফাস্টলেড
এই লাইব্রেরি সর্বজনীন। ঠিকানাযোগ্য ফিতা ছাড়াও, এটি SPI নিয়ন্ত্রিত ফিতা সহ অনেক ডিভাইস সমর্থন করে। এটির বিস্তৃত বৈশিষ্ট্য রয়েছে।
প্রথমে আপনাকে লাইব্রেরি সংযোগ করতে হবে। এটি সেটআপ ব্লকের আগে করা হয় এবং স্ট্রিংটি এইরকম দেখায়:
#অন্তর্ভুক্ত
পরবর্তী ধাপ হল প্রতিটি আলো নির্গত ডায়োডের রং সংরক্ষণের জন্য একটি অ্যারে তৈরি করা। এটির নাম স্ট্রিপ এবং 15 টি উপাদানের মাত্রা থাকবে।
CRGB স্ট্রিপ[15]
সেটআপ ব্লকে আপনাকে অবশ্যই ফিতাটি নির্দিষ্ট করতে হবে স্ক্রিপ্টটি এর সাথে কাজ করবে:
অকার্যকর সেটআপ() {
FastLED.addLeds< WS2812B, 7, RGB>(স্ট্রিপ, 15);
int g;
}
আরজিবি প্যারামিটার রঙের ক্রম নির্ধারণ করে, 15 মানে এলইডির সংখ্যা, 7 হল নিয়ন্ত্রণের জন্য নির্ধারিত আউটপুটের সংখ্যা (এটি শেষ প্যারামিটারেও একটি ধ্রুবক বরাদ্দ করা ভাল)।
লুপ ব্লকটি একটি লুপ দিয়ে শুরু হয় যা রেড (লাল আভা) অ্যারের প্রতিটি বিভাগে ক্রমানুসারে লেখে:
জন্য (g=0; g<15;g++)
{স্ট্রিপ[জি]=CRGB::লাল;}
তারপর জেনারেট করা অ্যারেটি ইলুমিনেটরে পাঠানো হয়:
FastLED.show();
বিলম্ব 1000 মিলিসেকেন্ড (সেকেন্ড):
বিলম্ব (1000);
তারপরে আপনি একইভাবে সমস্ত উপাদান বন্ধ করতে পারেন, তাদের মধ্যে কালো লিখে।
জন্য (int g=0; g<15;g++)
{স্ট্রিপ[জি]=CRGB::কালো;}
FastLED.show();
বিলম্ব (1000);
স্কেচ কম্পাইল এবং লোড করার পরে ফিতাটি 2 সেকেন্ডের সময়ের সাথে ফ্ল্যাশ হবে। আপনি যদি প্রতিটি রঙের উপাদান আলাদাভাবে নিয়ন্ত্রণ করতে চান তবে স্ট্রিংয়ের পরিবর্তে {স্ট্রিপ[জি]=CRGB::লাল;} বেশ কয়েকটি স্ট্রিং ব্যবহার করা হয়:
{
ফালা [g].r=100;// লাল উপাদানের luminescence স্তর সেট করুন
ফালা [g].g=11;// সবুজ জন্য একই
ফালা [g].b=250;// নীল জন্য একই
}
নিওপিক্সেল
এই লাইব্রেরিটি শুধুমাত্র নিওপিক্সেল রিং এলইডির সাথে কাজ করে, তবে এটি কম সম্পদ-নিবিড় এবং এতে শুধুমাত্র প্রয়োজনীয় জিনিস রয়েছে। আরডুইনোতে প্রোগ্রামটি এইরকম দেখায়:
#অন্তর্ভুক্ত
আগের ক্ষেত্রে যেমন, লাইব্রেরি প্লাগ ইন করা হয়েছে, এবং লেন্টা অবজেক্ট ঘোষণা করা হয়েছে:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// যেখানে 15 হল উপাদানের সংখ্যা এবং 6 হল নির্ধারিত আউটপুট
লেন্টা সেটআপ ব্লকে আরম্ভ করা হয়েছে:
অকার্যকর সেটআপ() {
lenta.begin ()
}
লুপ ব্লকে সমস্ত উপাদান লাল আলোকিত হয়, একটি পরিবর্তনশীল টেপে প্রেরণ করা হয় এবং একটি 1 সেকেন্ড বিলম্ব তৈরি করা হয়:
জন্য (int y=0; y<15;y++)// 15 - লুমিনারে উপাদানের সংখ্যা
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
lenta.show();
বিলম্ব (1000);
লেন্টা কালো লিখে জ্বলজ্বল করা বন্ধ করে:
জন্য (int y=0; y<15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
বিলম্ব (1000);
ভিডিও পাঠ: ঠিকানাযোগ্য ফিতা ব্যবহার করে ভিজ্যুয়াল এফেক্টের নমুনা।
কিভাবে LED ফ্ল্যাশ করতে হয় তা শেখার পরে, আপনি পাঠটি চালিয়ে যেতে পারেন এবং মসৃণ রূপান্তর সহ জনপ্রিয় "রেইনবো" এবং "নর্দার্ন লাইটস" সহ কীভাবে রঙের প্রভাব তৈরি করতে হয় তা শিখতে পারেন। WS2812B এবং Arduino ঠিকানাযোগ্য LED গুলি আপনাকে এর জন্য প্রায় সীমাহীন সম্ভাবনা দেয়।