Innehållsförteckning:

PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox: 6 steg (med bilder)
PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox: 6 steg (med bilder)

Video: PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox: 6 steg (med bilder)

Video: PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox: 6 steg (med bilder)
Video: Remote Robot finger playing Vintage AMI Jukebox 2024, Juli
Anonim
PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox
PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox
PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox
PlotClock, WeMos och Blynk spelar Vintage AMI Jukebox

Fyra tekniska innovationer gjorde detta projekt möjligt: 1977 Rowe AMI Jukebox, PlotClock robotarmsats, WeMos/ESP 8266 mikrokontroller och Blynk App/Cloud service.

OBS: Om du inte har Jukebox till hands - sluta inte läsa! Detta projekt kan enkelt antas för att styra olika saker som styrs av mänskliga fingrar. Ett exempel kan vara ett robotfinger som spelar traditionell xylofon - kanske det instruerbara kommer från dig!

Min 40 år gamla Rowe AMI R-81 Jukebox arbetar fortfarande fint med att spela vintage vinylsinglar från 60-, 70- och 80-talet. Den här spelaren väger över 160 kg (360 lbs) och är inte riktigt lika bärbar som moderna mp-spelare, men när du lever på internet är det nu möjligt att bära jukeboxen och 200 vinylskivor i fickan-i princip såklart! Och du kan till och med använda dina egna spellistor lagrade i mikrokontrollern!

Amazing PlotClock -roboten är ursprungligen utformad för att visa aktuell tid genom att rita tidssiffror på det raderbara kortet. Min anpassning för PlotClock är att använda den som ett robotfinger för att trycka på knappar för val av Jukebox -låtar.

Plotclock”finger” drivs av 3 servon som styrs av WeMos mikrokontroller. Denna underverk är (nästan) Arduino Uno -kompatibel och har WiFi -funktioner, så det är möjligt att styra jukeboxen trådlöst var som helst i världen.

Krämen på tårtan kommer från den otroligt lättanvända Blynk -appen och deras Blynk Cloud Server som ger ett snyggt användargränssnitt för mobiltelefon/surfplatta med full rörlighet.

Steg 1: Hårdvara

Hårdvara
Hårdvara
Hårdvara
Hårdvara

Jukebox

Project jukebox är 1977 Rowe AMI R-81. Varje gammal jukebox med markeringsknappar gör - noterar några begränsningar av PlotClock: PlotClocks originalarmdesign kan täcka ett område ca 5 x 12 cm så att jukebox -knappens layout (område inklusive alla markeringsknappar) måste vara ungefär den storleken. Knapparna på äldre jukeboxar kan behöva mer skjutkraft än vad PlotClock -servon kan ge.

AMI R-81 har ett minne där det kan lagra alla 200 val. Urval spelas baserat på den ordning de lagras i skivmagasinet (karuselltyp), inte på den ordning de väljs. Flera val för en skiva spelas bara en gång.

PlotClock

Plotclock är kommersiellt tillgängligt DIY kit inklusive mekaniska delar, 3 servon, Arduino Uno R3, Arduino Extension board och USB -kabel. För cirka 30 USD är detta ett bra köp (t.ex. Banggood.com). Arduino, förlängningskort och USB -kabel används inte för detta projekt.

Det finns flera bra internet/YouTube -handledning för att komponera Plotclock - t.ex. detta: PlotClock instruktioner

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

WeMos

WeMos D1 R2 är ESP8266 -baserad mikrokontroller. Det kan programmeras med Arduino IDE och har WiFi -funktioner så det är en perfekt hårdvara för detta projekt.

Steg 2: Kalibrering

Kalibrering
Kalibrering

Kalibrering är uppgiften för att hitta exakta vinkelvärden för servovinklar (mellan 0 till 180 grader) för att motsvara fysiska positioner för markeringsknappar. Vinkelvärden kan hittas genom trigonometri -aritemitik eller med hjälp av en CAD -programvara. Jag fick ungefärliga värden från min vän som visste hur man använder AutoCad.

Den slutliga kalibreringen måste dock göras genom försök och fel. Använda knapplayouten ritad på papperet Det är möjligt att göra”skrivbordstestning” för att hitta rätt vinkelvärden.

Steg 3: Montering

hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning

Kabeldragning

Anslutning från Plotclock -servon till Wemos görs med 5 ledningar: +5, GND, D4, D5 och D6. Se detaljer i bilder och kod.

Installera på Jukebox

Jag ville inte göra några skruvhål till den 40 år gamla jukeboxen som hade överlevt så länge utan större skador. Med hjälp av mjuk gummitätning fixade jag en bit aluminiumvinkellista under jukeboxkonsolen. Gummitätning håller hårt och kan tas bort utan att lämna några märken. PlotClock -kroppen behövde två små aluminiumvinklar för att hjälpa till att montera den på akrylplattan. Akrylplattan monteras sedan på vinkellistan med två fjäderbelastade klämmor, vilket ger möjlighet att göra slutliga justeringar vertikalt och horisontellt.

Steg 4: Blynk

Blynk
Blynk

Blynk är en gratis app för fjärrstyrning av flera typer av mikrokontroller. Med Blynk kan du enkelt bygga ett trevligt användargränssnitt med hjälp av flera typer av widgets. Det finns bara en widget som behövs för detta projekt: tabell -widgeten.

Steg 5: Programvara

Blynk App

Det finns ingen kodning på appsidan. "Konversationen" mellan appen (Blynk) och mikrokontrollern (WeMos) hanteras av "Virtuella pins" som i huvudsak är kanaler för att skicka och ta emot information mellan dessa två. Virtuell pin används till exempel för att skicka radnumret för vald låt från Blynk -appen till WeMos, och Wemos hanterar resten, dvs. skicka kommandon till Plotclock -servona.

WeMos -kod

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

Tabellwidget på V2 ********************************************** ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "-DIN AUTH CODE--"; // Jukebox-projekt char ssid = "-DIN SSID--"; char pass = "-DITT WIFI LÖSENORD--"; int c [50]; // Array för Jukebox-rekordpositioner (100-299) Servo myservo1; // lyft Servo myservo2; // vänster arm Servo myservo3; // höger arm int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn = 0; void setup () {myservo1.attach (2); // stift D4, lyft myservo2.attach (14); // stift D5, vänster myservo3.attach (12); // stift D6, höger myservo1.write (140); myservo2.write (90); myservo3.write (90); Serial.begin (115200); Blynk.begin (auth, ssid, pass); // Meddela omedelbart vid start // String msg = "Jukebox WeMos ansluten till:"; //Blynk.notify(msg + ssid); // rensa tabell vid start Blynk.virtualWrite (V2, "clr"); populateTable (); } BLYNK_WRITE (V2) // Ta emot kommandon från tabellwidgeten V2 {String cmd = param [0].asStr (); // param [0] = "välj" eller "avmarkera", param [1] = rad Serial.print ("\ nTabell: BLYNK_WRITE (V2) cmd:"); Serial.print (cmd); int selection = c [param [1].asInt ()]; // Valt radnummer finns i param [1] Serial.println ("\ nVal:"); Serial.println (urval); process_selection (urval); } void populateTable () {int i = 0; Serial.println ("Befolkningstabell …"); Blynk.virtualWrite (V2, "lägg till", 0, "Be My Baby - The Supremes", 112); c = 112; Blynk.virtualWrite (V2, "add", 1, "Number One - Jerry Williams", 176); i ++; c = 176; Blynk.virtualWrite (V2, "add", 2, "All My Loving - The Beatles", 184); i ++; c = 184; Blynk.virtualWrite (V2, "add", 3, "In the Summertime - Mungo Jerry", 236); i ++; c = 236; Blynk.virtualWrite (V2, "add", 4, "Black Cloud - Chubby Checker", 155); i ++; c = 155; Blynk.virtualWrite (V2, "add", 5, "Mamy Blue - Pop -Tops", 260); i ++; c = 260; Blynk.virtualWrite (V2, "add", 6, "It's Gonna Be Alright - Gerry & Pacemakers", 145); i ++; c = 145; Blynk.virtualWrite (V2, "lägg till", 7, "My Way - Tom Jones", 193); i ++; c = 193; Blynk.virtualWrite (V2, "lägg till", 8, "San Bernadino - Christie", 149); i ++; c = 149; Blynk.virtualWrite (V2, "add", 9, "The Twist - Chubby Checker", 169); i ++; c = 169;

fördröjning (1000);

} void process_selection (int selection) {// parse 3-siffrigt urval (t.ex. 178) till 3 knappar: int btn1 = int (selection/100); // första knappen Serial.println ("\ nBtn1:"); Serial.println (btn1); om (btn1 == 1 || btn1 == 2) // första knappen måste vara 1 eller 2 - annars återställ {push_button (btn1); urval = urval - (btn1 * 100); int btn2 = int (urval/10); // andra knappen Serial.println ("\ nBtn2:"); Serial.println (btn2); tryckknapp (btn2); urval = urval - (btn2 * 10); int btn3 = int (urval); // tredje knappen Serial.println ("\ nBtn3:"); Serial.println (btn3); tryckknapp (btn3); } annat {push_button (11); // Återställningsknapp} // Återställ servopositioner när alla färdiga fördröjningar (2000); myservo1.write (140); myservo2.write (90); myservo3.write (90);} void push_button (int btn) {// detta kallas 3 gånger för varje val // faktisk knapptryckning görs efter varje knapp (hitta "faktisk knapptryckning") -brytare (btn) {case 1: set_servo_angles (134, 136); // 1 paus; fall 2: set_servo_angles (128, 110); // 2 pauser; fall 3: set_servo_angles (112, 88); // 3 pauser; fall 4: set_servo_angles (89, 68); // 4 pauser; fall 5: set_servo_angles (62, 55); // 5 raster; fall 6: set_servo_angles (172, 131); // 6 pauser; fall 7: set_servo_angles (163, 106); // 7 raster; fall 8: set_servo_angles (140, 83); // 8 pauser; fall 9: set_servo_angles (104, 58); // 9 paus; fall 0: set_servo_angles (75, 36); // 0 paus; fall 11: set_servo_angles (36, 30); // 11 paus; } // end switch} void set_servo_angles (int pos2, int pos3) {myservo2.write (pos2); myservo3.write (pos3); // Servopositioner klara - utför det faktiska knapptrycket: fördröjning (500); myservo1.write (60); // nedfördröjning (500); myservo1.write (140); // uppfördröjning (500); } void loop () {Blynk.run (); }

Steg 6: Framtida steg

Video -widget - live video och ljudström till Blynk -appen (redan testad - fungerar)

Webhook -widget - spellista för nedladdning på begäran från moln (redan testad - fungerar)

Tabellwidget - några små förbättringar av widgeten är välkomna (förslag skickas till Blynk -utvecklare)

Rekommenderad: