সুচিপত্র:

পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট: 5 টি ধাপ (ছবি সহ)
পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট: 5 টি ধাপ (ছবি সহ)

ভিডিও: পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট: 5 টি ধাপ (ছবি সহ)

ভিডিও: পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট: 5 টি ধাপ (ছবি সহ)
ভিডিও: প্রোগ্রামিং কী,কেন এবং কীভাবে? [নতুনদের জন্য] 🔥 What is programming in Bangla? 2024, নভেম্বর
Anonim
Image
Image
পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট
পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট
পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট
পাইথন এবং আরডুইনোতে MIDI ড্রাম কিট

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

কেনাকাটা মোটেও হতাশাজনক ছিল না: পোর্টেবল রোল-আপ ড্রাম কিট সহ 9 টি ভিন্ন সাউন্ড প্যাড, কিক ড্রামের জন্য দুই ফুট সুইচ প্যাডেল এবং হাই-হ্যাট এবং মাইক্রো-ইউএসবি পাওয়ার সকেট। যা আসলেই ডিমোটিভিটিং ছিল, সেটা হলো আউটপুট শব্দ (এই কিটের প্রকৃত ব্যবহার হল বাইরের স্পিকারকে সংযুক্ত করা এবং এটি উপভোগ করা)। সুতরাং, আমি এটিকে ইউএসবি, এমডিআই ড্রাম কিটের উপর ভিত্তি করে আরডুইনো ভিত্তিক ইউজার ইন্টারফেস এবং পাইথনের উপর ভিত্তি করে ইউজার ইন্টারফেসের মাধ্যমে রূপান্তর করার সিদ্ধান্ত নিয়েছি, যাতে সহজে ব্যবহার করা যায় এবং ভলিউম, নোট এবং চ্যানেল নির্বাচনের মতো সহজ পরিবর্তন করা যায়।

ডিভাইসের বৈশিষ্ট্য:

  • কম মূল্য
  • যেকোনো ডিজিটাল ইনপুট থেকে ড্রাম কিট তৈরি করা - এমনকি পুশ বোতামগুলির অ্যারে
  • শুধুমাত্র ইউএসবি ইন্টারফেসের মাধ্যমে যোগাযোগ সাপোর্ট এবং পাওয়ার সাপ্লাই - ইউএসবি থেকে ইউএআরটি কনভার্টার এবং আরডুইনো ডিভাইসের ইন্টিগ্রেশন
  • সঠিক অপারেশনের জন্য মিনিমাম পার্টস
  • সহজে ব্যবহারযোগ্য পাইথন ভিত্তিক UI
  • সামঞ্জস্যযোগ্য বেগ, নোট এবং আরডুইনো পিনের সাথে সম্পূর্ণ MIDI সমর্থন
  • ডিভাইসের মেমরিতে সংরক্ষিত কাস্টম ড্রাম কনফিগারেশন সংরক্ষণ এবং লোড করুন

আসুন প্রকল্পে এগিয়ে যাই …

ধাপ 1: অপারেশনের তত্ত্ব

কার্যপ্রণালীর তত্ত্ব
কার্যপ্রণালীর তত্ত্ব
কার্যপ্রণালীর তত্ত্ব
কার্যপ্রণালীর তত্ত্ব
কার্যপ্রণালীর তত্ত্ব
কার্যপ্রণালীর তত্ত্ব

ব্লক ডায়াগ্রাম

প্রথমত, আসুন প্রকল্পের কাঠামোর দিকে মনোনিবেশ করি এবং এটিকে পৃথক ব্লকে বিভক্ত করি:

রোল-আপ ড্রাম কিট

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

Arduino প্রো-মাইক্রো

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

FTDI ইউএসবি থেকে সিরিয়াল কনভার্টার

পিসি অ্যাপ্লিকেশনের সাহায্যে আমাদের ডিভাইসের বৈশিষ্ট্যগুলি প্রোগ্রাম এবং সংজ্ঞায়িত করার জন্য, ইউএসবি ইন্টারফেসকে সিরিয়ালে রূপান্তর করতে হবে, কারণ আরডুইনো প্রো-মাইক্রোতে ইউএসবি নেই। যেহেতু ডিভাইসগুলির মধ্যে যোগাযোগ UART- এর উপর ভিত্তি করে, FTDI ডিভাইসটি এই প্রকল্পে ব্যবহার করা হয়, কারণ এর অতিরিক্ত বৈশিষ্ট্য নির্বিশেষে ব্যবহারের সরলতার কারণে।

পিসি অ্যাপ্লিকেশন - পাইথন

যখন ব্যবহারকারী ইন্টারফেস এবং দ্রুত-থেকে-বিল্ড প্রকল্পগুলির বিকাশের কথা আসে, পাইথন একটি দুর্দান্ত সমাধান। UI অ্যাপ্লিকেশনের উদ্দেশ্য হল আমাদের ড্রাম কিট, স্টোর ইনফরমেশন, প্রোগ্রাম ডিভাইসের জন্য MIDI প্রপার্টিগুলিকে নতুন করে সংজ্ঞায়িত করা এবং বারবার কোড কম্পাইল করার প্রয়োজন ছাড়াই সিস্টেমগুলির মধ্যে যোগাযোগ করা আরও সুবিধাজনক করা। যেহেতু আমরা ড্রাম কিটের সাথে যোগাযোগের জন্য সিরিয়াল ইন্টারফেস ব্যবহার করছি, ইন্টারনেটের চারপাশে প্রচুর পরিমাণে বিনামূল্যে চার্জ মডিউল রয়েছে, যা যে কোনও ধরণের সিরিয়াল যোগাযোগকে সমর্থন করে। উপরন্তু, এটি পরে আলোচনা করা হবে, UART ইন্টারফেস মোট তিনটি পিন নিয়ে গঠিত: RXD, TXD এবং DTR। Arduino মডিউলে রিসেট করার জন্য DTR ব্যবহার করা হয়, এইভাবে যখন আমরা MIDI অ্যাপ চালাতে আগ্রহী হই অথবা UI কে প্রোগ্রাম ডিভাইসে সংযুক্ত করি, তখন USB ক্যাবল বা যেকোনো কিছু পুনরায় সংযুক্ত করার প্রয়োজন নেই।

ধাপ 2: যন্ত্রাংশ এবং যন্ত্রপাতি

যন্ত্রাংশ

  • রোল-আপ ড্রাম কিট
  • 2 x টেকসই প্যাডেল (সাধারণত, ডিকে প্যাকেজে অন্তর্ভুক্ত)।
  • FTDI - ইউএসবি থেকে সিরিয়াল কনভার্টার
  • Arduino প্রো মাইক্রো
  • মাইক্রো-ইউএসবি কেবল

যন্ত্র

  • সোল্ডারিং আয়রন/স্টেশন
  • সোল্ডারিং টিন
  • পাতলা ব্যাস একক কোর তার
  • টুইজার
  • কর্তনকারী
  • প্লায়ার
  • ছুরি
  • স্ক্রু ড্রাইভার
  • 3D প্রিন্টার (alচ্ছিক - কাস্টমাইজড প্যাডেল প্ল্যাটফর্মের জন্য)

সফটওয়্যার

  • Arduino IDE
  • পাইথন 3 বা উচ্চতর
  • জেটব্রেইন পাইচার্ম
  • চুলহীন MIDI ইন্টারফেস
  • লুপমিডি

ধাপ 3: সোল্ডারিং এবং সমাবেশ

সোল্ডারিং এবং সমাবেশ
সোল্ডারিং এবং সমাবেশ
সোল্ডারিং এবং সমাবেশ
সোল্ডারিং এবং সমাবেশ
সোল্ডারিং এবং সমাবেশ
সোল্ডারিং এবং সমাবেশ

যেহেতু তিনটি মডিউল একত্রিত করতে হয়, তাই সোল্ডারিং এবং একত্রিতকরণ প্রক্রিয়াটি সংক্ষিপ্ত এবং সহজ:

  • FTDI ডিভাইসের সাথে Arduino Pro-Micro একসাথে সংযুক্ত করুন, নিশ্চিত করুন যে সংযোগগুলি প্রতিটি ডিভাইসে সংজ্ঞায়িত I/O মেনে চলছে:

    • VBUS-VBUS
    • GND-GND
    • DTR-DTR
    • আরএক্সডি-টিএক্সডি
    • TXD-RXD
  • ড্রাম প্লাস্টিকের ঘের থেকে সমস্ত স্ক্রু সরান, নিশ্চিত করুন যে আপনি প্যাড-টু-বোর্ড কেবল এবং তার টান-আপ প্রতিরোধকগুলিতে ফোকাস করতে পারেন
  • Arduino-FTDI মডিউলের জন্য সোল্ডার পাতলা তারগুলি যা আমরা আগে তৈরি করেছি:

    • ডিজিটাল ইনপুট: D [2:11]
    • VBUS
    • ডি+
    • ডি-
    • GND
  • ব্যাটারি কেসের ভিতরে মডিউলটি ertোকান যাতে তারগুলি প্যাডের পুল-আপ প্রতিরোধক হিসাবে একই দিকে ভাসমান থাকে
  • ড্রাম প্যাড টার্মিনালে সমস্ত ডিজিটাল ইনপুট বিক্রি করুন কারণ এটি শেষ চিত্রে দেখানো হয়েছে।
  • FTDI ডিভাইসে সোল্ডার মাইক্রো-ইউএসবি বাস (VBUS, D+, D-, GND), নিশ্চিত করুন যে এই তারের সন্ধান করতে কোন ভুল নেই।
  • Arduino-FTDI মডিউলটি ব্যাটারির ক্ষেত্রে গরম-আঠা দিয়ে সংযুক্ত করুন
  • উপযুক্ত screws সংযুক্তি সঙ্গে ডিভাইস সমাবেশ

আমরা এটি করেছি, ডিভাইসটি একত্রিত হয়েছে। আসুন কোডটি চালিয়ে যাই …

ধাপ 4: প্রোগ্রামিং এ: আরডুইনো

প্রোগ্রামিং এ: আরডুইনো
প্রোগ্রামিং এ: আরডুইনো

ধাপে ধাপে আমাদের স্কেচ বর্ণনা করা যাক:

প্রথমত, সঠিকভাবে পরিচালনার জন্য দুটি প্রয়োজনীয় গ্রন্থাগার অন্তর্ভুক্ত করা প্রয়োজন। EEPROM ইতিমধ্যেই Arduino IDE তে আগে থেকেই ইনস্টল করা আছে, কিন্তু কিক ড্রামের জন্য ডিবাউন্সার মডিউল আলাদাভাবে ইনস্টল করতে হবে।

#অন্তর্ভুক্ত #অন্তর্ভুক্ত

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

/ * ডেভেলপার সুইচ: ডিবাগিং বা আরম্ভ করার জন্য অসম্পূর্ণ পছন্দসই মোড

ধ্রুবক ক্ষেত্রগুলি ড্রাম প্যাড গণনা সহ সমস্ত ডিফল্ট মান উপস্থাপন করে। প্রথমবারের মতো ডিভাইস চালানোর জন্য, হাই-হ্যাট এবং কিক প্যাডেলের সঠিক সংযোগ জানতে হবে।

/ * ড্রাম টাইপ গণনা */

enum DRUM_POSITION {KICK = 0, SNARE, HIHAT, RIDE, CYMBAL1, CYMBAL2, TOM_HIGH, TOM_MID, TOM_LO, HIHAT_PEDAL};

/ * ডিফল্ট মান */

const uint8_t DRUM_NOTES [10] = {36, 40, 42, 51, 49, 55, 47, 45, 43, 48}; const uint8_t DRUM_VELOCITIES [10] = {110, 100, 100, 110, 110, 110, 110, 110, 110, 110}; const uint8_t DRUM_PINS [10] = {8, 6, 4, 3, 11, 9, 5, 10, 2, 7};

/ * কিক ড্রাম ডিবাউন্স সময়কাল */

const uint8_t KICK_DB_DURATION = 30;

EEPROM পিসি অ্যাপ্লিকেশন থেকে আসা সমস্ত ডেটা সংরক্ষণ/লোড করতে ব্যবহৃত হয়। উপরে বর্ণিত ঠিকানাগুলি, প্রতিটি ড্রাম প্যাডের জন্য MIDI তথ্যের সঠিক অবস্থান দেখায়

/* EEPROM ঠিকানা ম্যাপিং

নোট: | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 |

পিন: | 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 | বেগ | 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23 | */ const uint8_t NOTES_ADDR = 0x00; const uint8_t VELOCITIES_ADDR = 0x14; const uint8_t PINS_ADDR = 0x0A;

গ্লোবাল ভেরিয়েবলগুলি প্রতিটি প্যাডের অবস্থা নির্ধারণ করতে এবং সেই অনুযায়ী MIDI যোগাযোগ সম্পাদন করতে ব্যবহৃত হয়।

/ * গ্লোবাল ভেরিয়েবল */

uint8_t ড্রাম নোটস [10], ড্রাম ভেলোসিটিস [10], ড্রামপিনস [10]; // MIDI ভেরিয়েবলস

uint8_t uartBuffer [64]; // MIDI ডেটা ডিবাউন্সার কিক সংগ্রহ ও সংরক্ষণের জন্য UART বাফার (DRUM_PINS [KICK], KICK_DB_DURATION); // কিক ড্রাম ভোলাটাইল বুলের জন্য ডিবাউন্সার বস্তু previousState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // ড্রাম প্যাড পূর্ববর্তী যুক্তিগুলি অস্থির বুল কারেন্ট স্টেট [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // ড্রাম প্যাড বর্তমান লজিক স্টেটস

EEPROM ফাংশন।

/* EEPROM এ স্টোর সেটিংস*/

অকার্যকর দোকান EEPROM () {

memcpy (drumNotes, uartBuffer, 10); memcpy (drumPins, uartBuffer + 10, 10); memcpy (drumVelocities, uartBuffer + 20, 10); জন্য (uint8_t i = 0; i <10; i ++) EEPROM.write (NOTES_ADDR+i, drumNotes ); জন্য (uint8_t i = 0; i <10; i ++) EEPROM.write (PINS_ADDR+i, drumPins ); জন্য (uint8_t i = 0; i <10; i ++) EEPROM.write (VELOCITIES_ADDR+i, drumVelocities ); }

/* EEPROM থেকে লোড সেটিংস*/

void loadEEPROM () {for (uint8_t i = 0; i <10; i ++) drumNotes = EEPROM.read (NOTES_ADDR+i); জন্য (uint8_t i = 0; i <10; i ++) drumPins = EEPROM.read (PINS_ADDR+i); জন্য (uint8_t i = 0; i <10; i ++) drumVelocities = EEPROM.read (VELOCITIES_ADDR+i); }

প্যাডেল এবং আরডুইনো বুটের ক্ষেত্রে ভেরিয়েবল এবং প্রোগ্রামিং মোডের সূচনা একযোগে সক্রিয় হয়।

অকার্যকর enterProgrammingMode () {

bool confirBreak = মিথ্যা; uint8_t lineCnt = 0; uint8_t charCnt = 0; read readChar = 0; while (! confirmBreak) {if (Serial.available ()) {uartBuffer [charCnt] = Serial.read (); যদি (charCnt> = 29) confirBreak = true; অন্যথায় charCnt ++; }} Serial.println ("ঠিক আছে"); storeEEPROM (); }

অকার্যকর initValues () {

#ifdef LOAD_DEFAULT_VALUES memcpy (drumNotes, DRUM_NOTES, 10); memcpy (drumVelocities, DRUM_VELOCITIES, 10); memcpy (drumPins, DRUM_PINS, 10); #অন্য লোড EEPROM (); #যদি শেষ }

1ms নোটের বিলম্বের সাথে MIDI কমিউনিকেশন হ্যান্ডলারগুলি সময় ধরে রাখে

/ * MIDI নোট ফাংশন খেলুন */

অকার্যকর midiOut (enum DRUM_POSITION ড্রামইন) {

যদি (drumIn == HIHAT) {// যদি HI-HAT আঘাত করা হয়, তাহলে প্যাডেল চাপানো হয়েছে কিনা তা পরীক্ষা করা প্রয়োজন [HIHAT_PEDAL]); বিলম্ব (1); নোটঅন (0x90, ড্রামনোটস [HIHAT_PEDAL], 0); } অন্যথায় {noteOn (0x90, drumNotes [HIHAT], drumVelocities [HIHAT]); বিলম্ব (1); নোটঅন (0x90, ড্রামনোটস [HIHAT], 0); }} অন্যথায় বিলম্ব (1); নোটঅন (0x90, ড্রামনোটস [ড্রামইন], 0); }}

অকার্যকর নোটঅন (int cmd, int pitch, int velocity) {Serial.write (cmd); Serial.write (পিচ); Serial.write (বেগ); }

সেটআপ () এবং লুপ () অসীম ডিভাইস অপারেশন লুপের সাথে কাজ করে:

অকার্যকর সেটআপ() {

Serial.begin (115200);

জন্য (uint8_t i = 0; i <10; i ++) {pinMode (i+2, INPUT); } #ifdef PRINT_PADS_PIN_NUMBERS যখন (সত্য) {// অসীম ডিবাগ লুপ (uint8_t i = 0; i <10; i ++) {if (! digitalRead (i+2)) {Serial.print ("Pin No: D"); সিরিয়াল.প্রিন্ট (i + '0'); // নম্বরকে ASCII অক্ষরে রূপান্তর করুন}}} #else initValues (); / * প্রোগ্রামিং মোড: বুট করার সময় দুটি প্যাডেল চাপলে - মোড সক্রিয় হয় */ if (! DigitalRead (drumPins [KICK]) &&! DigitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode (); #যদি শেষ }

void loop () {for (uint8_t i = 1; i <9; i = i + 1) {currentState = digitalRead (drumPins ); যদি (! currentState && previousState ) midiOut (i); // রাজ্যের তুলনা করুন এবং পতন প্রান্ত সনাক্ত করুন previousState = currentState ; } kick.update (); // কিক ড্রাম কাস্টম ডিবাউন্স অ্যালগরিদম ব্যবহার করে if (kick.edge ()) if (kick.falling ()) midiOut (KICK); }

ধাপ 5: প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস

প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস
প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস
প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস
প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস
প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস
প্রোগ্রামিং বি: পাইথন এবং ইউজার ইন্টারফেস

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

ইউজার ইন্টারফেস - অ্যাপ্লিকেশন

UI আমাদের ড্রাম কিট প্রোগ্রামারের জন্য একটি গ্রাফিক্যাল উপস্থাপনা, এটি ব্যবহার করা সত্যিই সহজ এবং যেকোনো সময় Arduino ডিভাইস প্রোগ্রাম করার সুবিধাজনক। UI বেশ কয়েকটি গ্রাফিক্যাল মডিউল নিয়ে গঠিত যা তাদের প্রস্তাবিত ক্রিয়াকলাপের সাথে সংযুক্ত। আসুন তাদের একে একে পর্যালোচনা করি:

  1. ড্রাম সেট ইমেজ: পাইথন UI কোন ড্রাম টাইপ সিলেক্ট করা হয়েছে তা নির্ধারণ করতে XY ইমেজ কোঅর্ডিনেট ব্যবহার করে। যদি বৈধ ড্রাম অঞ্চল নির্বাচন করা হয়, ডেডিকেটেড ড্রাম প্যাডের জন্য নোট, বেগ এবং আরডুইনো টার্মিনালের ক্ষেত্র সহ সেকেন্ডারি আইও বার্তা প্রদর্শিত হয়। এই পরামিতিগুলি ব্যবহারকারী দ্বারা যাচাই এবং অনুমোদনের পরে, এই মানগুলি সরাসরি Arduino ডিভাইসে প্রেরণ করা যেতে পারে।
  2. বাহ্যিক নিয়ন্ত্রক চিত্র: VST/সঙ্গীত তৈরির পরিবেশের সাথে MIDI ড্রাম কিট ব্যবহার করতে সক্ষম হওয়ার জন্য, সিরিয়াল-টু-MIDI দোভাষী চালানোর প্রয়োজন আছে। আমি হেয়ারলেস ব্যবহার করেছি, যা বিনামূল্যে পাওয়া যায় এবং এটি সরাসরি আমাদের UI থেকে চালানো যায়, শুধু তার ছবি টিপে।
  3. COM পোর্ট তালিকা: Arduino এর সাথে যোগাযোগ করার জন্য, এর সংযুক্ত COM পোর্ট নির্দিষ্ট করতে হবে। রিফ্রেশ বোতাম টিপে তালিকাটি রিফ্রেশ করা হচ্ছে।
  4. লোড/সেভ কনফিগারেশন: কোডে ডিফল্ট MIDI মান রয়েছে, যা ব্যবহারকারীর দ্বারা UI- এর সাথে ইন্টারঅ্যাক্ট করার মাধ্যমে পরিবর্তন করা যায়। কনফিগারেশন একটি নির্দিষ্ট বিন্যাসে config.txt ফাইলে সংজ্ঞায়িত করা হয়েছে, যা ব্যবহারকারী সংরক্ষণ বা লোড করতে পারে।
  5. প্রোগ্রাম ডিভাইস বোতাম: Arduino EEPROM- এ সমস্ত পরিবর্তিত MIDI মান সংরক্ষণ করার জন্য, দুই ফুট প্যাডেল (কিক ড্রাম এবং হাই-হ্যাট প্যাডাল) টিপতে হবে, ডেটা ট্রান্সমিশন সম্পন্ন হওয়ার জন্য অপেক্ষা করুন। যদি কোন যোগাযোগ সমস্যা ছিল, সঠিক পপ-আপ দেখানো হবে। যদি ট্রান্সমিশন সফল হয়, UI তার সফল বার্তা দেখাবে।
  6. প্রস্থান বোতাম: ব্যবহারকারীর অনুমতি নিয়ে শুধু অ্যাপ্লিকেশন থেকে প্রস্থান করুন।

পাইথন কোড হাইলাইটস

কোডে অনেক কিছু চলছে, তাই আমরা পুরো কোডের পরিবর্তে লিখিত ফাংশনগুলিতে প্রসারিত করব।

প্রথমত, UI ব্যবহার করার জন্য, কোডটি কার্যকর করার জন্য বেশ কয়েকটি মডিউল ডাউনলোড করতে হবে:

আমদানি osimport থ্রেডিং আমদানি tkinter থেকে tk হিসাবে tkinter আমদানি বার্তা বাক্স থেকে tkinter আমদানি * পিআইএল আমদানি imageTk থেকে, চিত্র আমদানি np আমদানি সিরিয়াল আমদানি গ্লোব হিসাবে numpy

কিছু মডিউল ডিফল্ট পাইথন প্যাকেজে অন্তর্ভুক্ত। PIP টুলের মাধ্যমে বেশ কয়েকটি মডিউল ইনস্টল করা উচিত:

pip বালিশ ইনস্টল করুন

pip install numpy pip install ScreenInfo

এটি PyCharm এর মাধ্যমে অ্যাপ্লিকেশন চালানোর জন্য দৃ়ভাবে সুপারিশ করা হয়। ভবিষ্যতে রিলিজগুলিতে, আমি প্রকল্পের জন্য একটি এক্সিকিউটেবল রপ্তানি করার পরিকল্পনা করছি।

সংক্ষিপ্ত কোড ব্যাখ্যা

যদি আমরা ফাংশন এবং ক্লাসের দৃষ্টিকোণ থেকে এর লাইনগুলি দেখি তবে কোডটি বোঝা অনেক সহজ হবে:

1. প্রধান ফাংশন - এখানে কোড শুরু হয়

যদি _name_ == '_main_': drumkit_gui ()

2. ড্রাম কিট স্থির, সমন্বয় এবং ডিফল্ট MIDI তথ্য

ক্লাস ড্রামস: DRUM_TYPES = ["Kick", "Hihat", "Snare", "Crash 1", "Crash 2", "Tom High", "Tom Mid", "Tom Low", "Ride", "Hihat Pedal "," কন্ট্রোলার "]

COORDINATES_X = [323, 117, 205, 173, 565, 271, 386, 488, 487, 135, 79]

COORDINATES_Y = [268, 115, 192, 40, 29, 107, 104, 190, 71, 408, 208] DIMS_WIDTH = [60, 145, 130, 120, 120, 70, 70, 130, 120, 70, 145] DIMS_LENGTH = [60, 60, 80, 35, 35, 40, 40, 40, 70, 35, 100, 50]

DRUM_ENUM = ["Kick", "Snare", "Hihat", "Ride", "Crash 1", "Crash 2", "Tom High", "Tom Mid", "Tom Low", "Hihat Pedal"]

DRUM_NOTES = [36, 40, 42, 51, 49, 55, 47, 45, 43, 48] DRUM_VELOCITIES = [110, 100, 100, 110, 110, 110, 110, 110, 110] DRUM_PINS = [8, 6, 4, 3, 11, 9, 5, 10, 2, 7]

3. ইউআই ফাংশন - ইউজার ইন্টারফেস এবং গ্রাফিক্যাল বস্তুগুলি পরিচালনা করা

def set_active (ui)

ডিফ সেকেন্ডারি_উই (ড্রাম_ টাইপ)

ক্লাস SelectionUi (tk. Frame)

ক্লাস অ্যাপ্লিকেশন (tk. Frame)

ডিফ ড্রামকিট_গুই ()

def event_ui_clicked (ইভেন্ট)

ডিফ গেটরিগিন (স্ব, ঘটনা)

4. সিরিয়াল যোগাযোগ

ডিফ get_serial_ports ()

def communication_with_arduino (পোর্ট)

5. ফাইলগুলির সাথে কাজ করা: txt ফাইল থেকে সেটিংস সঞ্চয়/লোড করুন

def save_config ()

def load_config ()

6. পাইথন থ্রেডিং ক্ষমতা ব্যবহার করে কোড থেকে বহিরাগত অ্যাপ্লিকেশন hairless.exe চালানো

ক্লাস ExternalExecutableThread (থ্রেডিং। থ্রেড)

def run_hairless_executable ()

কোডটি চালানোর জন্য, ফাইলগুলির একটি তালিকা রয়েছে যা প্রকল্প ফোল্ডারে সংযুক্ত করতে হবে:

  • config.txt: সেটিংস ফাইল
  • hairless.exe: লোমহীন MIDI রূপান্তরকারী
  • drumkit.png: আমাদের UI তে ক্লিকযোগ্য ড্রাম প্যাডগুলিকে সংজ্ঞায়িত করে এমন ছবি (এই ধাপ থেকে ইমেজ সেট ডাউনলোড করতে হবে)
  • drumgui.py: প্রকল্প কোড

এটি কাজ করার জন্য আমাদের জোর দেওয়া দরকার। প্রকল্পে ফাইল যুক্ত করা খুবই গুরুত্বপূর্ণ: ড্রাম সেট ইমেজ, hairless.exe এক্সিকিউটেবল এবং সেটিংস ফাইল config.txt।

এবং.. এখানে আমরা করেছি!:)

আশা করি আপনি এই নির্দেশযোগ্য দরকারী পাবেন।

পড়ার জন্য ধন্যবাদ!:)

প্রস্তাবিত: