Turinys:
- 1 žingsnis: Wat Heb Je Nodig?
- 2 žingsnis: kodo apdorojimas
- 3 žingsnis: koduokite „Arduino“
- 4 žingsnis: javapjovė
- 5 žingsnis: Behuizing
- 6 žingsnis: „Elektronica“
- 7 žingsnis: „Medewerkers“
Video: Retro valdiklis: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) a Erasmushogeschool Brussel.
Samen hebben we een muziek controller gemaakt dat muziek kan starten/stoppen, de pitch can verhogen, kan terugspoelen en nog meer.
Yra ideali kwam van van een kasetė, „ons doel“buvo valdiklis, su kuriuo buvo galima rasti kasetę.
1 žingsnis: Wat Heb Je Nodig?
Komponentas
- 2 mygtukai;
- 2 potenciometrai;
- 2 supratimai (1 tūkst. Briedžių);
- „Arduino uno/nano“
- Draadjes (zie elektronisch schema)
- Soldeerplaat
- MDF plokštė
Įrankiai
- Lazerinis pjoviklis
- Kniptang
- Striptang
- Soldeerbout (metalo alavas)
Programos
- iliustratorius/dizaineris („Tekenprogramma“)
- Javapjovė
- Apdorojimas
- Arduino
2 žingsnis: kodo apdorojimas
/**
* Pagrindinis eskizas, skirtas gauti serijinius pranešimus iš „Arduino“* ir išversti juos į „OSC“pranešimus „Reaper“eddi * spalis 2017 * *///////////////////// VARTOTOJO PARAMETRAI ////////////////// ////////
/ įsitikinkite, kad naudojate tą patį duomenų perdavimo spartą „Arduino“eskizo galutiniame int baudRate = 115200;
// Eikite ir ieškokite IP adreso „Reaper“, kai naudojate OSC // Tai adresas, į kurį siunčia „Processing“ir klauso „Reaper“. // Įdėkite šią eilutę į „remoteIP“, čia.
// final String remoteIP = "192.168.1.43"; // pvz. „127.0.0.1“;
final String remoteIP = "vul hier ip in gevonden in pjūtis";
// Atkreipkite dėmesį į „sendPort“ir užpildykite tai „Reaper“. // Tai yra prievadas, į kurį siunčia apdorojimas ir kurio klauso „Reaper“.
final int listenPort = 11000, sendPort = 12000;
// „ListenPort“čia yra aktyviai derinti.
// „PortNames“taip pat yra derinti.
final String portName = "vul hier de portname in gevonden in Arduino";
// final String portName = "COM6"; // "/dev/ttyUSB0";
////////////////////// VARTOTOJO PARAMETRŲ PABAIGA //////////////////////// ////
importo apdorojimas.serijinis.*; importuoti java.util.*;
importuoti oscP5.*; importuoti netP5.*;
OscP5 oscP5; „NetAddress myRemoteLocation“;
Serial commsPort; // Serijinio prievado loginis pranešimasArrived = false;
Eilutės gaunamos = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; galutinis char contactCharacter = '|';
// Kad įsitikintumėte, jog siunčiame tik tuos parametrus (reikšmes), kurie keičiasi // šie visuotiniai kintamieji yra atmetami čia, bet // jų negalima inicijuoti čia! HashMap oldParams, newParams, toSendParams;
// Mums reikia padalyti pranešimą kiekviename kablelio negaliojimo proceseIncoming () {String resVec = gaunamas.split (","); // mes gauname vardo+reikšmių poras // taigi kiekvienam vardui (+2)… pabandykite {dėl (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // įdėti juos į naują hashtable newParams.put (resVec , vertė); }} // jei įvyksta klaida, sugaukime jos rodymą ir išeisime. catch (Exception ex) {println ("Išimties pranešimas:" + ex); printArray (resVec); išeiti (); }}
// Norėdami filtruoti mūsų pranešimus/ * Mes įsitikiname, kad OSC išvesties pranešimas yra tik tada, kai * pasikeičia įvesties pranešimas (serijinis) * Tai yra: jei pasuksime/paspausime mygtuką ir jis pakeis vertę. * Taigi mes išfiltruojame gaunamas vertes, kurios iš tikrųjų keičiasi „HashMap“(); for (String key: newParams.keySet ()) {// jei raktas jau yra, jei (oldParams.containsKey (key)) {// raktas yra ir reikšmė nėra ta pati, tada atnaujinkite, jei (! oldParams.get (key).equals (newParams.get (raktas))) {toSendParams.put (raktas, newParams.get (raktas)); }} else {// rakto senuose paramuose nėra, todėl padėkite! toSendParams.put (raktas, newParams.get (raktas)); } oldParams.put (raktas, newParams.get (raktas)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (raktas)); / * siųsti pranešimą */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Kai norime spausdinti į langą void ShowIncoming () {// norėdami pamatyti gaunamą pranešimą, kaip nustatyta „HashMap“tekste („Incoming from Arduino“, 20, 20); int y = 20; for (Stygos raktas: newParams.keySet ()) {y = y+20; tekstas (raktas, 20, y); tekstas (newParams.get (raktas), 300, y); }}
void showOsc () {text („IncomingOSCMessage“, 300, 200); IncomingOSCMessage = ""; }
void setup () {dydis (1000, 800); // Scenos dydžio užpildymas (255); fonas (0); oldParams = naujas HashMap (); newParams = naujas „HashMap“(); // printArray (Serial.list ()); commsPort = naujas serijinis (tai, prievado pavadinimas, baudos greitis);
/ * pradėti oscP5, klausytis gaunamų pranešimų */ oscP5 = naujas OscP5 (tai, listenPort);
/* „myRemoteLocation“yra „NetAddress“. „NetAddress“turi 2 parametrus, * IP adresą ir prievado numerį. „myRemoteLocation“naudojama kaip parametras * oscP5.send () siunčiant osc paketus į kitą kompiuterį, įrenginį, * programą. naudojimą žr. žemiau. bandymo tikslais klausymosi prievadas * ir nuotolinės vietos adreso prievadas yra tas pats, todėl * siųsite pranešimus atgal į šį eskizą. */ myRemoteLocation = naujas NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// skaitykite baitą iš nuoseklaus prievado: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // prašyti daugiau println ("pradedant …"); pertrauka; atvejis startChar: gaunamas = ""; pertrauka; case endChar: messageArrived = tiesa; // println ("žinutės pabaiga"); pertrauka; numatytasis: gaunamas += inChar; pertrauka; }}
/* gaunamas osc pranešimas persiunčiamas į oscEvent metodą. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // gauti 1 osc argumentą
IncomingOSCMessage + = "\ n" + String.format ("### gavo osc pranešimą:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vertė); println („IncomingOSCMessage“); }
3 žingsnis: koduokite „Arduino“
/* Šis kodas yra pagrindinis eskizas, skirtas bendrauti su apdorojimu per seriją.
Tai yra planas, kuriame galite įdėti savo kodą, nurodytą jūsų mygtukams, potenciometrams ar jutikliams.
Jis turi paspausti ranką, kad įsitikintume, jog turime kontaktą ir nuspręsta, kokiu formatu mes bendraujame
Svarbu sukurti tokį patį pranešimą, kad apdorojimas žinotų, kaip jį dekonstruoti ir siųsti teisingus OSC pranešimus į mūsų DAW
sukurtas „werkcollege AV&IT“spalio 2017 d
kodo išlyginimas, sukurtas 2007 m. balandžio 22 d. David A. Mellis, pakeistas Tom Igoe 2012 m. balandžio 9 d
*/
/ baudos sparta konst ilgas baudos greitis = 115200;
// laikas laukti ms tarp apklausų iki kaiščių const int loopPauseTime = 200; // mili sekundės
// pranešimo, išsiųsto Serial const, pradžios ir pabaigos reikšmės String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id's const int mygtukasPin1 = 2; const int mygtukasPin2 = 5; const int numReadings = 5; // rate van smoothing
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// kiti globalūs kintamieji int buttonState1 = 0; int mygtukasStatus2 = 0; // kintamasis, skirtas nuskaityti mygtuko būsenos plūdės jutiklįValue1 = 0; plūdės jutiklisVertė2 = 0; plūdės jutiklisVertė3 = 0;
// int lygių išlyginimas [numReadings]; // rodmenys iš analoginio įėjimo int readIndex3 = 0; // dabartinio rodmens indeksas int total3 = 0; // veikiančio bendro plūdės vidurkis3 = 0; // Vidutinis
// Mums reikia šios funkcijos, kad užmegztume ryšį su apdorojimo eskizu // Palikite jį čia void createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // atsiųsti char ir laukti atsakymo… delay (loopPauseTime); } Serial.read (); }
void setup () {// nustatyti pinModes visiems kaiščiams pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// inicijuoti Serial comms Serial.begin (baudRate); while (! Serial); // išlyginimas (int thisReading = 0; thisReading <numReadings; thisReading ++) {skaitai [thisReading] = 0; }
// laukti rankos paspaudimo nustatytiContact (); }
void loop () {// apklausti visus kaiščius ir susieti rodmenis su atitinkamu diapazonu buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// gaunamų verčių susiejimas su būtinomis reikšmėmis sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = žemėlapis (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = žemėlapis (sensorValue3, 0, 700, 50, 100);
// glotninimo jutiklis: total3 = total3 - rodmenys [readIndex3]; // skaityti iš jutiklio: rodmenys [readIndex3] = sensorValue3; // pridėti rodmenį prie viso: total3 = total3 + rodmenys [readIndex3]; // pereiti į kitą masyvo vietą: readIndex3 = readIndex3 + 1;
// jei esame masyvo pabaigoje… if (readIndex3> = numReadings) {//… apvyniokite pradžią: readIndex3 = 0; } // apskaičiuoti vidurkį: vidurkis3 = (total3 / numReadings); // glotninimo jutiklis
Serial.print (startString); // pradėti pranešimų seką // ištrinti visus vardus, reikšmių poras, atskirtas kableliais Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serijinis atspaudas („potentio2“); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print („infra-jutiklis“); Serial.print (","); Serijinis atspaudas (vidurkis3/100); Serial.print (",");
Serial.print („knop 1 in2 wit“); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print („knop2 in5 geel“); Serial.print (","); Serial.print (buttonState2);
// parašykite pranešimo pabaigą Serial.print (endString);
// palauk truputi..
uždelsimas (loopPauseTime); }
4 žingsnis: javapjovė
1 žingsnis: Ga bovenaan naar Parinktys> Prefrences
2 etapas: „Pre Control“/„OSC“/žiniatinklio ir „Add“priedai
3 žingsnis: „Kies bij Control“paviršiaus režimas arba OSC („Open Sound Control“)
4 žingsnis: Vul je įrenginio pavadinimą, gaukite prieigą prie prievado, kad gautumėte apdorojimo informaciją „Sendport staat“
5 žingsnis: „IP adreso kopijavimas“yra apdorojamas
6 žingsnis: „Druk op ok en en control“yra verbonden met Reaper
5 žingsnis: Behuizing
Plotis: 170 mm
Ilgis: 90 mm
Hoogte 30 mm
Smeigtukas: 16 mm (skersmuo)
Potenciometrai: 3 mm (skersmuo)
Afstand jutiklis: Breedte 2,9 mm
Ilgis 0,8 mm
Medžiaga: MDF (3 mm)
6 žingsnis: „Elektronica“
1 žingsnis:
„Verbind de ground“ir 5 voltų „Arduino“ir duonos lentos
2 žingsnis:
Verbindo kaištis A0 ir potencialas 1
Veiksmažodžio kaištis A1 ir potencialas 2
Verbind pin A3 ir infrarood jutiklis.
Verbind pin A2 matė lipnų mygtuką.
Verbind pin A5 ir lipnus mygtukas.
7 žingsnis: „Medewerkers“
- Mayes El Baba
- Arno Gorissenas
- Michielis De Wandelaeris
Rekomenduojamas:
Vaizdo stebėjimo kanalų valdiklis - „Raspberry Pi“: 3 žingsniai
Vaizdo stebėjimo kanalų valdiklis - „Raspberry Pi“: Sveiki visi, sveiki atvykę į kitą „Scientify Inc.“instrukciją! Šis projektas optimizuoja tai, ką įrašo vaizdo stebėjimo kamera, naudojant integruotą judesio jutiklį, naudojant dviejų iš eilės vaizdų vidutinio kvadrato (RMS) skirtumą. Tai padeda gaminti CCTV kanalą
„MicroBit“kambario užimtumo skaitiklis ir valdiklis: 4 žingsniai
„MicroBit“kambario užimtumo skaitiklis ir valdiklis: Pandemijos metu vienas iš būdų sumažinti viruso perdavimą yra maksimalus fizinis atstumas tarp žmonių. Kambariuose ar parduotuvėse būtų naudinga žinoti, kiek žmonių tam tikru metu yra uždaroje erdvėje. Šiame projekte naudojama pora
Didžiulis retro žaidimų „Dancefloor“stiliaus valdiklis: 4 žingsniai
Didžiuliai „Retro Games“šokių aikštelės stiliaus valdikliai: Šių metų kovo mėnesio vestuvėms norėjome „Retro“žaidimų tematikos priėmimo vakarėlio, nes širdyje esame tik dideli vaikai, ir aš tikiu, kad taip pat yra daug kitų žmonių! „MakeyMakey's“tyrimas maniau, kad būtų nuostabi idėja apsikabinti
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis - „Arduino PS2“žaidimų valdiklis - Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino“žaidimų pultą: 7 žingsniai
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis | „Arduino PS2“žaidimų valdiklis | Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino Gamepad“: Sveiki, vaikinai, žaisti žaidimus visada smagu, tačiau žaisti su savo „pasidaryk pats“žaidimo valdikliu yra smagiau. Taigi, mes padarysime žaidimų valdiklį naudodami „arduino pro micro“šioje instrukcijoje
YABC - dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: 4 žingsniai
YABC - Dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: Sveiki, kūrėjai, neseniai pradėjau auginti grybus namuose, austrių grybus, bet jau turiu 3 kartus šių valdiklių namuose, kad galėčiau kontroliuoti savo namų alaus fermentacijos temperatūrą, žmona dabar taip pat daro šį „Kombucha“dalyką ir yra šilumos termostatas