สารบัญ:

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 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Remote Robot finger playing Vintage AMI Jukebox 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

หมายเหตุ: หากคุณไม่มีตู้เพลงอยู่ในมือ อย่าหยุดอ่าน! โครงการนี้สามารถนำมาใช้เพื่อควบคุมสิ่งต่าง ๆ ที่ควบคุมด้วยนิ้วมือของมนุษย์ได้อย่างง่ายดาย ตัวอย่างหนึ่งอาจเป็นนิ้วของหุ่นยนต์ที่เล่นระนาดแบบดั้งเดิม – บางทีคำแนะนำนั้นอาจมาจากคุณ!

Rowe AMI R-81 Jukebox อายุ 40 ปีของฉันยังคงทำงานได้ดีในการเล่นซิงเกิลไวนิลแบบวินเทจจากยุค 60's 70' และ 80's น้ำหนักมากกว่า 160 กก. (360 ปอนด์) เครื่องเล่นนี้ไม่พกพาง่ายเหมือนเครื่องเล่น MP สมัยใหม่ แต่ในยุคอินเทอร์เน็ต ตอนนี้คุณสามารถพกตู้เพลงและแผ่นเสียง 200 แผ่นในกระเป๋าของคุณ - แน่นอน! และคุณยังสามารถใช้เพลย์ลิสต์ของคุณเองที่จัดเก็บไว้ในไมโครคอนโทรลเลอร์ได้อีกด้วย!

หุ่นยนต์ Amazing PlotClock ได้รับการออกแบบมาเพื่อแสดงเวลาปัจจุบันโดยการวาดตัวเลขเวลาบนกระดานที่ลบได้ การปรับตัวของฉันสำหรับ PlotClock คือการใช้มันเป็นนิ้วหุ่นยนต์สำหรับการกดปุ่มเลือกเพลงของ Jukebox

Plotclock”finger” นั้นขับเคลื่อนด้วยเซอร์โว 3 ตัวที่ควบคุมโดยไมโครคอนโทรลเลอร์ WeMos สิ่งมหัศจรรย์ชิ้นนี้ (เกือบ) เข้ากันได้กับ Arduino Uno และมีความสามารถ WiFi ดังนั้นจึงสามารถควบคุมตู้เพลงแบบไร้สายได้จากทุกที่ในโลก

ครีมบนเค้กมาจากแอพ Blynk ที่ใช้งานง่ายอย่างไม่น่าเชื่อและ Blynk Cloud Server ที่ให้ส่วนต่อประสานผู้ใช้โทรศัพท์มือถือ / แท็บเล็ตที่ดีพร้อมความคล่องตัวเต็มรูปแบบ

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

ตู้เพลง

ตู้เพลงของโครงการคือ 1977 Rowe AMI R-81 ตู้เพลงเก่าที่มีปุ่มเลือกจะใช้งานได้ โดยสังเกตจากข้อจำกัดบางประการของ PlotClock: การออกแบบแขนดั้งเดิมของ PlotClock สามารถครอบคลุมพื้นที่ได้ประมาณ 5 x 12 ซม. ดังนั้นเลย์เอาต์ของปุ่มตู้เพลง (พื้นที่รวมถึงปุ่มเลือกทั้งหมด) จึงต้องมีขนาดประมาณนั้น ปุ่มของตู้เพลงรุ่นเก่าอาจต้องการแรงผลักมากกว่าที่เซอร์โว PlotClock สามารถให้ได้

AMI R-81 มีหน่วยความจำที่สามารถจัดเก็บการเลือกทั้งหมด 200 รายการ การเลือกจะเล่นตามลำดับที่จัดเก็บไว้ในนิตยสารบันทึก (ประเภทภาพหมุน) ไม่ใช่ลำดับที่เลือก การเลือกหลายรายการสำหรับหนึ่งบันทึกจะเล่นเพียงครั้งเดียว

พล็อตนาฬิกา

Plotclock เป็นชุด DIY ที่มีจำหน่ายทั่วไปรวมถึงชิ้นส่วนเครื่องจักรกล, 3 เซอร์โว, Arduino Uno R3, บอร์ดขยาย Arduino และสาย USB ประมาณ 30 USD นี่เป็นการซื้อที่ดี (เช่น Banggood.com) โครงการนี้ไม่ได้ใช้ Arduino, บอร์ดต่อขยาย และสาย USB

มีบทช่วยสอนทางอินเทอร์เน็ต/YouTube ดีๆ มากมายสำหรับการเขียน 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 ดูรายละเอียดในรูปและรหัส

การติดตั้งบนตู้เพลง

ฉันไม่อยากทำรูสกรูใดๆ ให้กับตู้เพลงอายุ 40 ปี ที่อยู่รอดมายาวนานโดยไม่มีความเสียหายร้ายแรง ด้วยการใช้น้ำยาซีลยางแบบอ่อน ฉันแก้ไขรายการมุมอลูมิเนียมใต้คอนโซลตู้เพลง กาวยางทำให้ยึดแน่นและสามารถแกะออกได้โดยไม่ทิ้งรอยใดๆ ตัว PlotClock ต้องการมุมอลูมิเนียมขนาดเล็กสองมุมเพื่อช่วยติดตั้งบนแผ่นอะคริลิก จากนั้นแผ่นอะคริลิกจะติดตั้งเข้ากับรายการมุมด้วยคลิปหนีบสปริงสองตัว ทำให้สามารถปรับขั้นสุดท้ายในแนวตั้งและแนวนอนได้

ขั้นตอนที่ 4: Blynk

Blynk
Blynk

Blynk เป็นแอปฟรีสำหรับควบคุมไมโครคอนโทรลเลอร์หลายประเภทจากระยะไกล ด้วย Blynk คุณสามารถสร้างอินเทอร์เฟซผู้ใช้ที่ดีได้อย่างง่ายดายโดยใช้วิดเจ็ตหลายประเภท มีวิดเจ็ตเดียวเท่านั้นที่จำเป็นสำหรับโปรเจ็กต์นี้: วิดเจ็ตตาราง

ขั้นตอนที่ 5: ซอฟต์แวร์

แอพ Blynk

ไม่มีการเข้ารหัสที่ด้านแอป”การสนทนา” ระหว่างแอพ (Blynk) และไมโครคอนโทรลเลอร์ (WeMos) ได้รับการจัดการโดย”Virtual pins” ซึ่งโดยพื้นฐานแล้วเป็นช่องทางสำหรับการส่งและรับข้อมูลระหว่างทั้งสอง ตัวอย่างเช่น พินเสมือนใช้เพื่อส่งหมายเลขแถวของเพลงที่เลือกจากแอป Blynk ไปยัง WeMos และ Wemos จะจัดการส่วนที่เหลือ เช่น ส่งคำสั่งไปยังเซอร์โว Plotclock

รหัส WeMos

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

วิดเจ็ตตารางที่ V2 ********************************************** ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "--YOUR AUTH CODE--"; //Jukebox โปรเจ็กต์ char ssid = "--YOUR SSID--"; char pass = "--รหัสผ่าน WIFI ของคุณ--"; int ค[50]; //อาร์เรย์สำหรับตำแหน่งบันทึกตู้เพลง (100-299) Servo myservo1; //ยก Servo myservo2; //แขนซ้าย Servo myservo3; // แขนขวา int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn=0; การตั้งค่าเป็นโมฆะ () { myservo1.attach (2); // ปักหมุด D4, ยก myservo2.attach(14); // ปักหมุด D5 ซ้าย myservo3.attach(12); // ปักหมุด D6 ขวา myservo1.write (140); myservo2.write(90); myservo3.write(90); Serial.begin(115200); Blynk.begin(รับรองความถูกต้อง, ssid, ผ่าน); // แจ้งเตือนทันทีเมื่อเริ่มต้น //String msg = "Jukebox WeMos เชื่อมต่อกับ: "; //Blynk.notify(msg + ssid); //ล้างตารางเมื่อเริ่มต้น Blynk.virtualWrite(V2, "clr"); populateTable(); } BLYNK_WRITE(V2) //รับคำสั่งจาก Table widget V2 { String cmd = param[0].asStr(); //param[0]="select" หรือ "deselect", param[1]=row Serial.print("\nTable: BLYNK_WRITE(V2) cmd: "); Serial.print(cmd); การเลือก int = c[param[1].asInt()]; //หมายเลขแถวที่เลือกอยู่ในพารามิเตอร์ [1] Serial.println("\nSelection: "); Serial.println (เลือก); process_selection(การเลือก); } โมฆะ populateTable() { int i = 0; Serial.println("กำลังเติมตาราง…"); Blynk.virtualWrite(V2, "เพิ่ม", 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, "เพิ่ม", 4, "Black Cloud - Chubby Checker", 155); ผม++; ค = 155; Blynk.virtualWrite(V2, "เพิ่ม", 5, "Mamy Blue - Pop-Tops", 260); ผม++; ค = 260; Blynk.virtualWrite(V2, "เพิ่ม", 6, "It's Gonna Be Alright - Gerry & Pacemakers", 145); ผม++; ค = 145; Blynk.virtualWrite(V2, "add", 7, "My Way - Tom Jones", 193); ผม++; ค = 193; Blynk.virtualWrite(V2, "เพิ่ม", 8, "ซานเบอร์นาดิโน - คริสตี้", 149); ผม++; ค = 149; Blynk.virtualWrite(V2, "เพิ่ม", 9, "The Twist - Chubby Checker", 169); ผม++; ค = 169;

ล่าช้า (1000);

} โมฆะ process_selection (การเลือก int) { // แยกการเลือกตัวเลข 3 หลัก (เช่น 178) ถึง 3 ปุ่ม: int btn1 = int (การเลือก/100); //ปุ่มแรก Serial.println("\nBtn1: "); Serial.println(btn1); ถ้า (btn1 == 1 || btn1 == 2) // ปุ่มแรกต้องเป็น 1 หรือ 2 - มิฉะนั้นให้ทำการรีเซ็ต { push_button (btn1); การเลือก = การเลือก - (btn1 * 100); int btn2 = int(การเลือก/10); //ปุ่มที่สอง Serial.println("\nBtn2: "); Serial.println(btn2); push_button(btn2); การเลือก = การเลือก - (btn2 * 10); int btn3 = int(การเลือก); //ปุ่มที่สาม Serial.println("\nBtn3: "); Serial.println(btn3); push_button(btn3); } อื่น ๆ { push_button(11); // ปุ่มรีเซ็ต } // รีเซ็ตตำแหน่งเซอร์โวเมื่อทั้งหมดล่าช้า (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 } เป็นโมฆะ set_servo_angles (int pos2, int pos3) { myservo2.write (pos2); myservo3.write(pos3); // ตำแหน่งเซอร์โวพร้อม - กดปุ่มจริง: หน่วงเวลา (500); myservo1.write(60); // ล่าช้า (500); myservo1.write(140); //ขึ้นล่าช้า(500); } วงเป็นโมฆะ () { Blynk.run (); }

ขั้นตอนที่ 6: ขั้นตอนในอนาคต

วิดเจ็ตวิดีโอ - วิดีโอสดและสตรีมเสียงไปยังแอป Blynk (ทดสอบแล้ว - ใช้งานได้)

วิดเจ็ต Webhook - ดาวน์โหลดเพลย์ลิสต์ตามต้องการจากคลาวด์ (ทดสอบแล้ว - ใช้งานได้)

วิดเจ็ตตาราง - ยินดีต้อนรับการปรับปรุงเล็กน้อยในวิดเจ็ต (คำแนะนำที่ส่งไปยังนักพัฒนา Blynk)

แนะนำ: