PlotClock, WeMos ja Blynk Playing Vintage AMI Jukebox: 6 askelta (kuvilla)
PlotClock, WeMos ja Blynk Playing Vintage AMI Jukebox: 6 askelta (kuvilla)
Anonim
PlotClock, WeMos ja Blynk pelaavat Vintage AMI -jukeboxia
PlotClock, WeMos ja Blynk pelaavat Vintage AMI -jukeboxia
PlotClock, WeMos ja Blynk pelaavat Vintage AMI -jukeboxia
PlotClock, WeMos ja Blynk pelaavat Vintage AMI -jukeboxia

Tämän projektin mahdollisti neljä teknistä innovaatiota: vuoden 1977 Rowe AMI Jukebox, PlotClock -robotti käsisarja, WeMos/ESP 8266 -mikro -ohjain ja Blynk App/Cloud -palvelu.

HUOMAUTUS: Jos sinulla ei ole Jukeboxia käsillä - älä lopeta lukemista! Tämä projekti voidaan helposti ottaa käyttöön hallitsemaan erilaisia asioita, joita ihmisen sormet ohjaavat. Yksi esimerkki voisi olla robotin sormi, joka soittaa perinteistä ksylofonia - ehkä se opettavainen tulee sinulta!

40-vuotias Rowe AMI R-81 Jukebox toimii edelleen hienosti soittaen vintage-vinyylilevyjä 60-, 70- ja 80-luvuilta. Yli 160 kg: n painoinen soitin ei ole aivan yhtä kannettava kuin nykyaikaiset mp-soittimet, mutta internet-aikakaudella elättäessä on nyt mahdollista kantaa taskussa jukeboksia ja 200 vinyylilevyä-käytännössä tietysti! Ja voit jopa käyttää omia soittolistoja, jotka on tallennettu mikrokontrolleriin!

Amazing PlotClock -robotti on alun perin suunniteltu näyttämään nykyistä aikaa piirtämällä aikanumerot pyyhittävälle taululle. Minun mukautukseni PlotClockille on käyttää sitä robottisormena Jukebox -kappaleen valintapainikkeiden painamiseen.

Plotclock -sormella on 3 servoa, joita ohjaa WeMos -mikrokontrolleri. Tämä ihme on (melkein) Arduino Uno -yhteensopiva ja siinä on WiFi -ominaisuudet, joten jukeboksi on mahdollista ohjata langattomasti mistä päin maailmaa tahansa.

Kakun kerma tulee uskomattoman helppokäyttöisestä Blynk -sovelluksesta ja niiden Blynk -pilvipalvelimesta, joka tarjoaa mukavan matkapuhelimen/tabletin käyttöliittymän täydellä liikkuvuudella.

Vaihe 1: Laitteisto

Laitteisto
Laitteisto
Laitteisto
Laitteisto

Jukeboksi

Projektin jukeboksi on 1977 Rowe AMI R-81. Kaikki valintanäppäimillä varustetut vanhat jukebootit sopivat - huomioiden muutamat PlotClockin rajoitukset: PlotClockin alkuperäinen käsivarsimalli voi peittää noin 5 x 12 cm: n alueen, joten jukeboksi -painikkeen asettelun (kaikki valintanapit mukaan lukien) on oltava suunnilleen sama. Vanhempien jukeboksien painikkeet saattavat tarvita enemmän työntövoimaa kuin PlotClock -servot.

AMI R-81: ssä on muisti, johon se voi tallentaa kaikki 200 valintaa. Valinnat toistetaan sen mukaan, missä järjestyksessä ne tallennetaan levylehtiin (karusellityyppi), ei niiden järjestyksen perusteella. Useita valintoja yhdelle levylle toistetaan vain kerran.

PlotClock

Plotclock on kaupallisesti saatavilla oleva DIY -sarja, joka sisältää mekaanisia osia, 3 servoa, Arduino Uno R3: n, Arduino -laajennuskortin ja USB -kaapelin. Noin 30 USD: n kohdalla tämä on hyvä ostos (esim. Banggood.com). Arduinoa, laajennuskorttia ja USB -kaapelia ei käytetä tähän projektiin.

Plotclockin luomiseen on olemassa useita hyviä Internet/YouTube -opetusohjelmia - esim. tämä: PlotClock -ohjeet

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

WeMos

WeMos D1 R2 on ESP8266 -pohjainen mikro -ohjain. Se voidaan ohjelmoida Arduino IDE: n avulla ja siinä on WiFi -ominaisuudet, joten se on täydellinen laitteisto tähän projektiin.

Vaihe 2: Kalibrointi

Kalibrointi
Kalibrointi

Kalibroinnin tarkoituksena on löytää tarkat kulma -arvot servokulmille (0-180 astetta), jotka vastaavat valintapainikkeiden fyysisiä asemia. Kulma -arvot voidaan löytää trigonometria -arithemitiikalla tai käyttämällä CAD -ohjelmistoa. Sain likimääräiset arvot ystävältäni, joka tiesi AutoCadin käytön.

Lopullinen kalibrointi piti kuitenkin tehdä kokeilemalla ja erehtymällä. Paperille piirretyn painikkeen asettelun käyttäminen On mahdollista tehdä”työpöydän testaus” löytääksesi oikeat kulma -arvot.

Vaihe 3: Kokoonpano

Kokoonpano
Kokoonpano
Kokoonpano
Kokoonpano
Kokoonpano
Kokoonpano
Kokoonpano
Kokoonpano

Johdotus

Liitäntä Plotclock -servoista Wemosiin tehdään viidellä johdolla: +5, GND, D4, D5 ja D6. Katso yksityiskohdat kuvista ja koodista.

Asentaminen Jukeboxiin

En halunnut tehdä ruuvinreikiä 40 vuotta vanhaan jukeboksiin, joka oli niin kauan säilynyt ilman suuria vaurioita. Pehmeän kumitiivisteen avulla kiinnitin pala alumiinikulmaluetteloa jukeboksi -konsolin alle. Kumitiiviste pitää tiukasti kiinni ja voidaan poistaa jättämättä jälkiä. PlotClock -runko tarvitsi kaksi pientä alumiinikulmaa sen kiinnittämiseksi akryylilevyyn. Tämän jälkeen akryylilevy kiinnitetään kulmaluetteloon kahdella jousikuormitteisella pidikkeellä, jolloin lopulliset säädöt voidaan tehdä pystysuoraan ja vaakasuoraan.

Vaihe 4: Blynk

Blynk
Blynk

Blynk on ilmainen sovellus monenlaisten mikro -ohjaimien etähallintaan. Blynkin avulla voit helposti rakentaa mukavan käyttöliittymän käyttämällä useita widgetejä. Tässä projektissa tarvitaan vain yksi widget: Taulukko -widget.

Vaihe 5: Ohjelmisto

Blynk -sovellus

Sovelluksen puolella ei ole koodausta. Sovelluksen (Blynk) ja mikrokontrollerin (WeMos) välistä”keskustelua” hoitavat”virtuaaliset nastat”, jotka ovat pääasiassa kanavia tietojen lähettämiseen ja vastaanottamiseen näiden kahden välillä. Virtuaalista pinia käytetään esimerkiksi valitun kappaleen rivinumeron lähettämiseen Blynk -sovelluksesta WeMosille, ja Wemos hoitaa loput, ts. lähettää komentoja Plotclock -servoille.

WeMos -koodi

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

Taulukko -widget osoitteessa V2 ********************************************** ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "-SINUN AUTH CODE--"; // Jukebox-projektin char ssid = "-OMA SSID--"; char pass = "-WIFI-SALASANASI--"; int c [50]; // Array Jukeboxin ennätyspaikoille (100-299) Servo myservo1; // nosto Servo myservo2; // vasen käsi Servo myservo3; // oikea käsi int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn = 0; void setup () {myservo1.attach (2); // nasta D4, nosta myservo2.attach (14); // nasta D5, vasen myservo3.attach (12); // nasta D6, oikea myservo1.write (140); myservo2.write (90); myservo3.write (90); Sarja.alku (115200); Blynk.begin (auth, ssid, pass); // Ilmoita heti käynnistyksen yhteydessä // String msg = "Jukebox WeMos yhdistetty:"; //Blynk.notify(msg + ssid); // tyhjennä taulukko alussa Blynk.virtualWrite (V2, "clr"); populateTable (); } BLYNK_WRITE (V2) // Vastaanota komentoja taulukko -widgetistä V2 {String cmd = param [0].asStr (); // param [0] = "valitse" tai "poista valinta", param [1] = rivi Serial.print ("\ nTable: BLYNK_WRITE (V2) cmd:"); Sarjajälki (cmd); int valinta = c [param [1].asInt ()]; // Valitun rivin numero on parametrissa [1] Serial.println ("\ nValinta:"); Serial.println (valinta); prosessin valinta (valinta); } void populateTable () {int i = 0; Serial.println ("Täytetaulukko…"); Blynk.virtualWrite (V2, "lisää", 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, "lisää", 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, "lisää", 7, "My Way - Tom Jones", 193); i ++; c = 193; Blynk.virtualWrite (V2, "lisää", 8, "San Bernadino - Christie", 149); i ++; c = 149; Blynk.virtualWrite (V2, "add", 9, "The Twist - Chubby Checker", 169); i ++; c = 169;

viive (1000);

} void process_selection (int valinta) {// jäsennä 3-numeroinen valinta (esim. 178)-3 painiketta: int btn1 = int (valinta/100); // ensimmäinen painike Serial.println ("\ nBtn1:"); Sarja.println (btn1); jos (btn1 == 1 || btn1 == 2) // ensimmäisen painikkeen on oltava 1 tai 2 - tee muuten nollaus {push_button (btn1); valinta = valinta - (btn1 * 100); int btn2 = int (valinta/10); // toinen painike Serial.println ("\ nBtn2:"); Sarja.println (btn2); push_button (btn2); valinta = valinta - (btn2 * 10); int btn3 = int (valinta); // kolmas painike Serial.println ("\ nBtn3:"); Sarja.println (btn3); push_button (btn3); } else {push_button (11); // nollauspainike} // nollaa servoasennot, kun kaikki on viivästynyt (2000); myservo1.write (140); myservo2.write (90); myservo3.write (90);} void push_button (int btn) {// tätä kutsutaan 3 kertaa jokaiselle valinnalle // todellinen painallus suoritetaan jokaisen painikkeen jälkeen (etsi 'todellinen painikkeen painallus') -kytkin (btn) {tapaus 1: set_servo_angles (134, 136); // 1 tauko; tapaus 2: set_servo_angles (128, 110); // 2 tauko; tapaus 3: set_servo_angles (112, 88); // 3 tauko; tapaus 4: set_servo_angles (89, 68); // 4 tauko; tapaus 5: set_servo_angles (62, 55); // 5 tauko; tapaus 6: set_servo_angles (172, 131); // 6 tauko; tapaus 7: set_servo_angles (163, 106); // 7 tauko; tapaus 8: set_servo_angles (140, 83); // 8 tauko; tapaus 9: set_servo_angles (104, 58); // 9 tauko; tapaus 0: set_servo_angles (75, 36); // 0 tauko; tapaus 11: set_servo_angles (36, 30); // 11 tauko; } // lopetuskytkin} void set_servo_angles (int pos2, int pos3) {myservo2.write (pos2); myservo3.write (pos3); // Servoasennot valmiina - suorita varsinainen painikkeen painallus: delay (500); myservo1.write (60); // alasviive (500); myservo1.write (140); // ylös viive (500); } void loop () {Blynk.run (); }

Vaihe 6: Tulevat vaiheet

Video -widget - suora video- ja äänivirta Blynk -sovellukseen (jo testattu - toimii)

Webhook -widget - soittolistan lataus pyynnöstä pilvestä (jo testattu - toimii)

Taulukko -widget - pienet parannukset widgettiin ovat tervetulleita (ehdotuksia lähetetty Blynk -kehittäjille)