Twitch - это виртуальный питомец, способный выразить себя через движения и звуки из некоторых любимых фильмов. Он может быть счастливым, грустным, злым или нейтральным в зависимости от того, как с ним взаимодействуете.
Twitch возник из проекта «Adafriend Virtual Pet Cube» Джона Волла, который сделан на Adafruit Pro Trinket, светодиодной матрице и корпусом распечатанном на 3D-принтере. У меня уже была Arduino Uno и было не интересно распечатывать на 3D-принтере, с этого проект и начался.
Использовал много кода из исходного проекта, так как мне нравились анимированные глаз и различные эмоции, которые он мог изобразить. Затем добавил крепление для поворота/наклона, емкостный датчик касания и шилд Adafruit Wave, чтобы дать моему питомцу голос.
Для успешно завершения этого проекта, у вас должны быть хорошие навыки пайки. Было бы полезно, если бы Вы до этого делали хотя бы один проект на Arduino, чтобы смогли настроить программное обеспечение Arduino и загрузить скетчи. Также желательно иметь опыт отладки кода, поскольку мой далеко не идеален.
В проекте используются воспроизведение wave файлов на аудио шилде для передачи четырёх эмоций (грустный, счастливый, злой и нейтральный) и при срабатывании емкостного датчика касаний. Я использовал около 10 отрывков из фильмов для различных состояний, но Вы можете выбрать песни, звуки животных или что угодно. Звуки взяты с сайта www.moviewavs.com, которым пользуюсь с конца 1990-х. Хотя он не обновляется так часто, как раньше, очень рекомендую его.
Аудио шилд поддерживает 8.3 имена файлов, я использовал имена из двух цифр для экономии памяти микроконтроллера. Уверен, что есть более эффективный способ, но не смог его придумать.
Для воспроизведения аудио, оно должно быть моно, с частотой дискретизации не более 22кГц и не более 16-бит. Для подготовки файлов использовалась программа
Audacity. В
этом руководстве описан и другой способ как можно подготовить файлы.
Подобранные звуки переименовал следующим образом:
Аудио шилд использует выводы 10, 11, 12 и 13 для работы с SD-картой, а выводы 2,3, 4 и 5 для ЦАП, поэтому мы не можем использовать эти выводы ни для чего другого.
Выводы A4 и A5 на Arduino - это линии I2C, которые используются для управления светодиодной матрицей. A4 подключается к SDA с меткой «D» (данные) на плате, а A5 к SCL с меткой «C» (тактирование) на плате.
Цифровые выводы 6 и 9 используются для управления сервоприводами. 6 подключен к сервоприводу «X» (вверх и вниз), а 9 подключен к сервоприводу «Y» (влево и вправо).
Антенны подключены к входам 0 и 1 платы емкостного датчика, а выходы 0 и 1 к A0 на Arduino. Если не планируете реализовывать различную реакцию для каждой антенны, можно обе сразу подключить к одному входу датчика и соответственно один выход к A0.
В коде используется библиотека SoftwareSerial, поскольку аудио шилд вызывает конфликт с таймером на Arduino. Если вы знакомы со стандартной библиотекой сервоприводов, она работает точно так же, хотя для обновления сервоприводов требуется каждые 50мс вызывать «SoftwareServo::refresh()». Вы увидите это в коде.
Программа также использует библиотеки LED_Backpack и GFX.
Код
Twitch.ino.
Частично код оставляет желать лучшего и может быть реализован более оптимально. Мне бы очень хотелось, чтобы вместо жестко запрограммированных имен аудио файлов использовалось на прямую случайное число для получения имени файла. Но к сожалению, так реализовать не получилось.
Звук немного тише, чем хотелось бы, можно добавить аудио усилитель.
Вы можете изменить свой проект еще больше, добавить датчики, создавать разные действия или эмоции.