Kazalo:
- 1. korak: Wat Heb Je Nodig?
- 2. korak: Obdelava kode
- Korak: Koda Arduino
- 4. korak: Žetev
- 5. korak: Behuizing
- 6. korak: Elektronika
- 7. korak: Medewerkers
Video: Retro krmilnik: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:08
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?
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
/**
* 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
/* 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
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
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
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Priporočena:
Kako namestiti, zagnati in povezati krmilnik z emulatorjem: 7 korakov
Kako namestiti, zagnati in povezati krmilnik z emulatorjem: Ste že kdaj sedeli in se spominjali svojega otroštva kot mladega igralca in si včasih zaželeli, da bi ponovno pogledali tiste stare dragulje preteklosti? No, za to obstaja aplikacija … natančneje obstaja skupnost igralcev, ki izdelujejo program
Zgradite Arduino MIDI krmilnik: 5 korakov (s slikami)
Zgradite Arduino MIDI krmilnik: Pozdravljeni vsi! V tem navodilu vam bom pokazal, kako zgraditi lasten MIDI krmilnik, ki ga poganja Arduino. MIDI pomeni digitalni vmesnik za glasbene instrumente in je protokol, ki računalnikom, glasbilom in drugi strojni opremi omogoča komunikacijo
Odstranite servo krmilnik: 5 korakov (s slikami)
Odstranite servo krmilnik: Servo motorji so zelo zabavni, če želite preprosto povezati motor z gonilom z mikro krmilnikom. Vendar pa včasih želite lep motor z majhnim prenosom in ne želite, da bi ga krmililo krmilno vezje. V takih časih je
Ogromen stilski krmilnik na plesišču za retro igre: 4 koraki
Ogromen stilski krmilnik na plesišču za retro igre: Za našo poroko marca letos smo želeli sprejemno zabavo na temo retro igre, saj smo pri srcu le veliki otroci in prepričan sem, da je tudi veliko drugih ljudi! raziskava MakeyMakey's Mislil sem, da bi bilo super objeti se
Arduino DIY krmilnik za igre - Arduino PS2 krmilnik iger - Predvajanje Tekkena z igralno ploščo Arduino DIY: 7 korakov
Arduino DIY krmilnik za igre | Arduino PS2 krmilnik iger | Igranje Tekken z igralno ploščo DIY Arduino: Pozdravljeni, igranje iger je vedno zabavno, vendar je igranje s svojim lastnim krmilnikom iger po meri bolj zabavno. Zato bomo v tem navodilu naredili krmilnik za igre z uporabo arduino pro micro