Мазмуну:
- 1 -кадам: Компоненттердин тизмеси
- 2 -кадам: Bouwen прототипи
- 3 -кадам: Коддун прототиби
- 4 -кадам: Uittesten прототиби
- 5 -кадам: "Онтмантелени" иштетүү Компоненттердин тизмеси Гебрукт Гаан Ворден
- 6 -кадам: Werking Originele баскычтары + Дремелен
- 7 -кадам: төшөктү тытуу + баскычтары Vastlijmen
- 8 -кадам: Де Бехуизингде макен мактайт
- 9 -кадам: төшөктү эзүү Aansluiten Op Protobord
- 10 -кадам: Верстевиген
- 11 -кадам: Code Voor Het Communiceren Reaper менен жолугушту
- 12 -кадам: Контроллер Uittesten
Video: Guitar Hero Arduino Project: 12 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Wart zijn Maarten Vrebos, Джастин Каванас жана Wannes Stroobandt, биз мультимедия жана коммуникация технологияларын үйрөнөбүз. Аудиовизуалдык жана IT Принциптеринин үнү жокко эсе, гитара Баатыр-гитаранын жардамы менен MIDI-контролеру иштейт. Бул жерде интернеттин студенттери да бар болчу. Контроллерлер кеңири таралган. Кандай болгон күндө да, биз кошумча материалдарды колдонобуз.
Жарыяланган убакыттын өтүшү менен алтернативдүү схемалар папиер менен жабдылгандыктан, сиз өзүңүздүн үйүңүздөгү сүрөттөрүңүздү жана сүрөттөрүңүздү көрөсүз.
Добуш берүү долбоорунун башка варианттары бар:
slapyak.wordpress.com/guitar-hero-midi-con…
www.instructables.com/id/Converting-a-rescu…
gizmodo.com/391834/turn-your-guitar-hero-g…
Benodigdheden voor dit project
- 6 клейн баскычтары
- 7 1 кох резистор
- 1 гео LED 1
- blauwe LED
- 1 Arduino Uno R3
- 1 чоң LED
- 2 минүүчү LED
- 1 schuifschakelaar
- 1 нан
- 1 потенциометр
- 1 протоборд
- 1 гитара каарманы
- Voldoende төшөк
- Материалдык тейлөө/дремелен/
- Schroevendraaier
1 -кадам: Компоненттердин тизмеси
Voor ons прототипи (op breadboard) hebben биз төмөнкү компоненттерди иштетебиз:
6 баскычтар
7 1 кох резисторлор
1 сары LED
1 көк LED
1 Arduino Uno R3
1 Жашыл LED
2 кызыл LED
1 Schuifschakelaar
1 Breadboard
1 потенциометр
2 -кадам: Bouwen прототипи
Прототиптин негизги бөлүгү - бул биз нон -столдун компоненттеринин бири, ал эми экинчисинин тест -объектиси биз өзүбүздүн жеке ишибизди талкуулоодо биз менен жолугушуп турабыз. Dit prototype hebben we tok gidigitaliseerd via tinkercad.com, and we had many man hadden we had one duidelijk overzicht van ons prototype dat elk groepslid ook kon bewerken.
Эртеден -кечке 5 баскыч баскычтары дагы фунгерен менен кошо 5 кнопкасын басуу комбинациясында өлөт, бирок алар "аударен" эффектинин начарлашына алып келген. Жарыктандыруучу LED чырактары дагы башка нерселер менен да көзөмөлдөп турат, алар өз ара аракеттенишүүдө.
3 -кадам: Коддун прототиби
Globale variabelen
Жөн эле коңгуроо башталганда, бул глобалдык өзгөрүүлөрдүн жардамы менен, ар кандай нерселердин баары баскычтарды басат.
// zet пин номерлери mainButton (snaar) en andere button are aan verbonden zijn: const int mainButton = A1; // lightSensor = A0; const int buttonPin1 = 2; // баскычтардын саны 1 const int buttonPin2 = 3; // баскыч баскычы2const int buttonPin3 = 4; // баскыч баскычы3const int buttonPin4 = 5; // баскыч баскычы4const int buttonPin5 = 6; // сандык баскычтар5
Тиерей массивдери эң чоң мааниге ээ.
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6};
Жарык диоддорду иштетүү үчүн буларды тандаңыз.
const int ledPin1 = 13; // LED пин 13 номери
const int ledPin2 = 12; // LED пиндин саны 12 const int ledPin3 = 11; // LED пин 11 саны const int ledPin4 = 10; // LED пиндин саны 10 const int ledPin5 = 9; // LED пиндин саны 9 const int potPin = A5; // LED пин A5 саны
Глобалдык өзгөрүүлөр башка мамлекеттердин сенсорлору (потенциометрдин, личценсордун баскычтары).
// initialiseer buttonStates жана knoppen (niet of your data) int mainButtonState = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;
Жайгашуу
Жараксыз орнотуу функциясы жок. Deze is van het type void (geeft geen waarde terug) жана көрсөтмөлөрдүн бири дагы жок кылынган.
Бул жерде комментарийлер бар, бирок бул жерде. Кошумча функциялар концерттик программада көрсөтүлгөн, бул да ардуино шилтемесинде.
жараксыз орнотуу () {// маалыматтын ылдамдыгы секундасына (берилиш) сериясына берилиштерди берүү Serial.begin (9600); // LEDPin баштапкы абалга келтирүү pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // initialiseer alle pushbuttons als input: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (lightSensor, INPUT); }
Void functie
Настройка () functie volgt de loop () функциясы, көрсөтмөлөрү өчүп баратат.
void loop () {// lees de staat van de pushbuttons uit (niet of ingedrukt) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);
// бардык массивдеги баскычтардын абалы
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// потенциометр жана личценсор
potValue = analogRead (potPin); lightValue = analogRead (lightSensor);
// mainStates en geef де стандаард waarden 0 дюйм жарыялоочу.
int mainStates = {0, 0, 0, 0, 0};
// array over aantalKnoppen
for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // баштапкы киргизүү knopPinnen жана башка киргизүү digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ингидрукт is, print all all knopnamen, allle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
4 -кадам: Uittesten прототиби
Nadat het прототипи gebouwd - бул коддо geschreven иштеп чыгууда, ал дагы эле прототип болуп саналат. Бул видеолордун бири болуп саналат, бул дагы бир топ жооптордун бири болуп саналат.
Видео тведе видеону кайра иштетүү потенциометрин иштетүү учурунда начарлайт.
5 -кадам: "Онтмантелени" иштетүү Компоненттердин тизмеси Гебрукт Гаан Ворден
Ал эми код туура эмес болсо, биз гитаранын баатыр-гитарасынын "онтмантелени" менен таанышып чыктык. Биз ачык контролдоочу менен таанышып чыктык. Убелгилүү болгондой эле, биз баскычтарды өзүбүздүн баскычтар менен басабыз, ал эми баскычтарды басабыз (zie volgende stap). Биз өзүбүздүн продуктубузду иштеткенден кийин, өнүмдөрдү иштетебиз (баскычты баскычтар менен бириктирип койгула), биз тве баскычтарын басып койобуз (бул жерде сүрөт). Жарыкка чыккандан кийин (туура эмес болгон учурда).
6 -кадам: Werking Originele баскычтары + Дремелен
Бул видеолордун бири да тве оригинал болуп саналат.
Төмөнкү баскычтарды баскычынан чыккыла: биз де бинненкант жана де оригенелден баш тарткан жокпуз, сүрөттөр да жок.
7 -кадам: төшөктү тытуу + баскычтары Vastlijmen
Omdat we niet meer met ean breadboard werken moeten de draden gesoldeerd worden om zo de verschillende komponenten met elkaar te verbinden. Надат диб гебеурд - бул биз баскычтардын басымдуу бөлүгүндө турган нерселер, бул сүрөттөрдүн сүрөттөрү. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.
8 -кадам: Де Бехуизингде макен мактайт
Omdat dit Guitar Hero-model redelijk krap was me me te werken hebben we кошумча plaats moeten maken d.m.v. dremelen. Бул жерде биз акысыз сюжеттерди колдонобуз, бирок бул жерде патраттар да жок болот. Добуш берүүдөн баш тарткыла, биз буларды колдонобуз, бирок биз өлөбүз, биз оптималдуу түрдө өлөбүз. Сүрөттөрдүн тизмеси бизде да жок болот, бирок биз дагы ачкычтан баш тарткан жокпуз. Сүрөттөрдүн тизмеси бизде жокко эсе, биз рекордстрейктер менен иштейбиз, бирок Arduino эшиктин дарбазасы ачылган жок.
9 -кадам: төшөктү эзүү Aansluiten Op Protobord
Комментарийлерди жүктөп да, колдоно да тургула. Бул жерде сиз өзүңүздүн жеке менчигиңизди колдоно аласыз, бул дагы нанборд, жана эң натыйжалуусу. Биз сизди таң калтырган жокпуз. Бул жерде эң башкы нерсе - бул эң башкысы (эң башкы сүрөт 2).
10 -кадам: Верстевиген
Акыркы бүтүрүү - бул кошумча стабилдүүлүк. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan де баскычтар карточкалар менен таанышты.
11 -кадам: Code Voor Het Communiceren Reaper менен жолугушту
Deze коду дюймдо ачылган, ал эми дээл де arduino IDEде (интерактивдүү өнүгүү чөйрөсү) иштейт. Die code wordt geüpload наард arduino zelf en dient om all all waarden van de sensors van de midi controller uit te lezen en door te sturen naar processing.
Кайра иштетүү - бул тведе. Dee коду бардык нерселердин бардыгын камтыйт.
Arduino
/* Бул код сериялык аркылуу иштетүү менен байланышуу үчүн негизги эскиз.
Бул өзүңүздүн кодуңузду киргизе турган план
жеке баскычтар, потенциометрлер же сенсорлор үчүн көрсөтүлгөн.
Байланыш бар экенине ынануу үчүн кол алышуу бар
жана биз билдирип жаткан формат чечилет
Билдирүүнү дал ушундай жол менен куруу маанилүү, Ошентип, Processing аны кантип конструкциядан чыгарууну жана биздин DAWке туура OSC-билдирүүлөрдү жөнөтүүнү билет
werkcollege AV&IT үчүн жасалган
октябрь 2017
*
/ baud rate
const long baudRate = 115200;
// казыктарга сурамжылоолордун ортосунда мс күтүү убактысы
const int loopPauseTime = 200; // миллий секунд
// Serialде жөнөтүлгөн билдирүүнүн башталышы жана аягы
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// пин идентификаторлор
// башка глобалдык өзгөрмөлөр
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;
int mainButtonState = 0;
int potValue = 0;
// аналогдук сенсорлор
const int potPin = A5; // тремоло
// Бул функция иштетүү эскизи менен байланыш түзүү үчүн керек
// Бул жерде жараксыз калтырыңыз // тамга жөнөтүү жана жоопту күтүү… кечигүү (loopPauseTime); } Serial.read (); }
жараксыз орнотуу () {
// pinModes'ти бардык казыктарга орнотуңуз (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // комментарий бербегиле, эгерде сенсорлорду 5Внын ордуна 3Вде иштесеңиз // "ext" пинди 3.3Vга да туташтырууга туура келет // analogReference (EXTERNAL);
// Serial comms баштоо
Serial.begin (baudRate); while (! Сериялык); // кол кармашууну күткүлө installContact (); }
void loop () {
// 1 -КАДАМ: ОКУУ ТҮЙМӨЛӨРҮ // бардык казыктарды сурамжылаңыз жана окууну тийиштүү диапазонго int buttonStates [aantalKnoppen] картаңыз; /* buttonStates [0] = digitalRead (knopPinnen [0]); buttonStates [1] = digitalRead (knopPinnen [1]); buttonStates [2] = digitalRead (knopPinnen [2]); buttonStates [3] = digitalRead (knopPinnen [3]); buttonStates [4] = digitalRead (knopPinnen [4]); */ mainButtonState = digitalRead (mainButton); for (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // мисалдар: // float v0 = карта (bpm, 0, 1023, 60, 250); // эгер сиз нормалдаштырылган калкып чыгууну колдонууну кааласаңыз (мисалы, көлөм үчүн) // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;
// 2 -КАДАМ: КАБАР ЖАЗЫҢЫЗ
Serial.print (startString); // үчүн билдирүү тизмегин баштаңыз (int i = 0; i <aantalKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }} else {buttonStates = 0; Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("тремоло"); Serial.print (","); Serial.print (карта (potValue, 0, 1023, 0, 100)); // билдирүүнүн аягына жазуу Serial.print (endString);
// бир аз күтө туруңуз..
кечигүү (loopPauseTime); }
Иштетилүүдө
Жоопкерчиликтен баш тартуу: Бардык коддор кайра иштетүү эскиздерин каттоодон өткөрөт, коду дагы эң жакшы: ProcessingSoundControl_handout_v6_1.pde бижледжде
Көрсөтмөлөрдү аткарыңыз (индиялык индия):
// Baudrate moet hetzelfde zijn zoals in de arduino sketch
final int baudRate = 115200;
// Оруп алуучу IP дареги (бижледждеги скриншоттор)
// Документтерди иштетүү жана кайра иштетүү
// акыркы String remoteIP = "192.168.1.43"; // мис. "127.0.0.1";
final String remoteIP = "10.3.209.60";
// sendPortко көңүл буруңуз жана муну Reaperге толтуруңуз.
// Бул порт иштетүү жөнөтөт жана орокчу угат.
final int listenPort = 12000, sendPort = 12000;
// Бул жерде listenPort активдүү түрдө мүчүлүштүктөрдү оңдоо болуп саналат.
// порт аттары мүчүлүштүктөрдү оңдоо үчүн бул жерде.
// акыркы String portName = "/dev/ttyACM0";
акыркы String portName = "COM5"; // "/dev/ttyUSB0";
////////////////////// КОЛДОНУЧТУН ПАРАМЕТРЛЕРИНИН АЯГЫ ///////////////////////// ////
импортту иштетүү.сериал.*;
java.util импорттоо.*;
oscP5 импорттоо.*;
netP5 импорттоо.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Serial commsPort; // Сериялык порт
логикалык билдирүүArrived = false;
Кирүүчү сап = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Биз өзгөргөн параметрлерди (баалуулуктарды) гана жөнөтүүбүз үчүн
// бул глобалдык өзгөрмөлөр бул жерде жок кылынат, бирок // бул жерде башталбашы керек! HashMap oldParams, newParams, toSendParams;
// Биз билдирүүнү ар бир үтүргө бөлүшүбүз керек
void processIncoming () {String resVec = incoming.split (","); // биз аталыш+маани жуптарын алабыз // ошондуктан ар бир ат үчүн (+2)… аракет кылыңыз {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // аларды жаңы Hashtable newParams.putка коюңуз (resVec , мааниси); }} // эгер ката кетсе, анда аны кармап көрөлү жана чыгалы. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); чыгуу (); }}
// Биздин билдирүүлөрдү чыпкалоо үчүн
/ * Биз * киргизүү билдирүүсү (Сериялык) өзгөргөндө OSC-билдирүүсү бар экенине ынанабыз * Башкача айтканда: эгер биз баскычты буруп/бассак, ал маанини өзгөртөт. * Ошентип, биз иш жүзүндө өзгөрүп жаткан кирүүчү баалуулуктарды чыпкалайбыз * эскертүү: биз мисалы, акселерометрлерден же аралык сенсорлорунан келген секириктен качпайбыз *, буларды өзүңүз Arduino */ void filterParams () {toSendParams = new ичинде жылмакай кылышыңыз керек болот. HashMap (); үчүн (String key: newParams.keySet ()) {// эгерде ачкыч мурунтан эле бар болсо (oldParams.containsKey (key)) {// ачкычы бирдей эмес болсо, анда (! oldParams.get (key)).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ачкычы эски параметрлерде жок, андыктан! toSendParams.put (key, newParams.get (key)); } oldParams.put (key, newParams.get (key)); }}
жараксыз makeOSC () {
for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (key)); / * билдирүү жөнөтүү */ oscP5.send (myMessage, myRemoteLocation); }}
жараксыз translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // HashMap текстинде белгиленгендей, келген билдирүүнү көрүү үчүн void ShowIncoming () {// терезесине басып чыгаргысы келгенде ("Ардуинодон келгендер", 20, 20); int y = 20; for (String key: newParams.keySet ()) {y = y+20; текст (ачкыч, 20, у); текст (newParams.get (key), 300, y); }}
жараксыз showOsc () {
текст (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
жараксыз орнотуу () {
өлчөмү (1000, 800); // Этаптын көлөмүн толтуруу (255); background (0); oldParams = жаңы HashMap (); newParams = жаңы HashMap (); // printArray (Serial.list ()); commsPort = жаңы серия (бул, portName, baudRate);
/ * баштоо oscP5, келген билдирүүлөрдү угуу */
oscP5 = жаңы OscP5 (бул, listenPort);
/* myRemoteLocation - бул NetAddress. NetAddress 2 параметрди алат, * IP дареги жана порт номери.myRemoteLocation * oscP5.send () параметринде osc пакеттерин башка компьютерге, түзмөккө, * колдонмого жөнөтүүдө колдонулат. колдонуу төмөндө карагыла. тестирлөө максатында угуу порту * жана алыскы жайгашкан даректин порту бирдей, демек сиз * бул эскизге билдирүүлөрдү жөнөтөсүз. */ myRemoteLocation = жаңы NetAddress (remoteIP, sendPort); }
жараксыз тартуу () {
if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
жараксыз serialEvent (Serial commsPort) {
// сериялык порттон байт окуу: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // көбүрөөк println сураңыз ("баштап…"); тыныгуу; case startChar: incoming = ""; тыныгуу; case endChar: messageArrived = true; // println ("msg аягы"); тыныгуу; демейки: кирген += inChar; тыныгуу; }}
/* келген Оск кабар oscEvent ыкмасына жөнөтүлөт. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // 1 -Оскар аргументин алыңыз
IncomingOSCMessage += "\ n" +
String.format ("### Оскар билдирүүсүн алды:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", мааниси); println (IncomingOSCMessage); }
12 -кадам: Контроллер Uittesten
Nu alles aangesloten, alle code is alles geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Жыйынтыгында Reaper гитаранын гитарасы MIDI контроллери менен иштейт!
Сунушталууда:
GoPro Hero 4ту RC өткөргүчүн кантип башкаруу керек: 4 кадам (сүрөттөр менен)
RC өткөргүчүн колдонуу менен GoPro Hero 4ту кантип көзөмөлдөө керек: Бул долбоордун максаты - RC өткөргүч аркылуу GoPro Hero 4тү алыстан башкара алуу. Бул ыкма GoPro’дун Wifi & Түзмөктү көзөмөлдөө үчүн HTTP API & PROTOTYPE илхамы менен жазылган: ЭҢ КЫРГЫЗ ЖАНА АРЗАН
Shota Aizawa's Eraser Head Goggles (My Hero Academia): 8 кадам (сүрөттөр менен) аркылуу көздүн ирмегинин көзөмөлүндөгү жарык өчүргүч
Shota Aizawa's Eraser Head Goggles (My Hero Academia) колдонуп, көздүн ирмеши менен башкарылган жарык өчүрүүчү: Эгер менин баатыр академия мангамды окуп же менин баатыр академиямдын анимесин көрсөңүз, анда shota aizawa деген каарманы билишиңиз керек. Shota Aizawa ошондой эле Eraser Head деп аталат, Pro Hero жана БААнын 1-А классынын мугалими. Shota's Quirk ага абаны берет
Keytar Hero (Wii гитара контроллерин синтезатор катары колдонуу): 7 кадам (сүрөттөр менен)
Keytar Hero (Wii гитара контроллерин синтезатор катары колдонуу): Guitar Hero оюндары мындан ондогон жылдар мурун абдан жаалданган, андыктан чаң чогултуунун тегерегинде көптөгөн эски гитара контролерлору болуш керек. Аларда көптөгөн баскычтар, баскычтар жана рычагдар бар, андыктан аларды кайра жакшы колдонууга эмне үчүн болбосун? Гитараны башкаруу
Arduino UNO менен дронду кантип жасоо керек - Микроконтроллерди колдонуу менен квадрокоптер жасаңыз: 8 кадам (сүрөттөр менен)
Arduino UNO менен дронду кантип жасоо керек | Микроконтроллерди колдонуу менен квадрокоптер жасаңыз: КиришүүМенин Youtube каналыма баш багыңыз Drone - бул абдан кымбат гаджет (продукт) сатып алуу. Бул постто мен аны кантип арзан баада жасоону талкуулайм. Анан кантип ушундай арзан баада өзүңүздүн колуңуз менен жасай аласыз … Индияда бардык материалдар (моторлор, ЭСК
Arduino MIDI барабандары (Wii Band Hero)+DAW+VST: 6 кадам (сүрөттөр менен)
Arduino MIDI барабандары (Wii Band Hero)+DAW+VST: Салам! Бул окуу куралы Wii консолунун барабан топтомун, тузактын, 2 томдун, 2 цимбалдын жана тепкич педалынын өзгөчөлүктөрү жөнүндө. Ошондой эле, акырындык менен DAW жана VST жеткиликтүү барабан комплектинен үндү кантип алуу керек, кадамдык көрсөтмө менен