Inhoudsopgave:

PlotClock, WeMos en Blynk spelen vintage AMI Jukebox - Ajarnpa
PlotClock, WeMos en Blynk spelen vintage AMI Jukebox - Ajarnpa

Video: PlotClock, WeMos en Blynk spelen vintage AMI Jukebox - Ajarnpa

Video: PlotClock, WeMos en Blynk spelen vintage AMI Jukebox - Ajarnpa
Video: Remote Robot finger playing Vintage AMI Jukebox 2024, Juli-
Anonim
PlotClock, WeMos en Blynk spelen vintage AMI Jukebox
PlotClock, WeMos en Blynk spelen vintage AMI Jukebox
PlotClock, WeMos en Blynk spelen vintage AMI Jukebox
PlotClock, WeMos en Blynk spelen vintage AMI Jukebox

Vier technische innovaties maakten dit project mogelijk: de Rowe AMI Jukebox uit 1977, PlotClock robotarmkit, WeMos/ESP 8266 microcontroller en Blynk App/Cloud-service.

OPMERKING: Als u de Jukebox niet bij de hand heeft, stop dan niet met lezen! Dit project kan gemakkelijk worden gebruikt om verschillende dingen te besturen die door menselijke vingers worden bestuurd. Een voorbeeld kan een robotvinger zijn die traditionele xylofoon speelt - misschien komt die instructable van jou!

Mijn 40 jaar oude Rowe AMI R-81 Jukebox werkt nog steeds prima en speelt vintage vinyl singles uit de jaren 60, 70 en 80. Met een gewicht van meer dan 160 kg (360 lbs) is deze speler niet zo draagbaar als moderne mp-spelers, maar in het internettijdperk is het nu mogelijk om de jukebox en 200 vinylplaten in je zak te dragen - vrijwel natuurlijk! En u kunt zelfs uw eigen afspeellijsten gebruiken die in de microcontroller zijn opgeslagen!

Verbazingwekkende PlotClock-robot is oorspronkelijk ontworpen om de huidige tijd weer te geven door tijdcijfers op het uitwisbare bord te tekenen. Mijn aanpassing voor PlotClock is om het te gebruiken als een robotvinger voor het indrukken van Jukebox-nummerselectieknoppen.

De Plotclock "vinger" wordt aangedreven door 3 servo's die worden bestuurd door een WeMos-microcontroller. Dit wonderstuk is (bijna) Arduino Uno-compatibel en heeft WiFi-mogelijkheden, waardoor het mogelijk is om de jukebox draadloos te bedienen vanaf elke plek ter wereld.

De slagroom op de taart komt van de ongelooflijk gebruiksvriendelijke Blynk-app en hun Blynk Cloud Server die een mooie gebruikersinterface voor mobiele telefoons/tablets biedt met volledige mobiliteit.

Stap 1: Hardware

Hardware
Hardware
Hardware
Hardware

Jukebox

Projectjukebox is de Rowe AMI R-81 uit 1977. Elke oude jukebox met selectieknoppen zal het doen - enkele beperkingen van PlotClock opmerken: het originele ontwerp van de armen van PlotClock kan een gebied van ongeveer 5 x 12 cm beslaan, dus de lay-out van de jukebox-knop (gebied inclusief alle selectieknoppen) moet ongeveer die grootte hebben. De knoppen van oudere jukeboxen hebben mogelijk meer duwkracht nodig dan PlotClock-servo's kunnen bieden.

AMI R-81 heeft een geheugen waarin alle 200 selecties kunnen worden opgeslagen. Selecties worden afgespeeld op basis van de volgorde waarin ze zijn opgeslagen in het platenmagazijn (type carrousel), niet op de volgorde waarin ze zijn geselecteerd. Meerdere selecties voor één record worden slechts één keer afgespeeld.

PerceelKlok

Plotclock is een in de handel verkrijgbare doe-het-zelf kit inclusief mechanische onderdelen, 3 servo's, Arduino Uno R3, Arduino Extension board en USB-kabel. Voor ongeveer 30 USD is dit een goede koop (bijv. Banggood.com). Arduino, uitbreidingskaart en USB-kabel worden niet gebruikt voor dit project.

Er zijn verschillende goede internet/YouTube-tutorials voor het samenstellen van de Plotclock - bijv. dit: PlotClock instructies

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

WeMos

WeMos D1 R2 is een op ESP8266 gebaseerde microcontroller. Het kan worden geprogrammeerd met Arduino IDE en heeft WiFi-mogelijkheden, dus het is een perfect stuk hardware voor dit project.

Stap 2: Kalibratie

Kalibratie
Kalibratie

Kalibratie is de taak voor het vinden van nauwkeurige hoekwaarden voor servohoeken (tussen 0 en 180 graden) om overeen te komen met fysieke posities voor selectieknoppen. Hoekwaarden kunnen worden gevonden door trigonometrie-rekenkunde of met behulp van CAD-software. Ik kreeg geschatte waarden van mijn vriend die wist hoe hij AutoCad moest gebruiken.

De uiteindelijke kalibratie moest echter met vallen en opstaan worden uitgevoerd. Met behulp van de knoplay-out die op het stuk papier is getekend Het is mogelijk om de "desktoptest" uit te voeren om de juiste hoekwaarden te vinden.

Stap 3: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Bedrading

Verbinding van Plotclock-servo's naar Wemos gebeurt met 5 draden: +5, GND, D4, D5 en D6. Zie details in foto's en code.

Installeren op de Jukebox

Ik wilde geen schroefgaten maken in de 40 jaar oude jukebox die het zo lang had volgehouden zonder grote schade. Met behulp van zachte rubberen kit heb ik een stuk aluminium hoeklijst onder de jukebox-console bevestigd. Rubberen afdichtmiddel zorgt voor een stevige grip en kan worden verwijderd zonder sporen achter te laten. De behuizing van PlotClock had twee kleine aluminium hoeken nodig om hem op de acrylplaat te passen. De acrylplaat wordt vervolgens met twee veerbelaste clips op de hoeklijst gemonteerd, zodat de laatste aanpassingen verticaal en horizontaal kunnen worden gemaakt.

Stap 4: Blynk

Blynk
Blynk

Blynk is een gratis app voor het op afstand besturen van verschillende soorten microcontrollers. Met Blynk kun je eenvoudig een mooie gebruikersinterface bouwen met behulp van verschillende soorten widgets. Er is slechts één widget nodig voor dit project: de tabelwidget.

Stap 5: Software

Blynk-app

Er is geen codering aan de app-kant. Het "gesprek" tussen de app (Blynk) en de microcontroller (WeMos) wordt afgehandeld door "virtuele pinnen", die in wezen kanalen zijn voor het verzenden en ontvangen van informatie tussen die twee. Virtuele pin wordt bijvoorbeeld gebruikt om het rijnummer van het geselecteerde nummer van de Blynk-app naar WeMos te sturen, en Wemos doet de rest, dwz. het verzenden van opdrachten naar de Plotclock-servo's.

WeMos-code

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

Tabelwidget bij V2 ********************************************* ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "--UW AUTH CODE--"; //Jukebox-project char ssid = "--UW SSID--"; char pass = "--UW WIFI-WACHTWOORD--"; intc[50]; // Array voor Jukebox-recordposities (100-299) Servo myservo1; // optillen van Servo myservo2; // linkerarm Servo myservo3; // rechterarm int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn=0; void setup() { myservo1.attach(2); // pin D4, til myservo2.attach (14); // pin D5, links myservo3.attach (12); // pin D6, rechts myservo1.write (140); mijnservo2.write(90); myservo3.write(90); Serieel.begin(115200); Blynk.begin(auth, ssid, pass); // Direct informeren bij opstarten //String msg = "Jukebox WeMos verbonden met: "; //Blynk.notify (msg + ssid); // wis tabel bij start Blynk.virtualWrite (V2, "clr"); populateTable(); } BLYNK_WRITE(V2) // Ontvang opdrachten van Table widget V2 { String cmd = param[0].asStr(); //param[0]="select" of "deselect", param[1]=rij Serial.print("\nTabel: BLYNK_WRITE(V2) cmd: "); Seriële.print(cmd); int selectie = c[param[1].asInt()]; //Het geselecteerde rijnummer staat in param [1] Serial.println("\nSelectie: "); Serial.println(selectie); process_selection (selectie); } void populateTable() { int i = 0; Serial.println("Tabel invullen…"); Blynk.virtualWrite(V2, "toevoegen", 0, "Be My Baby - The Supremes", 112); c = 112; Blynk.virtualWrite(V2, "toevoegen", 1, "Nummer één - Jerry Williams", 176); i++; c = 176; Blynk.virtualWrite(V2, "toevoegen", 2, "All My Loving - The Beatles", 184); i++; c = 184; Blynk.virtualWrite(V2, "toevoegen", 3, "In de zomer - Mungo Jerry", 236); i++; c = 236; Blynk.virtualWrite(V2, "toevoegen", 4, "Black Cloud - Chubby Checker", 155); i++; c = 155; Blynk.virtualWrite(V2, "toevoegen", 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, "toevoegen", 7, "My Way - Tom Jones", 193); i++; c = 193; Blynk.virtualWrite(V2, "toevoegen", 8, "San Bernadino - Christie", 149); i++; c = 149; Blynk.virtualWrite(V2, "toevoegen", 9, "The Twist - Chubby Checker", 169); i++; c = 169;

vertraging (1000);

} void process_selection (int selectie) { // ontleden 3-cijferige selectie (bijv. 178) tot 3 knoppen: int btn1 = int (selectie/100); //eerste knop Serial.println ("\nBtn1: "); Serieel.println(btn1); if (btn1 == 1 || btn1 == 2) //eerste knop moet 1 of 2 zijn - doe anders de reset { push_button(btn1); selectie = selectie - (btn1 * 100); int btn2 = int(selectie/10); //tweede knop Serial.println ("\nBtn2: "); Serieel.println(btn2); drukknop (btn2); selectie = selectie - (btn2 * 10); int btn3 = int(selectie); //derde knop Serial.println ("\nBtn3: "); Serieel.println(btn3); drukknop (btn3); } else { drukknop (11); // reset-knop} // reset servoposities als alles klaar is vertraging (2000); mijnservo1.write(140); mijnservo2.write(90); myservo3.write (90);} void push_button (int btn) {//dit wordt 3 keer genoemd voor elke selectie //de daadwerkelijke druk op de knop wordt gedaan na elke knop (vind 'actuele druk op de knop') schakelaar (btn) { case 1: set_servo_angles (134, 136); //1 pauze; geval 2: set_servo_angles (128, 110); //2 pauze; geval 3: set_servo_angles (112, 88); //3 pauze; geval 4: set_servo_angles (89, 68); //4 pauze; geval 5: set_servo_angles (62, 55); //5 pauze; geval 6: set_servo_angles (172, 131); //6 pauze; geval 7: set_servo_angles (163, 106); //7 pauze; geval 8: set_servo_angles (140, 83); //8 pauze; geval 9: set_servo_angles (104, 58); //9 pauze; geval 0: set_servo_angles (75, 36); //0 pauze; geval 11: set_servo_angles (36, 30); //11 pauze; } // eindschakelaar } void set_servo_angles (int pos2, int pos3) { myservo2.write (pos2); mijnservo3.write(pos3); // Servoposities gereed - voer de daadwerkelijke druk op de knop uit: vertraging (500); mijnservo1.write(60); // vertraging omlaag (500); mijnservo1.write(140); // opwaartse vertraging (500); } void loop() { Blynk.run(); }

Stap 6: Toekomstige stappen

Videowidget - live video- en audiostream naar Blynk-app (reeds getest - werkend)

Webhook-widget - afspeellijst on-demand downloaden vanuit de cloud (reeds getest - werkt)

Tabelwidget - enkele kleine verbeteringen aan de widget zijn welkom (suggesties verzonden naar Blynk-ontwikkelaars)

Aanbevolen: