Sisällysluettelo:

Retro -ohjain: 7 vaihetta
Retro -ohjain: 7 vaihetta

Video: Retro -ohjain: 7 vaihetta

Video: Retro -ohjain: 7 vaihetta
Video: Pihla-kaihtimen asennus ikkunaan [yhdeksän vaihetta] 2024, Syyskuu
Anonim
Retro -ohjain
Retro -ohjain

Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) a Erasmushogeschool Brussel.

Samen hebben we een muziek controller gemaakt dat muziek kan starten/stoppen, de pitch can verhogen, can terugspoelen en nog meer.

On idee kwam van van een cassette, ons doel oli om een controller ja se oli ladattuna sen kasetin kanssa.

Vaihe 1: Wat Heb Je Nodig?

Mikä heb Je Nodig?
Mikä heb Je Nodig?

Componenten

- 2 painiketta;

- 2 potentiometriä;

- 2 ymmärrystä (1K hirvi);

- Arduino uno/nano

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- MDF -levy

Työkalut

- Laserleikkuri

- Kniptang

- Striptang

- Soldeerbout (met tin)

Ohjelmat

- Kuvittaja/indesign (Tekenprogramma)

- Reaper

- Käsittely

- Arduino

Vaihe 2: Koodin käsittely

Koodin käsittely
Koodin käsittely

/**

* Perusluonnos sarjaviestien vastaanottamiseksi Arduinolta * ja kääntää ne OSC-viesteiksi Reaperille * * Sinun on mukautettava KÄYTTÄJÄN PARAMETRIT * ja asennettava kirjasto: oscP5 * *, joka on tehty werkcollege AV&IT: lle *, jonka on kirjoittanut annoo bob eddi * lokakuu 2017 * *////////////////////// KÄYTTÄJÄN PARAMETRIT /////////////////// ////////

/ varmista, että käytät samaa baudinopeutta Arduinon luonnoksen lopullisessa int baudRate = 115200;

// Mene ja etsi IP-osoite Reaperista, kun käytät OSC: tä // Tämä on osoite, jonka Processing lähettää ja Reaper kuuntelee. // Laita tämä merkkijono remoteIP: hen, tänne.

// lopullinen merkkijono remoteIP = "192.168.1.43"; //esim. "127.0.0.1";

final String remoteIP = "vul hier ip in gevonden in reaper";

// Merkitse sendPort muistiin ja täytä se Reaperissa. // Tämä on portti, jonka Processing lähettää ja Reaper kuuntelee.

final int listenPort = 11000, sendPort = 12000;

// Kuunteluportti on aktiivinen virheenkorjaus.

// portNames ovat täällä myös virheenkorjausta varten.

final String portName = "vul hier de portname in gevonden in Arduino";

// lopullinen merkkijono portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// KÄYTTÄJÄ PARAMETRIT //////////////////////// ////

tuonti käsittely. sarja.*; tuo java.util.*;

tuoda oscP5.*; tuonti netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Sarja commsPort; // Sarjaportin boolean messageArrived = false;

Merkkijono saapuva = "", IncomingOSCMessage = "";

final char startChar = '*', endChar = '#'; final char contactCharacter = '|';

// Varmistaaksemme, että lähetämme vain muuttuvat parametrit (arvot) // nämä yleiset muuttujat on poistettu täältä, mutta niitä ei // tule alustaa täällä! HashMap oldParams, newParams, toSendParams;

// Meidän on jaettava viesti jokaisessa pilkuilla tyhjässä prosessissaIncoming () {String resVec = saapuva.split (","); // saamme nimi+arvoparit // niin jokaiselle nimelle (+2)… yritä {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // laita ne uuteen hashtable newParams.put (resVec , arvo); }} // jos tapahtuu virhe, otamme sen näytölle ja poistumme. catch (Exception ex) {println ("Poikkeusviesti:" + ex); printArray (resVec); exit (); }}

// Viestiemme suodattaminen/ * Varmistamme, että OSC-out-viesti tulee vain, kun * syöttöviesti (sarja) muuttuu * Toisin sanoen: jos käännämme/painamme painiketta ja se muuttaa arvoa. * Joten suodatamme pois saapuvat arvot, jotka todella muuttuvat * Huomaa: emme vältä hyppääviä arvoja *, jotka tulevat esimerkiksi kiihtyvyysmittarista tai etäisyysanturista * sinun on tasoitettava ne itse Arduinossa */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// jos avain on jo olemassa jos (oldParams.containsKey (key)) {// avain on olemassa ja arvo ei ole sama, päivitä jos (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// avain ei ole vanhoissa parametreissa, joten laita se! toSendParams.put (avain, newParams.get (avain)); } oldParams.put (avain, newParams.get (avain)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (avain)); / * lähetä viesti */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Kun haluamme tulostaa ikkunaan void ShowIncoming () {// nähdäksesi saapuvan viestin HashMap -tekstin mukaisesti ("Incoming from Arduino", 20, 20); int y = 20; for (Merkkiavain: newParams.keySet ()) {y = y+20; teksti (näppäin, 20, y); teksti (newParams.get (avain), 300, y); }}

void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

void setup () {koko (1000, 800); // Vaiheen koon täyttö (255); tausta (0); oldParams = uusi HashMap (); newParams = uusi HashMap (); // printArray (Serial.list ()); commsPort = uusi sarja (tämä, portin_nimi, baudinopeus);

/ * aloita oscP5, kuuntele saapuvia viestejä */ oscP5 = uusi OscP5 (tämä, ListenPort);

/* myRemoteLocation on NetAddress. NetAddress sisältää 2 parametria, * IP -osoitteen ja portin numeron. myRemoteLocationia käytetään parametrina * oscP5.send () -kohdassa, kun osc -paketteja lähetetään toiseen tietokoneeseen, laitteeseen tai sovellukseen. käyttö alla. testausta varten kuunteluportti * ja etäsijaintiosoitteen portti ovat samat, joten * lähetät viestejä takaisin tähän luonnokseen. */ myRemoteLocation = uusi NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// lukee tavun sarjaportista: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // kysy lisää println ("alkaa…"); tauko; tapaus startChar: saapuva = ""; tauko; tapaus endChar: messageArrived = true; // println ("viestin loppu"); tauko; oletus: saapuva += inChar; tauko; }}

/* saapuva osc -viesti välitetään oscEvent -menetelmälle. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // hanki 1. osc -argumentti

IncomingOSCMessage + = "\ n" + String.format ("### sai osc -viestin:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", arvo); println (IncomingOSCMessage); }

Vaihe 3: Koodi Arduino

Koodi Arduino
Koodi Arduino

/* Tämä koodi on perusluonnos kommunikoidaksesi prosessoinnin kanssa sarjaportin kautta.

Se on suunnitelma, johon voit laittaa oman koodin, joka on määritetty omille painikkeille, potentiometreille tai antureille.

Sillä on kädenpuristus sen varmistamiseksi, että olemme yhteydessä ja että kommunikointimuoto on päätetty

On tärkeää rakentaa viesti samalla tavalla, jotta käsittely osaa purkaa sen ja lähettää oikeat OSC-viestit DAW: lle

tehty werkcollege AV&IT: lle lokakuussa 2017

koodin tasoitus luotu 22. huhtikuuta 2007 David A. Mellisin muokkaamana 9. huhtikuuta 2012 tekijä Tom Igoe

*/

/ baudinopeus vakio baudinopeus = 115200;

// odotusaika ms: ssa äänestysten välillä nastat const int loopPauseTime = 200; // milli sekuntia

// Serial const -merkkijonon lähettämän viestin alku- ja lopetusarvot String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin -tunnuksen const int -painikePin1 = 2; const int -painikePin2 = 5; const int numReadings = 5; // arvioi van tasoitus

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

// muut globaalimuuttujat int buttonState1 = 0; int -painikeTila2 = 0; // muuttuja painikkeen tilan float sensorValue1 = 0 lukemiseen float sensorValue2 = 0; float sensorValue3 = 0;

// int -lukujen tasoittaminen [numReadings]; // analogisen tulon lukemat int readIndex3 = 0; // nykyisen lukeman indeksi int total3 = 0; // juoksevan kokonaiskellukkeen keskiarvo3 = 0; // keskimääräinen

// Tarvitsemme tätä toimintoa yhteyden luomiseksi käsittelyluonnokseen // Pidä se täällä void estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // lähetä char ja odota vastausta… delay (loopPauseTime); } Sarja.luku (); }

void setup () {// aseta pinModes kaikille nastoille pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// alustetaan sarjakommentit Serial.begin (baudRate); while (! Sarja); // tasoitus (int thisReading = 0; thisReading <numReadings; thisReading ++) {lukemat [thisReading] = 0; }

// odota kädenpuristusta createContact (); }

void loop () {// kysele kaikki nastat ja yhdistä lukema sopivaan alueeseen buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analoginenLuku (pitchReading); sensorValue2 = analoginenLuku (nopeusluku); sensorValue3 = analoginenLue (infraReading);

// tulevien arvojen yhdistäminen tarvittaviin arvoihin sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = kartta (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = kartta (sensorValue3, 0, 700, 50, 100);

// tasoitusanturi: total3 = total3 - lukemat [readIndex3]; // lukea anturista: lukemat [readIndex3] = sensorValue3; // lisää lukema kokonaismäärään: total3 = total3 + lukemat [readIndex3]; // siirtyminen taulukon seuraavaan kohtaan: readIndex3 = readIndex3 + 1;

// jos olemme taulukon lopussa… if (readIndex3> = numReadings) {//… kääri alkuun: readIndex3 = 0; } // laskea keskiarvo: keskiarvo3 = (yhteensä3 / lukumäärä); // tasoitusanturi

Serial.print (startString); // aloita viestisarja // tyhjennä kaikki nimet, arvoparit, erotettuna pilkuilla Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("infra-anturi"); Serial.print (","); Sarjanjälki (keskiarvo3/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);

// kirjoita viestin loppu Serial.print (endString);

// odota hetki..

delay (loopPauseTime); }

Vaihe 4: Reaper

Reaper
Reaper

Vaihe 1: Ga bovenaan naar Options> Prefrences

Vaihe 2: Esiasetukset naar Control/OSC/web en druk op Add

Vaihe 3: Kies bij Control -pintatila voor OSC (Open Sound Control)

Vaihe 4: Vul je -laitteen nimi, vink Vastaanota portin portaalin en vul -virrassa prosessin käsittelyssä Sendport staat

Vaihe 5: Kopioi isäntä IP -osoitteeseen ja käsittele sitä

Vaihe 6: Ohjain on ok ja ohjain on verbonden Reaper

Vaihe 5: Behuizing

Behuizing
Behuizing

Rungon halkaisija: 170 mm

Pituus: 90 mm

Halkaisija 30 mm

Nuppi: 16 mm (halkaisija)

Potentiometrit: 3 mm (halkaisija)

Afstand -anturi: Breedte 2,9 mm

Pituus 0,8 mm

Materiaali: MDF (3mm)

Vaihe 6: Elektronica

Vaihe 1:

Verbind de ground ja 5 voltin Arduino ja hetki leipälauta

Vaihe 2:

Verbind -nasta A0 ja potentio 1

Verbind -tappi A1 ja potentio 2

Verbind -nasta A3 ja infrarood -anturi.

Verbind -nasta A2 ja tahmea painike.

Verbind -nasta A5 ja tahmea painike.

Vaihe 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Suositeltava: