جدول المحتويات:

وحدة التحكم الرجعية: 7 خطوات
وحدة التحكم الرجعية: 7 خطوات

فيديو: وحدة التحكم الرجعية: 7 خطوات

فيديو: وحدة التحكم الرجعية: 7 خطوات
فيديو: فيديو رائع حول كيفية تنظيم الدورة الشهرية والمراقبة الرجعية السالبة والموجبة| ثانية ثانوي 2024, شهر نوفمبر
Anonim
تحكم الرجعية
تحكم الرجعية

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

Samen hebben نحن een muziek controller gemaakt dat muziek kan starten / stoppen، de pitch kan verhogen، kan terugspoelen en nog meer.

Ons ide kwam van van een cassette، ons doel was om een controller te maken dat lijkt op een cassette.

الخطوة 1: وات هيب جي نوديج؟

وات هيب جي نوديج؟
وات هيب جي نوديج؟

مكون

- 2 أزرار ؛

- 2 متر قوة ؛

- 2 weerstanden (1K elk) ؛

- اردوينو أونو / نانو

- دراجيس (مخطط zie elektronisch)

- الجندي

- MDF بلات

أدوات

- قاطع ليزري

- كنيبتانج

- ستريبتانج

- سولديربوت (ميت تين)

للبرامج

- إيلوستراتور / إنديزاين (Tekenprogramma)

- ريبر

- يعالج

- اردوينو

الخطوة الثانية: معالجة الكود

معالجة الكود
معالجة الكود

/**

* رسم أساسي لتلقي الرسائل التسلسلية من Arduino * وترجمتها إلى رسائل OSC لـ Reaper * * ستحتاج إلى تكييف معلمات المستخدم * وستحتاج إلى تثبيت مكتبة: oscP5 * * تم إعداده من أجل werkcollege AV&IT * بواسطة annoo bob eddi * أكتوبر 2017 * * / /////////////////////// معلمات المستخدم ////////////////////// ////////

/ تأكد من استخدام نفس معدل الباود في مخطط Arduino النهائي الخاص بك baudRate = 115200 ؛

// اذهب وابحث عن عنوان IP في Reaper عند استخدام OSC // هذا هو العنوان الذي ترسل إليه المعالجة ويستمع Reaper إليه. // ضع هذه السلسلة في remoteIP هنا.

// final String remoteIP = "192.168.1.43" ؛ // على سبيل المثال. "127.0.0.1" ؛

السلسلة النهائية remoteIP = "vul hier ip في gevonden in reaper"؛

// لاحظ الإرسال واملأه في Reaper. // هذا هو المنفذ الذي ترسله المعالجة ويستمع Reaper إليه.

النهائي int listenPort = 11000 ، sendPort = 12000 ؛

// إن listenPort هنا هو التصحيح النشط.

// the portNames هنا للتصحيح أيضًا.

Final String portName = "vul hier de portname في gevonden in Arduino"؛

// final String portName = "COM6" ؛ // "/ dev / ttyUSB0" ؛

/////////////////////// نهاية معلمات المستخدم /////////////////////////// ////

معالجة الاستيراد. تسلسلي. * ؛ استيراد java.util. * ؛

استيراد oscP5. * ؛ استيراد netP5. * ؛

OscP5 oscP5 ؛ NetAddress myRemoteLocation ؛

منفذ اتصالات تسلسلي ؛ // الرسالة المنطقية للمنفذ التسلسلي Arrived = false ؛

سلسلة واردة = "" ، IncomingOSCMessage = "" ؛

بدء char النهائي = '*' ، endChar = '#' ؛ نهائي حرف اتصال الحرف = '|'؛

// للتأكد من أننا نرسل فقط المعلمات (القيم) التي تغير // هذه المتغيرات العامة تم حذفها هنا ولكن يجب // عدم تهيئتها هنا! HashMap oldParams ، newParams ، toSendParams ؛

// نحتاج إلى تقسيم الرسالة عند كل عملية خالية من الفاصلة () {String resVec = incoming.split ("،")؛ // نحصل على أزواج الاسم + القيمة // لذلك لكل اسم (+2) … جرب {لـ (int i = 0؛ i <resVec.length؛ i + = 2) {float value = Float.parseFloat (resVec [i + 1]) ؛ // ضعهم في newParams.put Hashtable الجديد (resVec ، value) ؛ }} // إذا حدث خطأ فلنقم بعرضه والخروج منه. catch (استثناء) {println ("رسالة الاستثناء:" + ex)؛ printArray (resVec) ؛ خروج()؛ }}

// لتصفية رسائلنا / * نتأكد من وجود رسالة OSC out فقط عندما تتغير * رسالة الإدخال (المسلسل) * أي: إذا أدرنا / ضغطنا على الزر وقمنا بتغيير القيمة. * لذلك نقوم بتصفية القيم الواردة التي تتغير فعليًا * ملاحظة: لن نتجنب القفز على القيم * كما تأتي من على سبيل المثال مقاييس التسارع أو مستشعرات المسافة * ستحتاج إلى تسوية تلك القيم بنفسك في Arduino * / void filterParams () {toSendParams = جديد خريطة التجزئة()؛ لـ (String key: newParams.keySet ()) {// إذا كان المفتاح موجودًا بالفعل إذا (oldParams.containsKey (key)) {// key present و value not نفس الشيء ، فقم بتحديث if (! oldParams.get (مفتاح).equals (newParams.get (key))) {toSendParams.put (key، newParams.get (key)) ؛ }} else {// key غير موجود في البارامترات القديمة ، لذا ضعها! toSendParams.put (مفتاح ، newParams.get (مفتاح)) ، } oldParams.put (key، newParams.get (key)) ؛ }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/" + key)؛ myMessage.add (toSendParams.get (مفتاح)) ؛ / * أرسل الرسالة * / oscP5.send (myMessage ، myRemoteLocation) ؛ }}

باطل translateMessage () {processIncoming () ؛ filterParams () ، makeOSC () ؛ } // عندما نريد الطباعة إلى نافذة باطلة ShowIncoming () {// لرؤية الرسالة الواردة ، كما هو محدد في نص HashMap ("Incoming from Arduino"، 20، 20)؛ int y = 20 ؛ لـ (مفتاح السلسلة: newParams.keySet ()) {y = y + 20 ؛ نص (مفتاح ، 20 ، ص) ؛ نص (newParams.get (مفتاح) ، 300 ، ص) ؛ }}

showOsc باطلة {text (IncomingOSCMessage، 300، 200) ؛ IncomingOSCMessage = "" ؛ }

إعداد باطل () {size (1000، 800)؛ // ملء حجم المرحلة (255) ؛ الخلفية (0) ؛ oldParams = new HashMap () ؛ newParams = new HashMap () ؛ // printArray (Serial.list ()) ؛ commsPort = مسلسل جديد (هذا ، portName ، baudRate) ؛

/ * بدء oscP5 ، الاستماع للرسائل الواردة * / oscP5 = جديد OscP5 (هذا ، listenPort) ؛

/ * myRemoteLocation هو NetAddress. يأخذ NetAddress معلمتين ، * عنوان IP ورقم منفذ. يتم استخدام myRemoteLocation كمعامل في * oscP5.send () عند إرسال حزم osc إلى كمبيوتر أو جهاز أو تطبيق آخر. استخدام انظر أدناه. لأغراض الاختبار ، يكون منفذ الاستماع * ومنفذ عنوان الموقع البعيد متماثلين ، ومن ثم سترسل * الرسائل مرة أخرى إلى هذا المخطط. * / myRemoteLocation = عنوان NetAddress جديد (remoteIP، sendPort) ؛ }

رسم باطل () {if (messageArrived) {background (0)؛ translateMessage () ، إظهار واردة () ؛ messageArrived = خطأ ؛ } showOsc () ؛ }

SerialEvent (Serial commsPort) باطل {// قراءة بايت من المنفذ التسلسلي: char inChar = commsPort.readChar () ؛ التبديل (inChar) {case contactCharacter: commsPort.write (contactCharacter) ؛ // اطلب المزيد من println ("بدء …") ؛ استراحة؛ بداية الحالة: واردة = "" ؛ استراحة؛ حالة endChar: messageArrived = صحيح ؛ // println ("نهاية الرسالة") ؛ استراحة؛ الافتراضي: وارد + = inChar ؛ استراحة؛ }}

/ * يتم إعادة توجيه رسالة osc الواردة إلى طريقة oscEvent. * / void oscEvent (OscMessage theOscMessage) {قيمة تعويم = theOscMessage.get (0).floatValue () ؛ // احصل على وسيطة osc 1st

IncomingOSCMessage + = "\ n" + String.format ("### تلقى رسالة osc:" + "addrpattern:" + theOscMessage.addrPattern () + ":٪ f"، value)؛ println (IncomingOSCMessage) ؛ }

الخطوة 3: كود اردوينو

كود اردوينو
كود اردوينو

/ * هذا الرمز هو رسم تخطيطي أساسي للتواصل مع المعالجة من خلال المسلسل.

إنه مخطط يمكنك من خلاله وضع الكود الخاص بك المحدد لأزرارك أو مقاييس الجهد أو أجهزة الاستشعار الخاصة بك.

لديها مصافحة للتأكد من أن لدينا اتصال وأن الشكل الذي نتواصل به قد تم تحديده

من المهم بناء الرسالة بنفس الطريقة ، حتى تعرف المعالجة كيفية تفكيكها وإرسال رسائل OSC الصحيحة إلى منصة العمل الصوتية الرقمية الخاصة بنا.

مُصمم لـ werkcollege AV&IT أكتوبر 2017

تم إنشاء تجانس الكود في 22 أبريل 2007 بواسطة David A. Mellis تم تعديله في 9 أبريل 2012 بواسطة Tom Igoe

*/

/ معدل الباود const long baudRate = 115200 ؛

// وقت الانتظار بالمللي ثانية بين الاستطلاعات إلى دبابيس const int loopPauseTime = 200 ؛ // ملي ثانية

// قيم البداية والنهاية للرسالة المرسلة على Serial const String startString = "*"، endString = "#"؛

const char contactCharacter = '|' ؛

// pin id's const int buttonPin1 = 2 ؛ const int buttonPin2 = 5 ؛ const int numReadings = 5 ؛ // معدل تجانس فان

int pitchReading = A1 ؛ int speedReading = A2 ؛ intraReading = A3 ؛

// المتغيرات العالمية الأخرى int buttonState1 = 0 ؛ int buttonState2 = 0 ؛ // متغير لقراءة مستشعر تعويم حالة زر الضغطValue1 = 0 ؛ مستشعر تعويم القيمة 2 = 0 ؛ مستشعر تعويم القيمة 3 = 0 ؛

// تنعيم القراءات [numReadings] ؛ // القراءات من المدخلات التناظرية int readIndex3 = 0 ؛ // فهرس القراءة الحالية int total3 = 0 ؛ // متوسط إجمالي التعويم الجاري 3 = 0 ؛ // المتوسط

// نحتاج إلى هذه الوظيفة لإنشاء اتصال برسم المعالجة // احتفظ بها هنا باطلة createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter) ؛ // أرسل حرفًا وانتظر الرد … تأخير (loopPauseTime) ؛ } Serial.read () ؛ }

إعداد باطل () {// قم بتعيين رموز pinMode لجميع دبابيس pinMode (buttonPin1 ، INPUT) ؛ pinMode (buttonPin2 ، الإدخال) ؛ pinMode (PitchReading ، INPUT) ؛ pinMode (speedReading ، INPUT) ؛ pinMode (infraReading ، INPUT) ؛

// تهيئة الاتصال التسلسلي Serial.begin (معدل البث بالباود) ؛ بينما (! المسلسل) ؛ // smoothing for (int thisReading = 0؛ thisReading <numReadings؛ thisReading ++) {readings [thisReading] = 0؛ }

// انتظر المصافحة تأسيسContact () ؛ }

حلقة باطلة () {// استقصاء جميع المسامير وقم بتعيين القراءة على زر النطاق المناسب buttonState2 = digitalRead (buttonPin2) ، sensorValue1 = analogRead (درجة القراءة) ؛ sensorValue2 = analogRead (speedReading) ؛ sensorValue3 = analogRead (infraReading) ؛

// تعيين القيم الواردة إلى القيم الضرورية sensorValue1 = map (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 ؛ // أضف القراءة إلى المجموع: total3 = total3 + القراءات [readIndex3] ؛ // تقدم إلى الموضع التالي في المصفوفة: readIndex3 = readIndex3 + 1 ؛

// إذا كنا في نهاية المصفوفة… إذا (readIndex3> = numReadings) {// … التفاف حول البداية: readIndex3 = 0؛ } // حساب المتوسط: average3 = (total3 / numReadings) ؛ // مستشعر التنعيم

Serial.print (startString) ؛ // بدء تسلسل رسالة // wirte كل الاسم ، أزواج القيمة ، مفصولة بفواصل Serial.print ("potentio1") ؛ Serial.print ("،") ؛ Serial.print (sensorValue1) ؛ Serial.print ("،") ؛

Serial.print ("potentio2") ؛ Serial.print ("،") ؛ Serial.print (sensorValue2) ؛ Serial.print ("،") ؛

Serial.print ("مستشعر الأشعة تحت الحمراء") ؛ Serial.print ("،") ؛ Serial.print (متوسط 3/100) ؛ Serial.print ("،") ؛

Serial.print ("المقبض 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: خيارات Ga bovenaan naar> التفضيلات

الخطوة 2: Ga في التفضيلات إلى Control / OSC / web en druk op Add

الخطوة 3: وضع سطح التحكم Kies bij في OSC (التحكم في الصوت المفتوح)

الخطوة 4: اسم الجهاز Vul je in ، vink Recieve on port aan en vul in wat er في معالجة bij Sendport staat

الخطوة 5: Kopieer de Host IP die je hier ziet en vul deze in Processing

الخطوة 6: Druk op ok en de controller is nu verbonden met Reaper

الخطوة 5: التوبيخ

الذنب
الذنب

Breedte: 170 ملم

الطول: 90 ملم

Hoogte 30 ملم

Knoppen: 16 ملم (القطر

عدادات الجهد: 3 مم (قطر)

مستشعر Afstand: Breedte 2.9 مم

Lengte 0.8 ملم

المواد: MDF (3 مم)

الخطوة 6: إليكترونيكا

الخطوة 1:

Verbind de ground en 5 volt van Arduino التقى هيت اللوح

الخطوة 2:

دبوس Verbind A0 التقى القوة 1

دبوس Verbind A1 التقى القوة 2

التقى Verbind pin A3 بجهاز استشعار الأشعة تحت الحمراء.

دبوس Verbind A2 يلتقي بالزر اللاصق.

دبوس Verbind A5 قابل للزر اللاصق.

الخطوة 7: Medewerkers

Medewerkers
Medewerkers

- مايس البابا

- أرنو غوريسين

- ميشيل دي وانديلير

موصى به: