Sommario:

PlotClock, WeMos e Blynk suonano il jukebox AMI vintage: 6 passaggi (con immagini)
PlotClock, WeMos e Blynk suonano il jukebox AMI vintage: 6 passaggi (con immagini)

Video: PlotClock, WeMos e Blynk suonano il jukebox AMI vintage: 6 passaggi (con immagini)

Video: PlotClock, WeMos e Blynk suonano il jukebox AMI vintage: 6 passaggi (con immagini)
Video: Автоматизация вентиляторов холодильника — контроль температуры, DHT11, Arduino, Fritzing — автоматизируйте мир! 2024, Dicembre
Anonim
PlotClock, WeMos e Blynk suonano un jukebox AMI vintage
PlotClock, WeMos e Blynk suonano un jukebox AMI vintage
PlotClock, WeMos e Blynk suonano un jukebox AMI vintage
PlotClock, WeMos e Blynk suonano un jukebox AMI vintage

Quattro innovazioni tecniche hanno reso possibile questo progetto: il Jukebox AMI Rowe del 1977, il kit braccio robotico PlotClock, il microcontrollore WeMos/ESP 8266 e il servizio Blynk App/Cloud.

NOTA: se non hai il Jukebox a portata di mano, non smettere di leggere! Questo progetto può essere facilmente adottato per controllare varie cose controllate da dita umane. Un esempio potrebbe essere un dito robot che suona lo xilofono tradizionale: forse quell'istruzione viene da te!

Il mio Jukebox Rowe AMI R-81 di 40 anni funziona ancora bene suonando singoli in vinile vintage degli anni '60, '70 e '80. Con un peso di oltre 160 kg (360 libbre) questo lettore non è così portatile come i moderni lettori mp, ma vivendo nell'era di Internet, ora è possibile portare il jukebox e 200 dischi in vinile in tasca, praticamente ovviamente! E puoi persino usare le tue playlist memorizzate nel microcontrollore!

L'incredibile robot PlotClock è stato originariamente progettato per mostrare l'ora corrente disegnando le cifre dell'ora sulla lavagna cancellabile. Il mio adattamento per PlotClock è di usarlo come un dito robot per premere i pulsanti di selezione dei brani di Jukebox.

Il "dito" di Plotclock è pilotato da 3 servocomandi controllati dal microcontrollore WeMos. Questo pezzo di meraviglia è (quasi) compatibile con Arduino Uno e dispone di funzionalità WiFi, quindi è possibile controllare il jukebox in modalità wireless da qualsiasi parte del mondo.

La crema sulla torta viene dall'incredibile app Blynk facile da usare e dal loro Blynk Cloud Server che offre una bella interfaccia utente per telefono cellulare/tablet con piena mobilità.

Passaggio 1: hardware

Hardware
Hardware
Hardware
Hardware

Juke-box

Il jukebox del progetto è il 1977 Rowe AMI R-81. Andrà bene qualsiasi vecchio jukebox con pulsanti di selezione, notando alcune limitazioni di PlotClock: il design originale delle braccia di PlotClock può coprire un'area di circa 5 x 12 cm, quindi la disposizione dei pulsanti del jukebox (l'area che include tutti i pulsanti di selezione) deve essere di quelle dimensioni. I pulsanti dei vecchi jukebox potrebbero richiedere più potenza di spinta di quella che i servi PlotClock possono fornire.

AMI R-81 ha una memoria in cui può memorizzare tutte le 200 selezioni. Le selezioni vengono riprodotte in base all'ordine in cui sono memorizzate nel caricatore di dischi (tipo a carosello), non nell'ordine in cui vengono selezionate. Le selezioni multiple per un record vengono riprodotte solo una volta.

PlotOrologio

Plotclock è un kit fai-da-te disponibile in commercio che include parti meccaniche, 3 servi, Arduino Uno R3, scheda di estensione Arduino e cavo USB. Per circa 30 USD questo è un buon acquisto (es. Banggood.com). Arduino, scheda di estensione e cavo USB non vengono utilizzati per questo progetto.

Ci sono diversi buoni tutorial su Internet/YouTube per comporre il Plotclock, ad es. questo: istruzioni PlotClock

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

WeMos

WeMos D1 R2 è un microcontrollore basato su ESP8266. Può essere programmato utilizzando Arduino IDE e dispone di funzionalità WiFi, quindi è un componente hardware perfetto per questo progetto.

Passaggio 2: calibrazione

Calibrazione
Calibrazione

La calibrazione è il compito per trovare valori angolari precisi per gli angoli del servo (tra 0 e 180 gradi) per corrispondere alle posizioni fisiche per i pulsanti di selezione. I valori degli angoli possono essere trovati mediante l'aritemitica della trigonometria o utilizzando un software CAD. Ho ottenuto valori approssimativi dal mio amico che sapeva come usare AutoCad.

Tuttavia, la calibrazione finale doveva essere effettuata per tentativi ed errori. Utilizzando la disposizione dei pulsanti disegnata sul pezzo di carta È possibile eseguire il "test del desktop" per trovare i valori di angolazione corretti.

Passaggio 3: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea

Cablaggio

La connessione dai servi Plotclock a Wemos avviene con 5 fili: +5, GND, D4, D5 e D6. Vedi i dettagli nelle immagini e nel codice.

Installazione sul Jukebox

Non volevo fare buchi per le viti al jukebox di 40 anni che era sopravvissuto così a lungo senza grossi danni. Usando un sigillante in gomma morbida ho fissato un pezzo di lista angolare in alluminio sotto la console del jukebox. Il sigillante in gomma garantisce una tenuta ermetica e può essere rimosso senza lasciare segni. Il corpo di PlotClock aveva bisogno di due piccoli angoli di alluminio per aiutarlo a montarlo sulla lastra acrilica. La lastra acrilica viene quindi montata sull'elenco degli angoli con due clip caricate a molla che lasciano la possibilità di effettuare regolazioni finali verticalmente e orizzontalmente.

Passaggio 4: Blynk

Blynk
Blynk

Blynk è un'app gratuita per il controllo remoto di diversi tipi di microcontrollori. Con Blynk puoi facilmente creare una bella interfaccia utente utilizzando diversi tipi di widget. C'è solo un widget necessario per questo progetto: il widget Tabella.

Passaggio 5: software

App Blynk

Non c'è codifica sul lato dell'app. La "conversazione" tra l'app (Blynk) e il microcontrollore (WeMos) è gestita da "pin virtuali" che essenzialmente sono canali per l'invio e la ricezione di informazioni tra i due. Il pin virtuale viene utilizzato ad esempio per inviare il numero di riga del brano selezionato dall'app Blynk a WeMos e Wemos gestisce il resto, ad es. inviare comandi ai servo Plotclock.

Codice WeMos

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

Widget della tabella in V2 ********************************************* ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "--IL TUO CODICE AUTENTICO--"; //Progetto Jukebox char ssid = "--IL TUO SSID--"; char pass = "--LA TUA PASSWORD WIFI--"; int c[50]; //Array per posizioni di registrazione Jukebox (100-299) Servo myservo1; //sollevando Servo myservo2; //braccio sinistro Servo myservo3; //braccio destro int pos1 = 0; int posizione2 = 0; int pos3 = 0; int btn=0; void setup() { myservo1.attach(2); // pin D4, solleva myservo2.attach(14); // pin D5, sinistro myservo3.attach(12); // pin D6, a destra myservo1.write(140); myservo2.write(90); myservo3.write(90); Serial.begin(115200); Blynk.begin(auth, ssid, pass); // Notifica immediatamente all'avvio //String msg = "Jukebox WeMos connesso a: "; //Blynk.notify(msg + ssid); //cancella la tabella all'avvio Blynk.virtualWrite(V2, "clr"); popolaTable(); } BLYNK_WRITE(V2) //Ricevi comandi dal widget Tabella V2 { String cmd = param[0].asStr(); //param[0]="seleziona" o "deseleziona", param[1]=riga Serial.print("\nTable: BLYNK_WRITE(V2) cmd: "); Serial.print(cmd); int selezione = c[param[1].asInt()]; //Il numero di riga selezionato è in param[1] Serial.println("\nSelection: "); Serial.println(selezione); process_selection(selezione); } void populateTable() { int i = 0; Serial.println("Popolazione tabella…"); Blynk.virtualWrite(V2, "add", 0, "Be My Baby - The Supremes", 112); c = 112; Blynk.virtualWrite(V2, "aggiungi", 1, "Numero uno - Jerry Williams", 176); io++; c = 176; Blynk.virtualWrite(V2, "add", 2, "All My Loving - The Beatles", 184); io++; c = 184; Blynk.virtualWrite(V2, "add", 3, "In the Summertime - Mungo Jerry", 236); io++; c = 236; Blynk.virtualWrite(V2, "add", 4, "Black Cloud - Chubby Checker", 155); io++; c = 155; Blynk.virtualWrite(V2, "add", 5, "Mamy Blue - Pop-Top", 260); io++; c = 260; Blynk.virtualWrite(V2, "add", 6, "Andrà tutto bene - Gerry & Pacemakers", 145); io++; c = 145; Blynk.virtualWrite(V2, "aggiungi", 7, "A modo mio - Tom Jones", 193); io++; c = 193; Blynk.virtualWrite(V2, "add", 8, "San Bernardino - Christie", 149); io++; c = 149; Blynk.virtualWrite(V2, "add", 9, "The Twist - Chubby Checker", 169); io++; c = 169;

ritardo(1000);

} void process_selection (selezione int) { //analizza la selezione a 3 cifre (es. 178) in 3 pulsanti: int btn1 = int(selezione/100); //primo pulsante Serial.println("\nBtn1: "); Serial.println(btn1); if (btn1 == 1 || btn1 == 2) //il primo pulsante deve essere 1 o 2 - altrimenti esegui il reset { push_button(btn1); selezione = selezione - (btn1 * 100); int btn2 = int(selezione/10); //secondo pulsante Serial.println("\nBtn2: "); Serial.println(btn2); pulsante_pulsante(btn2); selezione = selezione - (btn2 * 10); int btn3 = int(selezione); //terzo pulsante Serial.println("\nBtn3: "); Serial.println(btn3); pulsante_pulsante(btn3); } else { push_button(11); //pulsante di reset } //reimposta le posizioni dei servi quando tutto è terminato delay(2000); mioservo1.write(140); myservo2.write(90); myservo3.write(90);} void push_button(int btn) { //questo viene chiamato 3 volte per ogni selezione //la pressione effettiva del pulsante viene eseguita dopo ogni pulsante (trova 'pulsante effettivo') switch (btn) { case 1: set_servo_angles (134, 136); //1 pausa; caso 2: set_servo_angles (128, 110); // pausa; caso 3: set_servo_angles (112, 88); // pausa; caso 4: set_servo_angles (89, 68); // pausa; caso 5: set_servo_angles (62, 55); ///5 pausa; caso 6: set_servo_angles (172, 131); // pausa; caso 7: set_servo_angles (163, 106); //7 pausa; caso 8: set_servo_angles (140, 83); //8 pausa; caso 9: set_servo_angles (104, 58); //9 pausa; caso 0: set_servo_angles (75, 36); //0 pausa; caso 11: set_servo_angles (36, 30); // pausa; } //end switch } void set_servo_angles(int pos2, int pos3) { myservo2.write(pos2); mioservo3.write(pos3); //Posizioni servo pronte - esegue l'effettiva pressione del pulsante: delay(500); mioservo1.write(60); //ritardo alla discesa (500); mioservo1.write(140); //up delay(500); } ciclo vuoto() { Blynk.run(); }

Passaggio 6: passaggi futuri

Widget video - streaming video e audio in diretta all'app Blynk (già testato - funzionante)

Widget Webhook - download on demand di playlist da cloud (già testato - funzionante)

Widget della tabella - sono ben accetti alcuni piccoli miglioramenti al widget (suggerimenti inviati agli sviluppatori di Blynk)

Consigliato: