Мазмұны:

Ардуино гитарасының жобасы: 12 қадам (суреттермен)
Ардуино гитарасының жобасы: 12 қадам (суреттермен)

Бейне: Ардуино гитарасының жобасы: 12 қадам (суреттермен)

Бейне: Ардуино гитарасының жобасы: 12 қадам (суреттермен)
Бейне: Уроки Ардуино #0 - что такое Arduino, куда подключаются датчики и как питать Ардуино 2024, Қараша
Anonim
Гитара батыры Arduino жобасы
Гитара батыры Arduino жобасы
Гитара батыры Arduino жобасы
Гитара батыры Arduino жобасы
Гитара батыры Arduino жобасы
Гитара батыры Arduino жобасы

Мартен Вребос, Джастин Каванас және Ваннес Стробанд, біз мультимедиялық және коммуникациялық технологияларды үйренеміз. Аудиовизуалды және АТ қағидалары-бұл 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 прототипі

Bouwen прототипі
Bouwen прототипі
Bouwen прототипі
Bouwen прототипі
Bouwen прототипі
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 түймелері + Дремелен

Werking Originele түймелері + Дремелен
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 кездесті

Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
Code Voor Het Communiceren Reaper кездесті
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 контроллері гитарасының кейіпкері болып табылады!

Ұсынылған: