Indholdsfortegnelse:

Retro -controller: 7 trin
Retro -controller: 7 trin

Video: Retro -controller: 7 trin

Video: Retro -controller: 7 trin
Video: Полукеды Retro Trim, Viking, арт. 3 50700 2024, September
Anonim
Retro controller
Retro controller

Vi er vores første år studerende fra uddannelsen Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

Vi har en musikcontroller, der gør, at musik kan starte/stoppe, og at afspilningen kan afspilles, og jeg kan ikke returnere mere.

Vores idé kom fra en kassette, vores mål var at få en controller til at se ud som en kassette.

Trin 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponent

- 2 knapper;

- 2 Potentio meter;

- 2 weerstanden (1K elg);

- Arduino uno/nano

- Draadjes (zie elektronisk skema)

- Soldeerplaat

- MDF -plade

Værktøjer

- Laserskærer

- Kniptang

- Striptang

- Soldeerbout (met tin)

Programmer

- Illustrator/indesign (Tekenprogram)

- Reaper

- Behandling

- Arduino

Trin 2: Kodebehandling

Kodebehandling
Kodebehandling

/**

* Grundlæggende skitse for at modtage serielle meddelelser fra Arduino * og oversætter dem til OSC-meddelelser til Reaper * * Du bliver nødt til at tilpasse BRUGERPARAMETRE * og du skal installere et bibliotek: oscP5 * * lavet til werkcollege AV&IT * af annoo bob eddi * oktober 2017 * */////////////////////// USER PARAMETERS ////////////////////// //////////

/ sørg for at bruge den samme baudhastighed i din Arduino sketch sidste int baudRate = 115200;

// Gå og se efter IP-adressen i Reaper, når du bruger OSC // Dette er adressen, Processing sender til og Reaper lytter til. // Sæt denne streng i remoteIP, her.

// final String remoteIP = "192.168.1.43"; //f.eks. "127.0.0.1";

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

// Noter sendPort, og udfyld dette i Reaper. // Dette er porten Processing sender til og Reaper lytter til.

sidste int listenPort = 11000, sendPort = 12000;

// ListenPort her skal aktivt debugge.

// portNames er også her for at fejlsøge.

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

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

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

import behandling. serie.*; import java.util.*;

import oscP5.*; import netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Seriel commsPort; // Den serielle port boolske messageArrived = false;

String indkommende = "", IncomingOSCMessage = "";

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

// For at sikre, at vi kun sender de parametre (værdier), der ændres // er disse globale variabler delcared her, men bør // ikke initialiseres her! HashMap oldParams, newParams, toSendParams;

// Vi er nødt til at opdele beskeden ved hvert komma -tomrum processIncoming () {String resVec = incoming.split (","); // vi får navn+værdipar // så for hvert navn (+2) … prøv {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // læg dem i det nye Hashtable newParams.put (resVec , værdi); }} // // hvis der opstår en fejl, lad os få den vist og afslutte. catch (Undtagelse ex) {println ("Undtagelsesmeddelelse:" + eks); printArray (resVec); Afslut(); }}

// For at filtrere vores meddelelser/ * Vi sørger for, at der kun er en OSC-out-meddelelse, når * inputmeddelelsen (Seriel) ændres * Det vil sige: hvis vi drejer/trykker på knappen, og den ændrer værdi. * Så vi filtrerer de indgående værdier, der rent faktisk ændrer sig * Bemærk: vi undgår ikke at springe værdier * som f.eks. Fra accelerometre eller distancesensorer * du skal selv udjævne dem i Arduino */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// hvis nøglen allerede er til stede, hvis (oldParams.containsKey (key)) {// key present and value not the same, then update if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// nøgle findes ikke i gamle params, så sig det! toSendParams.put (key, newParams.get (key)); } oldParams.put (nøgle, newParams.get (nøgle)); }}

void makeOSC () {for (strengnøgle: toSendParams.keySet ()) {OscMessage myMessage = ny OscMessage ("/"+ nøgle); myMessage.add (toSendParams.get (nøgle)); / * send beskeden */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Når vi vil udskrive til vinduet, annullere ShowIncoming () {// for at se indgående besked, som angivet i HashMap -teksten ("Indgående fra Arduino", 20, 20); int y = 20; for (Strenøgle: newParams.keySet ()) {y = y+20; tekst (nøgle, 20, y); tekst (newParams.get (nøgle), 300, y); }}

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

ugyldig opsætning () {størrelse (1000, 800); // Scenestørrelsesfyld (255); baggrund (0); oldParams = ny HashMap (); newParams = ny HashMap (); // printArray (Serial.list ()); commsPort = ny Serial (dette, portnavn, baudRate);

/ * start oscP5, lyt til indgående beskeder */ oscP5 = ny OscP5 (dette, lytPort);

/* myRemoteLocation er en NetAddress. en NetAddress tager 2 parametre, * en ip -adresse og et portnummer. myRemoteLocation bruges som parameter i * oscP5.send (), når osc -pakker sendes til en anden computer, enhed, * applikation. brug se nedenfor. til testformål er lytteporten * og porten til den eksterne placeringsadresse den samme, derfor sender du * beskeder tilbage til denne skitse. */ myRemoteLocation = ny NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// læs en byte fra den serielle port: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // bede om mere println ("starter …"); pause; case startChar: incoming = ""; pause; case endChar: messageArrived = true; // println ("end of msg"); pause; standard: indgående += inChar; pause; }}

/* indgående osc -besked videresendes til oscEvent -metoden. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // få det 1. osc -argument

IncomingOSCMessage + = "\ n" + String.format ("### modtog en osc -meddelelse:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", værdi); println (IncomingOSCMessage); }

Trin 3: Kode Arduino

Kode Arduino
Kode Arduino

/* Denne kode er en grundlæggende skitse til kommunikation med Processing through Serial.

Det er en blueprint, hvor du kan sætte din egen kode, der er angivet til dine egne knapper, potentiometre eller sensorer.

Det har et håndtryk for at sikre, at vi har kontakt, og det format, som vi kommunikerer i, afgøres

Det er vigtigt at konstruere meddelelsen på samme måde, så Processing ved, hvordan man dekonstruerer det og sender korrekte OSC-meddelelser til vores DAW

lavet til werkcollege AV&IT oktober 2017

kode smooothing oprettet 22. apr 2007 af David A. Mellis ændret 9. apr 2012 af Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// tid til at vente i ms mellem afstemninger til benene const int loopPauseTime = 200; // milli sekunder

// start- og slutværdier for meddelelsen sendt på Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // rate van udglatning

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

// andre globale variabler int buttonState1 = 0; int buttonState2 = 0; // variabel til aflæsning af trykknapstatus float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// udjævning af int aflæsninger [numReadings]; // aflæsningerne fra den analoge indgang int readIndex3 = 0; // indekset for den aktuelle læsning int total3 = 0; // det løbende samlede float -gennemsnit3 = 0; // gennemsnittet

// Vi har brug for denne funktion for at etablere kontakt med behandlingsskitsen // Hold den her ugyldig etablContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // send en forkælelse og vent på et svar … forsinkelse (loopPauseTime); } Serial.read (); }

void setup () {// indstil pinModes for alle pins pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// initialiser Serial comms Serial.begin (baudRate); mens (! Seriel); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// vent på håndtryk etablereContact (); }

void loop () {// poll alle stifterne og tilknyt læsningen til det relevante område buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// kortlægning af indgående værdier til nødvendige værdier 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);

// udjævningssensor: total3 = total3 - aflæsninger [readIndex3]; // læst fra sensoren: aflæsninger [readIndex3] = sensorValue3; // tilføj læsningen til totalet: total3 = total3 + aflæsninger [readIndex3]; // gå videre til den næste position i arrayet: readIndex3 = readIndex3 + 1;

// hvis vi er i slutningen af arrayet … if (readIndex3> = numReadings) {//… vikle rundt til begyndelsen: readIndex3 = 0; } // beregne gennemsnittet: average3 = (total3 / numReadings); // udjævningssensor

Serial.print (startString); // start en meddelelsessekvens // wirte alt navn, værdipar, adskilt med kommaer 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 (gennemsnit3/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 slutningen af meddelelsen Serial.print (endString);

// vent lidt..

forsinkelse (loopPauseTime); }

Trin 4: Reaper

Reaper
Reaper

Trin 1: Gå over til indstillinger> Præferencer

Trin 2: Gå til præferencer til Control/OSC/web og tryk på Tilføj

Trin 3: Vælg mellem kontroloverfladetilstand til OSC (åben lydkontrol)

Trin 4: Vul dit enhedsnavn i, vink Modtag en port til en vul i, hvad der behandles hos Sendport staat

Trin 5: Kopier host -IP'en, som du kan se og se denne i behandling

Stap 6: Tryk på ok en de controller is no verbonden with Reaper

Trin 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Længde: 90 mm

Højde 30 mm

Knoppen: 16 mm (diameter

Potentiometer: 3 mm (diameter)

Afstandssensor: Breedte 2,9 mm

Længde 0,8 mm

Materiale: MDF (3 mm)

Trin 6: Elektronik

Trin 1:

Tilslutning til jorden og 5 volt af Arduino med brødbræt

Trin 2:

Forbindelsesstift A0 med potentio 1

Forbindelsespind A1 med potentio 2

Verbindingsstift A3 med infrarød sensor.

Forbindelsespind A2 med den ikke -klæbende knap.

Forbindelsesnål A5 med den klæbrige knap.

Trin 7: Medarbejdere

Læger
Læger

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Anbefalede: