جدول المحتويات:
- الخطوة 1: وات هيب جي نوديج؟
- الخطوة الثانية: معالجة الكود
- الخطوة 3: كود اردوينو
- الخطوة 4: حصادة
- الخطوة 5: التوبيخ
- الخطوة 6: إليكترونيكا
- الخطوة 7: Medewerkers
فيديو: وحدة التحكم الرجعية: 7 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
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
- مايس البابا
- أرنو غوريسين
- ميشيل دي وانديلير
موصى به:
اصنع وحدة تحكم الألعاب الرجعية المحمولة الخاصة بك! وهو أيضًا جهاز لوحي Win10: 6 خطوات (بالصور)
اصنع وحدة تحكم الألعاب الرجعية المحمولة الخاصة بك! …… وهو أيضًا جهاز لوحي Win10!: في هذا المشروع سأوضح لك كيفية إنشاء وحدة تحكم ألعاب قديمة يمكن استخدامها أيضًا كجهاز لوحي يعمل بنظام Windows 10. سوف تتكون من 7 & quot؛ HDMI LCD مع شاشة تعمل باللمس ، و LattePanda SBC ، و USB Type C PD Power PCB وعدد قليل من العناصر التكميلية
وحدة تحكم بأسلوب حلبة الرقص للألعاب الرجعية الضخمة: 4 خطوات
وحدة تحكم ضخمة على طراز حلبة الرقص في الألعاب الرجعية: لحفل زفافنا في شهر مارس من هذا العام ، أردنا حفل استقبال بطابع لعبة ريترو ، لأننا مجرد أطفال صغار في القلب وأنا متأكد من أن الكثير من الأشخاص الآخرين كذلك! البحث في MakeyMakey's اعتقدت أنه سيكون فكرة رائعة أن أعانقني
سيارة يتم التحكم فيها عن بعد - يتم التحكم فيها باستخدام وحدة تحكم Xbox 360 اللاسلكية: 5 خطوات
سيارة يتم التحكم فيها عن بعد - يتم التحكم فيها باستخدام وحدة تحكم Xbox 360 اللاسلكية: هذه هي التعليمات من أجل بناء سيارتك الخاصة التي يتم التحكم فيها عن بعد ، والتي يتم التحكم فيها باستخدام وحدة تحكم Xbox 360 اللاسلكية
YABC - وحدة تحكم Blynk أخرى - وحدة التحكم في درجة حرارة ورطوبة IoT Cloud ، ESP8266: 4 خطوات
YABC - مع ذلك وحدة تحكم Blynk أخرى - وحدة التحكم في درجة الحرارة والرطوبة في IoT Cloud ، ESP8266: مرحبًا صناع ، لقد بدأت مؤخرًا في زراعة الفطر في المنزل ، فطر المحار ، لكن لدي بالفعل 3 أضعاف وحدات التحكم هذه في المنزل للتحكم في درجة حرارة التخمير لمنزلي ، زوجتي يقوم أيضًا بعمل شيء Kombucha هذا الآن ، وكترموستات للحرارة
وحدة تحكم الألعاب الرجعية (N64 Mod) مع KODI: 7 خطوات (مع صور)
Retro Gaming Console (N64 Mod) مع KODI: ممارسة الألعاب القديمة على وحدات التحكم بالمدرسة القديمة أمر ممتع للغاية ، ولكن شراء وحدات التحكم الفردية وجميع الألعاب التي تتماشى معها يعد أمرًا مرهقًا ومكلفًا للغاية! ناهيك عما إذا كنت طالبًا جامعيًا أو جامعيًا وانتقل للشقق عشية