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

PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox: 6 خطوات (بالصور)
PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox: 6 خطوات (بالصور)

فيديو: PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox: 6 خطوات (بالصور)

فيديو: PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox: 6 خطوات (بالصور)
فيديو: 06 01 Overview of the assembled hardware 2024, شهر نوفمبر
Anonim
PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox
PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox
PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox
PlotClock و WeMos و Blynk يلعبون Vintage AMI Jukebox

جعلت أربعة ابتكارات تقنية هذا المشروع ممكنًا: 1977 Rowe AMI Jukebox ، مجموعة ذراع الروبوت PlotClock ، متحكم WeMos / ESP 8266 وخدمة Blynk App / Cloud.

ملاحظة: إذا لم يكن لديك صندوق الموسيقى في متناول يدك - فلا تتوقف عن القراءة! يمكن اعتماد هذا المشروع بسهولة للتحكم في الأشياء المختلفة التي تتحكم فيها الأصابع البشرية. يمكن أن يكون أحد الأمثلة هو إصبع روبوت يلعب Xylophone التقليدي - ربما يأتي هذا التوجيه منك!

لا يزال جهاز Rowe AMI R-81 Jukebox البالغ من العمر 40 عامًا يعمل بشكل جيد في لعب أغنيات الفينيل الكلاسيكية من الستينيات والسبعينيات والثمانينيات. هذا المشغل الذي يزيد وزنه عن 160 كجم (360 رطلاً) ليس محمولًا تمامًا مثل مشغلات mp الحديثة ، ولكنه يعيش في عصر الإنترنت ، فمن الممكن الآن حمل صندوق الموسيقى و 200 سجل فينيل في جيبك - بالطبع تقريبًا! ويمكنك حتى استخدام قوائم التشغيل الخاصة بك المخزنة في وحدة التحكم الدقيقة!

تم تصميم روبوت Amazing PlotClock في الأصل لإظهار الوقت الحالي عن طريق رسم أرقام الوقت على السبورة القابلة للمسح. إن تكيفي مع PlotClock هو استخدامه كإصبع آلي للضغط على أزرار اختيار أغنية Jukebox.

يتم تشغيل "إصبع" Plotclock بواسطة 3 أجهزة تحكم يتم التحكم فيها بواسطة متحكم WeMos. هذه القطعة الرائعة متوافقة (تقريبًا) مع Arduino Uno ولديها إمكانات WiFi ، لذلك من الممكن التحكم في صندوق الموسيقى لاسلكيًا من أي مكان في العالم.

يأتي الكريم الموجود على الكعكة من تطبيق Blynk المذهل سهل الاستخدام وخادم Blynk Cloud Server الذي يوفر واجهة مستخدم رائعة للهاتف المحمول / الجهاز اللوحي مع إمكانية التنقل الكاملة.

الخطوة 1: الأجهزة

المعدات
المعدات
المعدات
المعدات

صندوق الموسيقى

مشروع الموسيقي هو 1977 Rowe AMI R-81. أي صندوق موسيقي قديم به أزرار اختيار سيفي بالغرض - مع ملاحظة بعض القيود بواسطة PlotClock: يمكن أن يغطي تصميم الأذرع الأصلية لـ PlotClock مساحة حوالي 5 × 12 سم لذا يجب أن يكون تخطيط زر الصندوق الموسيقي (المنطقة بما في ذلك جميع أزرار التحديد) بهذا الحجم تقريبًا. قد تحتاج أزرار الصناديق الموسيقية الأقدم إلى قوة دفع أكبر مما يمكن أن توفره الماكينات PlotClock.

تحتوي AMI R-81 على ذاكرة يمكنها تخزين 200 تحديد. يتم تشغيل التحديدات بناءً على ترتيب تخزينها في مجلة التسجيل (نوع دائري) ، وليس حسب الترتيب الذي تم اختيارهم به. يتم تشغيل التحديدات المتعددة لسجل واحد مرة واحدة فقط.

مؤامرة

Plotclock هو مجموعة أدوات DIY متوفرة تجارياً بما في ذلك الأجزاء الميكانيكية و 3 أجهزة و Arduino Uno R3 ولوحة تمديد Arduino وكابل USB. لحوالي 30 دولارًا أمريكيًا ، يعد هذا شراءًا جيدًا (مثل Banggood.com). لا يتم استخدام Arduino ولوحة التمديد وكابل USB لهذا المشروع.

هناك العديد من البرامج التعليمية الجيدة على الإنترنت / يوتيوب لتأليف Plotclock - على سبيل المثال. هذا: تعليمات PlotClock

static1.squarespace.com/static/52cb189ee4b012ff9269fa8e/t/5526946be4b0ed8e0b3cd296/1428591723698/plotclock_final_instructions.pdf

WeMos

WeMos D1 R2 عبارة عن متحكم دقيق يعتمد على ESP8266. يمكن برمجتها باستخدام Arduino IDE ولديها إمكانيات WiFi ، لذا فهي قطعة مثالية من الأجهزة لهذا المشروع.

الخطوة 2: المعايرة

معايرة
معايرة

المعايرة هي مهمة إيجاد قيم زاوية دقيقة لزوايا المؤازرة (بين 0 إلى 180 درجة) لتتوافق مع المواضع المادية لأزرار التحديد. يمكن العثور على قيم الزاوية عن طريق علم المثلثات أو باستخدام برنامج CAD. حصلت على قيم تقريبية من صديقي الذي كان يعرف كيفية استخدام AutoCad.

ومع ذلك ، يجب إجراء المعايرة النهائية عن طريق التجربة والخطأ. استخدام تخطيط الزر المرسوم على قطعة الورق من الممكن إجراء "اختبار سطح المكتب" للعثور على قيم الزاوية الصحيحة.

الخطوة 3: التجميع

المجسم
المجسم
المجسم
المجسم
المجسم
المجسم
المجسم
المجسم

الأسلاك

يتم الاتصال من أجهزة Plotclock إلى Wemos باستخدام 5 أسلاك: +5 و GND و D4 و D5 و D6. انظر التفاصيل في الصور والكود.

التثبيت على Jukebox

لم أكن أرغب في عمل أي فتحات لولبية في صندوق الموسيقى الذي يبلغ من العمر 40 عامًا والذي نجا لفترة طويلة دون أضرار كبيرة. باستخدام مانع التسرب المطاطي الناعم ، قمت بتثبيت قطعة من قائمة زاوية الألمنيوم أسفل وحدة التحكم في صندوق الموسيقى. مانع التسرب المطاطي يجعل الإمساك محكمًا ويمكن إزالته دون ترك أي علامات. احتاج جسم PlotClock إلى زاويتين صغيرتين من الألمنيوم للمساعدة في تركيبه على لوح الأكريليك. يتم بعد ذلك تركيب لوح الأكريليك في قائمة الزاوية بمشابك زنبركي محملان مما يتيح إمكانية إجراء التعديلات النهائية رأسيًا وأفقيًا.

الخطوة 4: بلينك

بلينك
بلينك

Blynk هو تطبيق مجاني للتحكم عن بعد في عدة أنواع من وحدات التحكم الدقيقة. مع Blynk ، يمكنك بسهولة إنشاء واجهة مستخدم رائعة باستخدام عدة أنواع من الأدوات. لا يوجد سوى عنصر واجهة مستخدم واحد مطلوب لهذا المشروع: عنصر واجهة مستخدم الجدول.

الخطوة 5: البرمجيات

تطبيق Blynk

لا يوجد ترميز في جانب التطبيق. تتم معالجة "المحادثة" بين التطبيق (Blynk) والميكروكونترولر (WeMos) عن طريق "دبابيس افتراضية" والتي هي أساسًا قنوات لإرسال واستقبال المعلومات بين هذين الاثنين. يتم استخدام الدبوس الافتراضي على سبيل المثال لإرسال رقم صف الأغنية المحددة من تطبيق Blynk إلى WeMos ، ويتولى Wemos الباقي ، أي. إرسال الأوامر إلى الماكينات Plotclock.

كود WeMos

/**************************************************************

عنصر واجهة مستخدم الجدول في V2 ************************************************ **************** / #define BLYNK_PRINT Serial #include #include #include char auth = "--Your AUTH CODE -"؛ // Jukebox project char ssid = "- your SSID--"؛ char pass = "- WIFI PASSWORD--" ؛ int ج [50] ؛ // صفيف لمواقع تسجيل Jukebox (100-299) Servo myservo1 ؛ // رفع المؤازرة myservo2 ؛ // myservo3 الذراع الأيسر // الذراع اليمنى int pos1 = 0 ؛ عدد نقاط البيع 2 = 0 ؛ عدد نقاط البيع 3 = 0 ؛ كثافة العمليات btn = 0 ؛ إعداد باطل () {myservo1.attach (2) ؛ // pin D4 ، ارفع myservo2.attach (14) ؛ // pin D5 ، اليسار myservo3.attach (12) ؛ // pin D6 ، صحيح myservo1.write (140) ؛ myservo2.write (90) ، myservo3.write (90) ، Serial.begin (115200) ؛ Blynk.begin (auth ، ssid ، pass) ؛ // إعلام فورًا عند بدء التشغيل // String msg = "Jukebox WeMos متصل بـ:"؛ //Blynk.notify(msg + ssid) ؛ // مسح الجدول في البداية Blynk.virtualWrite (V2، "clr") ؛ populateTable () ، } BLYNK_WRITE (V2) // تلقي الأوامر من عنصر واجهة مستخدم الجدول V2 {String cmd = param [0].asStr () ؛ // param [0] = "select" أو "إلغاء التحديد" ، param [1] = row Serial.print ("\ nTable: BLYNK_WRITE (V2) cmd:")؛ Serial.print (cmd) ؛ اختيار int = c [param [1].asInt ()] ؛ // رقم الصف المحدد موجود في بارام [1] Serial.println ("\ nSelection:")؛ Serial.println (اختيار) ؛ عملية_اختيار (اختيار) ؛ } void populateTable () {int i = 0؛ Serial.println ("ملء الجدول …")؛ Blynk.virtualWrite (V2، "add"، 0، "Be My Baby - The Supremes"، 112) ؛ ج = 112 ؛ Blynk.virtualWrite (V2 ، "add" ، 1 ، "Number One - Jerry Williams" ، 176) ؛ أنا ++ ؛ ج = 176 ؛ Blynk.virtualWrite (V2 ، "add" ، 2 ، "All My Loving - The Beatles" ، 184) ؛ أنا ++ ؛ ج = 184 ؛ Blynk.virtualWrite (V2 ، "add" ، 3 ، "In the Summertime - Mungo Jerry" ، 236) ؛ أنا ++ ؛ ج = 236 ؛ Blynk.virtualWrite (V2 ، "add" ، 4 ، "Black Cloud - Chubby Checker" ، 155) ؛ أنا ++ ؛ ج = 155 ؛ Blynk.virtualWrite (V2، "add"، 5، "Mamy Blue - Pop-Tops"، 260) ؛ أنا ++ ؛ ج = 260 ؛ Blynk.virtualWrite (V2، "add"، 6، "It's Gonna Be Alright - Gerry & Pacemakers"، 145) ؛ أنا ++ ؛ ج = 145 ؛ Blynk.virtualWrite (V2 ، "add" ، 7 ، "My Way - Tom Jones" ، 193) ؛ أنا ++ ؛ ج = 193 ؛ Blynk.virtualWrite (V2 ، "add" ، 8 ، "San Bernadino - Christie" ، 149) ؛ أنا ++ ؛ ج = 149 ؛ Blynk.virtualWrite (V2 ، "add" ، 9 ، "The Twist - Chubby Checker" ، 169) ؛ أنا ++ ؛ ج = 169 ؛

تأخير (1000) ؛

} void process_selection (int selection) {// parse 3-digit Selection (eg. 178) to 3 أزرار: int btn1 = int (select / 100)؛ // الزر الأول Serial.println ("\ nBtn1:")؛ Serial.println (btn1) ؛ إذا (btn1 == 1 || btn1 == 2) // يجب أن يكون الزر الأول 1 أو 2 - وإلا فقم بإعادة الضبط {push_button (btn1) ؛ الاختيار = الاختيار - (btn1 * 100) ؛ int btn2 = int (select / 10) ؛ // الزر الثاني Serial.println ("\ nBtn2:")؛ Serial.println (btn2) ؛ زر الضغط (btn2) ؛ الاختيار = الاختيار - (btn2 * 10) ؛ int btn3 = int (اختيار) ؛ // الزر الثالث Serial.println ("\ nBtn3:")؛ Serial.println (btn3) ؛ زر الضغط (btn3) ؛ } else {push_button (11) ؛ // reset button} // إعادة تعيين أوضاع المؤازرة عند الانتهاء من التأخير (2000) ؛ myservo1.write (140) ؛ myservo2.write (90) ، myservo3.write (90)؛} زر push_button باطل (int btn) {// هذا يسمى 3 مرات لكل تحديد // يتم الضغط الفعلي على الزر بعد كل زر (ابحث عن "ضغط الزر الفعلي") مفتاح التبديل (btn) {حالة 1: set_servo_angles (134 ، 136) ؛ // 1 استراحة الحالة 2: set_servo_angles (128 ، 110) ؛ // 2 استراحة ؛ الحالة 3: set_servo_angles (112 ، 88) ؛ // 3 استراحة الحالة 4: set_servo_angles (89 ، 68) ؛ // 4 استراحة ؛ الحالة 5: set_servo_angles (62 ، 55) ؛ // 5 استراحة الحالة 6: set_servo_angles (172 ، 131) ؛ // 6 استراحة الحالة 7: set_servo_angles (163 ، 106) ؛ // 7 استراحة الحالة 8: set_servo_angles (140 ، 83) ؛ // 8 استراحة الحالة 9: set_servo_angles (104 ، 58) ؛ // 9 استراحة الحالة 0: set_servo_angles (75 ، 36) ؛ // 0 استراحة الحالة 11: set_servo_angles (36 ، 30) ؛ // 11 استراحة ؛ } // end switch} void set_servo_angles (int pos2، int pos3) {myservo2.write (pos2) ؛ myservo3.write (pos3) ؛ // مواضع المؤازرة جاهزة - قم بإجراء ضغط الزر الفعلي: تأخير (500) ؛ myservo1.write (60) ، // تأخير تأخير (500) ؛ myservo1.write (140) ؛ // يصل تأخير (500) ؛ } حلقة فارغة () {Blynk.run ()؛ }

الخطوة السادسة: الخطوات المستقبلية

عنصر واجهة مستخدم الفيديو - بث مباشر للفيديو والصوت إلى تطبيق Blynk (تم اختباره بالفعل - يعمل)

أداة Webhook - تنزيل قائمة التشغيل عند الطلب من السحابة (تم اختبارها بالفعل - تعمل)

عنصر واجهة مستخدم الجدول - نرحب ببعض التحسينات الصغيرة على الأداة (يتم إرسال الاقتراحات إلى مطوري Blynk)

موصى به: