Мазмұны:
- 1 -қадам: Құрамдас бөліктер
- 2 -қадам: Bouwen прототипі
- 3 -қадам: код прототипі
- 4 -қадам: Uittesten прототипі
- 5 -қадам: «Онтменделенген» мінез -құлықтың компоненттері Гебрукт Гаан Ворд
- 6 -қадам: Werking Originele түймелері + Дремелен
- 7 -қадам: Төсек тазалау + дәнекерлеу түймелері
- 8 -қадам: Де Бехуизингте Мәкенді шапалақтайды
- 9 -қадам: Аранслютен Оп Протоборд төсек -орынды тазарту
- 10 -қадам: Верстевиген
- 11 -қадам: Code Voor Het Communiceren Reaper кездесті
- 12 -қадам: Uittesten контроллері
Бейне: Ардуино гитарасының жобасы: 12 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:27
Мартен Вребос, Джастин Каванас және Ваннес Стробанд, біз мультимедиялық және коммуникациялық технологияларды үйренеміз. Аудиовизуалды және АТ қағидалары-бұл MIDI-контроллердің ең жақсы гитарасы. Ол интернатурада оқитын студенттермен бірге болды. Контроллерлер кең спектрде жұмыс істейді. Сонымен қатар, біз қосымша ақпаратқа ие боламыз.
Ақпаратты өшіру кезінде сіз өнімділікті жоюға болады, бұл сіздің фотосуреттеріңіздің бәріне де әсер етеді.
Жобаның негізгі жобасы келесідей:
slapyak.wordpress.com/guitar-hero-midi-con…
www.instructables.com/id/Converting-a-rescu…
gizmodo.com/391834/turn-your-guitar-hero-g…
Benodigdheden дауыс жобасы
- 6 клейн түймелері
- 7 1 кОм резистор
- 1 жарықдиодты жарықдиодты 1
- blauwe жарық диоды
- 1 Arduino Uno R3
- 1 жарықдиодты жарықдиодты шам
- 2 жолақты жарық диоды
- 1 швифшакелаар
- 1 нан тақтасы
- 1 потенциометр
- 1 протоборд
- 1 гитара батыры
- Вольденде төсек тартуы
- Дәнекерлеу материалдары/дремелен/
- Шровендрайер
1 -қадам: Құрамдас бөліктер
Voor ons прототипі (жұмыс тақтасы) hebben біз келесі компоненттерді қолданамыз:
6 түймелер
7 1 кохтық резисторлар
1 сары жарық диоды
1 көк жарық диоды
1 Arduino Uno R3
1 Жасыл жарық диоды
2 Қызыл жарық диоды
1 Шуйфшакелаар
1 Нан тақтасы
1 Потенциометр
2 -қадам: Bouwen прототипі
Прототипі біз тек қана нан тақтасында, сондай -ақ тест тақтасында тест -жобаны әзірлеуге көмектесеміз, сонымен қатар біз жұмыс кестесінде де кездесеміз. Бұл tinkercad.com арқылы прототипі болып табылады, және біз бұл бағдарламаның прототипі туралы ақпаратқа қол жеткізе аламыз.
5 кластерлік түймешіктердің екеуін де табуға болады, сонымен қатар 5 батырманы басу комбинациясында жойылады, бұл «бақылау» әсерінің нашарлауына әсер етеді. Жарықдиодты шамдар бір мезгілде бақыланатын болса да, олар өзара әрекеттесуді қамтамасыз етеді.
3 -қадам: код прототипі
Globale өзгермелі
Бұл кодты бастапқы нұсқаулықта орнатуға болады, бұл сіздің түйреуіштеріңіздің бар -жоғын анықтауға мүмкіндік береді.
// zet pin сандары waar mainButton (snaar) және басқа батырмалар: const int mainButton = A1; // gitaar snaar const int 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; // жарықдиодты түйреуіштің саны 13
const int ledPin2 = 12; // жарықдиодты штырдың саны 12 const int ledPin3 = 11; // жарықдиодты штырдың саны 11 const int ledPin4 = 10; // жарықдиодты штырдың саны 10 const int ledPin5 = 9; // жарықдиодты түйреуіштің саны 9 const int potPin = A5; // жарықдиодты A5 түйреуішінің саны
Сенсорлардың сенсорлары (потенциометрдің, лихценсордың басу түймешіктері), сондай -ақ басқа да мемлекеттердің сенсорлары.
// initialiseer buttonStates немесе knoppen (nieting of intietrukt) 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;
Орнату
Жарамсыз күйді орнату функциясы. Бос орын жоқ (нұсқаулық) - бұл нұсқаулықтардың ең маңыздысы.
Бұл функционалдылық - бұл түсініктеме. Қосымша функционалдық функциялардың орындалуы қосымша ақпарат болып табылады, бұл ардуино сілтемесінде.
void setup () {// data rate in a second (baud) немесе сериялық деректерді беру Serial.begin (9600); // pinMode (ledPin1, OUTPUT) шығысындағы LEDPin параметрлерін өзгерту; 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 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 die de standaard waarden 0 дюймді жариялаушы.
int mainStates = {0, 0, 0, 0, 0};
// aantalKnoppen массивінің үстіндегі цикл
for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // initialiser all knopPinnen als input digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ингедрукциясы - бұл баспаға шығару, барлық түймені басу, егер (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print («,»); Serial.println (buttonStates ); }}
4 -қадам: Uittesten прототипі
Gebouwd прототипі geschreven кодының моделі болып табылады, ол өңделуде, ол әлі де прототипі болып табылады. Бұл бейне бір уақытта жұмыс жасайтын комбайндардың бірі болып табылады.
Бейнежазбада бұл потенциометрдің өңделуінің нашарлауына әкеліп соқтырады.
5 -қадам: «Онтменделенген» мінез -құлықтың компоненттері Гебрукт Гаан Ворд
Сонымен қатар, бұл дұрыс прототип, біз гитараның кейіпкері «онтмантелен» кездестірдік. Біз контроллермен жұмыс істей алатын болсақ, біз оларды ашық түрде ашамыз. Біз біртіндеп басу түймешіктерін басамыз, олар біртіндеп басылады. Біз өнімділікке қол жеткізуге болатын өнімдерді шығарамыз (комбинациялау түймешігін басу керек), содан кейін біз тве түймешіктерін басамыз (фотосуреттер). Жарықдиодты өшіру қажет (біз барлық деректерді дұрыс анықтаймыз).
6 -қадам: Werking Originele түймелері + Дремелен
Бейнелердің бірі - бұл олардың пайда болуының басты себебі.
Түпнұсқалық түймешіктердің түпнұсқалары бізбен де байланысады, біз де олардың пайда болуына жол бермейміз.
7 -қадам: Төсек тазалау + дәнекерлеу түймелері
Ақпараттық мәзір біз табылған кестеден кейін табылған болатын. Фотосуреттер туралы ақпарат біз үшін маңызды емес. Eens dit gebeurd is daynen we doorgaan naar de volgende stap.
8 -қадам: Де Бехуизингте Мәкенді шапалақтайды
Гитара кейіпкері-модельді релизге айналдырды, біз қосымша плавалар жасадық. dremelen. Біз сіздермен бір уақытта келіссөздер жүргізіп жатырмыз. Ақпараттық құралдар мен құрал -саймандардың бар -жоғын білуге болады, бірақ біз олардың қайсысы жақсы болатынын білмейміз. Бұл фотосуреттер біздің веб -сайтымызда жарияланғаннан кейін де пайда болады. Бұл фотосуреттердің ең үлкені болып табылады, біз сізбен байланыс орната алмаймыз.
9 -қадам: Аранслютен Оп Протоборд төсек -орынды тазарту
Компоненттердің әрқайсысы бір -бірімен қарым -қатынасты жақсартты. Бұл сіздің жұмысыңыздың қайсысы болса да, бұл Нанбордтың ең жақсы нәтижесі болып табылады. Біз фотосуреттермен жұмыс жасайтын боламыз. Дәл солай, бұл орталықтандырылған пунктердің бірі болып табылады (фото 2).
10 -қадам: Верстевиген
Аяқталатын нәрсе - бұл қосымша тұрақтылық. Бұл фотосуреттердің бірі болып табылады, біз бұл туралы білеміз. Түймешіктер біртіндеп таңдалды.
11 -қадам: Code Voor Het Communiceren Reaper кездесті
Deze коды жаңа нұсқада сақталады, бірақ киім IDE (интерактивті даму ортасы) бағдарламасында. Өңдеу кодын теру керек, бұл сенсорлар мен датчиктерді өңдеуге мүмкіндік береді.
Өңдеу - бұл твиттер. Жиынтық кодты орауыштың барлық есіктерінің есіктері ашылады.
Ардуино
/* Бұл код - бұл серия арқылы өңдеумен байланысудың негізгі нобайы.
Бұл сіздің жеке кодыңызды қоюға болатын сызба
жеке түймелер, потенциометрлер немесе сенсорлар үшін көрсетілген.
Бізде байланыс бар екеніне көз жеткізу үшін қол алысу бар
және біз сөйлесетін формат шешіледі
Хабарды дәл осылай құру маңызды, Осылайша, өңдеу оны қалай бұзуға болатынын және біздің DAW-ке дұрыс OSC хабарламаларын жіберуді біледі
werkcollege AV&IT үшін жасалған
қазан 2017 ж
*
/ жылдамдық
const long baudRate = 115200;
// түйреуіштер арасындағы сауалнамалар арасында күту уақыты
const int loopPauseTime = 200; // миллий секунд
// Serial -да жіберілген хабарламаның басталу және аяқталу мәндері
const String startString = «*», endString = «#»;
const char contactCharacter = '|';
// PIN идентификаторлары
// басқа жаһандық айнымалылар
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {«түйін 1», «түйін 2», «түйін 3», «түйін 4», «түйін 5»}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;
int mainButtonState = 0;
int potValue = 0;
// аналогтық датчиктер
const int potPin = A5; // тремоло
// Бізге өңдеу функциясы эскизімен байланыс орнату үшін бұл функция қажет
// Оны осында сақтаңыз void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // таңбаны жіберіп, жауапты күтіңіз… delay (loopPauseTime); } Serial.read (); }
жарамсыз орнату () {
// барлық түйреуіштер үшін pinModes орнатыңыз (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // егер сіз 5В орнына 3В жұмыс істейтін датчиктерді қолдансаңыз, түсініктеме бермеңіз // сізге 'ext' түйреуішін 3.3V -ке қосу қажет болады // analogReference (EXTERNAL);
// сериялық хабарларды инициализациялау
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 («,»); }} басқа {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); }
Өңдеу
Жауапкершіліктен бас тарту: Nec барлық кодты өңдеудің эскиздік кестесі, сонымен қатар кодты өңдеу керек: ProcessingSoundControl_handout_v6_1.pde бижледжде
Нашар нұсқаулар нашарлады (үнділіктер):
// Baudrate moet hetzelfde zijn zoals in de arduino эскизі
final int baudRate = 115200;
// Жатқыштағы IP мекенжайы (скриншоттар бижледжде)
// Өңдеу және өңдеу жұмыстары
// final 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 = «»;
соңғы char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Тек өзгеретін параметрлерді (мәндерді) жіберетінімізге сенімді болу үшін
// бұл жаһандық вариабльдер осында жойылады, бірақ // мұнда инициализацияланбауы керек! HashMap oldParams, newParams, toSendParams;
// Біз хабарды әр үтірге бөлуіміз керек
void processIncoming () {String resVec = incoming.split («,»); // біз атау+мән жұптарын аламыз // сондықтан әр ат үшін (+2)… (int int = 0; i <resVec.length; i+= 2) {float мәні = Float.parseFloat (resVec [i+ 1]); // оларды жаңа Hashtable newParams.put қойыңыз (resVec , мән); }} // егер қате пайда болса, оны көрсетіп, шығайық. catch (Exception ex) {println («Ерекше хабар:» + ex); printArray (resVec); Шығу(); }}
// Біздің хабарламаларды сүзу үшін
/ * Біз * кіріс хабарламасы (сериялық) өзгерген кезде тек OSC-шығатын хабардың бар екеніне көз жеткіземіз * Яғни: егер біз түймені бұрсақ/бассақ және ол мәнді өзгертсе. * Сондықтан біз өзгеретін кіріс мәндерін сүземіз * ескерту: біз мәндерді секіруден аулақ болмаймыз, мысалы, акселерометрлерден немесе қашықтық сенсорларынан * сіз оларды Arduino */ void filterParams () {toSendParams = new ішінде тегістеуіңіз керек. HashMap (); for (Жол пернесі: newParams.keySet ()) {// егер кілт бұрыннан бар болса, егер (oldParams.containsKey (key)) {// кілт бар болса және мәні бірдей болмаса, онда (! oldParams.get (key)). equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// кілт ескі параметрлерде жоқ, сондықтан қойыңыз! toSendParams.put (кілт, newParams.get (кілт)); } oldParams.put (кілт, newParams.get (кілт)); }}
жарамсыз makeOSC () {
for (Жол пернесі: toSendParams.keySet ()) {OscMessage myMessage = жаңа OscMessage («/»+ пернесі); myMessage.add (toSendParams.get (кілт)); / * хабарламаны жіберу */ oscP5.send (myMessage, myRemoteLocation); }}
жарамсыз translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // HashMap мәтінінде орнатылған кіріс хабарламаны көру үшін void ShowIncoming () {// терезеге басып шығарғымыз келгенде («Arduino -дан кіретіндер», 20, 20); int y = 20; for (Жол пернесі: newParams.keySet ()) {y = y+20; мәтін (перне, 20, у); мәтін (newParams.get (key), 300, y); }}
жарамсыз showOsc () {
мәтін (IncomingOSCMessage, 300, 200); IncomingOSCMessage = «»; }
жарамсыз орнату () {
өлшемі (1000, 800); // Кезең өлшемін толтыру (255); фон (0); oldParams = жаңа HashMap (); newParams = жаңа HashMap (); // printArray (Serial.list ()); commsPort = жаңа серия (this, 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 = жалған; } showOsc (); }
жарамсыз serialEvent (Serial commsPort) {
// сериялық порттан байтты оқыңыз: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // көбірек println сұраңыз («басталады…»); үзіліс; case startChar: кіріс = «»; үзіліс; case endChar: messageArrived = true; // println («хабардың соңы»); үзіліс; әдепкі: кіріс += inChar; үзіліс; }}
/* кіріс Оскар хабарламасы oscEvent әдісіне жіберіледі. */
void oscEvent (OscMessage theOscMessage) {өзгермелі мән = theOscMessage.get (0).floatValue (); // 1 -ші Оскар аргументін алыңыз
IncomingOSCMessage += «\ n» +
String.format («### оск хабарын алды:» + «addrpattern:» + theOscMessage.addrPattern () + «: %f», мән); println (IncomingOSCMessage); }
12 -қадам: Uittesten контроллері
Nu alles - бұл агонслотен, барлық код - бұл барлық тілдер, бұл контроллердің барлық функциялары. Жиындарды жоюға арналған құралдар MIDI контроллері гитарасының кейіпкері болып табылады!
Ұсынылған:
Ардуино-Тамаготчи жобасы (Мен Тамаготчымын): 5 қадам (суреттермен)
Ардуино-Тамаготчи жобасы (Мен Тамаготчымын): Мен карантинде скучно болдым және Ардуино Тамаготчи жасауды шештім. Мен көптеген жануарларды жек көргендіктен, мен өзімді Тамаготчи ретінде таңдаймын. Алдымен мен консольді тақтаға саламын. Сымдар өте қарапайым. Тек үш түйме бар, дыбыстық сигнал және
Ардуино гитарасының ұясын ұстаушы, OLED: 7 қадам
Ардуино гитарасы бар джек кілт ұстағышы және OLED: Кіріспе: Бұл нұсқаулық менің Arduino негізіндегі гитара ұясы плагинінің ұстағышының құрылысын егжей -тегжейлі түсіндіреді.Бұл менің бірінші нұсқаулығым, сондықтан жолда өзгерістер / жаңартулар енгізуіме шыдаңыз
TB-303 клонының (немесе электр гитарасының) дыбысын қалай жақсартуға болады: 4 қадам
TB-303 клонының (немесе электр гитарасының) дыбысын қалай жақсартуға болады: Бұл ретро-электроника дизайны (Warp303 деп аталады) Proco RAT және Valve құю өнімдерінен шабыттандырылған; Шын мәнінде, бұл конструкция екі микросхеманы біріктіріп, қосымша майлы бас дыбысын шығарады. Мен TT-303 басс циклонының схемасын жасадым (ең жақсы TB-303
Aliexpress DIY жиынтығынан FUZZ гитарасының әсерін қалай жасауға болады: 20 қадам (суреттермен)
Aliexpress DIY жиынтығынан FUZZ гитарасының эффектісін қалай жасауға болады: Мен AliExpress -тің DIY Fuzz электро гитаралық эффектісін қолдандым және соншалықты қарапайым ақпарат болды, сондықтан мен басқа, тәжірибесі төмен пайдаланушылар мен сатып алушыларға нұсқаулық жасауға шешім қабылдадым. Сонымен, бұл
Акрил гитарасының LED режимі: 4 қадам (суреттермен)
Акрил гитарасының жарық диодты модулі: Мен акрилді гитараға ASDA -ның ең жақсы арзан жарық диодтарын енгіздім Қолданылатын заттар: - акрил гитара - көк жарық диодты ASDA (3.50) - ноутбуктің қуат көзінен алынған рокер қосқышы олар сақталды (мен олардың екенін білдім