এই DIY ইলেকট্রনিক D20 ডাই দিয়ে স্টাইলে রোল করুন

এই DIY ইলেকট্রনিক D20 ডাই দিয়ে স্টাইলে রোল করুন

আপনার পরবর্তী টেবিলটপ রোল-প্লে গেমের জন্য একটু অনন্য কিছু চান? কিভাবে সমালোচনামূলক হিট এবং মিস জন্য কাস্টম গ্রাফিক্স সঙ্গে একটি ইলেকট্রনিক D20 সম্পর্কে? আজ আমি আপনাকে দেখাব কিভাবে একটি Arduino এবং কয়েকটি সহজ অংশ দিয়ে আপনার নিজের তৈরি করতে হয়।





চিন্তা করবেন না যদি আপনি আগে কখনও Arduino ব্যবহার না করেন, আমাদের একটি আছে শুরু করার নির্দেশিকা





নির্মাণ পরিকল্পনা

এটি একটি সহজ প্রকল্প। একটি Arduino একটি OLED ডিসপ্লে চালাবে, এবং একটি বোতাম ডাই রোল করবে। কাস্টম গ্রাফিক্স সমালোচনামূলক হিট বা ক্রিটিক্যাল মিস রোলগুলির জন্য দেখাবে। আপনি সহজেই কোডটি D8, D10, বা D12 হতে পরিবর্তন করতে পারেন।





তুমি কি চাও

  • 1 x Arduino
  • 1 x 0.96 ' I2C OLED ডিসপ্লে
  • 1 এক্স পুশ বোতাম
  • 1 x 10k? প্রতিরোধক
  • 1 x ব্রেডবোর্ড
  • বিভিন্ন তারের হুক আপ
  • এখানে সম্পূর্ণ কোড, যদি আপনি লিখিত নির্দেশাবলীর মাধ্যমে সমস্ত পথ অনুসরণ করতে না চান।

এগুলি হল আপনার নিজের D20 তৈরির মূল অংশ। আপনি এটি একটি কেসে ইনস্টল করতে চান (নীচে আলোচনা করা হয়েছে) এবং সার্কিটটিকে আরও স্থায়ী অবস্থায় বিক্রি করুন। এখানে অতিরিক্ত অংশগুলি আপনাকে এটি করতে হবে:

এই OLED ডিসপ্লেগুলি খুব শীতল। এগুলি সাধারণত সাদা, নীল, হলুদ বা তিনটি মিশ্রণে কেনা যায়। আমি আমার ক্ষেত্রে মেলাতে নীল রঙে একটি কিনেছি। আপনি একটি পেতে নিশ্চিত করুন I2C পরিবর্তে মডেল এসপিআই



প্রায় কোন Arduino উপযুক্ত হবে। আমি একটি ন্যানো বেছে নিয়েছি, কারণ সেগুলি এই ক্ষেত্রে উপযুক্ত হওয়ার জন্য যথেষ্ট ছোট। Arduino মডেল সম্পর্কে আরও তথ্যের জন্য আমাদের ক্রয় নির্দেশিকা দেখুন।

সার্কিট

আপনার প্রয়োজনীয় সার্কিট এখানে:





সংযোগ করুন ভিসিসি এবং GND Arduino এ OLED ডিসপ্লেতে +5 ভি এবং স্থল । সংযোগ করুন এনালগ 4 Arduino এ পিন লেবেলযুক্ত এসডিএ । সংযোগ করুন এনালগ 5 প্রতি এসসিএল পিন এই পিনগুলিতে I2C বাস ব্যবহার করে ডিসপ্লে চালানোর জন্য প্রয়োজনীয় সার্কিট্রি থাকে। সঠিক পিনগুলি মডেল অনুসারে পরিবর্তিত হবে, তবে A4 এবং A5 ন্যানো এবং ইউনোতে ব্যবহৃত হয়। চেক ওয়্যার লাইব্রেরির ডকুমেন্টেশন আপনার মডেলের জন্য যদি আপনি ইউনো বা ন্যানো ব্যবহার না করেন।

ব্যাটারিকে মাটিতে সংযুক্ত করুন এবং মদ পিন এর মানে হল ভোল্টেজ ইন, এবং বিভিন্ন ডিসি ভোল্টেজ গ্রহণ করে - তবে প্রথমে আপনার নির্দিষ্ট মডেলটি পরীক্ষা করুন এবং এটি কখনও কখনও কিছুটা পরিবর্তিত হতে পারে।





বোতামটি সংযুক্ত করুন ডিজিটাল পিন 2 । লক্ষ্য করুন কিভাবে 10k? প্রতিরোধক মাটির সাথে সংযুক্ত। এই অত্যন্ত গুরুত্বপূর্ণ! এটি একটি পুল ডাউন রোধক হিসাবে পরিচিত, এবং এটি Arduino কে বাটন প্রেস হিসাবে মিথ্যা তথ্য বা হস্তক্ষেপ সনাক্ত করতে বাধা দেয়। এটি বোর্ডকে রক্ষা করার জন্যও কাজ করে। যদি এই প্রতিরোধক ব্যবহার না করা হতো, +5V সরাসরি মাটিতে চলে যেত। এটি একটি হিসাবে পরিচিত মৃত সংক্ষিপ্ত এবং একটি Arduino হত্যা করার একটি সহজ উপায়।

আপনি যদি এই সার্কিটটি সোল্ডারিং করেন, তাপ সঙ্কুচিত টিউবিং দিয়ে আপনার সংযোগ রক্ষা করুন:

নিশ্চিত করুন যে আপনি এটি খুব বেশি গরম করবেন না, এবং শুধুমাত্র একবার আপনি সার্কিট কাজ করে নিশ্চিত হন। আপনি আপনার তারগুলো জোড়ায় জোড়ায় বাঁধতেও পারেন। এটি তাদের ঝরঝরে রাখে এবং অযৌক্তিক চাপ থেকে তাদের রক্ষা করতে সহায়তা করে:

বোতাম পরীক্ষা

এখন যেহেতু আপনি সার্কিটটি তৈরি করেছেন, এই পরীক্ষার কোডটি আপলোড করুন (থেকে সঠিক বোর্ড এবং পোর্ট নির্বাচন করতে ভুলবেন না সরঞ্জাম> বোর্ড এবং সরঞ্জাম> পোর্ট মেনু):

const int buttonPin = 2; // the number of the button pin
void setup() {
pinMode(buttonPin, INPUT); // setup button
Serial.begin(9600); // setup serial
}
void loop(){
if(digitalRead(buttonPin) == HIGH) {
Serial.print('It Works');
delay(250);
}
}

একবার আপলোড হয়ে গেলে, USB এর মাধ্যমে Arduino সংযুক্ত রাখুন এবং সিরিয়াল মনিটর খুলুন ( উপরের ডান> সিরিয়াল মনিটর )। আপনার কথাগুলো দেখা উচিত এটা কাজ করে প্রতিবার আপনি বোতাম টিপলে উপস্থিত হন।

যদি কিছু না ঘটে, যান এবং আপনার সার্কিটটি ডাবল চেক করুন।

OLED সেটআপ

ডিসপ্লে চালানোর জন্য আপনাকে দুটি লাইব্রেরি ইনস্টল করতে হবে। ডাউনলোড করুন Adafruit_SSD1306 এবং অ্যাডাফ্রুট-জিএফএক্স গিথুব থেকে লাইব্রেরিগুলি [আর পাওয়া যায় না] এবং সেগুলি আপনার লাইব্রেরি ফোল্ডারে সংরক্ষণ করুন। আপনি যদি লাইব্রেরির ফোল্ডারগুলি সম্পর্কে নিশ্চিত না হন তবে আমার রেট্রো গেমিং টিউটোরিয়ালটি পড়ুন, যেখানে আমি একই ডিসপ্লেটি আরও বিস্তারিতভাবে কনফিগার করব।

আপনার Arduino IDE পুনরায় চালু করুন এবং থেকে একটি পরীক্ষার স্কেচ আপলোড করুন ফাইল> উদাহরণ তালিকা. নির্বাচন করুন Adafruit SSD1306 এবং তারপর ssd1306_128x64_i2c । এই কোডটি আপলোড করুন (এতে কিছু সময় লাগবে), এবং আপনার ডিসপ্লেতে প্রচুর আকার এবং নিদর্শন দেখতে হবে:

যদি কিছু না ঘটে, আপনার সংযোগগুলি দুবার পরীক্ষা করুন। যদি, চেক করার পরে, এটি এখনও কাজ করবে না, আপনাকে নমুনা কোড পরিবর্তন করতে হবে।

কাইন্ডল ফায়ার থেকে বিজ্ঞাপন সরান 7

এই লাইনটি পরিবর্তন করুন (এর শুরুতে সেটআপ ফাংশন):

display.begin(SSD1306_SWITCHCAPVCC, 0x3D);

এই:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

এটি আপনি যে ডিসপ্লেটি ব্যবহার করছেন সে সম্পর্কে লাইব্রেরির নির্দিষ্ট বিবরণ বলে। আপনি এখন বিল্ড সঙ্গে চালিয়ে যেতে সব সেট করা উচিত।

কেস

যদি আপনি এটি একটি রুটিবোর্ডে তৈরি করছেন, অথবা এটি বক্স করতে চান না, তাহলে আপনি এই পদক্ষেপটি এড়িয়ে যেতে পারেন।

আমি এই বাক্সটি ডিজাইন এবং 3D প্রিন্ট করেছি। ফাইলগুলি চালু করুন Thingiverse । আপনার যদি 3 ডি প্রিন্টার না থাকে তবে চিন্তা করবেন না - অনলাইন পরিষেবাগুলি 3D হাব এবং শেপওয়ে অনলাইন মুদ্রণ পরিষেবা প্রদান

আপনি সহজেই এই বাক্সটি কাঠ থেকে তৈরি করতে পারেন, অথবা একটি প্লাস্টিক কিনে প্রকল্প বাক্স

Theাকনা একটি সাধারণ পুশ ফিট ডিজাইন, এবং হার্ডওয়্যারের জন্য কয়েকটি কাটআউট রয়েছে:

কোড

এখন সবকিছু প্রস্তুত, এটি কোডের সময়। এখানে এটি কিভাবে কাজ করবে সুডোকোড :

if button is pressed
generate random number
if random number is 20
show graphic
else if random number is 1
show graphic
else
show number

এটি সঠিকভাবে কাজ করার জন্য, একটি এলোমেলো সংখ্যা তৈরি করা প্রয়োজন - এটি ডাই এর রোল। Arduino একটি এলোমেলো সংখ্যা জেনারেটর বলা হয় এলোমেলো , কিন্তু এটি ব্যবহার করা উচিত নয়। যদিও এটি মৌলিক র্যান্ডম কাজগুলির জন্য যথেষ্ট ভাল, এটি একটি ইলেকট্রনিক ডাইয়ের জন্য যথেষ্ট এলোমেলো নয়। কারণগুলি কিছুটা জটিল, তবে আপনি যদি আগ্রহী হন তবে আপনি আরও পড়তে পারেন boallen.com

ডাউনলোড করুন TrueRandom দ্বারা গ্রন্থাগার sirleech Github উপর। এটি আপনার লাইব্রেরি ফোল্ডারে যুক্ত করুন এবং IDE পুনরায় চালু করুন।

এখন একটি নতুন ফাইল তৈরি করুন এবং আপনার প্রাথমিক কোড সেটআপ করুন (অথবা কেবল গিটহাব থেকে সমাপ্ত কোডটি ধরুন):

#include
#include
#include
#include
#include
Adafruit_SSD1306 display(4);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // setup the OLED
pinMode(buttonPin, INPUT); // setup button
}
void loop() {

}

এই কোডটি OLED কনফিগার করে, এবং আপনার নতুন র্যান্ডম নম্বর লাইব্রেরির সাথে আপনার সাথে যোগাযোগের জন্য প্রয়োজনীয় সমস্ত লাইব্রেরি অন্তর্ভুক্ত করে। এখন এটি মূল লুপে যুক্ত করুন:

if(digitalRead(buttonPin) == HIGH) {
delay(15);
if(digitalRead(buttonPin) == HIGH) {
display.fillScreen(BLACK); // erase the whole display
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.println(TrueRandom.random(1, 21)); // print random number
display.display(); // write to display
delay(100);
}
}

এটি মিনিটে বেশ মৌলিক, কিন্তু এটি একটি কার্যকরী D20। যখনই বোতাম টিপুন, স্ক্রিনে এক থেকে 20 এর মধ্যে একটি এলোমেলো সংখ্যা দেখানো হয়:

এটি ভাল কাজ করে, তবে এটি কিছুটা বিরক্তিকর। আসুন এটিকে আরও ভাল করে তুলি। দুটি নতুন পদ্ধতি তৈরি করুন, আঁকা এবং মুছুন :

void drawDie() {
display.drawRect(32, 0, 64, 64, WHITE);
}

এগুলি পর্দার মাঝখানে একটি ডাই আঁকবে। আপনি এটিকে আরও জটিল করে তুলতে চাইতে পারেন, সম্ভবত একটি D20, বা একটি D12 অঙ্কন করে এবং তাই, কিন্তু একটি মৌলিক ছয়-পার্শ্বযুক্ত ডাই আঁকা সহজ। এখানে মৌলিক ব্যবহার:

drawDie();

পরবর্তী, এলোমেলো সংখ্যা আঁকতে আপনার প্রধান লুপ পরিবর্তন করুন, শুধুমাত্র বড় এবং মাঝখানে। এতে পাঠ্যের আকার এবং কার্সার পরিবর্তন করুন:

display.setTextColor(WHITE);
display.setCursor(57, 21);

এখন অনেক ভালো লাগছে:

একমাত্র সমস্যা হল নয়টির চেয়ে বড় সংখ্যা:

এই জন্য ফিক্স সহজ। 10 এর চেয়ে কম সংখ্যার কার্সার 10 বা তার চেয়ে বড় সংখ্যার চেয়ে ভিন্ন অবস্থানে থাকবে। এই লাইনটি প্রতিস্থাপন করুন:

মাউস পয়েন্টার উইন্ডোজ 10 এ কাজ করছে না
display.setCursor(57, 21);

এর সাথে:

int roll = TrueRandom.random(1, 21); // store the random number
if (roll <10) {
// single character number
display.setCursor(57, 21);
}
else {
// dual character number
display.setCursor(47, 21);
}

এটি এখন কেমন দেখাচ্ছে তা এখানে:

যখন আপনি একটি সমালোচনামূলক হিট বা মিস করবেন তখন চিত্রগুলির জন্য এখন যা বাকি আছে। এখানে কয়েকটি পদক্ষেপ জড়িত, তবে এটি একটি সহজ যথেষ্ট প্রক্রিয়া।

আপনি যে উপযুক্ত ছবিটি ব্যবহার করতে চান তা সন্ধান করুন (ডিসপ্লেটি একক রঙের হিসাবে সহজতর)। আমি যে ছবিগুলি ব্যবহার করেছি তা এখানে:

ইমেজ ক্রেডিট: publicdomainvectors.org

আপনি যে ছবিটি ব্যবহার করতে চান তাকে একটি HEX অ্যারে রূপান্তর করতে হবে। এটি কোড আকারে চিত্রের একটি উপস্থাপনা। এটি করার জন্য অনেক সরঞ্জাম পাওয়া যায়, এবং কিছু বিশেষভাবে OLED প্রদর্শনের জন্য লেখা হয়। সবচেয়ে সহজ উপায় হল ছবি C_Hex অনলাইন টুল। এখানে প্রয়োজনীয় সেটিংস রয়েছে:

প্রসেসর ডাইতে পাওয়া মেমরি ক্যাশের নাম কি?

আপনার ছবি আপলোড করুন, এবং কোড ফরম্যাট সেট করুন হেক্স: 0x । সেট ব্যবহারের জন্য প্রতি সব ড্র ইমেজ ফাংশনের জন্য কালো/সাদা । ডিফল্ট হিসাবে অন্যান্য সমস্ত বিকল্প ছেড়ে দিন। প্রয়োজনে আপনি এখানে ছবির আকার পরিবর্তন করতে পারেন। টিপুন সি স্ট্রিং পান এবং আপনি ইমেজ ডেটা প্রদর্শিত দেখতে হবে:

আপনার এক মিনিটের মধ্যে এই উত্পন্ন ডেটার প্রয়োজন হবে। নামক দুটি ফাংশন তৈরি করুন অঙ্কন বিস্ফোরণ এবং ড্র স্কল (অথবা আপনার সংস্করণের জন্য একটি উপযুক্ত নাম)। এখানে কোড:

void drawExplosion() {
// store image in EEPROM
static const unsigned char PROGMEM imExp[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x78,0x7f,0xff,0xc0,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xf0,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfb,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x07,0xff,0xff,0xf9,0xff,0xd8,0x00,0x00,0x00,0x3f,0xff,0xf0,0x0f,0x00,0x00,0x00,0x00,0x1f,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x01,0xbf,0xff,0xff,0xff,0x30,0x00,0x00,0x00,0x13,0xf7,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
display.drawBitmap(0, 0, imExp, 64, 62, 1); // draw mushroom cloud
}
void drawSkull() {
// store image in EEPROM
static const unsigned char PROGMEM imSku[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x78,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0xfc,0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0xfe,0x00,0x07,0xf8,0x00,0x00,0x00,0x01,0xfe,0x00,0x07,0xfc,0x00,0x00,0x00,0x01,0xfe,0x00,0x07,0xfe,0x00,0x3f,0xc0,0x03,0xfe,0x00,0x01,0xff,0x81,0xff,0xfc,0x07,0xec,0x00,0x00,0x3f,0xc7,0xff,0xff,0x1f,0xc0,0x00,0x00,0x0f,0xcf,0xff,0xff,0xdf,0x00,0x00,0x00,0x07,0xbf,0xff,0xff,0xee,0x00,0x00,0x00,0x01,0x7f,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1e,0x3f,0xff,0x3f,0xc7,0x80,0x00,0x00,0x1e,0x0c,0x0f,0x00,0x07,0x80,0x00,0x00,0x1e,0x00,0x0f,0x00,0x0f,0x80,0x00,0x00,0x1e,0x00,0x19,0x80,0x0f,0x00,0x00,0x00,0x0f,0x00,0x19,0x80,0x0f,0x00,0x00,0x00,0x0d,0x00,0x30,0xc0,0x1f,0x00,0x00,0x00,0x05,0x80,0x70,0xc0,0x1e,0x00,0x00,0x00,0x05,0xf0,0xe0,0xe0,0x36,0x00,0x00,0x00,0x01,0xff,0xe0,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xc4,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xcc,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xcc,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0x9e,0x7f,0xf0,0x00,0x00,0x00,0x00,0xff,0xfe,0x7f,0xc0,0x00,0x00,0x00,0x00,0x01,0xff,0xf8,0x1c,0x00,0x00,0x00,0x03,0xe0,0x3f,0x01,0xbf,0x00,0x00,0x00,0x07,0xa6,0x40,0x09,0x9f,0x80,0x00,0x00,0x1f,0x27,0x5a,0x39,0x9f,0xf8,0x00,0x01,0xff,0x27,0xdb,0x39,0x0f,0xfc,0x00,0x03,0xfe,0x31,0x7f,0x39,0x07,0xfc,0x00,0x03,0xfc,0x10,0x1a,0x02,0x03,0xf8,0x00,0x03,0xf8,0x10,0x00,0x02,0x01,0xf0,0x00,0x01,0xf8,0x10,0x00,0x02,0x01,0xe0,0x00,0x00,0x78,0x10,0x00,0x02,0x00,0xe0,0x00,0x00,0x70,0x30,0x00,0x02,0x00,0x00,0x00,0x00,0x30,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x73,0x55,0x63,0x00,0x00,0x00,0x00,0x00,0xf9,0x55,0x4f,0x00,0x00,0x00,0x00,0x00,0x7f,0x14,0x1f,0x00,0x00,0x00,0x00,0x00,0x1f,0xe0,0xfe,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
display.drawBitmap(0, 0, imSku, 60, 64, 1); // draw skull cloud
}

আপনি যদি আমার ব্যবহৃত ছবিগুলি ব্যবহার করতে চান, তাহলে এগিয়ে যান এবং কোডটি অনুলিপি করুন। আপনি যদি আগে তৈরি করা আপনার নিজের ছবি ব্যবহার করতে চান, তাহলে বাইট কোডটি কপি করুন imSku এবং imExp প্রয়োজন অনুযায়ী অ্যারে।

ডিসপ্লেতে সেই ছবিগুলি দেখতে কেমন তা এখানে:

এই কোডের সবচেয়ে গুরুত্বপূর্ণ অংশ হল এই লাইন:

static const unsigned char PROGMEM imSku[]

এটি Arduino কে EEPROM এ আপনার ছবি সংরক্ষণ করতে বলে ( EEPROM কি? ) এর RAM এর পরিবর্তে ( RAM এর দ্রুত নির্দেশিকা )। এটার কারন খুবিই সাধারন; আরডুইনোতে সীমিত র‍্যাম রয়েছে, এবং ছবিগুলি সঞ্চয় করার জন্য এটি ব্যবহার করে আপনার কোডটি চালানোর জন্য কোন অবশিষ্ট থাকতে পারে না

আপনার প্রধান পরিবর্তন করুন যদি এই নতুন গ্রাফিক্স দেখানোর জন্য বিবৃতি যখন এক বা 20 রোল করা হয়। চিত্রের পাশাপাশি ঘূর্ণিত সংখ্যাটি দেখানোর জন্য কোডের লাইনগুলি লক্ষ্য করুন:

if(roll == 20) {
drawExplosion();
display.setCursor(80, 21);
display.println('20');
}
else if(roll == 1) {
display.setCursor(24, 21);
display.println('1');
drawSkull();
}
else if (roll <10) {
// single character number
display.setCursor(57, 21);
display.println(roll); // write the roll
drawDie(); // draw the outline
}
else {
// dual character number
display.setCursor(47, 21);
display.println(roll); // write the roll
drawDie(); // draw the outline
}

এবং এই নতুন রোলগুলি দেখতে কেমন:

কোড সাইডের জন্য এটি সবই (যদি আপনি এগুলি বাদ দেন তবে GitHub থেকে কোডটি ধরুন)। আপনি সহজেই এটি একটি D12, D8, এবং তাই হতে পারে।

চূড়ান্ত সমাবেশ

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

ছোট বাদাম এবং বোল্ট সংযোগ করতে চতুর হতে পারে। টিপ: প্রাথমিকভাবে বাদাম বসানোর জন্য স্ক্রু ড্রাইভারের শেষে ব্লু-ট্যাকের একটি ছোট টুকরা ব্যবহার করুন:

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

ভিতরে এটি দেখতে কেমন তা এখানে:

এবং এখানে সমাপ্ত পণ্য:

আপনার এখন একটি বৈদ্যুতিন D20 এর গর্বিত মালিক হওয়া উচিত!

আপনি কি পরিবর্তন করেছেন? আপনি কি ছবি পরিবর্তন করেছেন? মন্তব্যে আমাদের জানান, আপনি কি করেছেন তা আমরা দেখতে চাই!

শেয়ার করুন শেয়ার করুন টুইট ইমেইল অ্যানিমেটিং স্পিচ এর একটি শিক্ষানবিশ গাইড

অ্যানিমেশন বক্তৃতা একটি চ্যালেঞ্জ হতে পারে। আপনি যদি আপনার প্রকল্পে সংলাপ যুক্ত করতে প্রস্তুত হন, তাহলে আমরা আপনার জন্য প্রক্রিয়াটি ভেঙে দেব।

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • DIY
  • আরডুইনো
  • বোর্ড গেম
  • ইলেকট্রনিক্স
লেখক সম্পর্কে জো কোবার্ন(136 নিবন্ধ প্রকাশিত)

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

জো কোবার্ন থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন
বিভাগ Diy