Sadržaj:

Retro kontroler: 7 koraka
Retro kontroler: 7 koraka

Video: Retro kontroler: 7 koraka

Video: Retro kontroler: 7 koraka
Video: 8 интересных гаджетов для смартфона - обзор от Ники 2024, Septembar
Anonim
Retro kontroler
Retro kontroler

Saznajte više o studentima koji koriste više multimedijalnih i komunikacionih tehnologija (Multec) i Erasmushogeschool Brussel.

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

S obzirom na to da ste kupili kasetu, on je bio kontroler koji je napravio ili napravio kasetu.

Korak 1: Wat Heb Je Nodig?

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

Componenten

- 2 dugmeta;

- 2 potenciometra;

- 2 stakla (1K losa);

- Arduino uno/nano

- Draadjes (zie elektronisch schema)

- 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 biblioteku: oscP5 * * napravljenu za werkcollege AV&IT * by annoo bob eddi * oct 2017 * *////////////////////// KORISNIČKI PARAMETRI ////////////////////// ////////

/ pobrinite se da koristite istu brzinu prijenosa u konačnoj skici Arduino 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. // Stavite ovaj niz u remoteIP, ovdje.

// završni niz stringIP = "192.168.1.43"; // npr. "127.0.0.1";

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

// Zabilježite sendPort i popunite ovo u Reaper -u. // Ovo je port koji Processing šalje i Reaper sluša.

final int listenPort = 11000, sendPort = 12000;

// ListenPort ovdje služi za aktivno otklanjanje grešaka.

// portNames su tu i za otklanjanje grešaka.

final String portName = "Vratite ime porta u arduino";

// završni niz stringName = "COM6"; // "/dev/ttyUSB0";

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

import processing.serial.*; import java.util.*;

uvoz oscP5.*; uvoz netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // Logička poruka serijskog porta messageArrived = false;

String incoming = "", IncomingOSCMessage = "";

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

// Da 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 greške, hajde da je uočimo i izađemo. catch (Izuzetak ex) {println ("Poruka izuzetka:" + ex); printArray (resVec); Izlaz(); }}

// Za filtriranje naših poruka/ * Uvjeravamo se da postoji samo poruka o odzivu OSC-a kada se * promijeni ulazna poruka (serijska) * To jest: ako okrenemo/pritisnemo dugme i promijeni vrijednost. * Zato filtriramo ulazne 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 (Ključ niza: newParams.keySet ()) {// ako je ključ već prisutan ako (oldParams.containsKey (ključ)) {// ključ prisutan i vrijednost nije ista, tada ažurirajte if (! oldParams.get (ključ).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ključ nije prisutan u starim parama, pa to recite! toSendParams.put (ključ, newParams.get (ključ)); } 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 (); } // Kada želimo da odštampamo u prozoru void ShowIncoming () {// da vidimo dolaznu poruku, kako je postavljeno u tekstu HashMap -a ("Dolazni iz Arduina", 20, 20); int y = 20; for (Ključ niza: newParams.keySet ()) {y = y+20; tekst (ključ, 20, y); text (newParams.get (key), 300, y); }}

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

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

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

/* myRemoteLocation je NetAddress. NetAddress uzima 2 parametra, * IP adresu i broj porta. myRemoteLocation se koristi kao parametar u * oscP5.send () pri slanju osc paketa na drugo računalo, uređaj, * aplikaciju. upotrebu pogledajte dole. 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ži više println ("počinje…"); break; slučaj startChar: incoming = ""; break; case endChar: messageArrived = true; // println ("kraj poruke"); break; default: dolazni += inChar; break; }}

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

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

Korak 3: Kod Arduino

Kod Arduino
Kod Arduino

/* Ovaj kod je osnovna skica za komunikaciju sa Obrada putem serijskog broja.

To je nacrt u koji možete staviti vlastiti kôd naveden za vlastite tipke, 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 oktobar 2017

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

*/

/ brzina prijenosa const long baudRate = 115200;

// vreme za čekanje 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; // ocijenite van smoothing

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

// ostale globalne varijable int buttonState1 = 0; int buttonState2 = 0; // varijabla za očitavanje statusa tipke float sensorValue1 = 0; osjetnik plovkaValue2 = 0; osjetnik plovkaValue3 = 0;

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

// Ova funkcija nam je potrebna za uspostavljanje kontakta sa skicom za obradu // Zadržite je ovdje void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // šalje znak i čeka odgovor … kašnjenje (loopPauseTime); } Serial.read (); }

void setup () {// postavlja 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; }

// čekamo rukovanje installContact (); }

void loop () {// anketiranje svih pinova i mapiranje očitanja 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: total3 = total3 - očitanja [readIndex3]; // očitavanje sa senzora: očitanja [readIndex3] = sensorValue3; // dodamo očitanje u ukupan iznos: total3 = total3 + 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); // pokreće sekvencu poruke // upisuje sva imena, vrijednosti parove, 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.tisak (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);

// upisuje kraj poruke Serial.print (endString);

// sačekaj malo..

delay (loopPauseTime); }

Korak 4: Žetelica

Žetelica
Žetelica

Korak 1: Opcije> Postavke

Korak 2: Pregledajte postavke na Control/OSC/web i druk za dodavanje

Korak 3: Kies bij Režim površinske kontrole za OSC (Otvorena kontrola zvuka)

Korak 4: Vul je naziv uređaja u, vink Primite na portu aan i vul u toku obrade pošaljite Sendport staat

Korak 5: IP adresa domaćina je uključena u obradu

Korak 6: Druk je ok i kontroler je trenutno u radnom prostoru sa Reaperom

Korak 5: Behuizing

Behuizing
Behuizing

Dimenzije: 170 mm

Dužina: 90 mm

Visina 30 mm

Knoppen: 16 mm (promjer

Potenciometri: 3 mm (promjer)

Senzor stabilnosti: Breedte 2,9 mm

Dužina 0,8 mm

Materijal: MDF (3 mm)

Korak 6: Elektronika

Korak 1:

Verbind de ground i 5 volt van Arduino sastavili su se na ploči

Korak 2:

Verbind pin A0 sa potencijom 1

Verbind pin A1 met potencio 2

Verbind pin A3 sa infracrvenim senzorom.

Verbind pin A2 met de niet sticky button.

Verbind pin A5 sa lepljivim dugmetom.

Korak 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Preporučuje se: