ዝርዝር ሁኔታ:

ሬትሮ መቆጣጠሪያ 7 ደረጃዎች
ሬትሮ መቆጣጠሪያ 7 ደረጃዎች

ቪዲዮ: ሬትሮ መቆጣጠሪያ 7 ደረጃዎች

ቪዲዮ: ሬትሮ መቆጣጠሪያ 7 ደረጃዎች
ቪዲዮ: በተፈጥሮ እርግዝና መከላከያ መንገዶች የፔሬድ አቆጣጠርን በመጠቀም| Naturalways of controlling pregnancy|period calculating 2024, ህዳር
Anonim
ሬትሮ መቆጣጠሪያ
ሬትሮ መቆጣጠሪያ

Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

Samen hebben እኛ een muziek መቆጣጠሪያ gemaakt dat muziek kan starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.

ኦኔስ idee kwam ቫን ቫን een ካሴት, ons doel ነበር om een ተቆጣጣሪ te maken dat lijkt op een kaset.

ደረጃ 1 - ዋት ሄብ ጀ ኖዲግ?

ዋት ሄብ ጀ ኖዲግ?
ዋት ሄብ ጀ ኖዲግ?

Componenten

- 2 አዝራሮች;

- 2 Potentio ሜትር;

- 2 weerstanden (1K ኤልክ);

- አርዱዲኖ ኡኖ/ናኖ

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- ኤምዲኤፍ plaat

መሣሪያዎች

- Lasercutter

- ክኒፕታንግ

- ስተርፕታንግ

- የጦር ሜዳ (የተገናኘ ቆርቆሮ)

የፕሮግራም

- አንጸባራቂ/ተለይቶ የማይታወቅ (Tekenprogramma)

- አጫጅ

- ሂደት

- አርዱinoኖ

ደረጃ 2 - ኮድ ማቀናበር

የኮድ ሂደት
የኮድ ሂደት

/**

* ከ Arduino * ተከታታይ መልዕክቶችን ለመቀበል መሰረታዊ ንድፍ እና እነዚያን ወደ OSC- መልእክቶች ለሪፔተር * * * የተጠቃሚውን ፓራሜተር * ማመቻቸት ያስፈልግዎታል እና ቤተመፃህፍት መጫን ያስፈልግዎታል-oscP5 * * ለ werkcollege AV&IT * የተሰራ በ annoo bob eddi * oct 2017 * *//////////// ////////

/ በ Arduino sketch final int baudRate = 115200 ውስጥ ተመሳሳይ የባውድ መጠን መጠቀሙን ያረጋግጡ።

// ይሂዱ እና OSC ን ሲጠቀሙ በሪፔር ውስጥ የአይፒ አድራሻውን ይፈልጉ // ይህ የአሠራር ሂደት የሚላክበት እና አጫጁ የሚያዳምጠው አድራሻ ነው። // ይህንን ሕብረቁምፊ በርቀት IP ውስጥ ያስገቡ ፣ እዚህ።

// የመጨረሻ ሕብረቁምፊ የርቀት IP = "192.168.1.43"; // ለምሳሌ። "127.0.0.1";

የመጨረሻ ሕብረቁምፊ የርቀት IP = "vul hier ip በ gevonden ውስጥ በአዝጋሚ";

// የላኪውንፖርት ልብ ይበሉ እና ይህንን በአጫጆች ውስጥ ይሙሉት። // ይህ የወደብ ማቀነባበር ወደ እሱ ይልካል እና አጫጁ ያዳምጣል።

የመጨረሻ int listenPort = 11000 ፣ sendPort = 12000;

// እዚህ ማዳመጥ ፖርት በንቃት ለማረም ነው።

// ወደብ ስሞች እንዲሁ ለማረም እዚህ አሉ።

የመጨረሻ ሕብረቁምፊ portName = "vul hier de portname in gevonden in Arduino";

// የመጨረሻ ሕብረቁምፊ ወደብ ስም = "COM6"; // "/dev/ttyUSB0";

///////////////////////// የአጠቃቀም ፓራሜርስ ///////////////////// ////

የማስመጣት ሂደት. አስመጣ java.util.*;

ማስመጣት oscP5.*; netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

ተከታታይ commsPort; // ተከታታይ ወደብ ቡሊያን መልእክት ደርሷል = ሐሰት;

ገቢ ሕብረቁምፊ = "" ፣ IncomingOSCMessage =””;

የመጨረሻ ቻር ጅምር ቻር = '*' ፣ endChar = '#'; የመጨረሻ ቻር contactCharacter = '|';

// እኛ የሚለወጡትን መለኪያዎች (እሴቶች) ብቻ መላክን ለማረጋገጥ // እነዚህ ዓለም አቀፍ ተለዋዋጭዎች እዚህ ተፈልገዋል ፣ ግን // እዚህ መጀመር የለባቸውም! HashMap oldParams ፣ newParams ፣ ወደ መላክ ፓራሞች;

// በእያንዳንዱ ኮማ ባዶ ሂደት ውስጥ መልዕክቱን መከፋፈል አለብን () {String resVec = incoming.split (","); // ስም+እሴት ጥንዶች እናገኛለን // ስለዚህ ለእያንዳንዱ ስም (+2)… ይሞክሩ {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // በአዲሱ ሃሽታብ newParams.put (resVec ፣ እሴት) ውስጥ ያስቀምጧቸው ፤ }} // ስህተት ከተከሰተ ፣ እሱን እንይዘው እናየው። መያዝ (ልዩ ሁኔታ) {println (“የልዩ መልእክት ፦” + ex); printArray (resVec); መውጫ (); }}

// መልእክቶቻችንን ለማጣራት/ * * የግብዓት መልዕክቱ (ተከታታይ) ሲቀየር የ OSC- መውጫ መልእክት ብቻ መኖሩን እናረጋግጣለን * ያ ማለት-አዝራሩን አዙረን/ብንገፋው እና እሴቱን ቢቀይር። * ስለዚህ በእውነቱ የሚለወጡትን የገቢ እሴቶችን እናጣራለን * ማስታወሻ -ከመዝለል እሴቶች መራቅ አንችልም * ለምሳሌ ከአክስሌሮሜትር ወይም ከርቀት ዳሳሾች * እነዚያን በአርዱዲኖ ውስጥ */ ባዶ ባዶ ማጣሪያParams () {toSendParams = አዲስ ሃሽማፕ (); ለ (ሕብረቁምፊ ቁልፍ: newParams.keySet ()) {// ቁልፉ ቀድሞውኑ ካለ (oldParams.containsKey (ቁልፍ)) {// ቁልፍ ካለ እና እሴት አንድ ካልሆነ ፣ ከዚያ ያዘምኑ (! oldParams.get (ቁልፍ)).እኩል (newParams.get (ቁልፍ))) {toSendParams.put (ቁልፍ ፣ newParams.get (ቁልፍ)); }} ሌላ {// ቁልፍ በድሮ ፓራሞች ውስጥ የለም ፣ ስለዚህ ያስቀምጡት! toSendParams.put (ቁልፍ ፣ newParams.get (ቁልፍ)); } oldParams.put (ቁልፍ ፣ newParams.get (ቁልፍ)); }}

ባዶ makeOSC () {ለ (ሕብረቁምፊ ቁልፍ: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (ቁልፍ)); / * መልዕክቱን ይላኩ */ oscP5.send (myMessage, myRemoteLocation); }}

ባዶነት translateMessage () {processIncoming (); filterParams (); makeOSC (); } // በሃሽ ማፕ ጽሑፍ («ከአርዱinoኖ መምጣት» ፣ 20 ፣ 20) ላይ እንደተቀመጠው ገቢ መልዕክቱን ለማየት ShowIncoming () {//) ወደ መጪው መስኮት ባዶነት ማተም ስንፈልግ ፤ int y = 20; ለ (ሕብረቁምፊ ቁልፍ: newParams.keySet ()) {y = y+20; ጽሑፍ (ቁልፍ ፣ 20 ፣ y); ጽሑፍ (newParams.get (ቁልፍ) ፣ 300 ፣ እና); }}

ባዶነት showOsc () {ጽሑፍ (IncomingOSCMessage, 300, 200); መጪ OSCMessage = ""; }

ባዶነት ማዋቀር () {መጠን (1000 ፣ 800); // የመድረክ መጠን መሙላት (255); ዳራ (0); oldParams = አዲስ HashMap (); newParams = አዲስ HashMap (); // printArray (Serial.list ()); commsPort = አዲስ ተከታታይ (ይህ ፣ የወደብ ስም ፣ baudRate);

/ * መጪ መልዕክቶችን በማዳመጥ oscP5 ን ይጀምሩ// oscP5 = new OscP5 (ይህ ፣ listenPort);

/* myRemoteLocation የ NetAddress ነው። NetAddress 2 መለኪያዎች ፣ * የአይፒ አድራሻ እና የወደብ ቁጥር ይወስዳል። myRemoteLocation የ osc ፓኬጆችን ወደ ሌላ ኮምፒተር ፣ መሣሪያ ፣ * ትግበራ ሲልክ በ * oscP5.send () ውስጥ እንደ መለኪያ ሆኖ ያገለግላል። አጠቃቀም ከዚህ በታች ይመልከቱ። ለሙከራ ዓላማዎች የማዳመጥ ወደብ * እና የርቀት ሥፍራ አድራሻው ወደብ አንድ ናቸው ፣ ስለሆነም መልዕክቶችን ወደዚህ ስዕል ይልካሉ። */ myRemoteLocation = አዲስ NetAddress (remoteIP ፣ sendPort); }

ባዶ ስዕል () {ከሆነ (መልእክት ደርሷል) {ዳራ (0); translateMessage (); ገቢ መጪ (); messageArrived = ሐሰት; } showOsc (); }

ባዶነት serialEvent (Serial commsPort) {// ከተከታዩ ወደብ አንድ ባይት ያንብቡ ፦ char inChar = commsPort.readChar (); ማብሪያ (inChar) {ጉዳይ contactCharacter: commsPort.write (contactCharacter); // ተጨማሪ println ን ይጠይቁ (“መጀመር…”); ሰበር; መያዣ startChar: ገቢ = ""; ሰበር; case endChar: messageArrived = true; // println ("msg መጨረሻ"); ሰበር; ነባሪ: ገቢ += inChar; ሰበር; }}

/* የገቢ osc መልእክት ወደ oscEvent ዘዴ ይተላለፋል። */ ባዶ ባዶ oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // የ 1 ኛ osc ክርክርን ያግኙ

IncomingOSCMessage + = "\ n" + String.format ("### የ osc መልዕክት ተቀብሏል" + "addrpattern:" + theOscMessage.addrPattern () + ": %f" ፣ እሴት); println (IncomingOSCMessage); }

ደረጃ 3 ኮድ አርዱinoኖ

ኮድ አርዱinoኖ
ኮድ አርዱinoኖ

/* ይህ ኮድ በስርዓት በኩል ከሂደት ጋር ለመገናኘት መሰረታዊ ንድፍ ነው።

ለራስዎ አዝራሮች ፣ ፖታቲሞሜትሮች ወይም ዳሳሾች የተገለጸውን የራስዎን ኮድ የሚያስቀምጡበት ንድፍ ነው።

ግንኙነት እንዳለን ለማረጋገጥ እና የምንገናኝበት ቅርጸት መወሰኑን ለማረጋገጥ የእጅ መጨባበጥ አለው

ማቀነባበሪያው እንዴት እንደሚፈርስ እና ትክክለኛ የ OSC መልዕክቶችን ወደ የእኛ DAW እንደሚልክ እንዲያውቅ በተመሳሳይ መንገድ መልዕክቱን መገንባቱ አስፈላጊ ነው።

ለ werkcollege AV&IT oct 2017 የተሰራ

ኮድ smooothing ተፈጥሯል 22 ኤፕሪል 2007 በ ዴቪድ ኤ. Mellis ተሻሽሏል 9 ኤፕ 2012 በቶም Igoe

*/

/ የባውድ ተመን const ረጅም baudRate = 115200;

// ጊዜ በምርጫዎች መካከል በ ms ውስጥ ለመጠበቅ ወደ ፒኖች const int loopPauseTime = 200; // ሚሊ ሰከንዶች

// በተከታታይ const String startString = "*" ፣ endString = "#" ላይ ለተላከው መልእክት የመጀመሪያ እና የመጨረሻ እሴቶች;

const char contactCharacter = '|';

// የፒን መታወቂያ የ const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // ደረጃ ቫን ማለስለስ

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

// ሌሎች ዓለም አቀፍ ተለዋዋጮች int buttonState1 = 0; int buttonState2 = 0; የግፊት ቁልፍን ተንሳፋፊ ዳሳሽ ለማንበብ // ተለዋዋጭ ።Value1 = 0; ተንሳፋፊ ዳሳሽ ቫልዩ 2 = 0; ተንሳፋፊ ዳሳሽ ቫልዩ 3 = 0;

// int ንባቦችን ማለስለስ [numReadings]; // ንባቦቹ ከአናሎግ ግብዓት int readIndex3 = 0; // የአሁኑ ንባብ int total3 = 0; // የሚሮጠው ጠቅላላ ተንሳፋፊ አማካይ 3 = 0; // አማካይ

// ከሂደቱ ረቂቅ ንድፍ ጋር ግንኙነት ለመመስረት ይህንን ተግባር እንፈልጋለን // እዚህ ያቆዩት ባዶውን ያዘጋጁኮንክትክት () {ሳለ (Serial.available () <= 0) {Serial.print (contactCharacter) ፤ // ቻርተር ይላኩ እና ምላሽ ይጠብቁ… መዘግየት (loopPauseTime); } Serial.read (); }

ባዶነት ማዋቀር () {// ለሁሉም ፒኖች pinMode (buttonPin1 ፣ INPUT) የፒን ሞዶቹን ያዘጋጁ ፤ pinMode (አዝራር ፒን 2 ፣ ግቤት); pinMode (pitchReading ፣ ማስገቢያ); pinMode (የፍጥነት ንባብ ፣ ማስገቢያ); pinMode (ኢንፍራራዲንግ ፣ ግቤት);

// አስጀምር Serial comms Serial.begin (baudRate); ሳለ (! ተከታታይ); // ማለስለስ ለ (int thisReading = 0; thisReading <numReadings; thisReading ++) {reading [thisReading] = 0; }

// የእጅ መጨባበጥ ተቋማትን ይጠብቁ እውቂያ (); }

ባዶነት loop () {// ሁሉንም ካስማዎች መርጠው ንባቡን ወደ ተገቢው ክልል አዝራር State1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// የገቢ እሴቶችን ወደ አስፈላጊ እሴቶች ዳሳሾችValue1 = ካርታ (sensorValue1 ፣ 0 ፣ 1023 ፣ 0 ፣ 100.0)/-100.0; sensorValue2 = ካርታ (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = ካርታ (sensorValue3, 0, 700, 50, 100);

// ማለስለሻ ዳሳሽ - total3 = total3 - ንባቦች [readIndex3]; // ከአነፍናፊው ያንብቡ - ንባቦች [readIndex3] = sensorValue3; // ንባቡን በድምሩ ይጨምሩ - ጠቅላላ 3 = ጠቅላላ 3 + ንባቦች [readIndex3]; // በድርድሩ ውስጥ ወደሚቀጥለው ቦታ ይሂዱ - readIndex3 = readIndex3 + 1;

// በድርድሩ መጨረሻ ላይ ከሆንን… ከሆነ (readIndex3> = numReadings) {//… ወደ መጀመሪያው ጠቅልለው ያንብቡ - readIndex3 = 0; } // አማካይውን ያስሉ አማካይ 3 = (total3 / numReadings); // የማለስለሻ ዳሳሽ

Serial.print (startString); // የመልዕክት ቅደም ተከተል ያስጀምሩ // ሁሉንም ስም ፣ ዋጋ ጥንድ ፣ በኮማ Serial.print (“potentio1”) ተለያይተው; Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");

Serial.print ("infra-sensor"); Serial.print (","); Serial.print (አማካይ3/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);

// የመልእክቱን መጨረሻ ይፃፉ Serial.print (endString);

// ለተወሰነ ጊዜ ይጠብቁ..

መዘግየት (loopPauseTime); }

ደረጃ 4 - አጫጅ

የሚያጭድ
የሚያጭድ

ደረጃ 1 - አማራጮች> ምርጫዎች

ደረጃ 2: በቅድመ -እይታዎች ውስጥ Ga/Control/OSC/ድር en druk op አክል

ደረጃ 3: Kies bij የመቆጣጠሪያ ገጽ ሞድ ኦኤስሲ (የድምፅ ቁጥጥር ክፈት)

ስቴፕ 4 - የመሣሪያ ስም በ ውስጥ ፣ በቪን ሪሲቬቭ ላይ በወደቦች ላይ በሪፖርት ፖስታ አገልግሎት ሂደት ውስጥ

ደረጃ 5: በሂደት ላይ ያለ ኮፒየር ዴ አስተናጋጅ አይፒ

ደረጃ 6 Druk op ok en de መቆጣጠሪያ is nu verbonden meet Reaper

ደረጃ 5: Behuizing

Behuizing
Behuizing

ዘር - 170 ሚሜ

ርዝመት - 90 ሚሜ

Hoogte 30 ሚሜ

ኖፕፔን - 16 ሚሜ (ዲያሜትር

የፖታቲዮ ሜትር - 3 ሚሜ (ዲያሜትር)

የመቋቋም አነፍናፊ - Breedte 2.9 ሚሜ

ርዝመት 0.8 ሚሜ

ቁሳቁስ -ኤምዲኤፍ (3 ሚሜ)

ደረጃ 6: Elektronica

ደረጃ 1 ፦

Verbind de ground en 5 ቮልት ቫን አርዱinoኖ ሄት የዳቦ ሰሌዳ ተገናኘ

ደረጃ 2 ፦

Verbind pin A0 ተገናኘ potentio 1

Verbind pin A1 potentio 2 ተገናኘ

Verbind pin A3 የኢንፍራሬድ ዳሳሽ ተገናኘ።

Verbind pin A2 met de niet ተለጣፊ አዝራር።

Verbind pin A5 met de sticky አዝራር።

ደረጃ 7 - መካከለኛ ሠራተኞች

መካከለኛ ሠራተኞች
መካከለኛ ሠራተኞች

- ማይስ ኤል ባባ

- አርኖ ጎሪሰን

- ሚኪኤል ደ Wandelaer

የሚመከር: