Innholdsfortegnelse:
- Trinn 1: Wat Heb Je Nodig?
- Trinn 2: Kodebehandling
- Trinn 3: Kode Arduino
- Trinn 4: Reaper
- Trinn 5: Behuizing
- Trinn 6: Elektronikk
- Trinn 7: Medarbeidere
Video: Retro kontroller: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Vi er våre første år studenter fra utdannelsen Multimedia & Communicatietechnology (Multec) aan de Erasmushogeschool Brussel.
Samme har vi en musikkontroller som gjør at musikk kan starte/stoppe, den kan overføre, komme tilbake og mer.
Vår idé kom fra en kassett, og målet var å kontrollere en kassett.
Trinn 1: Wat Heb Je Nodig?
Komponent
- 2 knapper;
- 2 potensiometer
- 2 weerstanden (1K elg);
- Arduino uno/nano
- Draadjes (zie elektronisk skjema)
- Soldeerplaat
- MDF -plate
Verktøy
- Laserkutter
- Kniptang
- Striptang
- Soldeerbout (met tin)
Programmer
- Illustrator/indesign (Tekenprogram)
- Reaper
- Behandling
- Arduino
Trinn 2: Kodebehandling
/**
* Grunnleggende skisse for å motta serielle meldinger fra Arduino * og oversette dem til OSC-meldinger for Reaper * * Du må tilpasse BRUKERPARAMETRE * og du må installere et bibliotek: oscP5 * * laget for werkcollege AV&IT * av annoo bob eddi * okt 2017 * */////////////////////// USER PARAMETERS ////////////////////// //////////
/ sørg for at du bruker den samme overføringshastigheten i Arduino sketch siste int baudRate = 115200;
// Gå og se etter IP-adressen i Reaper når du bruker OSC // Dette er adressen Behandlingen sender til og Reaper lytter til. // Sett denne strengen 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";
// Legg merke til sendPort og fyll ut dette i Reaper. // Dette er porten Processing sender til og Reaper lytter til.
siste int listenPort = 11000, sendPort = 12000;
// ListenPort her er for å feilsøke aktivt.
// portnavnene er også her for å feilsøke.
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;
Seriell commsPort; // Den boolske meldingen Serial portArrived = false;
String incoming = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// For å være sikker på at vi bare sender parametrene (verdiene) som endres // er disse globale variablene delcared her, men bør // ikke initialiseres her! HashMap oldParams, newParams, toSendParams;
// Vi må dele meldingen ved hvert komma -tomrom processIncoming () {String resVec = incoming.split (","); // vi får navn+verdi par // så for hvert navn (+2) … prøv {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // legg dem i den nye Hashtable newParams.put (resVec , verdi); }} // // hvis det oppstår en feil, la oss få den vist og gå ut. catch (Unntak eks) {println ("Unntaksmelding:" + eks); printArray (resVec); exit(); }}
// For å filtrere meldingene våre/ * Vi sørger for at det bare er en OSC-utmelding når * inndatameldingen (seriell) endres * Det vil si: hvis vi snur/trykker på knappen og den endrer verdi. * Så vi filtrerer ut de innkommende verdiene som faktisk endres * merk: vi vil ikke unngå hoppverdier * som kommer fra f.eks. Akselerometre eller avstandssensorer * du må glatte dem selv i Arduino */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// hvis nøkkelen 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økkelen er ikke tilstede i gamle params, så si det! toSendParams.put (key, newParams.get (key)); } oldParams.put (nøkkel, newParams.get (nøkkel)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (nøkkel)); / * send meldingen */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Når vi vil skrive ut til vinduet, ugyldig ShowIncoming () {// for å se innkommende melding, som angitt i HashMap -teksten ("Incoming from Arduino", 20, 20); int y = 20; for (strengnøkkel: newParams.keySet ()) {y = y+20; tekst (nøkkel, 20, y); tekst (newParams.get (nøkkel), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
ugyldig oppsett () {størrelse (1000, 800); // Fylling av scenestørrelse (255); bakgrunn (0); oldParams = nytt HashMap (); newParams = nytt HashMap (); // printArray (Serial.list ()); commsPort = new Serial (dette, portnavn, baudRate);
/ * start oscP5, lytt etter innkommende meldinger */ oscP5 = ny OscP5 (dette, listenPort);
/* myRemoteLocation er en NetAddress. en NetAddress tar to parametere, * en ip -adresse og et portnummer. myRemoteLocation brukes som parameter i * oscP5.send () når du sender osc -pakker til en annen datamaskin, enhet, * applikasjon. bruk se nedenfor. For testformål er lytteporten * og porten til den eksterne posisjonsadressen den samme, derfor vil du * sende meldinger tilbake til denne skissen. */ myRemoteLocation = ny NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {bakgrunn (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// les en byte fra serieporten: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // be om mer println ("starter …"); gå i stykker; case startChar: incoming = ""; gå i stykker; case endChar: messageArrived = true; // println ("end of msg"); gå i stykker; standard: innkommende += inChar; gå i stykker; }}
/* innkommende osc -melding videresendes til oscEvent -metoden. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // få det første osc -argumentet
IncomingOSCMessage + = "\ n" + String.format ("### mottok en osc -melding:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", verdi); println (IncomingOSCMessage); }
Trinn 3: Kode Arduino
/* Denne koden er en grunnleggende skisse for å kommunisere med Processing through Serial.
Det er en blåkopi der du kan sette din egen kode spesifisert for dine egne knapper, potensiometre eller sensorer.
Den har et håndtrykk for å sikre at vi har kontakt, og formatet vi kommuniserer i er bestemt
Det er viktig å konstruere meldingen på samme måte, slik at Processing vet hvordan de skal dekonstruere det og sende riktige OSC-meldinger til vår DAW
laget for werkcollege AV&IT oktober 2017
kode smooothing opprettet 22. apr 2007 av David A. Mellis modifisert 9. apr 2012 av Tom Igoe
*/
/ baud rate const long baudRate = 115200;
// tid til å vente i ms mellom meningsmålinger til pinnene const int loopPauseTime = 200; // milli sekunder
// start- og sluttverdier for meldingen som sendes 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 utjevning
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// andre globale variabler int buttonState1 = 0; int buttonState2 = 0; // variabel for avlesning av trykknappstatus float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;
// utjevning av avlesninger [numReadings]; // avlesningene fra den analoge inngangen int readIndex3 = 0; // indeksen for gjeldende lesing int total3 = 0; // det totale flytende gjennomsnittet3 = 0; // den gjennomsnittlige
// Vi trenger denne funksjonen for å opprette kontakt med behandlingsskissen // Hold den her ugyldig etablContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // send en røye og vent på svar … forsinkelse (loopPauseTime); } Serial.read (); }
void setup () {// angi 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 (! Seriell); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }
// vent på håndtrykk etablerContact (); }
void loop () {// poll alle pinnene og kartlegg avlesningen til det aktuelle området buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// kartlegge innkommende verdier til nødvendige verdier 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);
// utjevningssensor: total3 = total3 - avlesninger [readIndex3]; // lese fra sensoren: avlesninger [readIndex3] = sensorValue3; // legg til avlesningen i totalen: total3 = total3 + avlesninger [readIndex3]; // gå videre til neste posisjon i matrisen: readIndex3 = readIndex3 + 1;
// hvis vi er på slutten av matrisen … if (readIndex3> = numReadings) {// … vikle rundt til begynnelsen: readIndex3 = 0; } // beregne gjennomsnittet: gjennomsnitt3 = (total3 / numReadings); // utjevningssensor
Serial.print (startString); // start en meldingssekvens // skrot alle navn, verdipar, atskilt med kommaer Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potensio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("infra-sensor"); Serial.print (","); Serial.print (gjennomsnittlig3/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 slutten av meldingen Serial.print (endString);
// vent en stund..
forsinkelse (loopPauseTime); }
Trinn 4: Reaper
Trinn 1: Gå over til alternativer> Forhåndsinnstillinger
Trinn 2: Gå til kontroll/OSC/web og trykk på Legg til
Trinn 3: Velg mellom kontrolloverflatemodus for OSC (åpen lydkontroll)
Trinn 4: Du kan angi enhetsnavn på, motta en port for en vul i behandling av Sendport -staten
Trinn 5: Kopiér verten IP som du ser og ser denne i behandlingen
Trinn 6: Trykk på ok en the controller is no verbonden with Reaper
Trinn 5: Behuizing
Breedte: 170 mm
Lengde: 90 mm
Høyte 30 mm
Knoppen: 16 mm (diameter
Potensiometer: 3 mm (diameter)
Afstandssensor: Breedte 2,9 mm
Lengde 0,8 mm
Materiale: MDF (3mm)
Trinn 6: Elektronikk
Trinn 1:
Tilkobling til bakken og 5 volt van Arduino med brødbrett
Trinn 2:
Koblingspinne A0 med potensio 1
Forbindelsespinne A1 med potensio 2
Verbindingsnål A3 med infrarød sensor.
Koblingsnål A2 med en ikke -klebrig knapp.
Koblingsnål A5 med klebrig knapp.
Trinn 7: Medarbeidere
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Anbefalt:
Slik installerer, kjører og kobler du en kontroller til en emulator: 7 trinn
Hvordan installere, kjøre og koble en kontroller til en emulator: Har du noen gang sittet og husket barndommen din som en ung spiller, og noen ganger ønsket at du kunne besøke de gamle perlene fra fortiden? Vel, det er en app for det …. nærmere bestemt er det et fellesskap av spillere som lager program
Bygg en Arduino MIDI -kontroller: 5 trinn (med bilder)
Bygg en Arduino MIDI -kontroller: Hei alle sammen! I denne instruksen vil jeg vise deg hvordan du bygger din egen Arduino -drevne MIDI -kontroller. MIDI står for Musical Instrument Digital Interface, og det er en protokoll som lar datamaskiner, musikkinstrumenter og annen maskinvare kommunisere
Kontroller stue med Alexa og Raspberry Pi: 12 trinn
Kontroller stuen med Alexa og Raspberry Pi: Kontroller stuen din TV, lys og vifte med Alexa (Amazon Echo eller Dot) og Raspberry Pi GPIO
Teller og kontroller for MicroBit -rom: 4 trinn
MicroBit Room Occupancy Counter and Controller: Under en pandemi er en måte å redusere overføringen av viruset på å maksimere fysisk avstand mellom mennesker. I rom eller butikker vil det være nyttig å vite hvor mange mennesker som er i det lukkede rommet til enhver tid. Dette prosjektet bruker et par
IOT DMX -kontroller med Arduino og Stage Monster Live: 6 trinn
IOT DMX-kontroller med Arduino og Stage Monster Live: Kontroller scenebelysning og andre DMX-enheter fra telefonen eller en annen nettaktiveret enhet. Jeg viser deg hvordan du raskt og enkelt kan bygge din egen DMX -kontroller som kjører på Stage Monster Live -plattformen ved hjelp av en Arduino Mega