Indholdsfortegnelse:
- Trin 1: Wat Heb Je Nodig?
- Trin 2: Kodebehandling
- Trin 3: Kode Arduino
- Trin 4: Reaper
- Trin 5: Behuizing
- Trin 6: Elektronik
- Trin 7: Medarbejdere
Video: Retro -controller: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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?
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
/**
* 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
/* 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
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
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
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Anbefalede:
Retro Arcade - (fuld størrelse drevet af Raspberry Pi): 8 trin
Retro Arcade - (Fuld størrelse drevet af Raspberry Pi): Først ville jeg takke dig for at have kigget på byggeguiden til dette Retro Arcade -system. Jeg tager en ældre arkadeboks og placerer den i et selvstændigt skab med en 24-tommer widescreen-skærm. Målinger på denne vejledning er grove at give dig
Retro "Rayotron" natlys (del 1): 16 trin
Retro "Rayotron" nattelys (del 1): Introduktion I december 1956 annoncerede Atomic Laboratories Rayotron som "Første lavpris elektrostatisk generator og partikelaccelerator" for naturfagslærere og amatører [1]. Rayotron var en supersized, gummibælte
Retro CP/M Stand Alone Emulator: 8 trin
Retro CP/M Stand Alone Emulator: Dette projekt bruger VGA32 ESP v1.4 -modulet til at køre en kombination eller RunCPM og FabGL til at levere en stand alone computer, der kører et ækvivalent system til CP/M 2.2. Populær i 1980'erne som et operativsystem til små computere. Du kan gå tilbage i
2-Player Stand-Up Retro Arcade af Micro Center: 20 trin
2-Player Stand-Up Retro Arcade af Micro Center: Dit lokale Micro Center indeholder nu alt, hvad du har brug for til at lave dit eget Raspberry Pi-baserede Retro Arcade-kabinet. Sættene kan fuldstændigt tilpasses, inkluderer kabinet, Raspberry Pi, knapper, joysticks, lyd- og videotilbehør og mere. Det
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)