Table des matières:

PlotClock, WeMos et Blynk jouant au Vintage AMI Jukebox : 6 étapes (avec photos)
PlotClock, WeMos et Blynk jouant au Vintage AMI Jukebox : 6 étapes (avec photos)

Vidéo: PlotClock, WeMos et Blynk jouant au Vintage AMI Jukebox : 6 étapes (avec photos)

Vidéo: PlotClock, WeMos et Blynk jouant au Vintage AMI Jukebox : 6 étapes (avec photos)
Vidéo: Start Using Wemos D1 Mini NodeMCU WiFi ESP8266 module with Arduino 2024, Novembre
Anonim
PlotClock, WeMos et Blynk jouant au Jukebox AMI Vintage
PlotClock, WeMos et Blynk jouant au Jukebox AMI Vintage
PlotClock, WeMos et Blynk jouant au Jukebox AMI Vintage
PlotClock, WeMos et Blynk jouant au Jukebox AMI Vintage

Quatre innovations techniques ont rendu ce projet possible: le Rowe AMI Jukebox 1977, le kit de bras robotisé PlotClock, le microcontrôleur WeMos/ESP 8266 et le service Blynk App/Cloud.

REMARQUE: si vous n'avez pas le Jukebox à portée de main, n'arrêtez pas de lire ! Ce projet peut facilement être adopté pour contrôler diverses choses contrôlées par des doigts humains. Un exemple pourrait être un doigt de robot jouant du xylophone traditionnel - peut-être que cette instructable vient de vous !

Mon jukebox Rowe AMI R-81, âgé de 40 ans, fonctionne toujours très bien en jouant des singles vinyles vintage des années 60, 70 et 80. Pesant plus de 160 kg (360 lb), ce lecteur n'est pas aussi portable que les lecteurs MP modernes, mais vivant à l'ère d'Internet, il est désormais possible de transporter le jukebox et 200 disques vinyles dans votre poche - pratiquement bien sûr ! Et vous pouvez même utiliser vos propres listes de lecture stockées dans le microcontrôleur !

Le robot Amazing PlotClock est conçu à l'origine pour afficher l'heure actuelle en dessinant les chiffres de l'heure sur le tableau effaçable. Mon adaptation pour PlotClock est de l'utiliser comme un doigt de robot pour appuyer sur les boutons de sélection de chanson du Jukebox.

Le « doigt » Plotclock est piloté par 3 servos contrôlés par le microcontrôleur WeMos. Cette merveille est (presque) compatible Arduino Uno et possède des capacités WiFi, il est donc possible de contrôler le jukebox sans fil depuis n'importe où dans le monde.

La crème sur le gâteau vient de l'incroyable application Blynk facile à utiliser et de leur serveur Blynk Cloud offrant une interface utilisateur agréable pour téléphone portable/tablette avec une mobilité totale.

Étape 1: Matériel

Matériel
Matériel
Matériel
Matériel

Juke-box

Le juke-box du projet est le Rowe AMI R-81 de 1977. N'importe quel ancien juke-box avec des boutons de sélection fera l'affaire - en tenant compte de quelques limitations de PlotClock: la conception originale des bras de PlotClock peut couvrir une surface d'environ 5 x 12 cm, donc la disposition des boutons du juke-box (zone comprenant tous les boutons de sélection) doit être à peu près de cette taille. Les boutons des jukebox plus anciens peuvent nécessiter plus de puissance de poussée que les servos PlotClock ne peuvent en fournir.

AMI R-81 a une mémoire où il peut stocker les 200 sélections. Les sélections sont jouées en fonction de l'ordre dans lequel elles sont stockées dans le magasin de disques (type carrousel), et non de l'ordre dans lequel elles sont sélectionnées. Les sélections multiples pour un enregistrement ne sont jouées qu'une seule fois.

PlotHorloge

Plotclock est un kit de bricolage disponible dans le commerce comprenant des pièces mécaniques, 3 servos, Arduino Uno R3, une carte d'extension Arduino et un câble USB. Pour environ 30 USD, c'est un bon achat (par exemple, Banggood.com). Arduino, la carte d'extension et le câble USB ne sont pas utilisés pour ce projet.

Il existe plusieurs bons tutoriels Internet/YouTube pour composer le Plotclock – par exemple. ceci: instructions PlotClock

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

WeMos

WeMos D1 R2 est un microcontrôleur basé sur ESP8266. Il peut être programmé à l'aide d'Arduino IDE et possède des capacités WiFi, c'est donc un matériel parfait pour ce projet.

Étape 2: Étalonnage

Étalonnage
Étalonnage

L'étalonnage est la tâche de trouver des valeurs d'angle précises pour les angles d'asservissement (entre 0 et 180 degrés) pour correspondre aux positions physiques des boutons de sélection. Les valeurs d'angle peuvent être trouvées par arithmétique trigonométrique ou à l'aide d'un logiciel de CAO. J'ai obtenu des valeurs approximatives de mon ami qui savait utiliser AutoCad.

Cependant, l'étalonnage final a dû être effectué par essais et erreurs. Utilisation de la disposition des boutons dessinée sur le morceau de papier Il est possible de faire le « test de bureau » pour trouver les valeurs d'angle correctes.

Étape 3: Assemblage

Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée

Câblage

La connexion des servos Plotclock à Wemos se fait avec 5 fils: +5, GND, D4, D5 et D6. Voir les détails dans les images et le code.

Installation sur le Jukebox

Je ne voulais pas faire de trous de vis sur le jukebox vieux de 40 ans qui avait si longtemps survécu sans dommages majeurs. À l'aide d'un mastic en caoutchouc souple, j'ai fixé un morceau de liste d'angle en aluminium sous la console du jukebox. Le mastic en caoutchouc permet une tenue serrée et peut être retiré sans laisser de traces. Le corps de la PlotClock avait besoin de deux petits angles en aluminium pour faciliter son montage sur la plaque acrylique. La plaque acrylique est ensuite fixée à la liste d'angles avec deux clips à ressort laissant la possibilité de faire les derniers ajustements verticalement et horizontalement.

Étape 4: Blynk

Blynk
Blynk

Blynk est une application gratuite permettant de contrôler à distance plusieurs types de microcontrôleurs. Avec Blynk, vous pouvez facilement créer une interface utilisateur agréable en utilisant plusieurs types de widgets. Il n'y a qu'un seul widget nécessaire pour ce projet: le widget Table.

Étape 5: Logiciel

Application Blynk

Il n'y a pas de codage du côté de l'application. La « conversation » entre l'application (Blynk) et le microcontrôleur (WeMos) est gérée par des « broches virtuelles » qui sont essentiellement des canaux pour envoyer et recevoir des informations entre ces deux. La broche virtuelle est par exemple utilisée pour envoyer le numéro de ligne de la chanson sélectionnée de l'application Blynk à WeMos, et Wemos gère le reste, c'est-à-dire. envoyer des commandes aux servos Plotclock.

Code WeMos

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

Widget de table à V2 ************************************************** ****************/ #define BLYNK_PRINT Serial #include #include #include char auth = "--YOUR AUTH CODE--"; //Jukebox project char ssid = "--YOUR SSID--"; char pass = "--VOTRE MOT DE PASSE WIFI--"; entier c[50]; //Tableau pour les positions d'enregistrement du Jukebox (100-299) Servo myservo1; //levage Servo myservo2; //bras gauche Servo myservo3; //bras droit int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn=0; void setup() { myservo1.attach(2); // broche D4, soulevez myservo2.attach(14); // broche D5, gauche myservo3.attach(12); // broche D6, à droite myservo1.write(140); monservo2.write(90); monservo3.write(90); Serial.begin(115200); Blynk.begin(auth, ssid, pass); // Notifier immédiatement au démarrage //String msg = "Jukebox WeMos connecté à: "; //Blynk.notify(msg + ssid); //effacer la table au démarrage Blynk.virtualWrite(V2, "clr"); remplirTable(); } BLYNK_WRITE(V2) //Recevoir les commandes du widget Table V2 { String cmd = param[0].asStr(); //param[0]="select" ou "deselect", param[1]=row Serial.print("\nTable: BLYNK_WRITE(V2) cmd: "); Serial.print(cmd); int selection = c[param[1].asInt()]; //Le numéro de ligne sélectionné est dans le param[1] Serial.println("\nSelection: "); Serial.println(sélection); process_selection(sélection); } void populateTable() { int i = 0; Serial.println("Remplissage de la table…"); Blynk.virtualWrite(V2, "ajouter", 0, "Soyez mon bébé - Les Suprêmes", 112); c = 112; Blynk.virtualWrite(V2, "ajouter", 1, "Numéro un - Jerry Williams", 176); je++; c = 176; Blynk.virtualWrite(V2, "ajouter", 2, "All My Loving - The Beatles", 184); je++; c = 184; Blynk.virtualWrite(V2, "ajouter", 3, "En été - Mungo Jerry", 236); je++; c = 236; Blynk.virtualWrite(V2, "ajouter", 4, "Black Cloud - Chubby Checker", 155); je++; c = 155; Blynk.virtualWrite(V2, "ajouter", 5, "Mamy Blue - Pop-Tops", 260); je++; c = 260; Blynk.virtualWrite(V2, "ajouter", 6, "Tout va bien se passer - Gerry & Pacemakers", 145); je++; c = 145; Blynk.virtualWrite(V2, "ajouter", 7, "My Way - Tom Jones", 193); je++; c = 193; Blynk.virtualWrite(V2, "ajouter", 8, "San Bernadino - Christie", 149); je++; c = 149; Blynk.virtualWrite(V2, "ajouter", 9, "The Twist - Chubby Checker", 169); je++; c = 169;

retard(1000);

} void process_selection (int selection) { // analyse la sélection à 3 chiffres (par exemple 178) vers 3 boutons: int btn1 = int(selection/100); //premier bouton Serial.println("\nBtn1: "); Serial.println(btn1); if (btn1 == 1 || btn1 == 2) //le premier bouton doit être 1 ou 2 - sinon faire la réinitialisation { push_button(btn1); sélection = sélection - (btn1 * 100); int btn2 = int(sélection/10); //deuxième bouton Serial.println("\nBtn2: "); Serial.println(btn2); push_button(btn2); sélection = sélection - (btn2 * 10); int btn3 = int(sélection); //troisième bouton Serial.println("\nBtn3: "); Serial.println(btn3); push_button(btn3); } else { push_button(11); //bouton de réinitialisation } //réinitialiser les positions des servos lorsque tout est terminé delay(2000); monservo1.write(140); monservo2.write(90); myservo3.write(90);} void push_button(int btn) { //cela est appelé 3 fois pour chaque sélection //une pression réelle sur le bouton est effectuée après chaque bouton (trouver « poussée réelle sur le bouton ») switch (btn) { case 1: set_servo_angles (134, 136); // pause; cas 2: set_servo_angles (128, 110); // pause; cas 3: set_servo_angles (112, 88); ///3 pause; cas 4: set_servo_angles (89, 68); // pause; cas 5: set_servo_angles (62, 55); ///5 pause; cas 6: set_servo_angles (172, 131); ///6 pause; cas 7: set_servo_angles (163, 106); //7 pause; cas 8: set_servo_angles (140, 83); //8 pause; cas 9: set_servo_angles (104, 58); //9 pause; cas 0: set_servo_angles (75, 36); // pause; cas 11: set_servo_angles (36, 30); //11 pause; } //fin de commutateur } void set_servo_angles(int pos2, int pos3) { myservo2.write(pos2); monservo3.write(pos3); //Positions des servos prêtes - exécute la pression réelle sur le bouton: delay(500); monservo1.write(60); //délai d'arrêt (500); monservo1.write(140); //délai de montée (500); } boucle vide() { Blynk.run(); }

Étape 6: Étapes futures

Widget vidéo - flux vidéo et audio en direct vers l'application Blynk (déjà testé - fonctionne)

Widget Webhook - téléchargement à la demande de la liste de lecture à partir du cloud (déjà testé - fonctionnel)

Widget de table - quelques petites améliorations du widget sont les bienvenues (suggestions envoyées aux développeurs Blynk)

Conseillé: