Obsah:

Retro ovladač: 7 kroků
Retro ovladač: 7 kroků

Video: Retro ovladač: 7 kroků

Video: Retro ovladač: 7 kroků
Video: Mawarův drsný sparing s přítelkyní 2024, Listopad
Anonim
Retro ovladač
Retro ovladač

Více informací naleznete v části Multimédia a komunikační technologie (Multec) a Erasmushogeschool v Bruseli.

Samen hebben we een muziek controller gemaakt dat muziek can starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.

Ons idee kwam van van een cassette, ons doel was om een controller te maken dat lijkt op een cassette.

Krok 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponenti

- 2 tlačítka;

- 2 potenciometry;

- 2 weerstanden (1K los);

- Arduino uno/nano

- Draadjes (zie elektronické schéma)

- Soldeerplaat

- MDF deska

Nástroje

- Laserový řezač

- Kniptang

- Striptang

- Soldeerbout (met cín)

Programy

- Ilustrátor/indesign (Tekenprogramma)

- Žací stroj

- Zpracovává se

- Arduino

Krok 2: Zpracování kódu

Zpracování kódu
Zpracování kódu

/**

* Základní skica pro příjem sériových zpráv od Arduina * a překládá je do zpráv OSC pro Reaper * * Budete muset upravit UŽIVATELSKÉ PARAMETRY * a budete muset nainstalovat Knihovnu: oscP5 * * vytvořenou pro werkcollege AV&IT * od annoo bob eddi * říjen 2017 * *//////////////////////////// UŽIVATELSKÉ PARAMETRY //////////////////////// ////////

/ ujistěte se, že používáte stejnou přenosovou rychlost v konečném skicu Arduino int baudRate = 115200;

// Jděte a hledejte IP adresu v Reaperu při použití OSC // To je adresa, na kterou Processing posílá a Reaper poslouchá. // Sem vložte tento řetězec do remoteIP.

// final String remoteIP = "192.168.1.43"; //např. "127.0.0.1";

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

// Poznamenejte si sendPort a vyplňte jej v Reaper. // Toto je port, na který Processing posílá a Reaper poslouchá.

konečný int poslouchatPort = 11000, sendPort = 12000;

// ListPort zde slouží k aktivnímu ladění.

// názvy portů jsou zde také k ladění.

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

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

/////////////////////// KONEC UŽIVATELSKÝCH PARAMETRŮ ///////////////////////////// //////

zpracování importu.sériové.*; import java.util.*;

import oscP5.*; import netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Sériový komunikační port; // Sériový port boolean messageArrived = false;

Řetězec incoming = "", IncomingOSCMessage = "";

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

// Abychom se ujistili, že odesíláme pouze parametry (hodnoty), které mění // tyto globální proměnné jsou zde odstraněny, ale neměly by // zde být inicializovány! HashMap oldParams, newParams, toSendParams;

// Zprávu potřebujeme rozdělit při každé čárce neplatné processIncoming () {String resVec = incoming.split (","); // získáme páry název+hodnota // tedy pro každé jméno (+2) … zkuste {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // vložte je do nového Hashtable newParams.put (resVec , hodnota); }} // pokud dojde k chybě, pojďme ji zobrazit a ukončit. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); výstup(); }}

// Filtrování našich zpráv/ * Zajistíme, aby existovala pouze zpráva OSC out, když * se změní vstupní zpráva (sériová) * To znamená: otočíme/stiskneme tlačítko a změní hodnotu. * Odfiltrujeme tedy příchozí hodnoty, které se ve skutečnosti mění * poznámka: nevyhneme se skokovým hodnotám * pocházejícím např. Z akcelerometrů nebo snímačů vzdálenosti * budete je muset vyhladit sami v Arduinu */ void filterParams () {toSendParams = nový HashMap (); for (String key: newParams.keySet ()) {// if the key is already present if (oldParams.containsKey (key)) {// key present and value not the same, then update if (! oldParams.get (key).equals (newParams.get (klíč))) {toSendParams.put (klíč, newParams.get (klíč)); }} else {// klíč ve starých parametrech není, tak to řekněte! toSendParams.put (klíč, newParams.get (klíč)); } oldParams.put (klíč, newParams.get (klíč)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (klíč)); / * poslat zprávu */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filtrParams (); makeOSC (); } // Když chceme vytisknout do okna void ShowIncoming () {//, abychom viděli příchozí zprávu, jak je nastaveno v textu HashMap ("Příchozí z Arduina", 20, 20); int y = 20; pro (Klíč řetězce: newParams.keySet ()) {y = y+20; text (klíč, 20, y); text (newParams.get (klíč), 300, y); }}

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

neplatné nastavení () {velikost (1000, 800); // výplň velikosti plochy (255); pozadí (0); oldParams = nový HashMap (); newParams = new HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * start oscP5, poslech příchozích zpráv */ oscP5 = nový OscP5 (this, listenPort);

/* myRemoteLocation je NetAddress. NetAddress má 2 parametry, * IP adresu a číslo portu. myRemoteLocation se používá jako parametr v * oscP5.send () při odesílání paketů osc do jiného počítače, zařízení, * aplikace. použití viz níže. pro účely testování jsou naslouchací port * a port adresy vzdáleného umístění stejné, a proto budete * posílat zprávy zpět do této skici. */ myRemoteLocation = new NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// načtení bajtu ze sériového portu: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // požádejte o další println („začíná…“); přestávka; případ startChar: incoming = ""; přestávka; case endChar: messageArrived = true; // println ("konec msg"); přestávka; výchozí: příchozí += inChar; přestávka; }}

/* příchozí zprávy osc jsou předávány metodě oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // získejte 1. argument osc

IncomingOSCMessage + = "\ n" + String.format ("### přijal osc zprávu:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", hodnota); println (IncomingOSCMessage); }

Krok 3: Kódujte Arduino

Kód Arduino
Kód Arduino

/* Tento kód je základní skica pro komunikaci se zpracováním přes sériový port.

Jedná se o plán, do kterého můžete vložit vlastní kód určený pro vlastní tlačítka, potenciometry nebo senzory.

Má to handshake, abychom se ujistili, že máme kontakt, a je rozhodnuto o formátu, ve kterém komunikujeme

Je důležité sestavit zprávu stejným způsobem, aby Processing věděl, jak ji dekonstruovat a odeslat správné zprávy OSC do našeho DAW

vyrobeno pro werkcollege AV&IT říjen 2017

vyhlazování kódu vytvořil 22. dubna 2007 David A. Mellis upravil 9. dubna 2012 Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// doba čekání v ms mezi hlasováním na piny const int loopPauseTime = 200; // milisekund

// počáteční a koncové hodnoty pro zprávu odeslanou na Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; tlačítko const int Pin2 = 5; const int numReadings = 5; // ohodnoťte vyhlazení dodávky

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

// ostatní globální proměnné int buttonState1 = 0; int buttonState2 = 0; // proměnná pro čtení stavu tlačítka float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// vyhlazování int čtení [numReadings]; // hodnoty z analogového vstupu int readIndex3 = 0; // index aktuálního čtení int total3 = 0; // běžící celkový float average3 = 0; // průměrný

// Tuto funkci potřebujeme k navázání kontaktu s náčrtem Zpracování // Ponechat jej zde neplatný ustavitContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // pošlete znak a počkejte na odpověď… zpoždění (loopPauseTime); } Serial.read (); }

void setup () {// nastavení pinModes pro všechny piny pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicializace Serial comms Serial.begin (baudRate); while (! Serial); // vyhlazování pro (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// počkejte na handshake navázatContact (); }

void loop () {// vyzvednutí všech pinů a namapování čtení na příslušný rozsah buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// mapování příchozích hodnot na potřebné hodnoty sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = mapa (sensorValue2, 0, 1023, 0,0, 100) /100,0; sensorValue3 = mapa (sensorValue3, 0, 700, 50, 100);

// čidlo vyhlazování: total3 = total3 - naměřené hodnoty [readIndex3]; // čtení ze senzoru: readings [readIndex3] = sensorValue3; // přičtení hodnoty k součtu: total3 = total3 + čtení [readIndex3]; // postup na další pozici v poli: readIndex3 = readIndex3 + 1;

// pokud jsme na konci pole… if (readIndex3> = numReadings) {//… zaokrouhlíme na začátek: readIndex3 = 0; } // vypočítat průměr: average3 = (total3 / numReadings); // vyhlazovací senzor

Serial.print (startString); // spuštění posloupnosti zpráv // wirte všechny názvy, páry hodnot, oddělené čárkami Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print („infračervený senzor“); Serial.print (","); Serial.print (průměr3/100); Serial.print (",");

Serial.print ("knop 1 in2 vtip"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);

// napište konec zprávy Serial.print (endString);

// Počkej chvíli..

zpoždění (loopPauseTime); }

Krok 4: Reaper

Žací stroj
Žací stroj

Krok 1: Ga bovenaan naar Options> Prefrences

Stap 2: Ga in prefrences naar Control/OSC/web en druk op Add

Stap 3: Kies bij Ovládací povrchový režim nebo OSC (Open Sound Control)

Krok 4: Vul je název zařízení, vink Recieve na port aan en vul in wat er in processing bij Sendport staat

Krok 5: Kopie IP hostitele je ve zpracování zpracována

Krok 6: Druk op ok en de controller is nu verbonden met Reaper

Krok 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Délka: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (průměr

Potenciometry: 3 mm (průměr)

Senzor Afstand: Breedte 2,9 mm

Délka 0,8 mm

Materiál: MDF (3 mm)

Krok 6: Elektronika

Krok 1:

Verbind de ground en 5 volt van Arduino met het breadboard

Krok 2:

Verbind pin A0 met potentio 1

Verbind pin A1 met potentio 2

Verbind pin A3 met infrarood sensor.

Verbind pin A2 met de niet sticky button.

Verbind pin A5 met de lepivé tlačítko.

Krok 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Doporučuje: