Innehållsförteckning:
- Steg 1: Wat Heb Je Nodig?
- Steg 2: Kodbehandling
- Steg 3: Kod Arduino
- Steg 4: Reaper
- Steg 5: Behuizing
- Steg 6: Elektronica
- Steg 7: Medarbetare
Video: Retro Controller: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
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?
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
/**
* 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
/* 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
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
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
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Rekommenderad:
Retro Arcade - (Full Size Powered by Raspberry Pi): 8 steg
Retro Arcade - (Full Size Powered by Raspberry Pi): Först ville jag tacka dig för att du tittade på byggguiden för detta Retro Arcade -system. Jag tar en äldre arkadlåda och placerar den i ett fristående skåp med en 24-tums widescreen-skärm. Mätningarna på den här guiden är grova att ge dig
Retro "Rayotron" nattlampa (del 1): 16 steg
Retro "Rayotron" nattlampa (del 1): Introduktion I december 1956 annonserade Atomic Laboratories Rayotron som "Första lågkostnadselektrostatiska generator och partikelaccelerator" för vetenskapslärare och amatörer [1]. Rayotron var en överdimensionerad, gummibältsladdad,
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
YABC - Yet Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: 4 Steps
YABC - Yet Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: Hej Makers, jag började nyligen odla svamp hemma, Ostron svamp, men jag har redan 3x av dessa kontroller hemma för Fermenter Temperaturkontroll för mitt hem brygga, fru gör också det här Kombucha nu, och som termostat för värme
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 steg (med bilder)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): Jag slog helt bort ryan97128 på hans design för Nintendo Controller MP3, version 2.0 och jag hör att han fick idén från den kloka Morte_Moya, så jag kan inte ta åt mig äran för allt deras geni. Jag ville bara lägga till bekvämligheten och ladda