Tartalomjegyzék:

Retro vezérlő: 7 lépés
Retro vezérlő: 7 lépés

Videó: Retro vezérlő: 7 lépés

Videó: Retro vezérlő: 7 lépés
Videó: Retro videó 7. 2024, November
Anonim
Retro vezérlő
Retro vezérlő

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

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

Az idea kwam van van een kazetta, az ons doel volt a vezérlő és a kazetta.

1. lépés: Wat Heb Je Nodig?

Mi a Heb Je Nodig?
Mi a Heb Je Nodig?

Componenten

- 2 gomb;

- 2 potenciométer;

- 2 weerstanden (1K szarvas);

- Arduino uno/nano

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- MDF lemez

Eszközök

- Lézervágó

- Kniptang

- Striptang

- Soldeerbout (ón)

Programok

- Illusztrátor/indesign (Tekenprogramma)

- Aratógép

- Feldolgozás

- Arduino

2. lépés: Kódfeldolgozás

Kódfeldolgozás
Kódfeldolgozás

/**

* Alapvető vázlat az Arduino soros üzeneteinek fogadásához *, és az OSC-üzenetekké alakítja azokat a Reaper számára eddi * 2017. október * *///////////////////// FELHASZNÁLÓI PARAMÉTEREK /////////////////// ////////

/ győződjön meg arról, hogy ugyanazt az átviteli sebességet használja az Arduino vázlat végső int baudRate = 115200;

// Menjen, és keresse meg az IP-címet a Reaper-ben, ha OSC-t használ // Ez az a cím, amelyet a Processing küld és a Reaper hallgat. // Tedd ezt a karakterláncot a remoteIP -be, ide.

// végső karakterlánc távoliIP = "192.168.1.43"; //például. "127.0.0.1";

final String remoteIP = "vul hier ip in gevonden in aratógép";

// Jegyezze fel a sendPort -ot, és töltse ki a Reaper -ben. // Ez az a port, amelyet a Processing küld és a Reaper hallgat.

végső int listenPort = 11000, sendPort = 12000;

// A listenPort itt aktív hibakeresés.

// a portNames szintén hibakeresésre szolgál.

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

// végső karakterlánc portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// FELHASZNÁLÓI PARAMÉTEREK VÉGE //////////////////////// ////

import feldolgozás.sorozat.*; import java.util.*;

import oscP5.*; import netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Soros commsPort; // A soros port logikai üzeneteArrived = false;

Karakterlánc bejövő = "", IncomingOSCMessage = "";

végső karakter startChar = '*', endChar = '#'; final char contactCharacter = '|';

// Annak érdekében, hogy csak azokat a paramétereket (értékeket) küldjük, amelyek megváltoztatják // ezeket a globális változókat itt delkaálják, de // nem szabad itt inicializálni! HashMap oldParams, newParams, toSendParams;

// Az üzenetet fel kell osztanunk minden vesszővel void processInIncoming () {String resVec = bejövő.split (","); // név+értékpárokat kapunk // így minden névhez (+2)… próbálkozzon {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // tegye őket az új Hashtable newParams.put (resVec , érték); }} // ha hiba történik, akkor jelenítsük meg és lépjünk ki. catch (Exception ex) {println ("Kivételüzenet:" + ex); printArray (resVec); kijárat(); }}

// Üzeneteink szűrése/ * Győződünk meg arról, hogy csak akkor jelenik meg OSC-ki üzenet, amikor * a bemeneti üzenet (soros) megváltozik * Vagyis: ha elfordítjuk/megnyomjuk a gombot, és ez megváltoztatja az értéket. * Tehát kiszűrjük a ténylegesen változó bejövő értékeket * Megjegyzés: nem fogjuk elkerülni az ugró értékeket *, mint pl. Gyorsulásmérők vagy távolságérzékelők * * ezeket az Arduino programban kell simítani * HashMap (); for (String key: newParams.keySet ()) {// ha a kulcs már megvan, ha (oldParams.containsKey (key)) {// a kulcs jelen van és értéke nem ugyanaz, akkor frissítse, ha (! oldParams.get (key).equals (newParams.get (kulcs))) {toSendParams.put (kulcs, newParams.get (kulcs)); }} else {// kulcs nincs jelen a régi paraméterekben, szóval tedd meg! toSendParams.put (kulcs, newParams.get (kulcs)); } oldParams.put (kulcs, newParams.get (kulcs)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (kulcs)); / * küldje el az üzenetet */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Ha az ablakba szeretnénk nyomtatni void ShowIncoming () {// a bejövő üzenetek megtekintéséhez, a HashMap szövegben meghatározottak szerint ("Bejövő Arduino -tól", 20, 20); int y = 20; for (Karakterlánc kulcs: newParams.keySet ()) {y = y+20; szöveg (kulcs, 20, y); szöveg (newParams.get (kulcs), 300, y); }}

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

void setup () {méret (1000, 800); // Színpadméret kitöltés (255); háttér (0); oldParams = új HashMap (); newParams = új HashMap (); // printArray (Serial.list ()); commsPort = új soros (ez, portName, baudRate);

/ * indítsa el az oscP5 -t, figyelje a bejövő üzeneteket */ oscP5 = új OscP5 (ez, listenPort);

/* A myRemoteLocation egy NetAddress. A NetAddress 2 paramétert tartalmaz, * egy IP -címet és egy portszámot. A myRemoteLocation paramétert használja az * oscP5.send () fájlban, amikor osc csomagokat küld egy másik számítógépre, eszközre vagy * alkalmazásba. használatát lásd alább. tesztelés céljából a figyelő port * és a távoli hely címének portja ugyanaz, ezért * vissza fog küldeni üzeneteket erre a vázlatra. */ myRemoteLocation = új NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// bájt olvasása a soros portról: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // kérjen további println ("kezdő…"); szünet; case startChar: bejövő = ""; szünet; eset endChar: messageArrived = true; // println ("üzenet vége"); szünet; alapértelmezett: bejövő += inChar; szünet; }}

/* a bejövő osc üzenetet továbbítja az oscEvent metódusba. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // szerezze be az 1. osc argumentumot

IncomingOSCMessage + = "\ n" + String.format ("### kapott egy osc üzenetet:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", érték); println (IncomingOSCMessage); }

3. lépés: Kód Arduino

Arduino kód
Arduino kód

/* Ez a kód egy alapvető vázlat a processzorral való kommunikációhoz.

Ez egy tervrajz, amelyben elhelyezheti a saját gombjaihoz, potenciométereihez vagy érzékelőihez megadott saját kódját.

Kézfogással rendelkezik, hogy megbizonyosodjon arról, hogy kapcsolatba lépünk, és a kommunikáció formátuma eldöntött

Fontos, hogy az üzenetet ugyanígy építsük fel, hogy a Processing tudja, hogyan kell dekonstruálni és helyes OSC-üzeneteket küldeni a DAW-nak

a werkcollege AV&IT okt

kódsimítás létrehozta 2007. április 22 -én David A. Mellis, módosítva 2012. április 9., Tom Igoe

*/

/ baud rate const hosszú baudRate = 115200;

// várakozási idő ms -ban a lekérdezések között a pin -ekig konst int loopPauseTime = 200; // milli másodperc

// a Serial const elküldött üzenet kezdő és befejező értéke String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int gombPin1 = 2; const int gombPin2 = 5; const int numReadings = 5; // értékeld van simítás

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

// egyéb globális változók int buttonState1 = 0; int gombÁllapot2 = 0; // változó a nyomógomb állapotának lebegő érzékelőjének leolvasásáhozValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// int olvasatok simítása [numReadings]; // az analóg bemenet leolvasása int readIndex3 = 0; // az aktuális leolvasás indexe int total3 = 0; // a futó összes úszó átlag3 = 0; // az átlagos

// Erre a funkcióra szükségünk van ahhoz, hogy kapcsolatba lépjünk a Feldolgozási vázlattal // Tartsuk itt void createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // karakter küldése és válasz várása… delay (loopPauseTime); } Serial.read (); }

void setup () {// a pinModes beállítása az összes csap pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicializálja a soros vesszőket Serial.begin (baudRate); while (! Sorozat); // simítás a (int thisReading = 0; thisReading <numReadings; thisReading ++) {olvasatok [thisReading] = 0; }

// várja meg a kézfogást createContact (); }

void loop () {// az összes csap lekérdezése és az olvasás leképezése a megfelelő tartományra buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// a bejövő értékek leképezése a szükséges értékekre sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = térkép (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = térkép (sensorValue3, 0, 700, 50, 100);

// simító érzékelő: összesen3 = összesen3 - leolvasások [readIndex3]; // olvasás az érzékelőből: readings [readIndex3] = sensorValue3; // add hozzá az értéket az összeshez: total3 = total3 + olvasmányok [readIndex3]; // előre lépés a tömb következő helyére: readIndex3 = readIndex3 + 1;

// ha a tömb végén vagyunk… if (readIndex3> = numReadings) {//… tekerjük az elejére: readIndex3 = 0; } // az átlag kiszámítása: átlag3 = (összesen3 / számReadings); // simító érzékelő

Serial.print (startString); // üzenetsorozat indítása // törölje az összes nevet, értékpárt vesszővel elválasztva Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("infra-szenzor"); Serial.print (","); Soros.nyomtatás (átlag3/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);

// írja az üzenet végét Serial.print (endString);

// várjon egy kicsit..

delay (loopPauseTime); }

4. lépés: Aratógép

Arató
Arató

1. lépés: Ga bovenaan naar Options> Prefrences

2. lépés: Ga prefrences naar Control/OSC/web en druk op Add

3. lépés: Kies bij Control felületmód vagy OSC (Open Sound Control)

4. lépés: Vul je device name in, vink Recieve on port aan en vul in wat er in feldolging bij Sendport staat

5. lépés: A IP -cím másolása és feldolgozása folyamatban van

6. lépés: Druk op ok en de controller ver verbonden Reaper

5. lépés: Behuizing

Behuizing
Behuizing

Fajta: 170 mm

Hossza: 90 mm

Hoogte 30 mm

Kötés: 16 mm (átmérő

Potenciométerek: 3 mm (átmérő)

Afstand érzékelő: Breedte 2,9 mm

Hossza 0,8 mm

Anyag: MDF (3 mm)

6. lépés: Elektronica

1. lépés:

Verbind de ground en 5 volt van Arduino met kenyérlap

2. lépés:

A0 igekötő és potenciál 1

Az igekötő A1 és a potenciál 2

Verbind A3 tű infravörös érzékelővel.

Verbind pin A2 met de niet sticky button.

Verbind A5 pin with sticky button.

7. lépés: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Ajánlott: