Оглавление:

PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox: 6 шагов (с изображениями)
PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox: 6 шагов (с изображениями)

Видео: PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox: 6 шагов (с изображениями)

Видео: PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox: 6 шагов (с изображениями)
Видео: Remote Robot finger playing Vintage AMI Jukebox 2024, Июль
Anonim
PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox
PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox
PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox
PlotClock, WeMos и Blynk играют в Vintage AMI Jukebox

Этот проект стал возможным благодаря четырем техническим инновациям: музыкальный автомат Rowe AMI 1977 года, комплект манипулятора PlotClock, микроконтроллер WeMos / ESP 8266 и сервис Blynk App / Cloud.

ПРИМЕЧАНИЕ. Если у вас нет музыкального автомата под рукой - не прекращайте читать! Этот проект легко адаптировать для управления различными вещами, управляемыми человеческими пальцами. Одним из примеров может быть палец робота, играющий на традиционном ксилофоне - возможно, вы научитесь этому!

Мой 40-летний Rowe AMI R-81 Jukebox все еще отлично работает, играя винтажные виниловые синглы 60-х, 70-х и 80-х годов. При весе более 160 кг (360 фунтов) этот плеер не такой портативный, как современные MP-плееры, но, живя в эпоху Интернета, теперь можно носить музыкальный автомат и 200 виниловых пластинок в кармане - конечно же, практически! И вы даже можете использовать свои собственные списки воспроизведения, хранящиеся в микроконтроллере!

Удивительный робот PlotClock изначально предназначен для отображения текущего времени путем рисования цифр времени на стираемой доске. Моя адаптация для PlotClock заключается в использовании его в качестве пальца робота для нажатия кнопок выбора песен в музыкальном автомате.

«Палец» Plotclock приводится в действие 3 сервоприводами, управляемыми микроконтроллером WeMos. Это чудо (почти) совместимо с Arduino Uno и имеет возможности Wi-Fi, поэтому управлять музыкальным автоматом можно по беспроводной сети из любой точки мира.

Крем на торте исходит от невероятно простого в использовании приложения Blynk и их облачного сервера Blynk, обеспечивающего приятный пользовательский интерфейс мобильного телефона / планшета с полной мобильностью.

Шаг 1. Аппаратное обеспечение

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

Музыкальный автомат

Проект музыкального автомата - это Rowe AMI R-81 1977 года выпуска. Подойдет любой старый музыкальный автомат с кнопками выбора - с учетом некоторых ограничений PlotClock: оригинальный дизайн дужек PlotClock может занимать площадь около 5 x 12 см, поэтому расположение кнопок музыкального автомата (область, включая все кнопки выбора) должно быть примерно такого же размера. Кнопкам старых музыкальных автоматов может потребоваться большее усилие нажатия, чем может обеспечить сервопривод PlotClock.

AMI R-81 имеет память, в которой можно сохранить все 200 выбранных вариантов. Выборы воспроизводятся в том порядке, в котором они хранятся в журнале записей (карусельный тип), а не в порядке их выбора. Множественные выборы для одной записи воспроизводятся только один раз.

PlotClock

Plotclock - это коммерчески доступный комплект DIY, включающий механические детали, 3 сервопривода, Arduino Uno R3, плату расширения Arduino и USB-кабель. Примерно за 30 долларов это хорошая покупка (например, Banggood.com). Arduino, плата расширения и USB-кабель в этом проекте не используются.

Есть несколько хороших руководств по созданию Plotclock в Интернете / на YouTube, например. это: инструкции PlotClock

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

WeMos

WeMos D1 R2 - микроконтроллер на базе ESP8266. Он может быть запрограммирован с использованием Arduino IDE и имеет возможности Wi-Fi, поэтому это идеальное оборудование для этого проекта.

Шаг 2: Калибровка

Калибровка
Калибровка

Калибровка - это задача нахождения точных значений углов для углов сервопривода (от 0 до 180 градусов), соответствующих физическим положениям кнопок выбора. Значения углов можно найти с помощью тригонометрической аритемитики или с помощью программного обеспечения САПР. Я получил приблизительные значения от моего друга, который знал, как использовать AutoCad.

Однако окончательную калибровку пришлось провести методом проб и ошибок. Использование макета кнопок, нарисованного на листе бумаги. Можно провести «настольное тестирование», чтобы найти правильные значения угла.

Шаг 3: Сборка

сборка
сборка
сборка
сборка
сборка
сборка
сборка
сборка

Проводка

Подключение сервоприводов Plotclock к Wemos осуществляется с помощью 5 проводов: +5, GND, D4, D5 и D6. Смотрите подробности на картинках и в коде.

Установка на музыкальный автомат

Я не хотел проделывать отверстия под винты в музыкальном автомате, которому 40 лет и который так долго сохранился без серьезных повреждений. Используя мягкий резиновый герметик, я закрепил кусок алюминиевого уголка под консолью музыкального автомата. Резиновый герметик плотно прижимается и снимается, не оставляя следов. Для крепления корпуса PlotClock к акриловой пластине потребовалось два небольших алюминиевых уголка. Затем акриловая пластина прикрепляется к угловому списку с помощью двух подпружиненных зажимов, оставляя возможность выполнить окончательную регулировку по вертикали и горизонтали.

Шаг 4: Блинк

Блинк
Блинк

Blynk - бесплатное приложение для удаленного управления несколькими типами микроконтроллеров. С Blynk вы можете легко создать приятный пользовательский интерфейс, используя несколько типов виджетов. Для этого проекта нужен только один виджет: виджет Таблица.

Шаг 5: Программное обеспечение

Приложение Blynk

На стороне приложения нет кода. «Разговор» между приложением (Blynk) и микроконтроллером (WeMos) обрабатывается «виртуальными контактами», которые по сути являются каналами для отправки и получения информации между этими двумя. Виртуальный пин, например, используется для отправки номера строки выбранной песни из приложения Blynk в WeMos, а Wemos обрабатывает все остальное, т.е. отправка команд на сервоприводы Plotclock.

Код WeMos

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

Виджет таблицы в V2 ********************************************* **************** / #define BLYNK_PRINT Serial #include #include #include char auth = "- ВАШ КОД АУТ -"; // Проект музыкального автомата char ssid = "- ВАШ SSID--"; char pass = "- ВАШ ПАРОЛЬ WIFI--"; int c [50]; // Массив для позиций записи музыкального автомата (100–299) Servo myservo1; // подъем Servo myservo2; // левая рука Servo myservo3; // правая рука int pos1 = 0; int pos2 = 0; int pos3 = 0; int btn = 0; пустая настройка () {myservo1.attach (2); // вывод D4, поднимаем myservo2.attach (14); // вывод D5, слева myservo3.attach (12); // вывод D6, правый myservo1.write (140); myservo2.write (90); myservo3.write (90); Serial.begin (115200); Blynk.begin (auth, ssid, pass); // Немедленное уведомление при запуске // String msg = "Музыкальный автомат WeMos подключен к:"; //Blynk.notify(msg + ssid); // очищаем таблицу при запуске Blynk.virtualWrite (V2, "clr"); populateTable (); } BLYNK_WRITE (V2) // Получение команд от виджета Table V2 {String cmd = param [0].asStr (); // param [0] = "выбрать" или "отменить выбор", param [1] = row Serial.print ("\ nTable: BLYNK_WRITE (V2) cmd:"); Serial.print (cmd); int selection = c [параметр [1].asInt ()]; // Номер выбранной строки находится в param [1] Serial.println ("\ nSelection:"); Serial.println (выбор); process_selection (выбор); } void populateTable () {int я = 0; Serial.println («Заполнение таблицы…»); Blynk.virtualWrite (V2, «добавить», 0, «Будь моим ребенком - The Supremes», 112); c = 112; Blynk.virtualWrite (V2, «добавить», 1, «Номер один - Джерри Уильямс», 176); i ++; c = 176; Blynk.virtualWrite (V2, «добавить», 2, «Вся моя любовь - Битлз», 184); i ++; c = 184; Blynk.virtualWrite (V2, «добавить», 3, «Летом - Мунго Джерри», 236); i ++; c = 236; Blynk.virtualWrite (V2, «добавить», 4, «Черное облако - Chubby Checker», 155); i ++; c = 155; Blynk.virtualWrite (V2, «добавить», 5, «Mamy Blue - Pop-Tops», 260); i ++; c = 260; Blynk.virtualWrite (V2, «добавить», 6, «Все будет хорошо - Джерри и кардиостимуляторы», 145); i ++; c = 145; Blynk.virtualWrite (V2, «добавить», 7, «Мой путь - Том Джонс», 193); i ++; c = 193; Blynk.virtualWrite (V2, «добавить», 8, «Сан-Бернардино - Кристи», 149); i ++; c = 149; Blynk.virtualWrite (V2, «добавить», 9, «Твист - Chubby Checker», 169); i ++; c = 169;

задержка (1000);

} void process_selection (int selection) {// разбираем 3-значное выделение (например, 178) на 3 кнопки: int btn1 = int (selection / 100); // первая кнопка Serial.println ("\ nBtn1:"); Serial.println (btn1); if (btn1 == 1 || btn1 == 2) // первая кнопка должна быть 1 или 2 - в противном случае выполнить сброс {push_button (btn1); selection = selection - (btn1 * 100); int btn2 = int (выбор / 10); // вторая кнопка Serial.println ("\ nBtn2:"); Serial.println (btn2); push_button (btn2); selection = selection - (btn2 * 10); int btn3 = int (выделение); // третья кнопка Serial.println ("\ nBtn3:"); Serial.println (btn3); push_button (btn3); } еще {push_button (11); // кнопка сброса} // сброс положения сервоприводов, когда все сделано delay (2000); myservo1.write (140); myservo2.write (90); myservo3.write (90);} void push_button (int btn) {// это вызывается 3 раза для каждого выбора // фактическое нажатие кнопки выполняется после каждой кнопки (найдите 'фактическое нажатие кнопки') switch (btn) {case 1: set_servo_angles (134, 136); // 1 перерыв; случай 2: set_servo_angles (128, 110); // 2 перерыва; случай 3: set_servo_angles (112, 88); // 3 перерыва; случай 4: set_servo_angles (89, 68); // 4 перерыва; случай 5: set_servo_angles (62, 55); // 5 перерыв; случай 6: set_servo_angles (172, 131); // 6 перерыв; случай 7: set_servo_angles (163, 106); // 7 перерыв; случай 8: set_servo_angles (140, 83); // 8 перерыв; случай 9: set_servo_angles (104, 58); // 9 перерыв; случай 0: set_servo_angles (75, 36); // 0 перерыв; случай 11: set_servo_angles (36, 30); // 11 перерыв; } // конечный переключатель} void set_servo_angles (int pos2, int pos3) {myservo2.write (pos2); myservo3.write (pos3); // Позиции сервопривода готовы - выполнить собственно нажатие кнопки: delay (500); myservo1.write (60); // задержка вниз (500); myservo1.write (140); // задержка вверх (500); } void loop () {Blynk.run (); }

Шаг 6: Дальнейшие шаги

Виджет видео - видео и аудиопоток в реальном времени в приложение Blynk (уже протестировано - работает)

Виджет Webhook - загрузка плейлиста по запросу из облака (уже протестировано - работает)

Виджет таблицы - приветствуются небольшие улучшения виджета (предложения отправлены разработчикам Blynk)

Рекомендуемые: