Tabla de contenido:

PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: 6 pasos (con imágenes)
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: 6 pasos (con imágenes)

Video: PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: 6 pasos (con imágenes)

Video: PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: 6 pasos (con imágenes)
Video: M2U00172 2024, Mes de julio
Anonim
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox

Cuatro innovaciones técnicas hicieron posible este proyecto: el Rowe AMI Jukebox 1977, el kit de brazo robótico PlotClock, el microcontrolador WeMos / ESP 8266 y el servicio Blynk App / Cloud.

NOTA: Si no tiene el Jukebox a mano, ¡no deje de leer! Este proyecto se puede adoptar fácilmente para controlar varias cosas controladas por dedos humanos. Un ejemplo podría ser un dedo de robot tocando un xilófono tradicional, ¡tal vez ese instructivo proviene de usted!

Mi Jukebox Rowe AMI R-81 de 40 años todavía funciona bien tocando sencillos de vinilo vintage de los años 60, 70 y 80. Con un peso de más de 160 kg (360 lbs), este reproductor no es tan portátil como los reproductores mp modernos, pero viviendo en la era de Internet, ahora es posible llevar la máquina de discos y 200 discos de vinilo en el bolsillo, ¡prácticamente por supuesto! ¡E incluso puede usar sus propias listas de reproducción almacenadas en el microcontrolador!

El increíble robot PlotClock está diseñado originalmente para mostrar la hora actual dibujando dígitos de tiempo en el tablero borrable. Mi adaptación para PlotClock es usarlo como un dedo de robot para presionar los botones de selección de canciones de Jukebox.

El "dedo" de Plotclock es impulsado por 3 servos controlados por el microcontrolador WeMos. Esta maravilla es (casi) compatible con Arduino Uno y tiene capacidad WiFi, por lo que es posible controlar la máquina de discos de forma inalámbrica desde cualquier parte del mundo.

La crema del pastel proviene de la aplicación Blynk increíblemente fácil de usar y su servidor en la nube Blynk que brinda una interfaz de usuario de teléfono móvil / tableta agradable con total movilidad.

Paso 1: hardware

Hardware
Hardware
Hardware
Hardware

Tocadiscos tragamonedas

El proyecto de máquina de discos es el Rowe AMI R-81 de 1977. Cualquier máquina de discos antigua con botones de selección servirá, teniendo en cuenta algunas limitaciones de PlotClock: el diseño original de los brazos de PlotClock puede cubrir un área de aproximadamente 5 x 12 cm, por lo que el diseño de los botones de la máquina de discos (el área que incluye todos los botones de selección) debe ser de ese tamaño. Los botones de las máquinas de discos más antiguos pueden necesitar más potencia de empuje que la que pueden proporcionar los servos PlotClock.

AMI R-81 tiene una memoria donde puede almacenar las 200 selecciones. Las selecciones se reproducen en función del orden en que se almacenan en el cargador de discos (tipo carrusel), no en el orden en que se seleccionan. Las selecciones múltiples para un registro se reproducen solo una vez.

PlotClock

Plotclock es un kit de bricolaje disponible comercialmente que incluye piezas mecánicas, 3 servos, Arduino Uno R3, placa de extensión Arduino y cable USB. Por alrededor de 30 USD, esta es una buena compra (por ejemplo, Banggood.com). Arduino, placa de extensión y cable USB no se utilizan para este proyecto.

Hay varios buenos tutoriales de Internet / YouTube para componer Plotclock, por ejemplo. esto: PlotClock instrucciones

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

WeMos

WeMos D1 R2 es un microcontrolador basado en ESP8266. Se puede programar usando Arduino IDE y tiene capacidades WiFi, por lo que es una pieza de hardware perfecta para este proyecto.

Paso 2: Calibración

Calibración
Calibración

La calibración es la tarea para encontrar valores de ángulo precisos para ángulos de servo (entre 0 y 180 grados) para que correspondan con las posiciones físicas de los botones de selección. Los valores de los ángulos se pueden encontrar mediante arithemitics de trigonometría o utilizando un software CAD. Obtuve valores aproximados de mi amigo que sabía cómo usar AutoCad.

Sin embargo, la calibración final tuvo que realizarse mediante prueba y error. Usando el diseño de los botones dibujado en la hoja de papel Es posible hacer la "prueba de escritorio" para encontrar los valores de ángulo correctos.

Paso 3: Montaje

Montaje
Montaje
Montaje
Montaje
Montaje
Montaje
Montaje
Montaje

Alambrado

La conexión de los servos Plotclock a Wemos se realiza con 5 cables: +5, GND, D4, D5 y D6. Ver detalles en imágenes y código.

Instalación en el Jukebox

No quería hacer agujeros para tornillos en la máquina de discos de 40 años que había sobrevivido durante tanto tiempo sin daños importantes. Usando sellador de goma suave, fijé un trozo de aluminio en ángulo bajo la consola de la máquina de discos. El sellador de goma permite una sujeción firme y se puede quitar sin dejar marcas. El cuerpo de PlotClock necesitaba dos pequeños ángulos de aluminio para ayudar a colocarlo en la placa acrílica. Luego, la placa acrílica se ajusta a la lista de ángulos con dos clips cargados por resorte, lo que deja la posibilidad de realizar ajustes finales vertical y horizontalmente.

Paso 4: Blynk

Blynk
Blynk

Blynk es una aplicación gratuita para controlar varios tipos de microcontroladores de forma remota. Con Blynk, puede crear fácilmente una interfaz de usuario agradable utilizando varios tipos de widgets. Solo se necesita un widget para este proyecto: el widget Table.

Paso 5: software

Aplicación Blynk

No hay codificación en el lado de la aplicación. La "conversación" entre la aplicación (Blynk) y el microcontrolador (WeMos) se maneja mediante "pines virtuales", que esencialmente son canales para enviar y recibir información entre esos dos. El pin virtual se usa, por ejemplo, para enviar el número de fila de la canción seleccionada desde la aplicación Blynk a WeMos, y Wemos se encarga del resto, es decir. enviando comandos a los servos Plotclock.

Código WeMos

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

Widget de tabla en V2 ******************************************* **************** / #define BLYNK_PRINT Serial #include #include #include char auth = "--YOUR AUTH CODE--"; // Proyecto de Jukebox char ssid = "--SU SSID--"; char pass = "--SU CONTRASEÑA WIFI--"; int c [50]; // Matriz para posiciones de registro de Jukebox (100-299) Servo myservo1; // levantando Servo myservo2; // brazo izquierdo Servo myservo3; // brazo derecho int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn = 0; configuración vacía () {myservo1.attach (2); // pin D4, levante myservo2.attach (14); // pin D5, izquierda myservo3.attach (12); // pin D6, derecho myservo1.write (140); myservo2.write (90); myservo3.write (90); Serial.begin (115200); Blynk.begin (auth, ssid, pass); // Notificar inmediatamente al inicio // String msg = "Jukebox WeMos conectado a:"; //Blynk.notify(msg + ssid); // limpiar la tabla al inicio Blynk.virtualWrite (V2, "clr"); populateTable (); } BLYNK_WRITE (V2) // Recibir comandos del widget de tabla V2 {String cmd = param [0].asStr (); // param [0] = "seleccionar" o "deseleccionar", param [1] = fila Serial.print ("\ nTable: BLYNK_WRITE (V2) cmd:"); Serial.print (cmd); int selección = c [param [1].asInt ()]; // El número de fila seleccionado está en param [1] Serial.println ("\ nSelection:"); Serial.println (selección); process_selection (selección); } void populateTable () {int i = 0; Serial.println ("Completando tabla …"); Blynk.virtualWrite (V2, "agregar", 0, "Be My Baby - The Supremes", 112); c = 112; Blynk.virtualWrite (V2, "agregar", 1, "Número uno - Jerry Williams", 176); i ++; c = 176; Blynk.virtualWrite (V2, "agregar", 2, "Todo mi amor - Los Beatles", 184); i ++; c = 184; Blynk.virtualWrite (V2, "agregar", 3, "En el verano - Mungo Jerry", 236); i ++; c = 236; Blynk.virtualWrite (V2, "agregar", 4, "Nube negra - Comprobador gordito", 155); i ++; c = 155; Blynk.virtualWrite (V2, "agregar", 5, "Mamy Blue - Pop-Tops", 260); i ++; c = 260; Blynk.virtualWrite (V2, "agregar", 6, "Todo va a estar bien - Gerry y marcapasos", 145); i ++; c = 145; Blynk.virtualWrite (V2, "agregar", 7, "My Way - Tom Jones", 193); i ++; c = 193; Blynk.virtualWrite (V2, "agregar", 8, "San Bernadino - Christie", 149); i ++; c = 149; Blynk.virtualWrite (V2, "agregar", 9, "The Twist - Chubby Checker", 169); i ++; c = 169;

retraso (1000);

} void process_selection (int selection) {// analizar la selección de 3 dígitos (por ejemplo, 178) a 3 botones: int btn1 = int (selección / 100); // primer botón Serial.println ("\ nBtn1:"); Serial.println (btn1); if (btn1 == 1 || btn1 == 2) // el primer botón debe ser 1 o 2; de lo contrario, reinicie {push_button (btn1); selección = selección - (btn1 * 100); int btn2 = int (selección / 10); // segundo botón Serial.println ("\ nBtn2:"); Serial.println (btn2); pulsador (btn2); selección = selección - (btn2 * 10); int btn3 = int (selección); // tercer botón Serial.println ("\ nBtn3:"); Serial.println (btn3); pulsador (btn3); } else {pulsador_botón (11); // botón de reinicio} // reinicia las posiciones de los servos cuando todo está hecho delay (2000); myservo1.write (140); myservo2.write (90); myservo3.write (90);} void push_button (int btn) {// esto se llama 3 veces para cada selección // la presión real del botón se realiza después de cada botón (busque 'real button push') switch (btn) {caso 1: set_servo_angles (134, 136); // 1 descanso; caso 2: set_servo_angles (128, 110); // 2 descanso; caso 3: set_servo_angles (112, 88); // 3 descanso; caso 4: set_servo_angles (89, 68); // 4 descanso; caso 5: set_servo_angles (62, 55); // 5 descanso; caso 6: set_servo_angles (172, 131); // 6 descanso; caso 7: set_servo_angles (163, 106); // 7 descanso; caso 8: set_servo_angles (140, 83); // 8 descanso; caso 9: set_servo_angles (104, 58); // 9 descanso; caso 0: set_servo_angles (75, 36); // 0 descanso; caso 11: set_servo_angles (36, 30); // 11 descanso; } // fin del interruptor} void set_servo_angles (int pos2, int pos3) {myservo2.write (pos2); myservo3.write (pos3); // Posiciones de servo listas - realice la pulsación del botón actual: delay (500); myservo1.write (60); // retraso de bajada (500); myservo1.write (140); // retraso de subida (500); } bucle vacío () {Blynk.run (); }

Paso 6: Pasos futuros

Widget de video: transmisión de video y audio en vivo a la aplicación Blynk (ya probado, en funcionamiento)

Widget de webhook: descarga de listas de reproducción a pedido desde la nube (ya probado, en funcionamiento)

Widget de tabla: se agradecen algunas pequeñas mejoras en el widget (se envían sugerencias a los desarrolladores de Blynk)

Recomendado: