Kazalo:

Retro krmilnik: 7 korakov
Retro krmilnik: 7 korakov

Video: Retro krmilnik: 7 korakov

Video: Retro krmilnik: 7 korakov
Video: Repertoire: The BEST Shostakovich Symphony No. 7 "Leningrad" 2024, November
Anonim
Retro krmilnik
Retro krmilnik

Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

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

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

1. korak: Wat Heb Je Nodig?

Kaj je Heb Je Nodig?
Kaj je Heb Je Nodig?

Sestavni del

- 2 gumba;

- 2 potenciometra;

- 2 werstanden (1K losa);

- Arduino uno/nano

- Draadjes (zie elektronisch shema)

- Soldeerplaat

- plošča iz MDF

Orodja

- Laserski rezalnik

- Kniptang

- Striptang

- Soldeerbout (met kositer)

Programi

- Ilustrator/indesign (Tekenprogramma)

- Razparač

- Obravnavati

- Arduino

2. korak: Obdelava kode

Obdelava kode
Obdelava kode

/**

* Osnovna skica za sprejemanje serijskih sporočil iz Arduina * in jih prevede v sporočila OSC za Reaper * * Prilagoditi morate PARAMETRE UPORABNIKA * in namestiti morate knjižnico: oscP5 * * izdelano za werkcollege AV&IT * by annoo bob eddi * oktober 2017 * *////////////////////// PARAMETRI UPORABNIKOV //////////////////// ////////

/ poskrbite, da boste v svoji skici Arduino skici uporabili enako hitrost prenosa int baudRate = 115200;

// Pojdite in poiščite naslov IP v Reaperju pri uporabi OSC // To je naslov, ki ga Processing pošlje in Reaper posluša. // Tukaj vnesite ta niz v remoteIP.

// končni niz oddaljen IP = "192.168.1.43"; // npr. "127.0.0.1";

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

// Zapomnite si sendPort in ga vnesite v Reaper. // To so vrata, ki jih Processing pošlje in Reaper posluša.

končni int listenPort = 11000, sendPort = 12000;

// Tu je poslušalnik za aktivno odpravljanje napak.

// tudi imena portov so za odpravljanje napak.

final String portName = "ime hi porta v gevondenu v Arduinu";

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

/////////////////////// KONEC PARAMETROV UPORABNIKOV /////////////////////////// ////

uvozna obdelava.serial.*; uvoz java.util.*;

uvoz oscP5.*; uvoz netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serijski commsPort; // Logično sporočilo serijskih vratArrived = false;

Niz incoming = "", IncomingOSCMessage = "";

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

// Da bi zagotovili, da pošiljamo samo parametre (vrednosti), ki se spreminjajo // so te globalne spremenljivke tukaj ločene, vendar jih // ne smemo inicializirati! HashMap oldParams, newParams, toSendParams;

// Sporočilo moramo razdeliti pri vsakem vejici void processIncoming () {String resVec = incoming.split (","); // dobimo pare+ime/ vrednost // torej za vsako ime (+2)… poskusimo {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // jih postavimo v novo Hashtable newParams.put (resVec , vrednost); }} // če pride do napake, naj jo prikažemo in zapustimo. catch (Izjema ex) {println ("Sporočilo o izjemi:" + ex); printArray (resVec); exit (); }}

// Za filtriranje naših sporočil/ * Prepričamo se, da obstaja samo sporočilo o izhodu OSC, ko se * vhodno sporočilo (serijsko) spremeni * To pomeni: če gumb obrnemo/pritisnemo in spremeni vrednost. * Zato filtriramo dohodne vrednosti, ki se dejansko spremenijo * opomba: ne bomo se izognili preskakovanju vrednosti *, ki prihajajo iz npr. Merilnikov pospeška ali senzorjev razdalje *, ki jih boste morali sami zgladiti v Arduinu */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// če je ključ že prisoten, če (oldParams.containsKey (key)) {// ključ je prisoten in vrednost ni enaka, nato posodobite if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ključ ni prisoten v starih paramih, zato povejte! toSendParams.put (ključ, newParams.get (ključ)); } oldParams.put (ključ, newParams.get (ključ)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ ključ); myMessage.add (toSendParams.get (ključ)); / * pošlji sporočilo */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Ko želimo tiskati v okno void ShowIncoming () {// za prikaz dohodnega sporočila, kot je nastavljeno v besedilu HashMap ("Incoming from Arduino", 20, 20); int y = 20; for (Niz ključa: newParams.keySet ()) {y = y+20; besedilo (ključ, 20, y); besedilo (newParams.get (key), 300, y); }}

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

void setup () {velikost (1000, 800); // Zapolnitev velikosti stopnje (255); ozadje (0); oldParams = nov HashMap (); newParams = nov HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * zaženite oscP5, poslušajte dohodna sporočila */ oscP5 = novi OscP5 (to, listenPort);

/* myRemoteLocation je NetAddress. NetAddress sprejme 2 parametra, * naslov ip in številko vrat. myRemoteLocation se uporablja kot parameter v * oscP5.send () pri pošiljanju paketov osc v drug računalnik, napravo, * aplikacijo. uporabo glejte spodaj. za namene testiranja so vrata za poslušanje * in vrata naslova oddaljene lokacije enaka, zato boste sporočila * poslali nazaj na to skico. */ myRemoteLocation = nov NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// branje bajta s serijskih vrat: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // zahtevaj več println ("zagon …"); prekiniti; primer startChar: incoming = ""; prekiniti; primer endChar: messageArrived = true; // println ("konec sporočila"); prekiniti; privzeto: dohodni += inChar; prekiniti; }}

/* dohodno sporočilo osc se posreduje metodi oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // dobimo 1. osc argument

IncomingOSCMessage + = "\ n" + String.format ("### je prejel osc sporočilo:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vrednost); println (IncomingOSCMessage); }

Korak: Koda Arduino

Koda Arduino
Koda Arduino

/* Ta koda je osnovna skica za komunikacijo z Processing through Serial.

To je načrt, v katerega lahko vnesete svojo kodo, določeno za vaše gumbe, potenciometre ali senzorje.

Rokovanje mora zagotoviti, da imamo stik, in določi obliko, v kateri komuniciramo

Pomembno je, da se sporočilo oblikuje na enak način, tako da ga obdelava zna razgraditi in poslati ustrezna sporočila OSC v naš DAW

narejeno za werkcollege AV&IT okt 2017

code smooothing 22. aprila 2007 ustvaril David A. Mellis, 9. aprila 2012 spremenil Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// čas čakanja v ms med anketami na nožice const int loopPauseTime = 200; // mili sekund

// začetne in končne vrednosti sporočila, poslanega na zaporedni const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // oceni poravnavo kombija

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

// druge globalne spremenljivke int buttonState1 = 0; int buttonState2 = 0; // spremenljivka za branje stanja tipke float sensorValue1 = 0; plavajoči senzorValue2 = 0; plavajoči senzorValue3 = 0;

// glajenje int odčitkov [numReadings]; // odčitki iz analognega vhoda int readIndex3 = 0; // indeks trenutnega odčitka int total3 = 0; // tekoče skupno plavajoče povprečje3 = 0; // povprečje

// To funkcijo potrebujemo za vzpostavitev stika s skico Processing // Naj bo tukaj void. // pošljemo char in počakamo na odgovor… delay (loopPauseTime); } Serial.read (); }

void setup () {// nastavite pinModes za vse zatiče pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicializiramo zaporedne komunikacije Serial.begin (baudRate); while (! Serijski); // glajenje za (int thisReading = 0; thisReading <numReadings; thisReading ++) {odčitki [thisReading] = 0; }

// počakajte na rokovanje installContact (); }

void loop () {// poiščite vse zatiče in preslikajte odčitke v ustrezen obseg buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalno branje (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (hitrost branja); sensorValue3 = analogRead (infraReading);

// preslikava vhodnih vrednosti na potrebne vrednosti sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = zemljevid (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = zemljevid (sensorValue3, 0, 700, 50, 100);

// glajenje senzorja: total3 = total3 - odčitki [readIndex3]; // branje s senzorja: odčitki [readIndex3] = sensorValue3; // dodamo odčitavanje k skupni vrednosti: total3 = total3 + odčitki [readIndex3]; // premaknemo se na naslednji položaj v matriki: readIndex3 = readIndex3 + 1;

// če smo na koncu matrike… if (readIndex3> = numReadings) {//… zavijemo na začetek: readIndex3 = 0; } // izračunamo povprečje: average3 = (total3 / numReadings); // glajenje senzorja

Serial.print (startString); // zažene zaporedje sporočil // zapiše vsa imena, vrednosti parov, ločenih z vejicami Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("infra-senzor"); Serial.print (","); Serijski.tisk (povprečno 3/100); Serial.print (",");

Serial.print ("knop 1 in 2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);

// napišemo konec sporočila Serial.print (endString);

// malo počakaj..

zakasnitev (loopPauseTime); }

4. korak: Žetev

Razparač
Razparač

1. korak: Možnosti> Prednostne nastavitve

2. korak: Ga v preferencah naar Control/OSC/web en druk op Dodaj

Korak 3: Kies bij Control surface mode za OSC (Open Sound Control)

4. korak: Vul je ime naprave v, vink Pridobite na portu aan en vul v urah pri obdelavi bij Sendport staat

5. korak: Kopieer de Host IP je na voljo v obdelavi

Korak 6: Druk je v redu in krmilnik ni več na voljo z Reaperjem

5. korak: Behuizing

Behuizing
Behuizing

Premer: 170 mm

Dolžina: 90 mm

Premer 30 mm

Knoppen: 16 mm (premer)

Potenciometri: 3 mm (premer)

Senzor stabilnosti: premer 2,9 mm

Dolžina 0,8 mm

Material: MDF (3 mm)

6. korak: Elektronika

1. korak:

Verbind de ground en 5 -voltni van Arduino se je srečal s ploščo

2. korak:

Verbind pin A0 met potencio 1

Verbind pin A1 met potencio 2

Verbind pin A3 z infrarood senzorjem.

Verbind pin A2 z de niet lepljivim gumbom.

Verbind pin A5 z lepljivim gumbom.

7. korak: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Priporočena: