Анимация рта Билли Басса с любым источником звука
Компоненты и расходные материалы
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
Об этом проекте

Около месяца назад художник по имени Брайан Кейн опубликовал вирусное видео, в котором демонстрирует новинку Билли Басса с большим ртом, поющую рыбу, которую, по-видимому, озвучила виртуальная помощница Amazon Alexa. Интернет сошел с ума от этого, и я тоже, но в основном я просто хотел знать, как это работает, чтобы я мог сделать свой собственный.
Увидев ряд проектов Raspberry Pi, в которых использовалась Alexa, я изначально предположил, что Брайан создал проект Pi на базе Alexa, который удвоился как средство для анимации существующего оборудования Билли Басса - и это может быть так. Я даже высказал эту идею в своем еженедельном шоу на YouTube Maker Update.
Но, подумав еще раз, я подумал, что проще всего было бы использовать звук из Amazon Echo за 49 долларов и обрабатывать его через Arduino для управления существующими двигателями.
У меня уже были под рукой Arduino и моторный щит (хотя это был мой первый раз, когда я использовал щит).
Затем я заказал Billy Bass на Amazon примерно за 15 долларов. Я уверен, что вы можете купить подержанный на распродаже или в комиссионном магазине за меньшие деньги, но я хотел быстро. Еще заказал Echo Dot новый.
Сделав заказ, я перешел к исследованиям. Два урока вселили в меня надежду:это руководство от sfool 2012 года по использованию Arduino для перемещения сервопривода к звуку и это руководство от Dotten 2013 года по пониманию аниматроники игрушки Билли Басса.
Понимая, что Billy Bass (очень похожий на Furby), по сути, приводится в движение двумя дешевыми игрушечными двигателями 5 В постоянного тока - тогда проблема просто заключается в том, как заставить эти двигатели дергаться в ответ на звук. Путем проб и ошибок я нашел работоспособное решение. Код далек от совершенства, и есть много других функций, которые я хочу встроить, но я хотел поднять это, чтобы каждый мог помочь сделать это лучше.
Необходимые материалы
- Поющая рыба Билли Басс с зубами (1)
- Arduino Uno (1)
- Блок питания Arduino Uno (1)
- Adafruit Motor Shield v2 (1)
- Миниджек для монтажа на панель (1)
- Многожильный соединительный провод (можно использовать несколько цветов)
- Amazon Echo Dot (хотя любой источник звука должен работать) (1)
- Какой-то небольшой перезаряжаемый динамик (1)
- Аудиокабель с мини-разъемом (⅛ ”) (1)
- Адаптер кабеля разветвителя Minijack (1)
Необходимые инструменты
- Маленькая отвертка
- Паяльник и припой
- Инструмент для зачистки проводов
- Фрагменты
- Сверла и насадки
Шаг 1. Приготовьте рыбу









Хорошо это или плохо, но использованная рыба была мертва по прибытии. По крайней мере, я без колебаний открыл его и взломал. В моем случае просто открутите винты на задней панели, откройте ее и слегка надавите, чтобы отсоединить жгуты проводов, чтобы можно было полностью снять заднюю часть.
Чтобы освободить место для электроники, которую мы добавим, открутите и снимите печатную плату Билли Басса и пьезозуммер.
У вас осталась одна 4-х проводная сбруя, торчащая из рыбы. Сюда входят два провода, которые оживляют рот (вы можете видеть, как они уходят в рыбу), и два провода, которые поднимают либо голову, либо хвост, в зависимости от того, в каком направлении вы запускаете двигатель.
Последний шаг в подготовке рыбы - отрезать четыре одинаковых отрезка проволоки разного цвета, обнажить кончики и залудить их, а затем вставить концы в каждое из четырех гнезд жгута проводов. На следующем этапе мы подключим их к моторному щиту Arduino.
Шаг 2. Подготовьте моторный щит






Вам нужно сделать всего 4 соединения с моторным щитом, и только два из них припаяны. Вы также можете подключить два дополнительных провода, если хотите поэкспериментировать с двигателем хвоста / головы.
Начнем с пайки, чтобы с этим покончить. Чтобы создать аудиовход для вашей рыбы, возьмите два провода одинаковой длины разного цвета, зачистите концы и припаяйте один к земле, а другой к аналоговому 0. Обрежьте лишний провод, проходящий через плату.
Теперь давайте проведем эти провода к панельному мини-разъему для нашего аудиовхода. Разъем, который у меня был, был одним из тех модных моно переключателей с тремя возможными подключениями. Все, что имеет значение, это то, что вы создаете моновход, пропуская провод от аналогового 0 к проводу на разъеме, который контактирует с концом аудиоразъема. Затем протяните заземляющий провод к проводу на разъеме, который контактирует с основанием (или гильзой) аудиоразъема.
Затем, чтобы подключить мотор (ы) рыбы к экрану, пропустите пару проводов, ведущих к мотору «рыбьей пасти» (черный и оранжевый), в клеммные колодки мотора 1 и прикрутите их. При желании вы можете пропустить провода хвостового / головного двигателя (белый и красный) к клеммам двигателя 2, хотя код еще ничего не делает с этим двигателем (подробнее об этом в следующем разделе). Для моей рыбы цвет проводов на клеммных колодках становится черным, оранжевым (желтым в моем случае) для электродвигателя рта (M1) и белым, красным из-за дополнительного электродвигателя хвостовой части (M2).
Наконец, убедитесь, что на моторном щите перемычка прикреплена к контактам с маркировкой VIN Jumper. Сначала я пропустил это и чесал в затылке, гадая, почему щит не включается. Теперь вы должны иметь возможность прикрепить щит к Arduino Uno, включить Arduino и увидеть, как на щите загорается светодиодный индикатор питания. Если щиток не загорается, проверю перемычку.
Шаг 3. Загрузите код



Итак, код представляет собой запутанный хакер, который объединяет элементы скетча DC Motor Test (по сути, демонстрацию моторного щита) и скетча Sound to Servo от Cenk Özdemir (2012), включенного в это Arduino Sound to Servo Tutorial, с которым я связался. выше.
Код в его текущем состоянии еще не анимирует двигатель головы / хвоста. У меня была одна версия, но она замедляла реакцию движений рта. В идеале я бы хотел, чтобы рот оставался отзывчивым, в то время как голова и хвост медленно циклически повторяли свою собственную анимацию, но это текущий предел моих возможностей кодирования Arduino. Как только я выясню это или получу предложения от вас, ребята, я опубликую обновленный код.
Шаг 4. Собираем все вместе





Когда код загружен, а аудиокабель подключен к разъему, вы сможете заставить рыбу двигаться, просто подключив источник звука к свободному концу кабеля (я использовал свой телефон для воспроизведения подкаста). Если он работает, просверлите небольшое отверстие где-нибудь на пластиковой пластине с рыбой, протолкните домкрат и затяните его на месте.
Чтобы Алекса (или как вам угодно) разговаривала через вашу рыбу, подключите свободный конец аудиокабеля к Y-адаптеру, перезаряжаемый динамик к другому входу адаптера, а затем вставьте вилку адаптера в разъем. аудиовыход Echo Dot.
Убедитесь, что ваш динамик включен и громкость увеличена как на динамике, так и на Alexa. Затем вызовите Алексу и задайте ей вопрос, чтобы она заговорила (погода, анекдоты, новости). Вы должны слышать ее голос через портативный динамик и одновременно наблюдать, как во время хлопают резиновые губы вашей рыбы. Чем ближе динамик к голове рыбы, тем более жутким будет эффект.
Если все получится, уловка заключается в том, чтобы упаковать динамик и Arduino в корпус Billy Bass и закрыть его. Честно говоря, я все еще не понимаю этого.
Шаг 5. Что дальше?


Здесь еще многое предстоит сделать, и я приветствую все ваши предложения по его улучшению. Я хотел бы опубликовать для этого версию 2.0 в ближайшем будущем.
1. Хочу оживить голову и хвост. Связи есть, и мне удалось заставить их работать, но не без ущерба для отзывчивости рта, что очень важно.
2. Я хочу, чтобы динамик мог заряжаться от Arduino. Кажется достаточно простым, но я еще не сделал этого.
3. Я хочу, чтобы красная кнопка Билли Басса (или ее заменитель) переключалась между режимом «речи» (подробнее о движении рта и всей привлекательности «говорящей рыбы», так и «музыкальным» режимом, который больше о рыбе, плавающей вокруг. время под музыку.
4. Код очистки. Я уверен, что в коде осталось много остатков от созданного мной мэшапа. Я приветствую любые попытки очистить его.
5. Используйте Arduino меньшего размера. Uno и Motor Shield совершенно не подходят для того, для чего мы их используем. Я думаю, что Adafruit Feather и их двухмоторный щит вместо пера были бы хорошей альтернативой. Возможно, у вас будет один привод для рта, а другой - для двигателя хвостовой части.
Код
- SoundToDC
SoundToDC Arduino
/ * Заставляем двигатель постоянного тока работать со звуком. Этот пример кода находится в общественном достоянии. Создано Дональдом Беллом, Maker Project Lab (2016). Основано на Sound to Servo от Cenk zdemir (2012) и DCMotorTest от Adafruit * /// включает библиотеку защиты двигателя Adafruit # include#include #include "utility / Adafruit_MS_PWMServoDriver.h" // Создайте объект моторного щита с адресом I2C по умолчанию Adafruit_MotorShield AFMS =Adafruit_MotorShield (); // Или создайте его с другим адресом I2C (скажем, для стекирования) // Adafruit_MotorShield AFMS =Adafruit_MotorShield (0x61); // Выбираем, какой «порт» M1, M2, M3 или M4. В этом случае M1 для рта и M2 для хвостаAdafruit_DCMotor * myMotor =AFMS.getMotor (1); Adafruit_DCMotor * myOtherMotor =AFMS.getMotor (2); // Некоторые другие переменные, которые нам нужны int SoundInPin =A0; int LedPin =12; // если вы хотите, чтобы светодиод загорался при движении рта // процедура настройки запускается один раз при нажатии кнопки сброса:void setup () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с AFMS.begin (); // создаем с частотой по умолчанию 1.6KHz //AFMS.begin(1000); // ИЛИ с другой частотой, например 1 кГц // Установите скорость запуска от 0 (выкл.) До 255 (максимальная скорость) myMotor-> setSpeed (0); // моторчик рта myMotor-> run (FORWARD); // включаем мотор myMotor-> run (RELEASE); pinMode (SoundInPin, ВХОД); pinMode (LedPin, ВЫХОД); myOtherMotor-> setSpeed (0); // хвостовой двигатель myOtherMotor-> run (FORWARD); // включаем мотор myOtherMotor-> run (RELEASE); pinMode (SoundInPin, ВХОД); } // процедура цикла выполняется снова и снова бесконечно:void loop () {uint8_t i; // считываем вход аналогового вывода 0:int sensorValue =analogRead (SoundInPin); // Сопоставляем другое значение этого светодиода, которое может быть целым числом от 0..255 int LEDValue =map (sensorValue, 0,512,0,255); // Мы отображаем его здесь до возможного диапазона движения. sensorValue =map (sensorValue, 0,512,0,180); // обратите внимание, что обычно 512 - это 1023, потому что аналоговое считывание должно заходить так далеко, но я изменил это, чтобы получить лучшие показания. int MoveDelayValue =map (sensorValue, 0,255,0, sensorValue); // отображение того же показания немного ниже, чтобы вычислить время, в течение которого ваш двигатель получает if (sensorValue> 10) {//, чтобы отключить некоторые статические показания delay (1); // статическая задержка для сглаживания ... // теперь двигаем мотор myMotor-> run (FORWARD); для (я =140; я <255; я ++) {myMotor-> setSpeed (я); } // for (i =200; i! =0; i--) {// myMotor-> setSpeed (i); // delay (10); //} analogWrite (LedPin, sensorValue); // и сделаем это движение за это время задержки myMotor-> run (RELEASE); myOtherMotor-> run (РЕЛИЗ); delay (1);} // Готово. // снова выключаем светодиод. analogWrite (LedPin, 0); // и это повторяется постоянно.}
Производственный процесс
- Мониторинг CO2 с помощью датчика K30
- Слепоглухое общение с 1Sheeld / Arduino
- Управление монетоприемником с помощью Arduino
- Рот Билли Басс + Алекса
- Детектор звуковой частоты
- Arduino с Bluetooth для управления светодиодом!
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Игра с дисплеем Nextion
- Воспроизведение звука в Arduino
- Роботизированная рука, управляемая нунчук (с Arduino)