Obsah:

Retro ovládač: 7 krokov
Retro ovládač: 7 krokov

Video: Retro ovládač: 7 krokov

Video: Retro ovládač: 7 krokov
Video: Zigbee LED контроллер C01Z - для диммируемых светильников, обзор и тестирование 2024, Septembra
Anonim
Retro ovládač
Retro ovládač

Viac informácií nájdete v hlavnom článku Multimédiá a komunikácia (Multec) a Erasmushogeschool v Bruseli.

Máme veľa hudobných ovládačov, ktoré môžu spúšťať/zastavovať hudobné súbory, vytvárať rôzne zvuky, vytvárať terény a vytvárať ďalšie zvuky.

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?

Componenten

- 2 tlačidlá;

- 2 potenciometre;

- 2 stojky (1k los);

- Arduino uno/nano

- Draadjes (zie elektronická schéma)

- Soldeerplaat

- MDF doska

Nástroje

- Laserový rezač

- Kniptang

- Striptang

- Soldeerbout (met cín)

Programy

- Ilustrátor/indesign (Tekenprogramma)

- Žnec

- Spracovanie

- Arduino

Krok 2: Spracovanie kódu

Spracovanie kódu
Spracovanie kódu

/**

* Základný náčrt na príjem sériových správ od Arduina * a prekladá ich do správ OSC pre Reaper * * Budete musieť prispôsobiť užívateľské parametre * a budete si musieť nainštalovať knižnicu: oscP5 * * vytvorený pre werkcollege AV&IT * od annoo bob eddi * október 2017 * *//////////////////////////// PARAMETRE UŽÍVATEĽA ////////////////////////// ////////

/ uistite sa, že vo svojej skici Arduino final int baudRate = 115200 použijete rovnakú prenosovú rýchlosť;

// Choďte a hľadajte IP adresu v Reaperi, keď používate OSC // To je adresa, na ktorú Processing pošle a Reaper počúva. // Tu vložte tento reťazec do remoteIP.

// final String remoteIP = "192.168.1.43"; // napr. "127.0.0.1";

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

// Poznačte si sendPort a zadajte ho do Reaper. // Toto je port, na ktorý Processing odosiela a Reaper ho počúva.

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

// ListPort tu má aktívne ladiť.

// názvy portov sú tu aj na ladenie.

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

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

/////////////////////// KONIEC UŽÍVATEĽSKÝCH PARAMETROV // ///////////////////////////// ////

spracovanie 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;

String incoming = "", IncomingOSCMessage = "";

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

// Aby sme sa uistili, že odosielame iba parametre (hodnoty), ktoré menia // tieto globálne premenné sú tu vymazané, ale nemali by byť // tu inicializované! HashMap oldParams, newParams, toSendParams;

// Správu musíme rozdeliť na každú čiarku neplatný processIncoming () {String resVec = incoming.split (","); // dostaneme páry meno+hodnota // takže pre každé meno (+2) … skúste {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // vložte ich do nového Hashtable newParams.put (resVec , hodnota); }} // ak sa vyskytne chyba, zachytíme ju a ukončíme. catch (Exception ex) {println ("Správa o výnimke:" + ex); printArray (resVec); východ(); }}

// Na filtrovanie našich správ/ * Zaisťujeme, aby existovala iba správa s výstupom OSC, keď sa * zmení vstupná správa (sériová) * To znamená: ak otočíme/stlačíme tlačidlo a zmení sa hodnota. * Odfiltrujeme teda prichádzajúce hodnoty, ktoré sa v skutočnosti menia * poznámka: nevyhneme sa skokovým hodnotám *, ktoré pochádzajú napr. Od akcelerometrov alebo senzorov vzdialenosti * budete ich musieť vyhladiť sami v Arduino */ 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 (key))) {toSendParams.put (key, newParams.get (key)); }} else {// kľúč nie je v starých parametroch, tak ho dajte! toSendParams.put (kľúč, newParams.get (kľúč)); } oldParams.put (kľúč, newParams.get (kľúč)); }}

neplatné makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (kľúč)); / * poslať správu */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Keď chceme vytlačiť do okna neplatné ShowIncoming () {//, aby sme videli prichádzajúcu správu, ako je nastavené v texte HashMap („Prichádzajúce z Arduina“, 20, 20); int y = 20; pre (Kľúč reťazca: newParams.keySet ()) {y = y+20; text (kľúč, 20, y); text (newParams.get (kľúč), 300, y); }}

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

void setup () {veľkosť (1000, 800); // výplň veľkosti pódia (255); pozadie (0); oldParams = nový HashMap (); newParams = nový HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * štart oscP5, počúvanie prichádzajúcich správ */ oscP5 = nový OscP5 (this, listenPort);

/* myRemoteLocation je NetAddress. NetAddress má 2 parametre, * IP adresu a číslo portu. myRemoteLocation sa používa ako parameter v * oscP5.send () pri odosielaní paketov osc do iného počítača, zariadenia, * aplikácie. použitie viď nižšie. na testovacie účely sú počúvací port * a port adresy vzdialeného umiestnenia rovnaké, a preto budete * posielať správy späť na tento náčrt. */ myRemoteLocation = nová sieťová adresa (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// načítanie bajtu zo sériového portu: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // požiadajte o viac println („začína …“); prestávka; prípad startChar: incoming = ""; prestávka; case endChar: messageArrived = true; // println ("koniec spravy"); prestávka; predvolené: prichádzajúce += inChar; prestávka; }}

/* prichádzajúce správy osc sú preposlané na metódu oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // získajte 1. argument osc

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

Krok 3: Kódujte Arduino

Kód Arduino
Kód Arduino

/* Tento kód je základným náčrtkom na komunikáciu so sériovým spracovaním.

Je to plán, do ktorého môžete vložiť vlastný kód určený pre vlastné tlačidlá, potenciometre alebo senzory.

Má to podanie ruky, aby sme sa uistili, že máme kontakt, a je rozhodnuté o formáte, v ktorom komunikujeme

Je dôležité zostaviť správu rovnakým spôsobom, aby Processing vedel, ako ju dekonštruovať a odoslať správne správy OSC do nášho DAW.

vyrobené pre Werkcollege AV&IT, október 2017

vyhladzovanie kódu vytvoril 22. apríla 2007 David A. Mellis upravil 9. apríla 2012 Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// čas čakania v ms medzi hlasovaniami na piny const int loopPauseTime = 200; // milisekundy

// počiatočné a koncové hodnoty pre správu odoslanú na Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; tlačidlo const intPin2 = 5; const int numReadings = 5; // ohodnotenie vyhladzovania dodávky

int pitchReading = A1; int speedReading = A2; int infraČítanie = A3;

// ostatné globálne premenné int buttonState1 = 0; int buttonState2 = 0; // premenná na čítanie stavu tlačidla plavákový senzorValue1 = 0; plavákový senzorHodnota2 = 0; plavákový senzorHodnota3 = 0;

// vyhladzovanie int nameran [numReadings]; // hodnoty z analógového vstupu int readIndex3 = 0; // index aktuálneho čítania int total3 = 0; // bežiaci celkový float average3 = 0; // priemerný

// Túto funkciu potrebujeme na nadviazanie kontaktu s náčrtom spracovania // Ponechajte ho tu neplatné estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // odoslanie znaku a čakanie na odpoveď … zdržanie (loopPauseTime); } Serial.read (); }

void setup () {// nastavenie pinModes pre všetky piny pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicializácia Serial comms Serial.begin (baudRate); while (! Serial); // vyhladzovanie pre (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// pockaj na handshake zavedenieContact (); }

void loop () {// dotazovanie všetkých pinov a namapovanie čítania na príslušný rozsah buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// mapovanie prichádzajúcich hodnôt na potrebné hodnoty sensorValue1 = mapa (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);

// snímač vyhladzovania: total3 = total3 - namerané hodnoty [readIndex3]; // čítanie zo senzora: readings [readIndex3] = sensorValue3; // pripočítajte údaje k súčtu: total3 = total3 + namerané hodnoty [readIndex3]; // posun na ďalšiu pozíciu v poli: readIndex3 = readIndex3 + 1;

// ak sme na konci poľa … ak (readIndex3> = numReadings) {// … zabaľte na začiatok: readIndex3 = 0; } // vypočítať priemer: average3 = (total3 / numReadings); // snímač vyhladzovania

Serial.print (startString); // spustenie sekvencie správ // wirte všetky mená, páry hodnôt, oddelené čiarkami 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 (priemer3/100); Serial.print (",");

Serial.print ("knock 1 in2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);

// napíšte koniec správy Serial.print (endString);

// počkajte chvíľu..

oneskorenie (loopPauseTime); }

Krok 4: Žací stroj

Reaper
Reaper

Krok 1: Ga bovenaan naar Options> Prefrences

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

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

Krok 4: Vul je názov zariadenia, vink Recieve on port aan en vul in wat er in processing bij Sendport staat

Krok 5: Kopírovanie hostiteľskej IP adresy je spracované v režime spracovania

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

Krok 5: Behuizácia

Behuizácia
Behuizácia

Breedte: 170 mm

Dĺžka: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (priemer

Potenciometre: 3 mm (priemer)

Senzor Afstand: Breedte 2,9 mm

Dĺžka 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 s infračerveným senzorom.

Verbind pin A2 met de niet sticky button.

Podrobný pin A5 s lepivým tlačidlom.

Krok 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Odporúča: