ዝርዝር ሁኔታ:
- ደረጃ 1 - የአሠራር ጽንሰ -ሀሳብ
- ደረጃ 2 - ክፍሎች እና መሣሪያዎች
- ደረጃ 3: መሸጫ እና ስብሰባ
- ደረጃ 4 ፕሮግራሚንግ ኤ አርዱinoኖ
- ደረጃ 5 - ፕሮግራሚንግ ቢ - ፓይዘን እና የተጠቃሚ በይነገጽ
ቪዲዮ: MIDI Drum Kit በ Python እና Arduino ላይ: 5 ደረጃዎች (ከስዕሎች ጋር)
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:30
ከልጅነቴ ጀምሮ ሁል ጊዜ ከበሮ ኪት መግዛት እፈልግ ነበር። ያኔ እኛ ብዙ ስለሆንን ሁሉም የሙዚቃ መሣሪያዎች ሁሉም ዲጂታል አፕሊኬሽኖች አልነበሯቸውም ፣ ስለሆነም ዋጋዎች ከሚጠበቁት ጋር በጣም ከፍተኛ ነበሩ። በቅርብ ጊዜ ብቸኛ ቅድሚያ የሚሰጠው በጣም ርካሽ የከበሮ ኪት ከ eBay ለመግዛት ወስኛለሁ - እሱን የማፍረስ እና የራሴን ሃርድዌር እና ሶፍትዌር ከመሣሪያ ጋር የማያያዝ ችሎታ።
ግዢው በፍፁም ተስፋ አስቆራጭ አልነበረም-ተንቀሳቃሽ የጥቅል ከበሮ ኪት በ 9 የተለያዩ የድምፅ ንጣፎች ፣ ሁለት የእግር መቀየሪያ መርገጫዎች ለድራም ከበሮ እና ለ hi-hat እና ለማይክሮ ዩኤስቢ የኃይል ሶኬት። በእውነቱ የሚያነቃቃው ፣ እሱ የውጤት ድምፆች ነው (ለዚህ ኪት ትክክለኛ አጠቃቀም የውጭ ድምጽ ማጉያ ማገናኘት እና መደሰት ነው)። ስለዚህ ፣ ለአጠቃቀም ምቹ እና እንደ ቀላል ፣ ማሻሻያ ፣ የድምጽ መጠን ፣ የማስታወሻ እና የሰርጥ ምርጫዎች በ Arduino እና በ Python ላይ የተመሠረተ የተጠቃሚ በይነገጽን መሠረት በማድረግ በዩኤስቢ ፣ በ MIDI ከበሮ ኪት በኩል ወደ እኔ ፕሮግራም ሊለውጠው ወሰንኩ።
የመሳሪያው ባህሪዎች;
- ዝቅተኛ ዋጋ
- ከማንኛውም ዲጂታል ግብዓቶች ከበሮ ኪት መፍጠር - የግፋ አዝራሮች ድርድር እንኳን
- በዩኤስቢ በይነገጽ ብቻ የግንኙነት ድጋፍ እና የኃይል አቅርቦት - የዩኤስቢ ውህደት ወደ UART መቀየሪያ እና አርዱinoኖ መሣሪያ
- ለትክክለኛ አሠራር አነስተኛ ክፍሎች
- ለአጠቃቀም ቀላል በሆነ Python ላይ የተመሠረተ በይነገጽ
- በተስተካከለ ፍጥነት ፣ በማስታወሻ እና በአርዱዲኖ ፒኖች የ MIDI ድጋፍን ያጠናቅቁ
- በመሣሪያ ማህደረ ትውስታ ውስጥ የተከማቹ ብጁ ከበሮ ውቅሮችን ያስቀምጡ እና ይጫኑ
ወደ ፕሮጀክቱ እንሂድ…
ደረጃ 1 - የአሠራር ጽንሰ -ሀሳብ
የማገጃ ንድፍ
በመጀመሪያ በፕሮጀክቱ አወቃቀር ላይ እናተኩር እና ወደ ተለያዩ ብሎኮች እንከፋፍለው-
የጥቅል ተንከባሎ ከበሮ ኪት
የፕሮጀክቱ ዋና ክፍል። እያንዳንዱ ፓድ በሚመታበት ጊዜ አመክንዮአዊ ሁኔታቸውን የሚቀይር የቁልፍ ሰሌዳ ድርድር ባለበት 9 የተለያዩ ከበሮ ፓዳዎችን ያቀፈ ነው። በእሱ አወቃቀር ምክንያት ይህንን ከማንኛውም የግፊት አዝራሮች ይህንን የከበሮ ኪት የመገንባት ዕድል አለ። እያንዳንዱ ከበሮ ፓድ በዋናው የኤሌክትሮኒክስ ሰሌዳ ላይ ካለው መጎተቻ ተከላካይ ጋር የተገናኘ ነው ፣ ስለሆነም የከበሮው ንጣፍ በተደጋጋሚ በሚመታበት ጊዜ አንድ የተወሰነ ማብሪያ ከወረዳ መሬት ጋር የተሳሰረ እና አመክንዮ LOW ከበሮ ፓድ መስመር ላይ ይገኛል። ምንም ግፊት በማይኖርበት ጊዜ የከበሮው ፓድ ማብሪያ / ማጥፊያ ክፍት ነው እና ወደ ኤሌክትሪክ መስመር በመጎተት ምክንያት ሎጂካዊ HIGH ከበሮ ፓድ መስመር ላይ ይገኛል። የፕሮጀክቱ ዓላማ የተሟላ ዲጂታል ሚዲአይ መሣሪያን ለመፍጠር ስለሆነ በዋናው ፒሲቢ ላይ ያሉት ሁሉም የአናሎግ ክፍሎች ችላ ሊባሉ ይችላሉ። ልብ ማለት አስፈላጊ ነው ፣ የከበሮ ኪት ለድብ ከበሮ እና ለ hi-hat ሁለት መርገጫዎች ያሉት ሲሆን እነሱም ከመጎተት ተከላካዮች ጋር የተሳሰሩ እና ልክ እንደ ከበሮ መከለያዎች ሁሉ ተመሳሳይ የአሠራር አመክንዮ የሚጋሩ (ትንሽ ቆይቶ እንወያይበታለን)).
አርዱዲኖ ፕሮ-ማይክሮ
የከበሮ ኪት አንጎል። የእሱ ዓላማ ከበሮ ፓድ የሚወጣ ምልክት መኖሩን ለመለየት እና አስፈላጊ ከሆኑት መለኪያዎች ሁሉ ጋር ተገቢውን የ MIDI ውፅዓት ማቅረብ ነው - ማስታወሻ ፣ ፍጥነት እና የምልክት ቆይታ። ከበሮ መከለያዎች በዲጂታል ተፈጥሮ ምክንያት በቀላሉ ከአርዱዲኖ ዲጂታል ግብዓቶች (10 ፒኖች ጠቅላላ) ጋር ሊታሰሩ ይችላሉ። የሚፈለጉትን መቼቶች እና የሚዲአይ መረጃን ለማከማቸት እኛ ማህደረ ትውስታውን እንጠቀማለን-EEPROM ፣ ስለዚህ መሣሪያውን ባነሳን ቁጥር የ MIDI መረጃ ከ EEPROM እየተጫነ ነው ፣ ይህም እንደገና ሊሠራ የሚችል እና እንደገና ሊዋቀር የሚችል ነው። እንዲሁም አርዱዲኖ ፕሮ-ማይክሮ በጣም በትንሽ ጥቅል ውስጥ የሚገኝ ሲሆን ከበሮ ኪት ውስጠኛው መያዣ ውስጥ በቀላሉ ሊመደብ ይችላል።
FTDI USB ወደ ተከታታይ መለወጫ
በፒሲ ትግበራ እገዛ የመሣሪያዎቻችንን ባህሪዎች ፕሮግራም ለማድረግ እና ለመግለፅ ፣ አርዱዲኖ ፕሮ-ማይክሮ ዩኤስቢ ስለሌለው የዩኤስቢ በይነገጽን ወደ ተከታታይ መለወጥ ያስፈልጋል። በመሳሪያዎች መካከል ያለው ግንኙነት በ UART ላይ የተመሠረተ ስለሆነ ፣ ተጨማሪ ንብረቶቹ ምንም ቢሆኑም በአጠቃቀም ቀላልነቱ ምክንያት የ FTDI መሣሪያ በዚህ ፕሮጀክት ውስጥ ጥቅም ላይ ውሏል።
ፒሲ ትግበራ - ፓይዘን
የተጠቃሚ በይነገጾችን እና ፈጣን ግንባታ ፕሮጄክቶችን ልማት በተመለከተ ፣ ፓይቶን እጅግ በጣም ጥሩ መፍትሔ ነው። የበይነገጽ ትግበራ ዓላማ ለድራም ኪትችን የ MIDI ንብረቶችን እንደገና ለማጣራት ፣ መረጃን ለማከማቸት ፣ ለፕሮግራም መሣሪያችን እና ኮዱን በተደጋጋሚ ማጠናቀር ሳያስፈልግ በስርዓቶቹ መካከል መግባባት ለመፍጠር በጣም ምቹ ለማድረግ ነው። እኛ ከበሮ ኪት ጋር ለመገናኘት ተከታታይ በይነገጽን እየተጠቀምን ስለሆንን ፣ በይነመረብ ዙሪያ ማንኛውንም ዓይነት ተከታታይ ግንኙነት የሚደግፉ ብዙ ነፃ ሞጁሎች አሉ። በተጨማሪም ፣ በኋላ ላይ እንደሚወያይ ፣ የ UART በይነገጽ በአጠቃላይ ሶስት ፒን ያካተተ ነው - RXD ፣ TXD እና DTR። ዲቲአር በአርዱዲኖ ሞዱል ላይ ዳግም ማስጀመርን ለማከናወን ጥቅም ላይ ይውላል ፣ ስለሆነም የ MIDI መተግበሪያን ለማሄድ ወይም በይነገጽን ከፕሮግራም መሣሪያ ጋር ለማገናኘት ስንፈልግ ፣ የዩኤስቢ ገመድን ወይም ማንኛውንም እንደገና ማገናኘት በፍፁም አያስፈልግም።
ደረጃ 2 - ክፍሎች እና መሣሪያዎች
ክፍሎች
- የጥቅል ተንከባሎ ከበሮ ኪት
- 2 x ዘላቂ ፔዳል (ብዙውን ጊዜ ፣ በ DK ጥቅል ውስጥ ተካትቷል)።
- ኤፍቲዲአይ - ዩኤስቢ ወደ ተከታታይ መለወጫ
- አርዱዲኖ ፕሮ ማይክሮ
- የማይክሮ ዩኤስቢ ገመድ
መሣሪያዎች
- ብረት/ጣቢያ/ብረት
- የሚሸጥ ቆርቆሮ
- ቀጭን ዲያሜትር ነጠላ ኮር ሽቦ
- ጠመዝማዛዎች
- መቁረጫ
- ፓይለር
- ቢላዋ
- ሹሩ ሾፌር
- 3 ዲ አታሚ (ከተፈለገ - ለተበጁ ፔዳል መድረኮች)
ሶፍትዌር
- አርዱዲኖ አይዲኢ
- Python 3 ወይም ከዚያ በላይ
- JetBrains Pycharm
- ፀጉር የሌለው MIDI በይነገጽ
- loopMIDI
ደረጃ 3: መሸጫ እና ስብሰባ
ሊጣመሩ የሚገባቸው ሶስት ሞጁሎች ስላሉ የመሸጥ እና የመገጣጠም ሂደት አጭር እና ቀላል ነው-
-
አርዱዲኖ ፕሮ-ማይክሮን ከ FTDI መሣሪያ ጋር አንድ ላይ ያያይዙ ፣ ግንኙነቶቹ በእያንዳንዱ መሣሪያ ከተገለፀው I/O ጋር የሚጣጣሙ መሆናቸውን ያረጋግጡ።
- VBUS-VBUS
- GND-GND
- DTR-DTR
- RXD-TXD
- TXD-RXD
- ከበሮ ፕላስቲክ አጥር ሁሉንም ብሎኖች ያስወግዱ ፣ በፓድ-ወደ-ቦርድ ገመድ እና በሚጎትቱ ተከላካዮች ላይ ማተኮርዎን ያረጋግጡ።
-
ከዚህ ቀደም ለሠራነው የአርዱዲኖ-ኤፍቲዲ ሞዱል የመሸጫ ቀጭን ሽቦዎች-
- ዲጂታል ግብዓቶች D [2:11]
- VBUS
- D+
- መ-
- ጂ.ኤን.ዲ
- ሽቦዎቹ እንደ መጎተት መከላከያዎች በተመሳሳይ ጎን እንዲንሳፈፉ በባትሪ መያዣው ውስጥ ሞጁሉን ያስገቡ
- በመጨረሻው ስእል ላይ እንደሚታየው ሁሉንም የዲጂታል ግብዓቶች ወደ ከበሮ ፓድ ተርሚናሎች ያሽጡ።
- የማሸጊያ ማይክሮ-ዩኤስቢ አውቶቡስ (VBUS ፣ D+፣ D- ፣ GND) ወደ FTDI መሣሪያ ፣ እነዚህን ሽቦዎች በመፈለግ ላይ ምንም ስህተቶች አለመኖራቸውን ያረጋግጡ።
- የአሩዲኖ-ኤፍቲዲአይ ሞዱሉን በሞቃት ሙጫ ከባትሪው መያዣ ጋር ያያይዙት
- መሣሪያውን ከተገቢው ብሎኖች አባሪ ጋር ይሰብስቡ
እኛ አደረግነው ፣ መሣሪያው ተሰብስቧል። ወደ ኮዱ እንቀጥል…
ደረጃ 4 ፕሮግራሚንግ ኤ አርዱinoኖ
እስቲ የእኛን ንድፍ ደረጃ በደረጃ ይግለጹ-
በመጀመሪያ ደረጃ ለትክክለኛው ሥራ ሁለት አስፈላጊ ቤተ -መጻህፍት ማካተት ያስፈልጋል። EEPROM በአርዱዲኖ አይዲኢ ውስጥ አስቀድሞ ተጭኗል ፣ ነገር ግን ለድብ ከበሮ የ debouncer ሞዱል ለየብቻ መጫን አለበት።
#አካትት #አካትት
እነዚህ መቀያየሪያዎች በዋናነት ቅደም ተከተሎችን በማረም ላይ ያገለግላሉ። የ Arduino ተርሚናሎችን ግንኙነት ከበሮ መከለያዎች ለመሞከር ከፈለጉ እና ሁሉንም ዲጂታል ግብዓቶች ለመወሰን ከፈለጉ እነዚህ መቀያየሪያዎች መገለጽ አለባቸው።
/ * የገንቢ መቀየሪያዎች - ለማረም ወይም ለመጀመር የማይፈለግ ሁኔታ * ///#ይግለጹ LOAD_DEFAULT_VALUES // ከ EEPROM ይልቅ ቋሚ እሴቶችን ይጫኑ/#ይግለጹ PRINT_PADS_PIN_NUMBERS // በተከታታይ ወደብ ከተመታ ፓድ ጋር የተገናኘ የፒን ቁጥር ያትሙ።
የማያቋርጥ መስኮች ከበሮ ፓድ መቁጠርን ጨምሮ ሁሉንም ነባሪ እሴቶችን ይወክላሉ። መሣሪያን ለመጀመሪያ ጊዜ ለማሄድ የ Hi-Hat እና Kick pedals ን ትክክለኛ ግንኙነት ማወቅ ያስፈልጋል።
/ * ከበሮ ዓይነት ቆጠራ */
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 ፣ 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 ውሂብ Debouncer ርቀትን (DRUM_PINS [KICK] ፣ KICK_DB_DURATION) ለመሰብሰብ እና ለማከማቸት የ UART ቋት; // Debouncer ነገር ለድራም ከበሮ የማይለዋወጥ bool previousState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // ከበሮ ፓድ የቀድሞው አመክንዮ የማይለዋወጥ bool currentState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // ከበሮ ፓድ የአሁኑ አመክንዮ ግዛቶች
የ EEPROM ተግባራት።
/* በ EEPROM* ውስጥ የመደብር ቅንብሮችን*/
ባዶ መደብር EEPROM () {
memcpy (ከበሮ ማስታወሻዎች ፣ uartBuffer ፣ 10); memcpy (ከበሮ ፒን ፣ uartBuffer + 10 ፣ 10); memcpy (ከበሮ አከባቢዎች ፣ 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*/
ባዶ ጭነትEEPROM () {ለ (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); }
በፔዳል እና በአርዱዲኖ ቡት ሁኔታ ውስጥ ተለዋዋጮችን እና የፕሮግራም ሁነታን ማስጀመር በአንድ ጊዜ ይንቀሳቀሳሉ።
ባዶነት መግቢያProgrammingMode () {
bool confirmBreak = ሐሰት; uint8_t lineCnt = 0; uint8_t charCnt = 0; ቻር readChar = 0; ሳለ (! confirmBreak) {ከሆነ (Serial.available ()) {uartBuffer [charCnt] = Serial.read (); ከሆነ (charCnt> = 29) confirmBreak = እውነት; ሌላ charCnt ++; }} Serial.println («እሺ») ፤ storeEEPROM (); }
ባዶ initValues () {
#ifdef LOAD_DEFAULT_VALUES memcpy (ከበሮ ማስታወሻዎች ፣ DRUM_NOTES ፣ 10); memcpy (ከበሮ አከባቢዎች ፣ DRUM_VELOCITIES ፣ 10); memcpy (ከበሮ ፒን ፣ DRUM_PINS ፣ 10); #ሌላ loadEEPROM (); #ኤንዲፍ}
የ 1 ኤምኤም ማስታወሻ መያዣ ጊዜ በማዘግየት የ MIDI የግንኙነት ተቆጣጣሪዎች
/ * የ MIDI ማስታወሻ ተግባርን ይጫወቱ */
ባዶ midiOut (enum DRUM_POSITION drumIn) {
(drumIn == HIHAT) {// HI-HAT ከተመታ ፣ ፔዳል ተጭኖ እንደሆነ ቼክ ማከናወን ያስፈልጋል (! digitalRead (drumPins [HIHAT_PEDAL])) {noteOn (0x90 ፣ drumNotes [HIHAT_PEDAL] ፣ drumVelocities) [HIHAT_PEDAL]); መዘግየት (1); noteOn (0x90 ፣ ከበሮ ማስታወሻዎች [HIHAT_PEDAL] ፣ 0); } ሌላ {noteOn (0x90 ፣ drumNotes [HIHAT] ፣ drumVelocities [HIHAT]); መዘግየት (1); noteOn (0x90 ፣ ከበሮ ማስታወሻዎች [HIHAT] ፣ 0); }} ሌላ {// መደበኛ ከበሮ ሚዲአይ ማስተላለፊያ ማስታወሻ (0x90 ፣ drumNotes [drumIn] ፣ drumVelocities [drumIn]); መዘግየት (1); noteOn (0x90 ፣ ከበሮ ማስታወሻዎች [drumIn] ፣ 0); }}
ባዶ ባዶ ማስታወሻ (int cmd ፣ int pitch ፣ int velocity) {Serial.write (cmd); Serial.write (pitch); Serial.write (ፍጥነት); }
ማዋቀር () እና loop () ተግባራት ማለቂያ በሌለው የመሣሪያ አሠራር ዑደት
ባዶነት ማዋቀር () {
Serial.begin (115200);
ለ (uint8_t i = 0; i <10; i ++) {pinMode (i+2, INPUT); } #ifdef PRINT_PADS_PIN_NUMBERS (እውነት) እያለ {// ማለቂያ የሌለው የማረሚያ loop ለ (uint8_t i = 0; i <10; i ++) {if (! digitalRead (i+2)) {Serial.print ("Pin No: D"); Serial.print (i + '0'); // ቁጥርን ወደ ASCII ቁምፊ ይለውጡ}}} #else initValues (); / * የፕሮግራም አወጣጥ ሁኔታ - በሚነሳበት ጊዜ ሁለት መርገጫዎች ከተጫኑ - ሞድ ገብሯል */ ከሆነ (! DigitalRead (drumPins [KICK]) &&! DigitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode (); #ኤንዲፍ}
ባዶነት loop () {ለ (uint8_t i = 1; i <9; i = i + 1) {currentState = digitalRead (drumPins ); ከሆነ (! currentState && previousState ) midiOut (i); // ግዛቶችን ያወዳድሩ እና የወደፊቱን ጠርዝ ይወድቃሉ = currentState ; } kick.update (); // የመርገጥ ከበሮ (ኪክ.ጄጅ ()) ከሆነ (kick.edge ()) midiOut (KICK) ከሆነ ብጁ የመቀነስ ስልተ ቀመር ይጠቀማል። }
ደረጃ 5 - ፕሮግራሚንግ ቢ - ፓይዘን እና የተጠቃሚ በይነገጽ
የፓይዘን የተጠቃሚ በይነገጽ በመጀመሪያ እይታ ለመረዳት ትንሽ የተወሳሰበ ነው ፣ ስለሆነም መሰረታዊዎቹን ፣ እንዴት እንደሚጠቀሙበት ፣ እያንዳንዱ ቁልፍ ምን ተግባር እንዳለው እና የአርዱዲኖ መሣሪያን በትክክል እንዴት መርሃግብር ለማድረግ እንሞክራለን።
የተጠቃሚ በይነገጽ - ትግበራ
በይነገጽ ለአርዱዲኖ መሣሪያ በማንኛውም ጊዜ ለመጠቀም እና ለማቀላጠፍ ምቹ እንዲሆን ለከበሮ ኪት ፕሮግራማችን ግራፊክ ውክልና ነው። በይነገጽ ከተጠቆመው ሥራቸው ጋር የተሳሰሩ በርካታ የግራፊክ ሞጁሎችን ያቀፈ ነው። እስቲ አንድ በአንድ እንከልሳቸው ፦
- የከበሮ ስብስብ ምስል ፦ Python UI የትኛው ከበሮ ዓይነት እንደተመረጠ ለመወሰን የ X-Y ምስል መጋጠሚያዎችን ይጠቀማል። የሚሰራ ከበሮ ክልል ከተመረጠ ፣ ለታለመ ከበሮ ፓድ የማስታወሻ መስኮች ፣ የፍጥነት እና የአርዲኖ ተርሚናል ፣ ሁለተኛ IO መልእክት ይታያል። እነዚህ መለኪያዎች በተጠቃሚ ከተረጋገጡ እና ከፀደቁ በኋላ እነዚህ እሴቶች በቀጥታ ወደ አርዱinoኖ መሣሪያ ሊተላለፉ ይችላሉ።
- የውጭ ተቆጣጣሪ ምስል-ከ VST/ሙዚቃ የመፍጠር አከባቢ ጋር የ MIDI ከበሮ ኪት መጠቀም መቻል ፣ ከ Serial-To-MIDI ተርጓሚ ጋር ማሄድ ያስፈልጋል። በነጻ የሚገኝ እና ምስሉን በመጫን ብቻ ከእኛ በይነገጽ በቀጥታ ሊሠራ የሚችል ፀጉር አልባ ተጠቀምኩ።
- የ COM ወደብ ዝርዝር - ከአርዱዲኖ ጋር ለመገናኘት የተያያዘውን የ COM ወደብ መግለፅ ያስፈልጋል። የአድስ አዝራርን በመጫን ዝርዝሩ እየታደሰ ነው።
- ጭነት/አስቀምጥ ውቅር - በኮዱ ውስጥ የተገለጹ ነባሪ የ MIDI እሴቶች አሉ ፣ ይህም ከተጠቃሚ በይነገጽ ጋር በመገናኘት ሊለወጥ ይችላል። ውቅረት በተወሰነ ቅርጸት በ config.txt ፋይል ውስጥ ይገለጻል ፣ ይህም በተጠቃሚ ሊቀመጥ ወይም ሊጫን ይችላል።
- የፕሮግራም መሣሪያ ቁልፍ-ሁሉንም የተሻሻሉ የ MIDI እሴቶችን በአርዱዲኖ EEPROM ውስጥ ለማከማቸት ከዚያ በኋላ ሁለት የእግር መርገጫዎችን (የኪክ ከበሮ እና የ Hi-hat ፔዳል) መጫን ያስፈልጋል ፣ የውሂብ ማስተላለፍ እስኪጠናቀቅ ይጠብቁ። ማንኛውም የግንኙነት ችግሮች ካሉ ፣ ትክክለኛ ብቅ-ባይ ይታያል። ስርጭቱ ከተሳካ ፣ በይነገጽ የተሳካ መልዕክቱን ያሳያል።
- አዝራር ውጣ - በተጠቃሚ ፈቃድ ፣ ከትግበራ ይውጡ።
የ Python ኮድ ድምቀቶች
በኮዱ ውስጥ ብዙ ነገሮች እየተከናወኑ ነው ፣ ስለዚህ በጠቅላላው ኮድ ላይ ሳይሆን በፅሁፍ ተግባራት ላይ እንሰፋለን።
በመጀመሪያ ፣ በይነገጽን ለመጠቀም ፣ ኮዱ እንዲሠራ ፣ በርካታ ሞጁሎችን ማውረድ ያስፈልጋል-
አስመጣ ኦሲምፖርት ክር ማስመጣት tkinter እንደ tk ከ tkinter ማስመጣት የመልእክት ሳጥን ከ tkinter ማስመጣት * ከ PIL ማስመጣት ImageTk ፣ የምስል ማስመጣት numpy እንደ np ማስመጣት ተከታታይ ማስመጣት ግሎብ
አንዳንድ ሞጁሎች በነባሪ የ Python ጥቅል ውስጥ ተካትተዋል። በፒአይፒ መሣሪያ በኩል ብዙ ሞጁሎች መጫን አለባቸው-
pip ጫን ትራስ
pip install numpy pip ጫን ScreenInfo
በ PyCharm በኩል መተግበሪያን ለማሄድ በጥብቅ ይመከራል። ወደፊት በሚለቀቁት ውስጥ ለፕሮጀክቱ አስፈፃሚ ወደ ውጭ ለመላክ አቅጃለሁ።
አጭር ኮድ ማብራሪያ
መስመሮቹን ከተግባሮች እና ክፍሎች አንፃር ብንመለከት ኮዱን ለመረዳት በጣም ቀላል ይሆናል-
1. ዋናው ተግባር - እዚህ ኮዱ ይጀምራል
_name_ == '_main_': drumkit_gui ()
2. የከበሮ ኪት ቋሚ ፣ አስተባባሪ እና ነባሪ የ MIDI መረጃ
የክፍል ከበሮዎች: DRUM_TYPES = [“ኪክ” ፣ “ሂሃት” ፣ “ወጥመድ” ፣ “ብልሽት 1” ፣ “ብልሽት 2” ፣ “ቶም ከፍተኛ” ፣ “ቶም ሚድ” ፣ “ቶም ሎው” ፣ “ግልቢያ” ፣ “ሂሃት ፔዳል” "፣" ተቆጣጣሪ "]
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 ፣ 70 ፣ 35 ፣ 100 ፣ 50]
DRUM_ENUM = ["ረገጥ" ፣ “ወጥመድ” ፣ “ሂሃት” ፣ “ግልቢያ” ፣ “ብልሽት 1” ፣ “ብልሽት 2” ፣ “ቶም ከፍተኛ” ፣ “ቶም ሚድ” ፣ “ቶም ሎው” ፣ “ሂሃት ፔዳል”]
DRUM_NOTES = [36 ፣ 40 ፣ 42 ፣ 51 ፣ 49 ፣ 55 ፣ 47 ፣ 45 ፣ 43 ፣ 48] DRUM_VELOCITIES = [110 ፣ 100 ፣ 100 ፣ 110 ፣ 110 ፣ 110 ፣ 110 ፣ 110 ፣ 110 ፣ 110 ፣ 110] DRUM_PINS = [8 ፣ 6 ፣ 4 ፣ 3 ፣ 11 ፣ 9 ፣ 5 ፣ 10 ፣ 2 ፣ 7]
3. የተጠቃሚ በይነገጽ ተግባራት - የተጠቃሚ በይነገጽ እና የግራፊክ ነገሮችን አያያዝ
def set_active (ui)
def secondary_ui (ከበሮ_አይነት)
የክፍል ምርጫ ዩአይ (tk. Frame)
የክፍል ማመልከቻ (tk. Frame)
def drumkit_gui ()
def event_ui_clicked (ክስተት)
def getorigin (ራስን ፣ ክስተት)
4. ተከታታይ ግንኙነት
def get_serial_ports ()
def communication_with_arduino (ወደብ)
5. ከፋይሎች ጋር መሥራት - ከ txt ፋይል የመደብር/የመጫን ቅንብሮችን
def save_config ()
def load_config ()
6. Python Threading ችሎታዎች በመጠቀም ውጫዊ ትግበራ hairless.exe ን ከኮዱ ማስኬድ
ክፍል ExternalExecutableThread (threading. Thread)
def run_hairless_executable ()
ኮዱን ለማስኬድ ከፕሮጀክቱ አቃፊ ጋር መያያዝ ያለባቸው የፋይሎች ዝርዝር አለ-
- config.txt: የቅንጅቶች ፋይል
- hairless.exe: ፀጉር የሌለው MIDI መቀየሪያ
- ከበሮ።
- drumgui.py: የፕሮጀክቱ ኮድ
ይህ እንዲሠራ አጽንዖት ሊሰጠን የሚገባው ነገር ሁሉ ነው። በፕሮጀክቱ ውስጥ ፋይሎችን ማከል በጣም አስፈላጊ ነው - ከበሮ ስብስብ ምስል ፣ hairless.exe አስፈፃሚ እና የቅንጅቶች ፋይል config.txt።
እና.. እዚህ አድርገናል!:)
ይህ አስተማሪ ጠቃሚ ሆኖ እንደሚያገኙት ተስፋ ያድርጉ።
በማንበብዎ እናመሰግናለን!:)
የሚመከር:
MIDI Hang Drum ን ለመሥራት ቀላል: 4 ደረጃዎች
የ MIDI Hang Drum ን ለመሥራት ቀላል - ተንጠልጣይ ከበሮ ፣ የእጅ መታጠፊያ ፣ ታንክ ከበሮ ወይም የብረት ምላስ ከበሮ ተብሎም ይጠራል ፣ በብረት ውስጥ ከተቆረጡ አንዳንድ ምላሶች ከፕሮፔን ታንክ (በእርግጥ ባዶ) የተሰራ መሣሪያ ነው። የማስታወሻዎቹ ምሰሶ በምላሶች መጠን እና ክብደት ላይ የተመሠረተ ነው። ይህ ፕሮ
CNC Drum Plotter: 13 ደረጃዎች (ከስዕሎች ጋር)
CNC Drum Plotter: a.articles {ቅርጸ-ቁምፊ መጠን 110.0%; የቅርጸ ቁምፊ-ክብደት: ደፋር; ቅርጸ-ቁምፊ-ሰያፍ; ጽሑፍ-ማስጌጥ: የለም; ዳራ-ቀለም: ቀይ;} ሀ
Raspberry Pi Powered Junk Drum Machine: 15 ደረጃዎች (ከስዕሎች ጋር)
Raspberry Pi Powered Junk Drum Machine: ይህ አስተማሪ በ Raspberry Pi የተጎላበተ ሮቦት ከበሮ ማሽን እንዴት እንደሚሠሩ ያሳይዎታል። በእውነቱ አስደሳች ፣ ፈጠራ ፣ በይነተገናኝ ፕሮጀክት ነው። ውስጣዊ አሠራሮችን እንዴት እንደሚሠሩ አሳያችኋለሁ ፣ ግን ትክክለኛው ከበሮዎች ለእርስዎ ይወስናሉ ፣ እርስዎን ይሰጡዎታል
ለ Spielatron ወይም ለሌላ MIDI Synth MIDI 5V LED Strip Light Controller: 7 ደረጃዎች (ከስዕሎች ጋር)
ለ Spielatron ወይም ለሌላ MIDI Synth MIDI 5V LED Strip Light Controller-ይህ ተቆጣጣሪ በአንድ ማስታወሻ ለ 50mS ባለሶስት ቀለም የ LED ስትሪፕ መብራቶችን ያበራል። የ MIDI ሶፍትዌር እንደ MIDI synth መሣሪያ በተመሳሳይ ጊዜ ወደ LEDs ማምረት እንዲችል ተቆጣጣሪው የ ALSA MIDI መሣሪያ ነው
Super GrooveAxe: Mini Drum Machine: 10 ደረጃዎች (ከስዕሎች ጋር)
Super GrooveAxe: Mini Drum Machine: ትንሹ ቡም ይሰማዎት! አንዳንድ ድብደባዎችን እንደጎደሉዎት ይሰማዎታል? የእርስዎ ቀን የተሻለ የድምፅ ማጀቢያ ይፈልጋል? በ Super GrooveAxe አማካኝነት ፍንዳታ ይሰማዎት! እሱ የኪስ መጠን ነው ፣ በባትሪ የሚሠራ ከበሮ ማሽን &; የትም ሊወስዱት የሚችሉት ተከታይ ዋዜማ ያደርጋል