সুচিপত্র:

RGB LED ম্যাট্রিক্স: 5 টি ধাপ
RGB LED ম্যাট্রিক্স: 5 টি ধাপ

ভিডিও: RGB LED ম্যাট্রিক্স: 5 টি ধাপ

ভিডিও: RGB LED ম্যাট্রিক্স: 5 টি ধাপ
ভিডিও: কিভাবে এক্সেলে লিডারবোর্ড দিয়ে আপনার নিজের টুর্নামেন্ট জেনারেটর তৈরি করবেন 2024, নভেম্বর
Anonim
Image
Image
হার্ডওয়্যার ডিজাইন
হার্ডওয়্যার ডিজাইন

নির্দেশযোগ্য অনুসন্ধান করুন, এবং আপনি অনেক LED ম্যাট্রিক্স প্রকল্প খুঁজে পেতে পারেন। তাদের মধ্যে কেউই আমি যা চেয়েছিলাম তা ছিল না, যা ছিল কিছু উৎপাদনের জন্য হার্ডওয়্যার এবং সফটওয়্যার ডিজাইনের মিথস্ক্রিয়া অন্বেষণ করা, এবং একটি ড্রাইভারের সাথে একটি পরিষ্কার পিসিবিতে চূড়ান্ত পণ্য তৈরি করা যা আমাকে উচ্চ-স্তরের ব্যবহার করে "LED স্ক্রিন" এ আঁকতে দেয় নির্মাণ (যেমন, নির্দিষ্ট পিক্সেল সেট করার বিপরীতে একটি লাইন আঁকা)। এই অংশটি আমার জন্য গুরুত্বপূর্ণ ছিল, কারণ অনেক LED ম্যাট্রিক্স চালক খালি হাড় এবং প্রোগ্রামগতভাবে একটি ছবি বা অ্যানিমেশন তৈরির পথে অনেক কিছু প্রদান করে না। এর মানে এই নয় যে আপনি অন্যান্য ড্রাইভারদের সাথে ছবি এবং অ্যানিমেশন তৈরি করতে পারবেন না, শুধু এই যে আপনাকে প্রকল্প থেকে প্রকল্পে আরো পুনরাবৃত্তিমূলক কাজ করতে হবে।

তাই আমি আমার স্বপ্ন পূরণ করতে বেরিয়েছি। প্রথম ধাপ ছিল হার্ডওয়্যার ডিজাইন করা। এটি সম্ভবত আমার জন্য সবচেয়ে চ্যালেঞ্জিং ছিল, কারণ আমার পটভূমি আরো সফটওয়্যার। আবার, অনেকগুলি প্রি-বেকড ডিজাইন ছিল, এবং আমি অবশ্যই সেগুলি অনুপ্রেরণার জন্য ব্যবহার করেছি, কিন্তু আমি এটি করার মাধ্যমে শিখতে চেয়েছিলাম, তাই আমি একটি ব্রেডবোর্ডে 4x4 ম্যাট্রিক্স প্রোটোটাইপ করেছি। আমি সেই প্রক্রিয়ার মাধ্যমে অনেক কিছু শিখেছি, কারণ আমার প্রথম কয়েকটি পুনরাবৃত্তি কাজ করে নি। কিন্তু, আমি হার্ডওয়্যার ডিজাইন করেছি যা কাজ করেছে, যার ফলে আমি একজন ড্রাইভার তৈরি করতে শুরু করেছি।

আমি আমার ড্রাইভার প্ল্যাটফর্ম হিসাবে Arduino বেছে নিয়েছি কারণ এটি ব্যাপকভাবে উপলব্ধ এবং অনলাইনে প্রচুর রেফারেন্স রয়েছে। যদিও ক্যারিয়ারের অভিজ্ঞতা আমাকে আমার হার্ডওয়্যার প্রচেষ্টার চেয়ে চালকের একটি কার্যকরী সংস্করণে যাওয়ার অনুমতি দেয়, তখনও প্রচুর পুনরাবৃত্তি ছিল যখন আমি ATMega মাইক্রো কন্ট্রোলারের জন্য ড্রাইভারের পারফরম্যান্স অপ্টিমাইজ করেছিলাম এবং আমার পছন্দ মতো একটি প্রোগ্রামিং API তৈরি করেছিলাম।

এই নির্দেশযোগ্য নকশা এবং আমার প্রকল্প থেকে কিছু মূল শিক্ষা নথিভুক্ত করে। এই প্রকল্প সম্পর্কে আরও তথ্য এখানে আমার ওয়েবসাইটে পাওয়া যাবে, সম্পূর্ণ কিট সহ আপনি আপনার নিজের RGB LED ম্যাট্রিক্স তৈরির জন্য কিনতে পারেন।

ধাপ 1: হার্ডওয়্যার ডিজাইন

আমার হার্ডওয়্যার ডিজাইনের প্রাথমিক লক্ষ্য ছিল RGB LEDs এর একটি অ্যারে তৈরি করা যা আমি প্রোগ্রাম করতে পারতাম, কিন্তু আমিও অনেক টাকা খরচ করতে চাইনি। আমি যে পদ্ধতিতে স্থির হয়েছি তা হল LEDs নিয়ন্ত্রণ করতে 74HC595 শিফট রেজিস্টার ব্যবহার করা। প্রয়োজনীয় শিফট রেজিস্টারের সংখ্যা কমানোর জন্য, আমি আরজিবি এলইডিগুলিকে একটি ম্যাট্রিক্স লেআউটে সাজিয়েছিলাম যেখানে সাধারণ অ্যানোডগুলি সারিতে একসঙ্গে বাঁধা ছিল এবং লাল, সবুজ এবং নীল ক্যাথোড সীসাগুলি কলামে একসঙ্গে বাঁধা ছিল। 4x4 ম্যাট্রিক্সের জন্য, সার্কিট ডায়াগ্রামটি সংযুক্ত সার্কিট ডায়াগ্রামের মতো লাগছিল।

একটি জিনিস যা আপনি এখনই লক্ষ্য করবেন তা হল যে ম্যাট্রিক্স সার্কিট দেওয়া হয়েছে, কিছু LED আলো কনফিগারেশন রয়েছে যা একই সময়ে সমস্ত পছন্দসই LED গুলির সাথে করা যায় না। উদাহরণস্বরূপ, ম্যাট্রিক্স একই সাথে দুটি এলইডি জ্বালাতে পারে না যা পরস্পর থেকে তির্যক কারণ সারি এবং কলাম উভয়কেই শক্তি দিলে দুটি বিপরীত এলইডি কাঙ্ক্ষিত এলইডি -তে লম্বালম্বি তির্যকতে আলোকিত হবে। এই চারপাশে কাজ করার জন্য, আমরা প্রতিটি সারির মাধ্যমে স্ক্যান করার জন্য মাল্টিপ্লেক্সিং ব্যবহার করব। ওয়েবে প্রচুর সম্পদ রয়েছে যা মাল্টিপ্লেক্সিংয়ের কৌশলকে আচ্ছাদিত করে, আমি সেগুলি এখানে প্রতিলিপি করার চেষ্টা করব না।

যেহেতু আমি সাধারণ অ্যানোড এলইডি ব্যবহার করছি, তার মানে সারিগুলি ইতিবাচক শক্তি সরবরাহ করে এবং কলামগুলি মাটিতে ডুবে যায়। ভাল খবর হল 74HC595 শিফট রেজিস্টার উৎস এবং ডুবে যাওয়া উভয়ই পারে, কিন্তু খারাপ খবর হল যে তারা কতটা শক্তি উৎস বা ডুবে যেতে পারে তার একটি সীমা আছে। 74HC595 এর পৃথক পিনের সর্বোচ্চ বর্তমান ড্র 70 mA আছে, কিন্তু 20 mA এর কম রাখা ভাল। আমাদের RGB LEDs এর স্বতন্ত্র রঙের প্রতিটিতে প্রায় 20 mA ড্র আছে। এর মানে হল যে 74HC595 যদি আমি তাদের সব চালু করতে চাই তবে সরাসরি LEDs এর একটি সম্পূর্ণ সারি শক্তি দিতে পারে না।

সুতরাং সরাসরি সারি পাওয়ার পরিবর্তে, 74HC595 পরিবর্তে প্রতিটি সারির জন্য একটি ট্রানজিস্টর চালাবে, এবং ট্রানজিস্টারটি সারির বর্তমান শক্তি চালু বা বন্ধ করবে। যেহেতু নকশাটি একটি সাধারণ অ্যানোড এলইডি ব্যবহার করছে, তাই সুইচিং ট্রানজিস্টর হবে পিএনপি। যদি আমরা একটি সাধারণ ক্যাথোড LED ব্যবহার করতাম, তাহলে সুইচিং ট্রানজিস্টর হবে NPN। লক্ষ্য করুন যে একটি সারি চালানোর জন্য একটি PNP ট্রানজিস্টর ব্যবহার করে, শিফট রেজিস্টারের সেটিংসটি চালু করার জন্য এটি এখন কম হয়ে যায় কারণ একটি PNP ট্রানজিস্টরকে এমিটার এবং বেস চালু করার মধ্যে একটি নেতিবাচক ভোল্টেজের প্রয়োজন হয়, যা ইতিবাচক কারেন্টকে প্রবাহিত করতে দেয় সারি

বিবেচনা করার আরেকটি বিষয় হল শিফট রেজিস্টারের কাঙ্ক্ষিত বিট লেআউট। অর্থাৎ, শিফট রেজিস্টারের মধ্যে, যা বিট নিয়ন্ত্রণ করে ম্যাট্রিক্সে কোন সারি বা কলাম। আমি যে নকশাটি দিয়েছিলাম তা হল যেখানে প্রথম বিট, বা "সবচেয়ে উল্লেখযোগ্য বিট", যা ডেইজি চেইনড শিফট রেজিস্টারে পাঠানো হয়েছে, এলইডি লাল এলিমেন্টের কলাম নিয়ন্ত্রণ করে, দ্বিতীয় বিট প্রথম কলামের সবুজ উপাদান নিয়ন্ত্রণ করে, তৃতীয় বিট প্রথম কলামের নিয়ন্ত্রণ করে নীল উপাদান, চতুর্থ বিট দ্বিতীয় কলামের লাল উপাদান নিয়ন্ত্রণ করে,… এই প্যাটার্নটি বাম থেকে ডানে কলাম জুড়ে পুনরাবৃত্তি করা হয়। তারপর প্রেরিত পরবর্তী বিট শেষ, বা নিচের, সারি, পরেরটি দ্বিতীয় থেকে শেষ সারিতে নিয়ন্ত্রণ করে,… শেষ বিট পাঠানো পর্যন্ত এটি পুনরাবৃত্তি হয়, অথবা "সর্বনিম্ন উল্লেখযোগ্য বিট", ম্যাট্রিক্সের প্রথম, বা শীর্ষ সারি নিয়ন্ত্রণ করে ।

অবশেষে, আমি RGB LED এর প্রতিটি LEDs এর জন্য কোন প্রতিরোধক ব্যবহার করব তা নির্ধারণ করতে হবে। যখন আপনি স্ট্যান্ডার্ড ফর্মুলা ব্যবহার করতে পারেন যা ফরওয়ার্ড ভোল্টেজ এবং কাঙ্ক্ষিত কারেন্টকে একত্রিত করে প্রয়োজনীয় প্রতিরোধক গণনা করে, আমি দেখেছি যে প্রতিটি LED এর কারেন্ট 20 মিলিঅ্যাম্পে সেট করার ফলে লাল-সবুজ এবং নীল সব LED গুলি চালু থাকলে একটি সাদা-সাদা রঙ দেখা দেয়। । তাই আমি এটা চোখের বল শুরু। সাদাতে খুব বেশি লাল হওয়া মানে লাল LED এর রেজিস্টর ওহম বাড়িয়ে কারেন্ট কমানো। আমি পুনরাবৃত্তি বিভিন্ন ohms এর প্রতিরোধক আউট অদলবদল না হওয়া পর্যন্ত আমি একটি সংমিশ্রণ যে একটি সাদা রঙ উত্পাদিত আমি সঠিক ছিল মনে। চূড়ান্ত সংমিশ্রণটি ছিল লাল LED এর জন্য 180,, সবুজ LED এর জন্য 220 and এবং নীল LED এর জন্য 100।

ধাপ 2: হার্ডওয়্যার নির্মাণ - ব্রেডবোর্ড

হার্ডওয়্যার নির্মাণ - ব্রেডবোর্ড
হার্ডওয়্যার নির্মাণ - ব্রেডবোর্ড
হার্ডওয়্যার নির্মাণ - ব্রেডবোর্ড
হার্ডওয়্যার নির্মাণ - ব্রেডবোর্ড

হার্ডওয়্যার নির্মাতার প্রথম ধাপ ছিল রুটি বোর্ডিং। এখানে আমি RGB LEDs দিয়ে 4x4 ম্যাট্রিক্স তৈরি করেছি। এই ম্যাট্রিক্সটি নিয়ন্ত্রণের জন্য 16 বিট, RGB কলামের জন্য 12 এবং প্রতিটি সারির জন্য 4 টি প্রয়োজন হবে। দুটি 74HC595 শিফট রেজিস্টার এটি সব পরিচালনা করতে পারে। আমি প্রথমে গবেষণা করেছি এবং একটি সার্কিট ডিজাইন করেছি যা আমি ভেবেছিলাম কাজ করবে, তারপর এটি রুটিবোর্ডে তৈরি করেছি।

সম্ভবত রুটিবোর্ড তৈরির সবচেয়ে বড় চ্যালেঞ্জ ছিল সব তারের ব্যবস্থাপনা। আমি breadboards জন্য একটি preformed তারের কিট বাছাই, কিন্তু ঘটনা তারপর এটি একটু অযৌক্তিক ছিল। একটি কৌশল যা আমি সহায়ক বলে মনে করি তা হল Arduino বোর্ডের সাথে সংযোগের জন্য একটি "পোর্ট" তৈরি করা। অর্থাৎ, Arduino এর পিনগুলিকে সরাসরি ব্রেডবোর্ডের বিভিন্ন IC পিনের সাথে সংযুক্ত করার পরিবর্তে, Arduino এর সংযোগ বিন্দু হিসেবে রুটিবোর্ডে কয়েকটি সারি উৎসর্গ করুন এবং তারপর সেই সারির সাথে সংশ্লিষ্ট আইডি পিন সংযুক্ত করুন। এই প্রকল্পের জন্য, আপনার আরডুইনোতে কেবল পাঁচটি সংযোগ প্রয়োজন: +5V, স্থল, ডেটা, ঘড়ি এবং ল্যাচ।

একবার রুটিবোর্ড তৈরি হয়ে গেলে, আমাকে এটি পরীক্ষা করতে হবে। যাইহোক, শিফট রেজিস্টারে সঠিক সংকেত পাঠানোর জন্য কোন ধরণের ড্রাইভার ছাড়া, আমি হার্ডওয়্যার লেআউট কাজ করে কিনা তা পরীক্ষা করতে অক্ষম ছিলাম।

ধাপ 3: ড্রাইভার সফটওয়্যার ডিজাইন

Image
Image

সফটওয়্যার ডেভেলপমেন্টের সাথে আমার নিজের ক্যারিয়ারের অভিজ্ঞতার পরিপ্রেক্ষিতে, এটি ছিল প্রকল্পের অংশ যা আমি সম্ভবত একটি পথ নেওয়ার বিষয়ে সবচেয়ে স্পষ্ট ছিল। আমি অন্যান্য Arduino- ভিত্তিক LED ম্যাট্রিক্স চালকদের অনেক জরিপ করেছি। যদিও অবশ্যই ভাল ড্রাইভার পাওয়া যায়, আমি যে নকশাটি চেয়েছিলাম তা কারো কাছেই ছিল না। ড্রাইভারের আমার নকশা লক্ষ্য ছিল:

  • প্রোগ্রাম এবং ছবি এবং অ্যানিমেশন তৈরি করতে সক্ষম হওয়ার জন্য একটি উচ্চ স্তরের API প্রদান করুন। আমি দেখেছি বেশিরভাগ ড্রাইভার হার্ড-কোডেড ইমেজের উপর বেশি মনোযোগী ছিল। এছাড়াও, যেহেতু আমি ব্যবসার দ্বারা C ++ প্রোগ্রামার, তাই আমি LED ম্যাট্রিক্সে অঙ্কনের কার্যক্রম বাস্তবায়ন ও পরিচালনা করতে ভাল বস্তু ভিত্তিক ডিজাইন ব্যবহার করতে চেয়েছিলাম।
  • স্ক্রিনে ইমেজ ম্যানেজ করার জন্য ডাবল বাফার্ড অ্যাপ্রোচ ব্যবহার করুন। একটি বাফার হল যা প্রোগ্রামগতভাবে টানা হয়, অন্যটি যে কোনো মুহূর্তে ম্যাট্রিক্স পিক্সেলের অবস্থা উপস্থাপন করে। এই পদ্ধতির সুবিধা হল যে আপনাকে মাল্টিপ্লেক্সিংয়ের আপডেট চক্রের মধ্যে পর্দার জন্য পরবর্তী ফ্রেম আপডেট সম্পূর্ণরূপে রেন্ডার করতে হবে না।
  • লাল, সবুজ এবং নীল উপাদানের সহজ সংমিশ্রণের মাধ্যমে একটি RGB যে সাতটি আদিম রঙকে রেন্ডার করতে পারে তার চেয়ে বেশি অনুমতি দিতে PWM ব্যবহার করুন।
  • ড্রাইভারকে এমনভাবে লিখুন যাতে এটি বিভিন্ন আকারের RGB LED ম্যাট্রিক্সের সাথে "শুধু কাজ করে" যা আমার সাধারণ ম্যাট্রিক্স ডিজাইন পদ্ধতির অনুসরণ করে। মনে রাখবেন যে যখন আমার হার্ডওয়্যার ডিজাইন 74HC595 শিফট রেজিস্টার ব্যবহার করে, তখন আমি আমার ড্রাইভারকে আশা করব যে আমার হার্ডওয়্যার ডিজাইনের অনুরূপ বিট লেআউট ব্যবহার করে যে কোনো শিফট রেজিস্টার স্টাইল অন/অফ মেকানিজমের সাথে কাজ করবে। উদাহরণস্বরূপ, আমি আশা করব আমার ড্রাইভার হার্ডওয়্যার ডিজাইনের সাথে কাজ করবে যা কলামগুলি নিয়ন্ত্রণ করতে DM13A চিপ এবং সারি নিয়ন্ত্রণের জন্য 74HC595 চিপ ব্যবহার করে।

আপনি যদি সরাসরি ড্রাইভার কোডটি দেখতে চান তবে আপনি এটি GitHub এ খুঁজে পেতে পারেন।

আমার ড্রাইভারের প্রথম পুনরাবৃত্তি Arduino প্ল্যাটফর্মের ক্ষমতার উপর কিছুটা শেখার বক্র ছিল। সবচেয়ে সুস্পষ্ট সীমাবদ্ধতা হল RAM, যা Arduino Uno এবং Nano এর জন্য 2K বাইট। বস্তুগুলির মেমরি ওভারহেডের কারণে এই জাতীয় পরিস্থিতিতে C ++ অবজেক্টগুলি ব্যবহার করার পরামর্শ দেওয়া হয় না। যাইহোক, আমি অনুভব করেছি যে যদি সঠিকভাবে করা হয়, C ++ এর বস্তুর সুবিধা তাদের খরচ (RAM- এ) ছাড়িয়ে গেছে।

দ্বিতীয় প্রধান চ্যালেঞ্জটি ছিল কিভাবে শিফট রেজিস্টারের মাধ্যমে পালস-প্রস্থ মড্যুলেশন বাস্তবায়ন করা যায় যাতে আমি আরজিবি এলইডি-র সাতটি আদিম রঙের চেয়ে বেশি তৈরি করতে পারি। লিনাক্স প্ল্যাটফর্মে বহু বছর ধরে প্রোগ্রাম করা, আমি থ্রেডের মতো কনস্ট্রাক্ট ব্যবহার করতে অভ্যস্ত ছিলাম যেগুলোতে সামঞ্জস্যপূর্ণ সময় প্রয়োজন। মাল্টিপ্লেক্সিং ব্যবহার করে এমন এলইডি ম্যাট্রিক্সের জন্য ড্রাইভার তৈরির সময় শিফট রেজিস্টার আপডেট অপারেশনের সময়টি বেশ সমালোচনামূলকভাবে শেষ হয়। কারণ হচ্ছে, যদিও মাল্টিপ্লেক্সিং এত দ্রুত ঘটছে যে আপনার চোখ পৃথক LED গুলি জ্বলছে এবং বন্ধ দেখতে পাচ্ছে না, তবুও আপনার চোখ যে কোন LEDs চালু থাকা মোট সামগ্রিক সময়ের মধ্যে পার্থক্য নিতে পারে। যদি এলইডিগুলির একটি সারি অন্যদের তুলনায় দীর্ঘ সময়ের জন্য ধারাবাহিকভাবে চালু থাকে তবে মাল্টিপ্লেক্সিংয়ের সময় এটি আরও উজ্জ্বল দেখাবে। এটি ম্যাট্রিক্সে অসম উজ্জ্বলতা বা সামগ্রিকভাবে ম্যাট্রিক্সের পর্যায়ক্রমিক স্ট্রবিং হতে পারে (এটি ঘটে যখন একটি আপডেট চক্র অন্যদের চেয়ে বেশি সময় নেয়)।

যেহেতু শিফট রেজিস্টার আপডেটগুলিকে সম্মতি দেওয়ার জন্য আমার একটি সামঞ্জস্যপূর্ণ টাইমিং মেকানিজমের প্রয়োজন ছিল, কিন্তু Arduino আনুষ্ঠানিকভাবে থ্রেড সমর্থন করে না, আমাকে আমার নিজস্ব থ্রেডিং-এর মতো মেকানিজম তৈরি করতে হয়েছিল। এর আমার প্রথম পুনরাবৃত্তি ছিল কেবল একটি লুপ টাইমার তৈরি করা যা Arduino loop () ফাংশনের উপর নির্ভর করে এবং যখন একটি নির্দিষ্ট পরিমাণ সময় শেষ হয়ে গিয়েছিল তখন শেষ হয়ে যাওয়ার পরে একটি কর্মের আগুন লাগবে। এটি "সমবায় মাল্টিটাস্কিং" এর একটি রূপ। ভালো লাগছে কিন্তু অনুশীলনে এটি অসঙ্গতিপূর্ণ প্রমাণিত হয়েছে যখন গুলির হার মাইক্রোসেকেন্ডে পরিমাপ করা হয়েছিল। এর কারণ হল এই যে, যদি আমার এই দুটি লুপ টাইমার চলতে থাকে, তবে তাদের একটি ক্রিয়াকলাপ প্রায়শই যথেষ্ট সময় নেয় যাতে দ্বিতীয় কর্মটি ইচ্ছার চেয়ে পরে আগুন লাগে।

আমি দেখেছি যে এই সমস্যার সমাধান হল Arduino এর নেটিভ ক্লক ইন্টারাপ্ট মেকানিজম ব্যবহার করা। এই প্রক্রিয়াটি আপনাকে খুব সামঞ্জস্যপূর্ণ বিরতিতে একটি ছোট বিট কোড চালানোর অনুমতি দেয়। তাই আমি মাল্টিপ্লেক্স চক্রের পরবর্তী আপডেট নিবন্ধন করার জন্য ম্যাট্রিক্সের শিফট রেজিস্টার পাঠানোর জন্য কোডটি ট্রিগার করার জন্য একটি ক্লক ইন্টারাপ্ট ব্যবহারের নকশা উপাদানটির চারপাশে ড্রাইভার কোড ডিজাইন করেছি। এটি করার জন্য এবং শিফট রেজিস্টারে একটি সক্রিয় ডাম্পে হস্তক্ষেপ না করার জন্য স্ক্রিনের ছবিতে আপডেটগুলি ঘটানোর অনুমতি দেওয়ার জন্য (যাকে আমরা "রেস কন্ডিশন" বলব), আমি শিফট রেজিস্টার বিটগুলির জন্য টুইন বাফার রাখার একটি পদ্ধতি ব্যবহার করেছি, এক লেখার জন্য এবং একটি পড়ার জন্য। যখন ব্যবহারকারী ম্যাট্রিক্স ইমেজ আপডেট করছেন, এই অপারেশনগুলি রাইট বাফারে ঘটে। যখন এই অপারেশনগুলি সম্পূর্ণ হয়, তখন বাধাগুলি সাময়িকভাবে স্থগিত করা হয় (এর মানে হল ঘড়ির বাধা ফায়ার করতে পারে না) এবং লেখার বাফারটি আগের রিড বাফারের সাথে অদলবদল করা হয় এবং এটি নতুন রিড বাফার নয়, তারপর ইন্টারপ্রেটগুলি পুনরায় সক্রিয় করা হয়। তারপরে, যখন ঘড়িটি বাধা দেয় তখন ইঙ্গিত দেয় যে শিফট রেজিস্টারে পরবর্তী বিট কনফিগারেশন পাঠানোর সময়, সেই তথ্যটি বর্তমান রিড বাফার থেকে পড়া হয়। এইভাবে, এমন কোনও বাফার হয় না যা বর্তমানে ঘড়ির বিরতির সময় পড়া হতে পারে, যা শিফট রেজিস্টারে পাঠানো তথ্যকে দূষিত করতে পারে।

বাকি ড্রাইভারের নকশা করা বস্তু ভিত্তিক ডিজাইনের তুলনামূলকভাবে সহজবোধ্য ঘটনা। উদাহরণস্বরূপ, যে কোনো প্রদত্ত স্ক্রিন স্টেটের জন্য শিফট রেজিস্টার বিট ইমেজ পরিচালনার জন্য আমি একটি বস্তু তৈরি করেছি। বিট ইমেজ ম্যানেজমেন্ট সম্পর্কিত কোডকে এনক্যাপসুলেট করে, পূর্বোক্ত টুইন বাফার অ্যাপ্রোচ তৈরি করা নিজেই একটি সহজবোধ্য ব্যায়াম ছিল। কিন্তু আমি বস্তু ভিত্তিক ডিজাইনের গুণাবলীর প্রশংসা করার জন্য এই নির্দেশযোগ্যটি লিখিনি। অন্যান্য নকশা উপাদান একটি গ্লিফ এবং একটি RGB ইমেজ ধারণা অন্তর্ভুক্ত। একটি Glyph একটি মৌলিক ইমেজ নির্মাণ যার কোন সহজাত রঙের তথ্য নেই। আপনি এটি একটি কালো এবং সাদা চিত্র হিসাবে ভাবতে পারেন। যখন এলইডি স্ক্রিনে গ্লিফ আঁকা হয়, তখন "সাদা" পিক্সেলগুলি কীভাবে রঙিন হওয়া উচিত তা নির্দেশ করার জন্য রঙের তথ্য দেওয়া হয়। একটি RGB ইমেজ হল একটি ছবি যেখানে প্রতিটি পিক্সেলের নিজস্ব রঙের তথ্য থাকে।

আমি আপনাকে আরডুইনো স্কেচের উদাহরণ পর্যালোচনা করতে এবং ড্রাইভার হেডার ডকুমেন্টেশন পর্যালোচনা করার জন্য উৎসাহিত করি যে কীভাবে আরজিবি এলইডি ম্যাট্রিক্সে ছবি এবং অ্যানিমেশন তৈরি করতে ড্রাইভার ব্যবহার করতে হয় তার সাথে পরিচিত হতে।

ধাপ 4: এলইডি গোস্টিং

LED Ghosting
LED Ghosting
LED Ghosting
LED Ghosting

একটি LED ম্যাট্রিক্সে, "ghosting" হল ম্যাট্রিক্সে একটি LED জ্বলবার ঘটনা যখন এটি পছন্দ করা হয় না, সাধারণত খুব কম মাত্রা। আমার আসল হার্ডওয়্যার ডিজাইনটি ভূতের জন্য সংবেদনশীল ছিল, বিশেষত শেষ সারিতে। এর কারণ দুটি জিনিস: ট্রানজিস্টর অবিলম্বে বন্ধ হয় না এবং আরজিবি এলইডিতে পরজীবী ক্যাপাসিট্যান্স।

যেহেতু আমরা সারি দিয়ে স্ক্যান করি, ট্রানজিস্টরগুলি অবিলম্বে বন্ধ না হওয়ার কারণে, পরবর্তী সারি চালু হলে স্ক্যান চক্রের পূর্ববর্তী সারিটি এখনও আংশিকভাবে চালিত হয়। যদি পূর্ববর্তী সারিতে বন্ধ একটি প্রদত্ত কলামটি নতুন চালু হয় যখন নতুন সারি চালিত হয়, পূর্ববর্তী সারির সেই কলামের LED অল্প সময়ের জন্য জ্বলজ্বল করবে যখন সেই পূর্ববর্তী সারির সুইচিং ট্রানজিস্টরটি এখনও বাঁকানোর প্রক্রিয়াতে রয়েছে বন্ধ ট্রানজিস্টর বন্ধ করার জন্য লক্ষণীয় পরিমাণ সময় নেওয়ার কারণ হল ট্রানজিস্টারের গোড়ায় স্যাচুরেশন। এর ফলে ট্রানজিস্টার কালেক্টর-এমিটার পথ চলতে থাকে যখন বেস থেকে কারেন্ট অপসারণ করা হয়, অন্তত স্যাচুরেশন বিলুপ্ত না হওয়া পর্যন্ত। আমাদের মাল্টিপ্লেক্সিং আপডেট চক্রের কারণে মাইক্রোসেকেন্ডে পরিমাপ করা সময়ের জন্য সারিগুলি ইচ্ছাকৃতভাবে চলতে থাকে, আগের সারির স্যাচুরেটেড ট্রানজিস্টার পরিবাহী থাকে এমন সময় তার একটি উল্লেখযোগ্য ভগ্নাংশ হতে পারে। ফলস্বরূপ, আপনার চোখ বুঝতে পারে যে পূর্ববর্তী সারির LED চালু করার সময়টি খুব সামান্য পরিমাণে।

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

আরজিবি এলইডিগুলি পরজীবী ক্যাপাসিট্যান্স নামে আরেকটি ঘটনার জন্য সংবেদনশীল। এর মূল কারণ হল যে RGB LED ইউনিটের তিনটি রঙের LED গুলির প্রত্যেকটিরই আলাদা ফরওয়ার্ড ভোল্টেজ রয়েছে। ফরওয়ার্ড ভোল্টেজের এই পার্থক্যটি প্রতিটি পৃথক LED রঙের মধ্যে বৈদ্যুতিক ক্যাপাসিট্যান্সের প্রভাব সৃষ্টি করতে পারে। যেহেতু LED ইউনিটে একটি বৈদ্যুতিক চার্জ তৈরি করা হয় যখন চালিত হয়, যখন বিদ্যুৎ অপসারণ করা হয়, তখন পরজীবী ক্যাপাসিট্যান্স নিষ্কাশন করা প্রয়োজন। যদি অন্য সারির পাওয়ারিংয়ের জন্য সেই LED কলামটি অন্যভাবে চালু থাকে, তাহলে প্যারাসিটিক চার্জ LED কলামগুলির মাধ্যমে স্রাব হবে এবং এটি সংক্ষিপ্তভাবে জ্বলবে। এই প্রভাবটি এই নিবন্ধে সুন্দরভাবে ব্যাখ্যা করা হয়েছে। সমাধানটি হল LED এর পরিবর্তে এই পরজীবী চার্জের জন্য একটি স্রাব পথ যোগ করা, এবং তারপর কলামটি আবার চালিত হওয়ার আগে LED কে স্রাবের সময় দেওয়া। আমার হার্ডওয়্যার ডিজাইনে, এটি প্রতিটি সারির পাওয়ার লাইনে একটি রোধকারী যোগ করে সম্পন্ন হয় যা শক্তিকে মাটিতে সংযুক্ত করে। এর ফলে সারি চালিত হলে আরো কারেন্ট টানা হবে, কিন্তু যখন সারি চালিত হবে না তখন পরজীবী ক্যাপাসিট্যান্সের জন্য স্রাব পথ প্রদান করে।

তবে এটি লক্ষণীয় যে, অনুশীলনে আমি পরজীবী ক্যাপ্যাসিট্যান্সের প্রভাবটি খুব কমই লক্ষ্য করি (যদি আপনি এটির সন্ধান করেন তবে আপনি এটি খুঁজে পেতে পারেন), এবং তাই আমি এই অতিরিক্ত প্রতিরোধককে alচ্ছিক হিসাবে বিবেচনা করি। স্যাচুরেটেড ট্রানজিস্টরের জন্য স্লো অফ টাইমের প্রভাব অনেক বেশি শক্তিশালী এবং লক্ষণীয়। তা সত্ত্বেও, যদি আপনি এই বিভাগে প্রদত্ত তিনটি ছবি পরিদর্শন করেন, তাহলে আপনি দেখতে পাবেন যে রোধকারীরা যে কোনও ভূতকে সম্পূর্ণরূপে অপসারণ করে যা এখনও ধীর ট্রানজিস্টর বন্ধের পরেও ঘটে।

ধাপ 5: চূড়ান্ত উত্পাদন এবং পরবর্তী পদক্ষেপ

Image
Image

এই প্রকল্পের চূড়ান্ত পর্ব ছিল আমার জন্য একটি প্রিন্টেড সার্কিট বোর্ড (পিসিবি) তৈরি করা। আমি আমার পিসিবি ডিজাইন করার জন্য ওপেন সোর্স প্রোগ্রাম ফ্রিজিং ব্যবহার করেছি। যদিও 10x10 বোর্ডে 100 LEDs লেআউট করার জন্য অনেকগুলি পুনরাবৃত্তিমূলক কাজ ছিল, আমি আসলে প্রকল্পের এই পর্বটি অদ্ভুতভাবে সন্তোষজনক বলে মনে করি। প্রতিটি বৈদ্যুতিক পথ কিভাবে বিছানো হবে তা বের করা একটি ধাঁধার মতো ছিল এবং সেই ধাঁধাটি সমাধান করার ফলে অর্জনের অনুভূতি তৈরি হয়েছিল। যেহেতু আমি সার্কিট বোর্ড তৈরির জন্য প্রস্তুত নই, তাই আমি অনেক অনলাইন রিসোর্সের মধ্যে একটি ব্যবহার করেছি যা কাস্টম PCB- এর ছোট রান করে। অংশগুলি একসঙ্গে বিক্রি করা বেশ সোজা ছিল কারণ আমার নকশা সমস্ত গর্তের অংশগুলি ব্যবহার করেছিল।

এই নির্দেশযোগ্য লেখার সময়, আমার আমার RGB LED ম্যাট্রিক্স প্রকল্পগুলির জন্য নিম্নলিখিত পরিকল্পনা আছে:

  1. প্রোগ্রামারকে আরো উচ্চ-স্তরের কার্যকারিতা সক্ষম করতে API স্তরে ড্রাইভারকে উন্নত করা চালিয়ে যান, বিশেষ করে টেক্সট স্ক্রোলিং।
  2. আরও বড় ম্যাট্রিক্স ডিজাইন তৈরি করুন, যেমন 16x16 বা 16x32।
  3. সারি পাওয়ার সুইচিংয়ের জন্য BJTs এর পরিবর্তে MOSFETs ব্যবহার করে দেখুন
  4. কলাম স্যুইচিংয়ের জন্য 74HC595s এর পরিবর্তে DM13A ধ্রুবক বর্তমান ড্রাইভার ব্যবহার করে অন্বেষণ করুন
  5. অন্যান্য মাইক্রো কন্ট্রোল প্ল্যাটফর্মের জন্য ড্রাইভার তৈরি করুন, যেমন Teensy, ODROID C2, বা Raspberry Pi।

মনে রাখবেন যে এই GitHub সংগ্রহস্থলে হার্ডওয়্যার ডিজাইন এবং ড্রাইভার উভয়ই GPL v3 ওপেন সোর্স লাইসেন্সের অধীনে মুক্তি পেয়েছে। তদুপরি, যদিও পিসিবি আমার পিসিবি ডিজাইনের "ছোট রান" তৈরি করে, তবুও আমি ব্যক্তিগতভাবে প্রয়োজনের চেয়ে অনেক বেশি পাই। তাই আমি এখানে আমার ওয়েবসাইট থেকে আমার বিভিন্ন RGB LED ম্যাট্রিক্স ডিজাইন (PCB এবং সমস্ত অংশ অন্তর্ভুক্ত) এর জন্য সম্পূর্ণ কিট বিক্রি করছি।

প্রস্তাবিত: