Мазмуну:

Ретро контролер: 7 кадам
Ретро контролер: 7 кадам

Video: Ретро контролер: 7 кадам

Video: Ретро контролер: 7 кадам
Video: NAMANGAN UYCHI 2024, Ноябрь
Anonim
Ретро контроллер
Ретро контроллер

Студенттердин көбү Мультимедиа жана коммуникативдик технологиялар (Multec) жана Брюсселде Эразмушогесектепте окушат.

Samen hebben биз музыкалык контролерду иштете/токтото аларыбызды, ошондой эле канчалаган верфогендерди, кандай тергепполендер жок экенин билебиз.

Бул кассетанын эң башкы кассетасы, ал эми контролеру бул кассетада болчу.

1 -кадам: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Componenten

- 2 баскычтар;

- 2 потенцио метр;

- 2 weerstanden (1K багыш);

- Arduino uno/nano

- Draadjes (zie elektronisch схемасы)

- Soldeerplaat

- MDF платы

Куралдар

- Ласеркуттер

- Кипт

- Striptang

- Soldeerbout (калай менен жолугушту)

Программанын

- Иллюстратор/дизайн (Текенпрограмма)

- Орокчу

- Иштетүү

- Ардуино

2 -кадам: Кодду иштетүү

Код иштетүү
Код иштетүү

/**

* Ардуинодон сериялык билдирүүлөрдү алуу үчүн негизги эскиз * жана аларды орокчу үчүн OSC-билдирүүлөргө которот * * КОЛДОНУЧТУН ПАРАМЕТРЛЕРИН * ыңгайлаштырышыңыз керек жана китепкананы орнотушуңуз керек: oscP5 * * werkcollege AV&IT * үчүн жасалган annoo bob eddi * октябрь 2017 * *////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////

/ Arduino эскизинин акыркы int baudRate = 115200дө ошол эле ылдамдыкты колдонгонуңузду текшериңиз;

// Барып, OSCти колдонууда Reaperден IP дарегин издеңиз // Бул Processing жөнөтүүчү жана Reaper угуучу дарек. // Бул жипти алыскы IPге коюңуз, бул жерде.

// акыркы String remoteIP = "192.168.1.43"; // мис. "127.0.0.1";

final String remoteIP = "оруп -жыйноодо гевонден vul hier ip";

// sendPortко көңүл буруңуз жана муну Reaperге толтуруңуз. // Бул порт иштетүү жөнөтөт жана орокчу угат.

final int listenPort = 11000, sendPort = 12000;

// Бул жерде listenPort активдүү түрдө мүчүлүштүктөрдү оңдоо болуп саналат.

// порт аттары мүчүлүштүктөрдү оңдоо үчүн бул жерде.

final String portName = "Ардуинодогу порт аталыштары";

// акыркы String portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// КОЛДОНУЧТУН ПАРАМЕТРЛЕРИНИН АЯГЫ ///////////////////////// ////

импортту иштетүү.сериал.*; java.util импорттоо.*;

oscP5 импорттоо.*; netP5 импорттоо.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // Сериялык порт логикалык messageArrived = false;

String incoming = "", 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)); }}

void 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); }}

void showOsc () {текст (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

void setup () {size (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); }

void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }

void 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); }

3 -кадам: Arduino коду

Код Arduino
Код Arduino

/* Бул код сериялык аркылуу иштетүү менен байланышуу үчүн негизги эскиз.

Бул өз баскычтарыңызга, потенциометрлерге же сенсорлорго көрсөтүлгөн өз кодуңузду коюуга мүмкүн болгон план.

Байланышта экенибизди жана биз кандай форматта сүйлөшүп жаткандыгыбызды текшерүү үчүн кол алышуу бар

Кабарды ушундай жол менен куруу маанилүү, ошону менен Процесс аны кантип конструкциясын бузууну жана биздин DAWке туура OSC-билдирүүлөрдү жөнөтүүнү билет.

werkcollege AV&IT октябрь 2017 үчүн жасалган

код smooothing 22 -апрель 2007 -жылы Дэвид А. Меллис тарабынан түзүлгөн, 9 -апрель 2012 -жылы Том Игоо тарабынан өзгөртүлгөн

*/

/ baud rate const long baudRate = 115200;

// сурамжылоолордун ортосунда мн күтүүнүн убактысы pin pint const int loopPauseTime = 200; // миллий секунд

// Serial const String startString = "*", endString = "#" боюнча жөнөтүлгөн кабар үчүн баштоо жана аяктоо мааниси;

const char contactCharacter = '|';

// пин idдын const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // курсунун тегизделиши

int pitchReading = A1; int speedReading = A2; int infraReading = A3;

// башка глобалдык өзгөрмөлөр int buttonState1 = 0; int buttonState2 = 0; // баскычтын статусун өзгөртүү үчүн өзгөрмө сенсорValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// Int окууларын текшилөө [numReadings]; // int readIndex3 = 0 аналогдук киришинен окуулар; // учурдагы окуу индекси int total3 = 0; // иштеп жаткан жалпы калкыма орточо3 = 0; // орточо

// Иштетүү эскизи менен байланыш түзүү үчүн бул функцияга муктажбыз // Бул жерде аны жокко чыгарба // тамга жөнөтүү жана жоопту күтүү… кечигүү (loopPauseTime); } Serial.read (); }

void setup () {// бардык pinMode үчүн pinModes орнотуу (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// инициализациялоо Serial comms Serial.begin (baudRate); while (! Сериялык); // тегиздөө (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// кол кармашууну күткүлө installContact (); }

void loop () {// бардык төөнөгүчтөрдү сурамжылоо жана окууну тиешелүү диапазонго карта кылууState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// келген баалуулуктарды керектүү баалуулуктарга картага коюу sensorValue1 = карта (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = карта (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = карта (sensorValue3, 0, 700, 50, 100);

// тегиздөөчү сенсор: total3 = total3 - окуу [readIndex3]; // сенсордон окуу: окуу [readIndex3] = sensorValue3; // окуусун жалпыга кошуу: total3 = total3 + readings [readIndex3]; // массивдеги кийинки позицияга өтүү: readIndex3 = readIndex3 + 1;

// эгер биз массивдин аягында болсок… if (readIndex3> = numReadings) {//… башына чейин ороп коюңуз: readIndex3 = 0; } // орточо эсепке алуу: average3 = (total3 / numReadings); // тегиздөөчү сенсор

Serial.print (startString); // билдирүү тизмегин баштоо // үтүр менен ажыратылган бардык аттарды, маанилердин жуптарын wirte Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");

Serial.print ("инфра-сенсор"); Serial.print (","); Serial.print (орточо3/100); Serial.print (",");

Serial.print ("knop 1 in2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);

// билдирүүнүн аягына жазуу Serial.print (endString);

// бир аз күтө туруңуз..

кечигүү (loopPauseTime); }

4 -кадам: орокчу

Орокчу
Орокчу

1 -стап: Жөндөөлөр> Prefrences

2 -стап: Control/OSC/веб -сайттарды кошуу боюнча префенцияларда

3 -стап: OSCтин ачык режимин башкаруу

4 -стап: Vul je device name in, vink Recieve on port aan en vul in wat er боловсруулах in bij Sendport staat

5 -тиркеме: Колдонуучу IP иштетүү бөлүмүндө иштейт

6 -стап: Druk op ok en de controller is no verbonden met Reaper

5 -кадам: Behuizing

Behuizing
Behuizing

Туурасы: 170 мм

Узундугу: 90 мм

Гугт 30 мм

Knoppen: 16 мм (диаметри

Потенцио метр: 3 мм (диаметри)

Сенсор: Breedte 2.9 мм

Узундугу 0,8 мм

Материалдык: MDF (3мм)

6 -кадам: Электроника

1 -степ:

Verbind de ground en 5 volt van Arduino nontboard

2 -степ:

Verbind пин A0 потенцио 1 менен жолугушту

Verbind пин A1 потенцио 2 менен жолугушту

Verbind пин A3 инфраструктура сенсоруна жолукту.

Verbind пин A2 де niet жабышчаак баскычы менен жолугушту.

V5 тилкеси A5 жабышчаак баскыч менен жолугушту.

7 -кадам: Медиа кабарчылар

Medewerkers
Medewerkers

- Майес Эл Баба

- Арно Гориссен

- Michiel De Wandelaer

Сунушталууда: