Innehållsförteckning:

Retro Controller: 7 steg
Retro Controller: 7 steg

Video: Retro Controller: 7 steg

Video: Retro Controller: 7 steg
Video: Mobile Concert Stage Setup-SINOSWAN Gospel Truck for Church Crusade,Evangelism, Minister Mission 2024, November
Anonim
Retro kontroller
Retro kontroller

Vi är första år studenten från utbildningen Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

Vi har en musikkontroller som gör att musik kan starta/stoppa, den kan överföras, återvända och mer.

Vår idé kom från en kassett, vårt mål var att en controller skulle kunna se ut som en kassett.

Steg 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponent

- 2 knappar;

- 2 Potentio meter;

- 2 weerstanden (1K älg);

- Arduino uno/nano

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- MDF -platta

Verktyg

- Laserskärare

- Kniptang

- Striptang

- Soldeerbout (tenn)

Program

- Ilustrator/indesign (Tekenprogram)

- Skördemaskin

- Bearbetning

- Arduino

Steg 2: Kodbehandling

Kodbehandling
Kodbehandling

/**

* Grundläggande skiss för att ta emot seriemeddelanden från Arduino * och översätter dem till OSC-meddelanden för Reaper * * Du måste anpassa ANVÄNDARPARAMETERNA * och du måste installera ett bibliotek: oscP5 * * gjord för werkcollege AV&IT * av annoo bob eddi * oktober 2017 * */////////////////////// USER PARAMETERS ////////////////////// //////////

/ se till att du använder samma överföringshastighet i din Arduino sketch final int baudRate = 115200;

// Gå och leta efter IP-adressen i Reaper när du använder OSC // Detta är adressen Processing skickar till och Reaper lyssnar på. // Lägg den här strängen i remoteIP, här.

// final String remoteIP = "192.168.1.43"; //t.ex. "127.0.0.1";

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

// Notera sendPort och fyll i detta i Reaper. // Detta är porten Processing skickar till och Reaper lyssnar på.

final int listenPort = 11000, sendPort = 12000;

// ListenPort här är för att aktivt felsöka.

// portnamnen är också här för att felsöka.

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

// final String portName = "COM6"; // "/dev/ttyUSB0";

/////////////////////// END OF USER PARAMETERS ///////////////////////// ////

import bearbetning. serie.*; importera java.util.*;

importera oscP5.*; importera netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Seriell commsPort; // Seriell port booleskt meddelandeArrived = false;

String inkommande = "", IncomingOSCMessage = "";

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

// För att vara säker på att vi bara skickar de parametrar (värden) som ändras // dessa globala variabler delcared här men ska // inte initialiseras här! HashMap oldParams, newParams, toSendParams;

// Vi måste dela meddelandet vid varje komma -tomrum processIncoming () {String resVec = incoming.split (","); // vi får namn+värdepar // så för varje namn (+2) … försök {för (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // lägg dem i den nya Hashtable newParams.put (resVec , värde); }} // om ett fel uppstår, låt oss få det att visas och avsluta. catch (Undantag ex) {println ("Undantagsmeddelande:" + ex); printArray (resVec); utgång(); }}

// För att filtrera våra meddelanden/ * Vi ser till att det bara finns ett OSC-meddelande när * inmatningsmeddelandet (seriellt) ändras * Det vill säga: om vi vrider/trycker på knappen och det ändrar värde. * Så vi filtrerar bort de inkommande värden som faktiskt ändras * Obs: vi kommer inte att undvika hoppvärden * som kommer från t.ex. accelerometrar eller distanssensorer * du måste själv jämna ut dem i Arduino */ void filterParams () {toSendParams = new HashMap (); för (String key: newParams.keySet ()) {// om nyckeln redan finns om (oldParams.containsKey (key)) {// key present and value not the same, update then if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// nyckel finns inte i gamla params, så säg det! toSendParams.put (key, newParams.get (key)); } oldParams.put (nyckel, newParams.get (nyckel)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (nyckel)); / * skicka meddelandet */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // När vi vill skriva ut till fönstret ogiltiga ShowIncoming () {// för att se inkommande meddelande, som anges i HashMap -texten ("Inkommande från Arduino", 20, 20); int y = 20; för (String key: newParams.keySet ()) {y = y+20; text (nyckel, 20, y); text (newParams.get (key), 300, y); }}

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

void setup () {size (1000, 800); // Scenstorlek fyllning (255); bakgrund (0); oldParams = new HashMap (); newParams = ny HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * starta oscP5, lyssna på inkommande meddelanden */ oscP5 = ny OscP5 (detta, lyssnaPort);

/* myRemoteLocation är en NetAddress. en NetAddress tar två parametrar, * en ip -adress och ett portnummer. myRemoteLocation används som parameter i * oscP5.send () när osc -paket skickas till en annan dator, enhet, * applikation. användning se nedan. för teständamål är lyssningsporten * och porten på fjärradressen desamma, därför kommer du * att skicka meddelanden tillbaka till denna skiss. */ myRemoteLocation = ny NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// läs en byte från serieporten: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // be om mer println ("börjar …"); ha sönder; case startChar: inkommande = ""; ha sönder; case endChar: messageArrived = true; // println ("slutet av meddelandet"); ha sönder; standard: inkommande += inChar; ha sönder; }}

/* inkommande osc -meddelande vidarebefordras till oscEvent -metoden. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // få det första osc -argumentet

IncomingOSCMessage + = "\ n" + String.format ("### fick ett osc -meddelande:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", värde); println (IncomingOSCMessage); }

Steg 3: Kod Arduino

Kod Arduino
Kod Arduino

/* Denna kod är en grundläggande skiss för att kommunicera med Processing through Serial.

Det är en ritning där du kan lägga din egen kod som är specificerad för dina egna knappar, potentiometrar eller sensorer.

Den har ett handslag för att se till att vi har kontakt och det format som vi kommunicerar i bestäms

Det är viktigt att konstruera meddelandet på samma sätt, så att Processing vet hur man dekonstruerar det och skickar rätt OSC-meddelanden till vår DAW

gjord för werkcollege AV&IT oktober 2017

kod smooothing skapad 22 apr 2007 av David A. Mellis modifierad 9 apr 2012 av Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// tid att vänta i ms mellan omröstningar till stiften const int loopPauseTime = 200; // milli sekunder

// start- och slutvärden för meddelandet som skickas på Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // taxa utjämning

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

// andra globala variabler int buttonState1 = 0; int buttonState2 = 0; // variabel för avläsning av tryckknappens status float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// utjämning av avläsningar [numReadings]; // avläsningarna från den analoga ingången int readIndex3 = 0; // indexet för den aktuella avläsningen int total3 = 0; // det löpande totala float -genomsnittet3 = 0; // genomsnittet

// Vi behöver denna funktion för att upprätta kontakt med bearbetningsskissen // Behåll den här ogiltig etablContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // skicka en char och vänta på svar … fördröjning (loopPauseTime); } Serial.read (); }

void setup () {// ställ in pinModes för alla pins pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// initiera Serial comms Serial.begin (baudRate); medan (! Seriell); // utjämning för (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// vänta på handskakning upprättaContact (); }

void loop () {// poll alla pins och mappa avläsningen till lämpligt intervall buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// mappa de inkommande värdena till nödvändiga värden sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = map (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = map (sensorValue3, 0, 700, 50, 100);

// utjämningssensor: total3 = total3 - avläsningar [readIndex3]; // läst från sensorn: avläsningar [readIndex3] = sensorValue3; // lägg till avläsningen till summan: total3 = total3 + avläsningar [readIndex3]; // gå vidare till nästa position i arrayen: readIndex3 = readIndex3 + 1;

// om vi är i slutet av arrayen … if (readIndex3> = numReadings) {// … linda till början: readIndex3 = 0; } // beräkna genomsnittet: average3 = (total3 / numReadings); // utjämningssensor

Serial.print (startString); // starta en meddelandesekvens // wirte alla namn, värdepar, separerade med kommatecken Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("infra-sensor"); Serial.print (","); Serial.print (genomsnitt3/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);

// skriv slutet av meddelandet Serial.print (endString);

// vänta ett tag..

delay (loopPauseTime); }

Steg 4: Reaper

Skördeman
Skördeman

Steg 1: Öppna alternativ> Preferenser

Steg 2: Gå till kontroller/OSC/web och tryck på Lägg till

Steg 3: Välj från Control ytläge för OSC (Open Sound Control)

Steg 4: Du kan ange enhetsnamn, vinka Hämta porten och vulkanen vid bearbetning av Sendport staat

Steg 5: Kopiera värdens IP -adress för att se och se dessa i bearbetning

Steg 6: Tryck på ok en de controller is no verbonden with Reaper

Steg 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Längd: 90 mm

Höjd 30 mm

Knoppen: 16 mm (diameter

Potentiometer: 3 mm (diameter)

Afstandsgivare: Breedte 2,9 mm

Längd 0,8 mm

Material: MDF (3mm)

Steg 6: Elektronica

Steg 1:

Anslutning av jord och 5 volts skåp Arduino med brödbräda

Steg 2:

Kopplingsstift A0 med potentio 1

Kopplingsstift A1 med potentio 2

Kopplingsstift A3 med infraröd sensor.

Anslutningsnål A2 med den inte klibbiga knappen.

Kopplingsstift A5 med klibbig knapp.

Steg 7: Medarbetare

Medarbetare
Medarbetare

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Rekommenderad: