+7-960-0655211 (Билайн)
+7-987-4207734 (МТС)

интернет-магазин
доставка по России и СНГ
работаем с 2010 года

Twitch - Ваш роботизированный питомец

Twitch - Ваш роботизированный питомец



Twitch - это виртуальный питомец, способный выразить себя через движения и звуки из некоторых любимых фильмов. Он может быть счастливым, грустным, злым или нейтральным в зависимости от того, как с ним взаимодействуете. 

Twitch возник из проекта «Adafriend Virtual Pet Cube» Джона Волла, который сделан на Adafruit Pro Trinket, светодиодной матрице и корпусом распечатанном на 3D-принтере. У меня уже была Arduino Uno и было не интересно распечатывать на 3D-принтере, с этого проект и начался.
Использовал много кода из исходного проекта, так как мне нравились анимированные глаз и различные эмоции, которые он мог изобразить. Затем добавил крепление для поворота/наклона, емкостный датчик касания и шилд Adafruit Wave, чтобы дать моему питомцу голос.
Для успешно завершения этого проекта, у вас должны быть хорошие навыки пайки. Было бы полезно, если бы Вы до этого делали хотя бы один проект на Arduino, чтобы смогли настроить программное обеспечение Arduino и загрузить скетчи. Также желательно иметь опыт отладки кода, поскольку мой далеко не идеален.

Шаг 1: необходимые детали

  • Arduino Uno
  • Adafruit Wave Shield 1.1
  • Комплект Mini Pan Tilt с 2 сервоприводами
  • Светодиодный модуль Adafruit Small 1.2" 8x8 LED Matrix w/I2C Backpack
  • Емкостный датчик касания AT42QT1070
  • Динамик для воспроизведения аудиофайлов
  • SD-карта для хранения ваших звуков
  • Источник питания для Arduino. Сервоприводы потребляют слишком много энергии для работы от 5В USB
  • Макетная плата
  • Коробку для электроники - я использовал деревянную 4X4X3, которую получил от Майкла
  • Провода, припой и прочее

Шаг 2: подготовка – Wave Shield, светодиодная матрица и крепление поворота/наклона


Следуйте инструкциям, чтобы собрать Wave Shield. Скопируйте как минимум один файл на SD-карту и убедитесь, что правильно работает скетч dap_hc (информацию о подготовке файла смотрите в следующем шаге). Используйте вывод в последовательный порт для помощи при отладке. Сначала будет выведена отладочная информация о количестве оперативной памяти и найденных именах каталогов и файлов, затем воспроизведет их. Хоть навыки есть, но с пайкой были проблемы и пришлось перепроверять каждую точку пайки, пока не заработало. Запаяйте динамик к контактам возле разъема для наушников на шилде.
Затем припаяйте светодиодную матрицу к плате. Будьте внимательны при пайке, в первый раз я вставил светодиодную матрицу не той стороной. Библиотека Backpack поставляется с примером скетча. Прежде чем продолжить, убедитесь, что этот скетч правильно работает.
Соберите набор поворота/наклона, модуль светодиодной матрицы хорошо к нему подходит.

Шаг 3: подготовка SD-карты

В проекте используются воспроизведение wave файлов на аудио шилде для передачи четырёх эмоций (грустный, счастливый, злой и нейтральный) и при срабатывании емкостного датчика касаний. Я использовал около 10 отрывков из фильмов для различных состояний, но Вы можете выбрать песни, звуки животных или что угодно. Звуки взяты с сайта www.moviewavs.com, которым пользуюсь с конца 1990-х. Хотя он не обновляется так часто, как раньше, очень рекомендую его.
Аудио шилд поддерживает 8.3 имена файлов, я использовал имена из двух цифр для экономии памяти микроконтроллера. Уверен, что есть более эффективный способ, но не смог его придумать.
Для воспроизведения аудио, оно должно быть моно, с частотой дискретизации не более 22кГц и не более 16-бит. Для подготовки файлов использовалась программа Audacity. В этом руководстве описан и другой способ как можно подготовить файлы.
Подобранные звуки переименовал следующим образом:

  • Звуки при срабатывании емкостного датчика 1.WAV - 8.WAV
  • Нейтральные звуки 10.WAV - 19.WAV 
  • Злые звуки 30.WAV - 39.WAV 
  • Грустные звуки 50.WAV - 59.WAV 
  • Счастливые звуки 70.WAV - 79.WAV
  • Скопируйте звуки в корневую директорию SD-карты, которую затем вставьте в аудио шилд.

Шаг 4: соединяем всё вместе


 


Аудио шилд использует выводы 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.

Шаг 5: код

В коде используется библиотека SoftwareSerial, поскольку аудио шилд вызывает конфликт с таймером на Arduino. Если вы знакомы со стандартной библиотекой сервоприводов, она работает точно так же, хотя для обновления сервоприводов требуется каждые 50мс вызывать «SoftwareServo::refresh()». Вы увидите это в коде.
Программа также использует библиотеки LED_Backpack  и GFX.
Код Twitch.ino.

Шаг 6: возможные следующие шаги 


Частично код оставляет желать лучшего и может быть реализован более оптимально. Мне бы очень хотелось, чтобы вместо жестко запрограммированных имен аудио файлов использовалось на прямую случайное число для получения имени файла. Но к сожалению, так реализовать не получилось.
Звук немного тише, чем хотелось бы, можно добавить аудио усилитель.
Вы можете изменить свой проект еще больше, добавить датчики, создавать разные действия или эмоции.