Sadržaj:
- Korak 1: Wat Heb Je Nodig?
- Korak 2: Obrada koda
- Korak 3: Kod Arduino
- Korak 4: Žetelica
- Korak 5: Behuizing
- Korak 6: Elektronica
- Korak 7: Medewerkers
Video: Retro kontroler: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
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?
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
/**
* 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
/* 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
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
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
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Preporučeni:
Kako instalirati, pokrenuti i spojiti kontroler na emulator: 7 koraka
Kako instalirati, pokrenuti i povezati kontroler s emulatorom: Jeste li ikada sjedili i sjećali se svog djetinjstva kao mladog igrača i ponekad poželjeli da možete ponovno posjetiti te stare dragulje iz prošlosti? Pa, postoji aplikacija za to … točnije postoji zajednica igrača koji prave program
Napravite Arduino MIDI kontroler: 5 koraka (sa slikama)
Napravite Arduino MIDI kontroler: Pozdrav svima! U ovom uputstvu pokazat ću vam kako izgraditi vlastiti MIDI kontroler s pogonom na Arduinu. MIDI označava digitalno sučelje glazbenih instrumenata i to je protokol koji omogućuje računalima, glazbenim instrumentima i drugom hardveru da komuniciraju
Ogroman kontroler stila na plesnom podiju u retro igrama: 4 koraka
Ogroman kontrolor stila na plesnom podiju za retro igre: Za naše vjenčanje u ožujku ove godine htjeli smo prijemnu zabavu s temom Retro igre, jer smo u srcu samo velika djeca i siguran sam da ima i puno drugih ljudi! Pa nakon malo vremena istražujući MakeyMakey's mislio sam da bi bilo sjajno zagrliti se
Arduino kontroler za igre DIY - Arduino PS2 kontroler igre - Igranje Tekkena s DIY Arduino gamepadom: 7 koraka
Arduino kontroler za igre DIY | Arduino PS2 kontroler igre | Igranje Tekkena s DIY Arduino gamepad -om: Zdravo dečki, igranje igara uvijek je zabavno, ali igranje sa vlastitim DIY prilagođenim kontrolorom igara je zabavnije. Zato ćemo u ovim uputama napraviti kontroler igre pomoću arduino pro micro
YABC - Još jedan kontroler Blynk - IoT kontroler temperature i vlažnosti u oblaku, ESP8266: 4 koraka
YABC - Još jedan kontroler Blynk - IoT kontroler temperature i vlažnosti u oblaku, ESP8266: Zdravo proizvođači, nedavno sam počeo uzgajati gljive kod kuće, gljive kamenice, ali već sam 3 puta imao ove kontrolere kod kuće za kontrolu temperature fermentatora za moju domaću marinu, supruga sada radi i ovu stvar Kombucha, a kao termostat za toplinu