Sadržaj:

Retro kontroler: 7 koraka
Retro kontroler: 7 koraka

Video: Retro kontroler: 7 koraka

Video: Retro kontroler: 7 koraka
Video: ВИТЯ КАРАСЕВ / УЮТНЫЙ ПОДВАЛЬЧИК / ОЧЕНЬ МНОГО ВИДЕОИГР / АРКАДНЫЙ АВТОМАТ 2024, Studeni
Anonim
Retro kontroler
Retro kontroler

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 kaseta, ons doel was om een controller te maken dat lijkt op een cassette.

Korak 1: Wat Heb Je Nodig?

Što je Heb Je Nodig?
Što je Heb Je Nodig?

Komponenta

- 2 gumba;

- 2 potenciometra;

- 2 weerstanden (1K losa);

- Arduino uno/nano

- Draadjes (zie elektronisch shema)

- Soldeerplaat

- MDF ploča

Alati

- Laserski rezač

- Kniptang

- Striptang

- Soldeerbout (met lim)

Programi

- Ilustrator/indesign (Tekenprogramma)

- Žetelica

- Obrada

- Arduino

Korak 2: Obrada koda

Obrada koda
Obrada koda

/**

* Osnovna skica za primanje serijskih poruka s Arduina * i prevodi ih u OSC poruke za Reaper * * Morat ćete prilagoditi KORISNIČKE PARAMETRE * i morat ćete instalirati knjižnicu: oscP5 * * izrađeno za werkcollege AV&IT * by annoo bob eddi * oct 2017 * *////////////////////// KORISNIČKI PARAMETRI ////////////////////// ////////

/ provjerite koristite li istu brzinu prijenosa u konačnoj skici Arduina int baudRate = 115200;

// Idite i potražite IP adresu u Reaper-u kada koristite OSC // Ovo je adresa koju Processing šalje i Reaper sluša. // Ovdje unesite ovaj niz u remoteIP.

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

final String remoteIP = "vul hier ip in gevonden in žetelica";

// Uzmite u obzir sendPort i ispunite ovo u Reaper -u. // Ovo je port koji Processing šalje i Reaper sluša.

završni int listenPort = 11000, sendPort = 12000;

// ListenPort ovdje služi za aktivno ispravljanje pogrešaka.

// portNames su tu i za ispravljanje pogrešaka.

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

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

/////////////////////// KRAJ KORISNIČKIH PARAMETRA /////////////////////////// ////

uvoz obrada.serial.*; uvoz java.util.*;

uvoz oscP5.*; uvoz netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serijski commsPort; // Logička poruka serijskog portaArrived = false;

Niz incoming = "", IncomingOSCMessage = "";

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

// Kako bismo bili sigurni da šaljemo samo parametre (vrijednosti) koji se mijenjaju // ove globalne varijable su ovdje delcared, ali // ne smiju biti inicijalizirane ovdje! HashMap oldParams, newParams, toSendParams;

// Moramo podijeliti poruku pri svakom zarezu void processIncoming () {String resVec = incoming.split (","); // dobivamo parove ime+vrijednost // pa za svako ime (+2) … pokušajte {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // stavljamo ih u novu Hashtable newParams.put (resVec , vrijednost); }} // ako dođe do pogreške, uhvatimo je na ekranu i izađimo. catch (Izuzetak ex) {println ("Poruka iznimke:" + ex); printArray (resVec); Izlaz(); }}

// Za filtriranje naših poruka/ * Provjeravamo da li postoji samo poruka o izlazu s OSC-a kada se * promijeni ulazna poruka (serijska) * To jest: ako okrenemo/pritisnemo gumb i promijeni vrijednost. * Stoga filtriramo dolazne vrijednosti koje se zapravo mijenjaju * Napomena: nećemo izbjeći preskakanje vrijednosti * koje dolaze iz npr. Mjerača ubrzanja ili senzora udaljenosti * morat ćete ih sami izgladiti u Arduinu */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// ako je ključ već prisutan ako (oldParams.containsKey (key)) {// ključ prisutan i vrijednost nije ista, tada ažurirajte if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ključ nije prisutan u starim parama, pa to recite! toSendParams.put (key, newParams.get (key)); } oldParams.put (ključ, newParams.get (ključ)); }}

void makeOSC () {for (String ključ: toSendParams.keySet ()) {OscMessage myMessage = novi OscMessage ("/"+ ključ); myMessage.add (toSendParams.get (ključ)); / * pošaljite poruku */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Kad želimo ispisati u prozor void ShowIncoming () {// da vidimo dolaznu poruku, kako je postavljeno u tekstu HashMap -a ("Dolazno s Arduina", 20, 20); int y = 20; for (Ključni niz: newParams.keySet ()) {y = y+20; tekst (ključ, 20, y); text (newParams.get (key), 300, y); }}

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

void setup () {veličina (1000, 800); // Ispunjavanje veličine stupnja (255); pozadina (0); oldParams = novi HashMap (); newParams = novi HashMap (); // printArray (Serial.list ()); commsPort = novi serijski (ovaj, naziv porta, baudRate);

/ * pokretanje oscP5, osluškivanje dolaznih poruka */ oscP5 = novi OscP5 (ovaj, listenPort);

/* myRemoteLocation je NetAddress. NetAddress uzima 2 parametra, * IP adresu i broj porta. myRemoteLocation koristi se kao parametar u * oscP5.send () pri slanju osc paketa na drugo računalo, uređaj, * aplikaciju. korištenje vidi dolje. za potrebe testiranja, port za slušanje * i port za adresu udaljene lokacije su isti, stoga ćete * slati poruke natrag na ovu skicu. */ myRemoteLocation = nova NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// čitanje bajta sa serijskog porta: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // tražiti više println ("pokretanje …"); pauza; case startChar: incoming = ""; pauza; slučaj endChar: messageArrived = true; // println ("kraj poruke"); pauza; zadano: dolazni += inChar; pauza; }}

/* dolazne osc poruke prosljeđuju se oscEvent metodi. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // dobiti 1. osc argument

DolaznaOSCMessage + = "\ n" + String.format ("### je primila osc poruku:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vrijednost); println (DolaznaOSCMessage); }

Korak 3: Kod Arduino

Kod Arduino
Kod Arduino

/* Ovaj kôd je osnovna skica za komunikaciju s Obrada putem serijskog.

To je nacrt u koji možete staviti vlastiti kôd naveden za vlastite gumbe, potenciometre ili senzore.

Ima rukovanje kako bi bili sigurni da imamo kontakt i da je odlučen format u kojem komuniciramo

Važno je konstruirati poruku na isti način, tako da Obrada zna kako je dekonstruirati i poslati ispravne OSC-poruke našem DAW-u

napravljeno za werkcollege AV&IT listopada 2017

code smooothing stvorio 22. travnja 2007. David A. Mellis izmijenio 9. travnja 2012. Tom Igoe

*/

/ brzina prijenosa const long baudRate = 115200;

// vrijeme čekanja u ms između anketa na pinove const int loopPauseTime = 200; // mili sekundi

// početne i završne vrijednosti za poruku poslanu na Serijski const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // ocijeniti van smoothing

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

// ostale globalne varijable int buttonState1 = 0; int buttonState2 = 0; // varijabla za čitanje tipke plutajućeg stanja tipkeValue1 = 0; osjetnik plovkaVrijednost2 = 0; osjetnik plovkaVrijednost3 = 0;

// zaglađivanje int očitanja [numReadings]; // očitanja s analognog ulaza int readIndex3 = 0; // indeks trenutnog očitanja int total3 = 0; // tekući ukupni plutajući prosjek3 = 0; // prosječno

// Potrebna nam je ova funkcija za uspostavljanje kontakta sa skicom Obrada // Zadržite je ovdje void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // poslati znak i čekati odgovor … kašnjenje (loopPauseTime); } Serial.read (); }

void setup () {// postavite pinModes za sve pinove pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicijaliziranje serijskih poruka Serial.begin (baudRate); while (! Serijski); // zaglađivanje za (int thisReading = 0; thisReading <numReadings; thisReading ++) {čitanja [thisReading] = 0; }

// čekati rukovanje installContact (); }

void loop () {// anketirajte sve pinove i preslikajte očitanje u odgovarajući raspon buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// preslikavanje ulaznih vrijednosti na potrebne vrijednosti 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);

// senzor za zaglađivanje: ukupno3 = ukupno3 - očitanja [readIndex3]; // očitavanje sa senzora: očitanja [readIndex3] = sensorValue3; // dodamo očitanje ukupnom zbroju: ukupno3 = ukupno3 + očitanja [readIndex3]; // prelazak na sljedeću poziciju u nizu: readIndex3 = readIndex3 + 1;

// ako smo na kraju niza … if (readIndex3> = numReadings) {// … premotajte na početak: readIndex3 = 0; } // izračunaj prosjek: average3 = (total3 / numReadings); // senzor za izglađivanje

Serial.print (startString); // započinje niz poruka // zapisuje sve parove imena, vrijednosti, odvojene zarezima 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.ispis (prosjek3/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);

// upis kraja poruke Serial.print (endString);

// Čekaj malo..

kašnjenje (loopPauseTime); }

Korak 4: Žetelica

Žetelac
Žetelac

Korak 1: Opcije> Preferencije

Korak 2: Ga u preferencijama na Control/OSC/web en druk op Dodaj

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

Korak 4: Vul je naziv uređaja u, vink Primi na portu aan en vul u satu za obradu pošaljite Sendport staat

Korak 5: IP adresa domaćina koja se nalazi u procesu obrade

Korak 6: Druk op ok en kontroler nije nužno podređen metlu Reaper

Korak 5: Behuizing

Behuizing
Behuizing

Raspon: 170 mm

Duljina: 90 mm

Promjer 30 mm

Knoppen: 16 mm (promjer

Potenciometri: 3 mm (promjer)

Senzor stabilnosti: Breedte 2,9 mm

Duljina 0,8 mm

Materijal: MDF (3 mm)

Korak 6: Elektronica

Korak 1:

Verbind de ground en 5 volt van Arduino sastavio se s matičnom pločom

Korak 2:

Verbind pin A0 met potencio 1

Verbind pin A1 met potencio 2

Verbind pin A3 s infracrvenim senzorom.

Verbind pin A2 met de niet sticky button.

Verbind pin A5 sa ljepljivom tipkom.

Korak 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Preporučeni: