মোবাইল ফোন এবং গ্যাজেট

মোবাইল ফোন এবং গ্যাজেট

» 8x8 ম্যাট্রিক্স নিয়ন্ত্রণ

8x8 ম্যাট্রিক্স নিয়ন্ত্রণ


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


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


এই ম্যাট্রিক্সটিতে 16 টি পিন রয়েছে, একটি চিত্র উপরে দেওয়া হয়েছে, যা স্পষ্টভাবে দেখায় যে ম্যাট্রিক্সের প্রাথমিক উপাদানগুলি কীভাবে সংযুক্ত রয়েছে - LEDs, এটি দ্বারা পরিচালিত, আপনি ডিজিটাল এবং এনালগ উভয় ডিভাইসের মাধ্যমে তথ্য পুনরুত্পাদন করতে মডিউলটিকে সঠিকভাবে সংযুক্ত করতে পারেন। বর্তমান সীমিত প্রতিরোধক সম্পর্কে ভুলবেন না, পিক্সেলগুলির কোনওটি জ্বলে গেলে এটি দুঃখজনক হবে। এক বিন্দুর রেট করা অবিচ্ছিন্ন কারেন্ট সমান 20 mA, পিক ফরওয়ার্ড কারেন্ট 100 mA, সরবরাহ ভোল্টেজ 2.1-2.1V, তরঙ্গদৈর্ঘ্য 625-630 এনএম, সর্বাধিক শক্তি অপচয় হল 40 মেগাওয়াট, অ্যানোড এখানে সাধারণ, অর্থাৎ একটি প্লাস। LED ম্যাট্রিক্সের সামগ্রিক মাত্রা 37 উপরে 37 উপরে 8 মিমি. আপনাকে সাবধানে সোল্ডার করতে হবে, 5 সেকেন্ডের বেশি 260 ডিগ্রি তাপমাত্রার সাথে সোল্ডারিং লোহা স্পর্শ করবেন না, প্রস্তাবিত অপারেটিং তাপমাত্রা -40 - +70 সেলসিয়াস।

আপনার যদি এলইডি-তে এই ধরনের একাধিক ম্যাট্রিক্স থাকে, তাহলে আপনি বড় তথ্য বোর্ড তৈরি করতে সেগুলিকে সংযুক্ত করতে পারেন।

ম্যাট্রিক্স ডিসপ্লে - ন্যূনতম প্রয়োজনীয় পাইপিং সহ MAX7219 চিপের উপর ভিত্তি করে একটি 8x8 LED ম্যাট্রিক্স এবং একটি নিয়ন্ত্রণ বোর্ড সমন্বিত একটি ডিভাইস। ফটোতে আপনি ইতিমধ্যে সমাপ্ত ডিভাইসটি দেখতে পাচ্ছেন, তবে এটি এই ফর্মটিতে মেল দ্বারা আমার কাছে এসেছিল, তাই আমাকে একটি সোল্ডারিং লোহা নিতে হয়েছিল এবং সঠিকভাবে সবকিছু সোল্ডার করতে হয়েছিল।

আরডুইনো ন্যানো বোর্ডের মৌলিক সংযোগ সার্কিট ডায়াগ্রামে দেখানো হয়েছে।

আপনি ডায়াগ্রাম থেকে দেখতে পাচ্ছেন, সবকিছু সহজ, আপনাকে কেবল নিম্নলিখিত ক্রমে তারের সাথে উভয় বোর্ডের পরিচিতিগুলিকে সংযুক্ত করতে হবে:

আরডুইনো ন্যানোম্যাট্রিক্স 8x8
পিন 12PIN DIN
পিন 11পিন CLK
পিন 10পিন সিএস
পিন 5Vপিন 5V
পিন জিএনডিপিন জিএনডি

সুতরাং, অবশেষে কোডের সাথে কাজ করার সময় এসেছে, এবং LED ম্যাট্রিক্স চালানোর জন্য, আপনাকে LedControl লাইব্রেরি ডাউনলোড এবং ইনস্টল করতে হবে। লাইব্রেরি MAXIM 7221 এবং 7219 মাইক্রোসার্কিট সমর্থন করে। LED ম্যাট্রিক্স MAX7219 ড্রাইভার হিসাবে ব্যবহার করে, এটি আমাদের প্রয়োজন। আমি মনে করি আমাদের একটি ছোট স্কেচ দিয়ে শুরু করা উচিত যা এই লাইব্রেরির মৌলিক কার্যাবলী প্রদর্শন করে। স্কেচে, setRow() ফাংশন LED চালু/বন্ধ করতে ব্যবহৃত হয়। setRow() ফাংশন কল করার জন্য সিনট্যাক্স হল:

matrix.setRow(0, সারি, কল, সেট);

কোথায় ম্যাট্রিক্স- ক্লাস অবজেক্ট LedControl

0 - এসপিআই বাসে ডিভাইসের ঠিকানা, এই ক্ষেত্রে শুধুমাত্র একটি ডিভাইস রয়েছে এবং নম্বর শূন্য থেকে শুরু হয়

সারি- সারি (0 থেকে 7 পর্যন্ত সম্ভাব্য মান)

কর্নেল- কলাম (সম্ভাব্য মান 0 থেকে 7 পর্যন্ত)

সেট- মান নির্ধারণ ( সত্য- চালু করা, মিথ্যা- বন্ধ)

matrix.setRow(0, 1, 4, সত্য)

১ম সারিতে এবং ৪র্থ কলামে অবস্থিত ম্যাট্রিক্সে LED চালু করুন।

আরেকটি উদাহরণ:

int x = 1;

int y = 4;

matrix.setRow(0, x, y, true);

matrix.setRow(0, x, y, মিথ্যা);

একই শুধুমাত্র ভেরিয়েবলের ব্যবহার, এবং প্রদত্ত স্থানাঙ্কে আলোকিত LED বন্ধ করার পরে। সুতরাং, স্কেচে, setRow () ফাংশন ব্যবহার করে বেশ কয়েকটি অ্যানিমেশন চালানো হয়।

#include "LedControl.h" //LedControl ক্লাস তৈরির জন্য সিনট্যাক্স (dataPin,clockPin,csPin,numDevices) //যেখানে LedControl হল ক্লাসের একটি বস্তু //dataPin হল Arduino বোর্ডের পিন যেখানে DIN পিন হবে be connected //clockPin হল Arduino বোর্ডের পিন যার সাথে CLK পিন সংযুক্ত করা হবে //csPin - Arduino বোর্ডের পিন যার সাথে CS পিন সংযুক্ত করা হবে //numDevices - বাসে থাকা ডিভাইসের সংখ্যা / /আমাদের ক্ষেত্রে একটি সংযুক্ত ডিভাইস LedControl ম্যাট্রিক্স = LedControl(12, 11 , 10, 1) দিয়ে ম্যাট্রিক্স ক্লাসের একটি বস্তু তৈরি করুন; // ম্যাট্রিক্স কনস্ট int delayValue = 100 এ LED চালু/বন্ধ করার জন্য বিলম্বের সময়; // ফাংশন প্রোটোটাইপ // অনুক্রমিক অন/অফ void PointSerialSet(); //সাপ ডান থেকে বাম অকার্যকর PointRigthToLeft(); //নিচ থেকে উপরে অকার্যকর PointDownToUp(); // সাপ বাম থেকে ডানে অকার্যকর PointLeftToRigth(); // সাপ উপর থেকে নীচের অকার্যকর PointUpToDown(); //প্রভাব - বিবর্ণ নাড়ি অকার্যকর পয়েন্টফেডিং(); // প্রভাব - নাড়ি অকার্যকর PointPulse(); // প্রভাব - ক্রমবর্ধমান আবেগ শূন্য পয়েন্ট ক্লাইম্বিং(); //অকার্যকর PointToSpiralIn() এর ভিতরে সর্পিল মোচড়ানোর প্রভাব; //সর্পিল বাহ্যিক শূন্যস্থান PointToSpiralOut() ঘোরানোর প্রভাব; void setup() ( // ঠিকানা 0 সহ ডিভাইসটি ডিফল্ট matrix.shutdown(0, false); // Led ম্যাট্রিক্সের উজ্জ্বলতা 8 এ সেট করুন // সম্ভাব্য মানগুলি 0 থেকে 15 পর্যন্ত ম্যাট্রিক্স। সেট ইনটেনসিটি( 0, 8) ; //ক্লিয়ার ডিসপ্লে matrix.clearDisplay(0); ) void loop() ( // কল ফাংশন এক এক করে PointSerialSet(); PointRigthToLeft(); PointDownToUp(); PointLeftToRigth(); PointUpToFading(); (); PointPulse() ; PointClimbing(); PointToSpiralIn(); PointToSpiralOut(); ) // Function bodies void PointSerialSet() ( //setLed(ঠিকানা, সারি, কল, সেট) ফাংশন ব্যবহার করুন // দ্বারা অনুক্রমিক সুইচিং চালু করুন এর জন্য সারি (int i = 0; i< 8; i ++) { for(int j = 0; j < 8; j ++) { //Включить светодиод matrix.setLed(0, i, j, true); delay(delayValue); //Выключить светодиод matrix.setLed(0, i, j, false); } } } void PointRigthToLeft() { //Используем функцию setLed(address, row, col, set) //Змейка справа - налево for(int i = 7; i >= 0; i --) (এর জন্য(int j = 7, n = 0; j >= 0, n)< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); ) অন্য ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) ) ) void PointDownToUp() ( //setLed(ঠিকানা, সারি, কল, সেট) ফাংশনটি ব্যবহার করুন //এর জন্য নীচে থেকে উপরে সাপ (int i = 7; i >= 0; i --) (এর জন্য(int j = 7, n = 0; j >= 0, n)< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); ) অন্য ( matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); ) ) ) void PointLeftToRigth() ( // ফাংশন সেটLed ব্যবহার করুন (ঠিকানা, সারি, কল, সেট) // এর জন্য বাম থেকে ডানে স্নেক (int i = 0 i< 8; i ++) { for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); ) অন্য ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) ) ) void PointUpToDown() ( //setLed(ঠিকানা, সারি, কল, সেট) ফাংশনটি ব্যবহার করুন //এর জন্য উপরে থেকে নীচে সাপ (int i = 0 i< 8; i ++) { for(int j = 7, n = 0; j >= 0, n< 8; j --, n ++) { if((i % 2) >0) ( matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); ) অন্য ( matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); ) ) ) void PointFading() ( //setLed(address, row, col, set) ফাংশন ব্যবহার করুন // Fading effect int upValue = 0 ; int downValue = 7; for(int i = 0; i< 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) downValue --; ) else ( for(int j = upValue; j< downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue ++; } } } void PointClimbing() { //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 4; int downValue = 4; for(int i = 0; i < 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) ( matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); ) downValue ++; ) else ( for(int j = upValue; j< downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue --; } } } void PointPulse() { //Используем функцию setLed(address, row, col, set) //Эффект пульса for(int i = 0; i < 8; i ++) { if(i == 4) { for(int climb = i; climb >= 0; climb --) ( matrix.setLed(0, climb, i, true); delay(delayValue / 4); matrix.setLed(0, climb, i, false); ) for(int fade = 1; fade< 8; fade ++) { matrix.setLed(0, fade, i, true); delay(delayValue / 4); matrix.setLed(0, fade, i, false); } } else { matrix.setLed(0, 4, i, true); delay(delayValue); matrix.setLed(0, 4, i, false); } } } void PointToSpiralIn() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внутрь int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 0; int pointY = 0; int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 0; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= lengthX - 1 - অফসেট) ( dir = 1; ) চালিয়ে যান; ) if(dir == 1) ( pointY ++; if(pointY ><= offset) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset + 1) { dir = 0; offset ++; pointY = offset; } continue; } } } void PointToSpiralOut() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внаружу int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 3; //начать с этих координат int pointY = 3; //начать с этих координат int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 3; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= lengthX - 1 - অফসেট) ( dir = 1; ) চালিয়ে যান; ) if(dir == 1) ( pointY ++; if(pointY >= lengthY - 1 - অফসেট) ( dir = 2; ) চালিয়ে যান; ) if(dir == 2) ( pointX --; if(pointX)<= offset - 1) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset - 1) { dir = 0; offset --; pointY = offset; } continue; } } }

স্কেচের ভিডিও:


কাজ করার জন্য মন্তব্যের জন্য জাভাস্ক্রিপ্ট সক্রিয় করুন.

এই নিবন্ধটি তাদের জন্য তৈরি করা হয়েছে যারা একটি খালি 8x8 ম্যাট্রিক্স এবং 74hc595 শিফ্ট রেজিস্টার কিনেছেন এবং এটি কীভাবে সংযুক্ত করবেন তা জানেন না।

উপরের উপাদানগুলিকে কীভাবে সংযুক্ত করতে হয় সে সম্পর্কে নির্দেশাবলীর জন্য আমি দীর্ঘদিন ধরে ইন্টারনেটে অনুসন্ধান করেছি, কিন্তু আমি আমার রেজিস্টারের জন্য বা অ-কার্যকর স্কেচগুলি খুঁজে পেয়েছি, তাই আমি সিদ্ধান্ত নিয়েছি যে নিজেকে খুশি করার জন্য আমাকে এখনও আমার হাত এবং মাথা দিয়ে কাজ করতে হবে। 8*8 ছবি সহ।

ইন্টারনেটে ম্যাট্রিক্স এবং শিফট রেজিস্টারের জন্য ডেটাশীট খুঁজে পেয়ে, আমি নিম্নলিখিত চিত্রটি আঁকলাম:

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

চিত্রগুলিকে লাইন দ্বারা লাইন প্রদর্শন করতে হবে (অন্যথায় অনুরূপ ম্যাট্রিক্সের সাথে কোন উপায় নেই), একটি ছোট বিলম্বের সাথে (মানুষের চোখ ব্যবহারিকভাবে 1ms এর বিলম্বের মধ্যে পার্থক্য করে না)।

আমি স্কেচে সবকিছু ব্যাখ্যা করার চেষ্টা করেছি। বোর্ডে আপলোড করার সময়, ডিসপ্লে সেই নম্বরগুলি দেখাবে যা আমরা আরডুইনো পোর্ট মনিটরে পাঠাব। (ভিডিও দেখুন)

সমাপ্ত ডিভাইসের ছবি (স্ক্রীনে জিগজ্যাগ, স্কেচে এর চিত্রটি পিক অ্যারেতে সংরক্ষণ করা হয়েছে)

ভবিষ্যতে আমি এই ডিসপ্লেতে আকর্ষণীয় কিছু করার চেষ্টা করব।

অবশেষে, ম্যাট্রিক্স মডিউল চীন থেকে এসেছে। প্রতিটি মডিউলে একটি MAX7219 চিপ (), একটি LED ম্যাট্রিক্স, একটি ক্যাপাসিটর এবং একটি প্রতিরোধক রয়েছে।


SPI ইন্টারফেসের মাধ্যমে MAX7219 দ্বারা নিয়ন্ত্রিত।


একটি ক্লাস্টারে মাইক্রোসার্কিটগুলি সিরিজে সংযুক্ত থাকে। আমি ইন্টারনেটে পড়েছি যে সর্বাধিক সম্ভাব্য সিরিয়াল সংযোগ MAX7219 এর শুধুমাত্র 8 টুকরা অনুমতি দেয়। বিশ্বাস করবেন না। 16টি মডিউল সংযুক্ত, এবং সবকিছু ঠিকঠাক কাজ করে।

আলীর উপর উপস্থাপিত মডিউলগুলি বিভিন্ন সংস্করণে আসে। সর্বাধিক জনপ্রিয় 2 প্রকার: ডিআইপি এবং SOIC প্যাকেজে একটি মাইক্রোসার্কিট সহ। ডিআইপি চিপ মডিউলটি বড় এবং একটি ক্লাস্টারে সংযুক্ত থাকাকালীন ততটা সুবিধাজনক নয়। আপনাকে তারের একটি গুচ্ছ সংযোগ করতে হবে।


একটি SOIC প্যাকেজে একটি চিপ সহ মডিউলগুলি একটি LED ম্যাট্রিক্সের আকার এবং সোল্ডারিং বা জাম্পার দ্বারা সংযুক্ত থাকে। এটা সুন্দর এবং ঝরঝরে সক্রিয় আউট.


ম্যাট্রিক্স এবং ক্লাস্টারগুলির সাথে কাজ করার জন্য সবচেয়ে সুপরিচিত লাইব্রেরিগুলি হল৷ মার্ক রাইস দ্বারা MAX72xx প্যানেলএবং ম্যাজিকডিজাইনস দ্বারা পরোলা:প্রথম গ্রন্থাগারটি ব্যবহার করা সহজ, দ্বিতীয়টি আরও বৈশিষ্ট্য সহ আরও জটিল৷ আমি এটা আরো বিস্তারিত লিখব.

MAX72xx প্যানেল

MAX72xx প্যানেল ব্যবহার করার সময় লাইব্রেরি ইনস্টলেশন প্রয়োজন Adafruit GFX.

টেক্সট Russify করতে, আপনাকে ডাউনলোড করতে হবে এই নথিএবং Arduino/Libraries/Adafruit-GFX-Library-master ডিরেক্টরিতে ডিফল্ট glcdfont.c ফাইলটি প্রতিস্থাপন করুন। এছাড়াও এই ফাইলে, প্রয়োজনীয় অক্ষর এবং সংখ্যা ছাড়াও, সমস্ত ধরণের অক্ষরগুলির একটি গুচ্ছ বর্ণনা করা হয়েছে। তাদের সব দরকারী নাও হতে পারে. নীচের ছবিটি ব্যাখ্যা করে কিভাবে প্রতীকগুলি গঠিত হয়।

প্রয়োজনে, আপনি আপনার নিজস্ব চিহ্ন তৈরি করতে পারেন এবং ফাইলের অব্যবহৃত কোনোটির সাথে প্রতিস্থাপন করতে পারেন। বিভিন্ন লাইব্রেরিতে ব্যবহৃত প্রায় সব বিটম্যাপ ফন্ট এইভাবে গঠিত হয়।

সুতরাং, MAX72xx প্যানেল এবং Adafruit GFX লাইব্রেরি ইনস্টল করা হয়েছে, glcdfont.c ফাইলটি প্রতিস্থাপিত হয়েছে। Arduino IDE চালু করুন, খুলুন ফাইল. স্কেচে একটি utf8rus ফাংশন আছে। এটি রাশিয়ান ভাষার জন্য অক্ষর টেবিলের পুনঃকোডিং প্রদান করে। এটি শুধুমাত্র প্রোগ্রাম থেকে স্বাভাবিক আউটপুটের জন্য প্রয়োজন, অর্থাৎ, প্রোগ্রামে, পছন্দসই পাঠ্যটি রাশিয়ান ভাষায় লেখা হয়। যদি পাঠ্যটি COM পোর্টের মাধ্যমে প্রবেশ করা হয়, তাহলে অক্ষর কোডগুলি Serial_Read ফাংশনে সংশোধন করা হয়। IDE এবং কনসোলে, বিকাশকারীরা বিভিন্ন এনকোডিং ব্যবহার করে।

ফাইলের শুরুতে লাইব্রেরির কাজ করার জন্য প্রয়োজনীয় লাইন রয়েছে।

int numberOfHorizontalDisplays = 1;

int numberOfVerticalDisplays = 16;

আমার কাছে একটি SOIC প্যাকেজে একটি চিপ সহ মডিউল রয়েছে। তাদের একটি ছোট বৈশিষ্ট্য আছে। মডিউলগুলির ম্যাট্রিক্স 90 ডিগ্রি দ্বারা ঘোরানো ইনস্টল করা হয়। এটি একটি সুবিধার ফি. আপনি যদি লাইব্রেরিগুলির সাথে আসা স্কেচগুলি চালান তবে তারা প্রতিটি মডিউলে নীচে থেকে উপরে পাঠ্য আউটপুট করবে। টেক্সট zigzags প্রদর্শিত হবে. এই অসুখের চিকিৎসার জন্য, লাইব্রেরীকে "বলাতে হবে" যে 16টি উল্লম্ব ডিসপ্লে রয়েছে (সেগুলি শারীরিকভাবে অনুভূমিকভাবে অবস্থিত)। এবং তারপর অকার্যকর সেটআপ লাইব্রেরির জন্য লাইন নির্দিষ্ট করুন

matrix.setRotation(matrix.getRotation() + 1);

এটি প্রতিটি ম্যাট্রিক্সকে প্রোগ্রাম্যাটিকভাবে ফ্লিপ করবে। এবং সবকিছু স্বাভাবিকভাবে প্রদর্শিত হবে।

একটি ডিআইপি চিপ প্যাকেজ সহ মডিউলগুলিতে এটি নেই৷ তারের গুচ্ছ ছাড়া সবকিছুই সুন্দর।

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

MajicDesigns দ্বারা Parola.

একটি SOIC প্যাকেজে একটি চিপ সহ মডিউলগুলির মালিকরাও একটি ক্লাস্টারে মডিউলগুলিকে অভিমুখীকরণের সমস্যার মুখোমুখি হবেন৷ শুধুমাত্র এটি MAX72xx এর চেয়ে একটু ভিন্ন দেখায়। এখানে, মডিউলগুলি দেখা যাবে, যেমনটি ছিল, আউট অফ টার্ন।


লাইব্রেরির সাথে অন্তর্ভুক্ত নমুনা থেকে HelloWorld স্কেচ।

প্রোগ্রামগতভাবে স্কেচে, আমি এই অসুস্থতা নিরাময় করতে সক্ষম ছিলাম না। আমি তার সাথে অন্যরকম আচরণ করেছি। Adruino/libraries/MD_MAX72xx_lib.h ফাইলের শেষে আপনাকে ছবির মতো লাইন খুঁজে বের করতে হবে।


এবং 1 থেকে 0 নির্বাচিত নির্বাচিত লাইনটি ঠিক করুন। ফাইলটি সংরক্ষণ করুন। Arduino IDE পুনরায় চালু করার প্রয়োজন নেই। আমরা ঢালা, আমরা তাকান.


এখন আপনি 24টি অ্যানিমেশন প্রভাব ব্যবহার করতে পারেন। অ্যানিমেশনটি P.displayText কমান্ড দিয়ে শুরু করা হয় ("টেক্সট টু ডিসপ্লে", "টেক্সট অ্যালাইনমেন্ট", স্পিড, ডিসপ্লে বিলম্ব, ফেড-ইন ইফেক্ট, ফেড-আউট ইফেক্ট)। আপনি দেখতে পাচ্ছেন, সেখানে অনেকগুলি সেটিংস রয়েছে।

এবং সবচেয়ে মজা হল ভার্চুয়াল জোনে ক্লাস্টারের বিভাজন। অঞ্চলগুলির সাথে কাজ করা খুব কঠিন নয়। আমি স্কেচ পোস্ট করি না, এটি লাইব্রেরির সাথে আসা নমুনায় রয়েছে। এখন আপনি ক্লাস্টারের শুরুতে ঘড়িটি প্রদর্শন করতে পারেন এবং বাকি মডিউলগুলিতে প্রায় কোনও সমস্যা ছাড়াই নিউজ টিকার প্রদর্শন করতে পারেন।

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


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

ফলাফল। মার্ক রাইসের MAX72xx প্যানেল লাইব্রেরি ব্যবহার করা এবং বোঝা সহজ, কিন্তু দুর্বল কার্যকারিতা সহ।

MajicDesigns থেকে Parola লাইব্রেরি আরও জটিল এবং প্রায় যেকোনো অ্যাপ্লিকেশনের জন্য যথেষ্ট ক্ষমতা রয়েছে।

আগের পাঠে, আমরা শিফট রেজিস্টারের সাহায্যে শিখেছি। এটি সাধারণ উদ্দেশ্য পিন থেকে সরাসরি তুলনায় একটু বেশি কঠিন হতে পরিণত. আমাদের তখন যে সমস্যাটি সমাধান করতে হয়েছিল তা হল Arduino কন্ট্রোলারে সীমিত সংখ্যক নিয়ন্ত্রিত আউটপুট। আমাদের গবেষণার apogee ছিল জন্য গতিশীল ইঙ্গিত ব্যবহার. এখন কাজটি আরও কিছুটা জটিল করার সময়: আমরা LED ম্যাট্রিক্সের সাথে কাজ করতে শিখছি।

1. ম্যাট্রিক্স সূচক

যেমনটি আমরা ইতিমধ্যেই জানি, সেগমেন্ট সূচকগুলি, সেগুলি স্কেল বা সংখ্যাই হোক না কেন, একত্রে সংযুক্ত পৃথক LED গুলি নিয়ে গঠিত। উদাহরণস্বরূপ, এলইডিগুলির একটি গ্রুপ সমস্ত ক্যাথোড সংযুক্ত থাকতে পারে। এই ধরনের একটি নির্দেশকের একটি পোস্টস্ক্রিপ্ট আছে "একটি সাধারণ ক্যাথোড সহ", অন্যথায় - "একটি সাধারণ অ্যানোডের সাথে"। এবং যদি আমরা এলইডিগুলিকে সংখ্যা বা স্কেলের আকারে না রেখে গ্রিড আকারে রাখি তবে কী হবে? এটি বেশ একটি গ্রাফিকাল নির্দেশক হতে চালু হবে. অর্থাৎ, যার উপর আপনি কেবল একটি সংখ্যাই নয়, কিছু ধরণের চিত্রও প্রদর্শন করতে পারেন। এই ধরনের একটি গ্রিড একটি ম্যাট্রিক্স সূচক বলা হয়, এবং LEDs ক্ষেত্রে, একটি LED ম্যাট্রিক্স। একটি ম্যাট্রিক্স সূচকের রেজোলিউশন হল অনুভূমিক এবং উল্লম্ব বিন্দুর সংখ্যা। উদাহরণস্বরূপ, সবচেয়ে সাধারণ সূচকগুলির রেজোলিউশন 8×8 পিক্সেল রয়েছে। যদি একটি উচ্চ রেজোলিউশন এলইডি ম্যাট্রিক্সের প্রয়োজন হয়, তবে এটি কেবল কয়েকটি 8x8 সূচক দ্বারা গঠিত। এটি কীভাবে করা যায়, আমরা পরে দেখব। ইতিমধ্যে, আসুন ম্যাট্রিক্সের ভিতরে সমস্ত 64টি এলইডি কীভাবে সংযুক্ত রয়েছে তা বের করা যাক। অবশ্যই, এটি সম্ভব হবে, যেমন একটি সাত-সেগমেন্ট সূচকের ক্ষেত্রে, একটি সাধারণ ক্যাথোড বা অ্যানোডের সাথে সমস্ত এলইডি সংযোগ করা। এই ক্ষেত্রে, আমাদের হয় 64টি কন্ট্রোলার পিন বা 8টি শিফট রেজিস্টারের প্রয়োজন হবে। উভয় বিকল্প খুব অযথা. একটি আরও সঠিক বিকল্প হল একটি সাধারণ ক্যাথোডের সাথে 8 টুকরো গ্রুপে LEDs একত্রিত করা। এগুলি ম্যাট্রিক্সের কলাম হতে দিন। তারপর, এই কলামগুলির সমান্তরাল এলইডিগুলি ইতিমধ্যেই একটি সাধারণ অ্যানোডের সাথে 8 টুকরোগুলির গ্রুপে আবার একত্রিত হয়। আপনি নিম্নলিখিত স্কিম পাবেন:
ধরুন কাজটি হল R6C3 LED জ্বালানো। এটি করার জন্য, আমাদের R6 পিন করতে একটি উচ্চ সংকেত স্তর প্রয়োগ করতে হবে এবং পিন C3 কে মাটিতে সংযুক্ত করতে হবে। এই পয়েন্টটি বন্ধ না করে, আসুন আরেকটি আলোকিত করার চেষ্টা করি - R3C7। পজিটিভ পাওয়ার পিনটি R3 এর সাথে এবং গ্রাউন্ডটি C7 এর সাথে সংযুক্ত করুন। কিন্তু এই ক্ষেত্রে, সারি R6 এবং R3 দুটি কলাম C3 এবং C7 এর সাথে ছেদ করবে দুটি নয়, চারটি জায়গায়! ফলস্বরূপ, দুটি নয়, চারটি পয়েন্ট আলোকিত হবে। সমস্যা ! স্পষ্টতই, একই সাহায্য করতে পারে. যদি আমরা খুব দ্রুত R6C3 এবং R3C7 পয়েন্টগুলি চালু করি, আমরা দৃষ্টিশক্তির অধ্যবসায় ব্যবহার করতে পারি - সামগ্রিকভাবে দ্রুত পরিবর্তনশীল চিত্রগুলিকে ব্যাখ্যা করার ক্ষমতা।

2. LED ম্যাট্রিক্স এবং শিফট রেজিস্টার

আমাদের পাঠে, আমরা সহজতম 8 × 8 লাল LED ম্যাট্রিক্সকে Arduino Uno-এর সাথে সংযুক্ত করব। পিন নাম্বারিং নিচের বাম কোণ থেকে শুরু হয়। একই সময়ে, পায়ের সংখ্যা 1-16 কোন যুক্তি দ্বারা কলাম এবং সারি C এবং R সংখ্যার সাথে সংযুক্ত নয়।
গতিশীল ইঙ্গিত সম্পর্কে পাঠের উপর দৃষ্টি নিবদ্ধ করে, আসুন ম্যাট্রিক্স নির্দেশক নিয়ন্ত্রণ স্কিমে 8-বিট শিফট রেজিস্টার ব্যবহার করার চেষ্টা করি। আমরা একটি রেজিস্টারকে কলামগুলির জন্য দায়ী সূচক আউটপুটগুলির সাথে এবং দ্বিতীয়টি সারি আউটপুটের সাথে সংযুক্ত করি। বর্তনী চিত্র
গুরুত্বপূর্ণ নোট # 1।এই সার্কিটের প্রতিরোধকগুলি প্রথম শিফটের রেজিস্টার থেকে আসা লাইনগুলিতে থাকা আবশ্যক৷ এই শিফট রেজিস্টার কলামের জন্য দায়ী। এই সংযোগের সাথে, প্রতিটি প্রতিরোধক গতিশীল অ্যালগরিদমের প্রতিটি ধাপে শুধুমাত্র একটি LED-এর জন্য কারেন্ট সেট করবে। অতএব, সমস্ত LED সমানভাবে জ্বলবে। গুরুত্বপূর্ণ নোট #2।উপরের চিত্রটি শুধুমাত্র তথ্যগত উদ্দেশ্যে। দ্বিতীয় রেজিস্টার এবং ম্যাট্রিক্সের মধ্যে ফাঁকে একটি অতিরিক্ত পাওয়ার মাইক্রোসার্কিট অন্তর্ভুক্ত করা আরও সঠিক হবে, উদাহরণস্বরূপ, ULN2003 ট্রানজিস্টর সমাবেশ।

3. প্রোগ্রাম

এটিকে আরও মজাদার করতে, আসুন নির্দেশকটিতে একটি স্মাইলি হাইলাইট করার চেষ্টা করি। ইতিমধ্যে উল্লিখিত হিসাবে, ম্যাট্রিক্সে চিত্রটি প্রদর্শন করতে, আমরা গতিশীল ইঙ্গিত ব্যবহার করব। যথা, আমরা আমাদের ছবির লাইন লাইন দ্বারা হাইলাইট করব। প্রথমে, আমরা উপরের সারিতে প্রয়োজনীয় কলামগুলি আলোকিত করি, তারপরে দ্বিতীয়টিতে, তৃতীয়টিতে, এবং আরও 8টি সারির জন্য। প্রথম শিফট রেজিস্টার কলামের জন্য দায়ী হবে, এবং দ্বিতীয়টি সারিগুলির জন্য। অতএব, একটি স্ট্রিং এর আউটপুট রেজিস্টারে পরপর দুটি লেখা নিয়ে গঠিত: প্রথমে আমরা স্ট্রিং এর কোড পাস করি, তারপর এই স্ট্রিং এর পয়েন্টের কোড। এই প্রোগ্রামে, আমরা ডিজিটাল রাইট ফাংশনের একটি ত্বরিত সংস্করণও ব্যবহার করব। গতিশীল ইঙ্গিত প্রক্রিয়াটি খুব দ্রুত এগিয়ে যাওয়ার জন্য এটি প্রয়োজনীয়। অন্যথায়, আমরা ম্যাট্রিক্সের একটি লক্ষণীয় ঝাঁকুনি দেখতে পাব। সূত্র const byte data_pin = PD2; const বাইট st_pin = PD3; const বাইট sh_pin = PD4; স্বাক্ষরবিহীন দীর্ঘ tm, next_flick; const unsigned int to_flick = 500; বাইট লাইন = 0; const বাইট ডেটা = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b0101); void latchOn()( digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); ) void fill(byte d)( for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1<নেক্সট_ফ্লিক)( নেক্সট_ফ্লিক = টিএম + টু_ফ্লিক; লাইন++; যদি(লাইন == 8) লাইন = 0; // পাস লাইন কোড ফিল(~(1<<(7-line))); // зажигаем точки в строке № line fill(data); // открываем защелку latchOn(); } } Основная часть этой программы, включая переменные data_pin, sh_pin, st_pin, next_flick, to_flickএবং ফাংশন পূরণইতিমধ্যে সম্পর্কে এবং সম্পর্কে পাঠ থেকে আমাদের পরিচিত. অ্যারে তথ্যআমাদের ছবির আট লাইন সঞ্চয় করে। মেমরি সংরক্ষণ করতে, আমরা বাইনারি আকারে পয়েন্টের প্রতিটি সংমিশ্রণ রেকর্ড করেছি। ফাংশন লেগে থাকারেজিস্টার ল্যাচ খোলে। উভয় শিফট রেজিস্টার পূরণ করার পরেই এটি করা উচিত। আরডুইনোতে প্রোগ্রামটি লোড করার পরে, সূচকে একটি স্মাইলি উপস্থিত হবে।

4. LED ম্যাট্রিক্সে অ্যানিমেশন

এবং এখন আমরা প্রোগ্রামটিকে এমনভাবে চূড়ান্ত করব যাতে প্রতি অর্ধ সেকেন্ডে নির্দেশকের চিত্রটি পরিবর্তিত হয়। এটি করার জন্য, এর আবার মনে রাখা যাক. const byte data_pin = PD2; const বাইট st_pin = PD3; const বাইট sh_pin = PD4; স্বাক্ষরবিহীন দীর্ঘ tm, next_flick, next_switch; const unsigned int to_flick = 500; const unsigned long to_switch = 500000; বাইট লাইন = 0; বাইট ফ্রেম = 0; const byte data = ( ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 ), ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10000001, 0b10111101, 0b01000010, 0b00111100 )); void latchOn()( digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); ) void fill(byte d)( for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1<পরবর্তী_ফ্লিক<<(7-line))); fill(data); latchOn(); } tm = micros(); if(tm >next_switch)( next_switch = tm + to_switch; frame = !frame; ) ) আমরা Arduino প্রোগ্রাম লোড করি এবং ফলাফল পর্যবেক্ষণ করি।

5. LED ম্যাট্রিক্স স্কেলিং

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

কাজ

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

উপসংহার

ম্যাট্রিক্স কন্ট্রোল সার্কিট একত্রিত করার পরে, অনেকের একটি প্রশ্ন থাকতে পারে: "আচ্ছা, 30 বছরে কেউ কি ম্যাট্রিক্সের সাথে কাজ করার সহজ উপায় নিয়ে আসেনি?" প্রকৃতপক্ষে, তারা এটি বের করেছে। LED ম্যাট্রিক্সের সাথে কাজ করা সহ বিভিন্ন ধরণের ডিসপ্লের সাথে কাজ করার জন্য বিশেষ মাইক্রোসার্কিট রয়েছে। নিম্নলিখিত পাঠগুলির একটিতে, আমরা শিখব কিভাবে MAX7219 চিপ ব্যবহার করে নির্দেশক নিয়ন্ত্রণ করতে হয়। এই পদ্ধতিটি আমাদের বৈদ্যুতিক সার্কিটকে ব্যাপকভাবে জটিল করার প্রয়োজন ছাড়াই একটি বড় ডিসপ্লে সহ বেশ কয়েকটি ম্যাট্রিক্সকে সহজেই একত্রিত করতে দেয়।
 
নতুন:
জনপ্রিয়: