Создание 3D аниматронного глаза на Arduino


В данной статье мы рассмотрим создание аниматронного глаза на основе платы Arduino. Модель данного глаза будет напечатана на 3D принтере. Автор данного проекта (ссылка на оригинал приведена в конце данной статьи) прежде чем приступить к созданию данного глаза изучил достаточно много работ по мехатронике. Огромное спасибо он хотел бы сказать пользователю Will Cogley за создание 3D модели данного глаза и других необходимых ресурсов и опубликование их в открытом доступе.

Внешний вид 3D аниматронного глаза на основе платы Arduino

Существует две версии дизайна данного аниматронного глаза, одна попроще, а другая посложнее. В этой статье мы рассмотрим создание модели глаза которая попроще.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Сервомотор SG90 – 6 шт. (купить на AliExpress).
  3. Винты M2, M3 и M4.
  4. Макетная плата.
  5. Соединительные провода.
  6. 3D принтер.

Сборка механизма аниматронного глаза

Для начала нам необходимо напечатать все компоненты нашего аниматронного глаза (показанные на рисунке ниже) на 3D принтере. 3D модели всех этих компонентов доступны по следующей ссылке. Потом вам необходимо сам глаз и некоторые другие компоненты его механизма отшлифовать чтобы они лучше прилегали друг к другу при сборке.

Компоненты для сборки механизма аниматронного глаза

Сборку механизма проекта целесообразно начать с закрепления 5 или 6 сервомоторов на модуле Servo_Block как показано на рисунке ниже.

Установка основной части сервомоторов аниматронного глаза

Далее необходимо соединить модуль сервоприводов (Servo_Block) с основной базой проекта (Main_Base) как показано на рисунке ниже. Автор проекта использовал установочные винты 12mm M3 для изготовления ног устройства.

Соединение модуля сервоприводов (Servo_Block) с основной базой проекта

Далее необходимо подсоединить адаптер глаза (Eye-Adaptor) для обоих глаз. После этого к адаптеру необходимо подсоединить держатель глаза (Eye-Holder) и трехточечный коннектор с вилкой. На этом этапе вы должны получить следующую конструкцию:

Сбока механизма адаптера глаза

После того как это будет сделано необходимо подключить последний 6-й сервомотор к базе Sub_Base и потом соединить эту базу с основной базой (Main_Base) с помощью винтов. После этого можно вставлять PlaceHolder Eye в адаптер глаза. X-плечо (X-Arm) и Y-плечо (Y-Arm) также необходимо закрепить с помощью винтов.

Установка X-плеча (X-Arm) и Y-плеча (Y-Arm)

Потом необходимо подсоединить коннекторы века глаза к веку – для этого мы также использовали винты M3. Если вы все сделали правильно, то конструкция глаза у вас должна выглядеть как на рисунке ниже: веки должны быть соединены с коннекторами век и скреплены винтами с плечами сервомоторов.

Собранный механизм аниматронного глаза

Схема проекта

Схема 3D аниматронного глаза на основе платы Arduino представлена на следующем рисунке.

Схема 3D аниматронного глаза на основе платы ArduinoКак видите, она достаточно проста. В оригинальном проекте от Will Cogley управление 6 сервомоторами производилось с помощью микросхемы PCA9685, представляющую собой 16-канальный 12-битный драйвер управления сервомоторами, но мы обошлись без нее поскольку библиотека для управления сервомоторами платы Arduino (Servo Library) прекрасно справляется с управлением 6 сервомоторами. Плата Arduino Nano как раз содержит 6 контактов, на которых возможно формирование ШИМ сигналов, все эти контакты мы и будем использовать для управления сервомоторами.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Для управления сервомоторами в нашем проекте мы будем использовать библиотеку Servo.h. Более подробно про подключение сервомотора к плате Arduino вы можете прочитать в этой статье.

Первым делом в коде программы мы подключим необходимую нам библиотеку Servo.h и создадим 6 объектов для управления 6 сервомоторами.

Далее, в функции setup(), мы укажем к каким контактам какие сервомоторы подключены.

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

Также мы запрограммируем ряд функций для управления нашим аниматронным глазом – и это будет наиболее важная часть нашей программы. Функция open_eye() будет открывать глаз, для этого необходимо один из сервомоторов повернуть в направлении по часовой стрелке, а другой – против часовой стрелки. Эти действия необходимо выполнить для обоих век (левого и правого).

В функции close_eye() (закрытия глаза) мы будем делать те же самые действия что и в функции open_eye(), но наоборот (в обратном порядке).

Функции look_up() и look_down() будут управлять движениями Y-плеча вверх и вниз соответственно.

Функции eye_ball_left() и eye_ball_right() управляют движениями глаза по горизонтали.

Функция eye_ball_centert() устанавливает глаз по центру, то есть выставляет угол 90 градусов для X-плеча и Y-плеча.

Далее запрограммируем ряд функций, которые облегчат нам работу с нашим аниматронным глазом. Первой из них будет функция synchronous_close() – она будет один раз закрывать и открывать глаз.

Функция random_close() будет случайно открывать и закрывать глаз. Смотрится это впечатляюще.

В функции random_movement() мы используем функцию random() внутри функции delay чтобы смоделировать случайные движения глаза.

Внутри основной функции программы void loop() мы буде двигать глаз влево, вправо, по центру, затем вверх и вниз. После этого мы будем делать моргание глаза со случайными движениями. А в конце у нас будут два цикла for – они показывают пример того как сделать движения глаза плавными.

Тестирование и отладка работы проекта

Первая проблема, с которой столкнулся автор данного проекта, заключалась в том, что держатели глаз (eye_place_holders) двигались недостаточно гладко и между ними и веками (eye_lids) было достаточно большое трение.

Решением этой проблемы явилось ослабление (или полный отказ) винтов, которые прикрепляют держатели глаз (Eye-Holder) к основанию устройства. Эти винты выделены красным цветом на следующей картинке.

Винты, с помощью которых можно уменьшить трение глаза

Следующей проблемой явилось то, как подключить оси серводвигателей к векам (eye_lid) и X- и Y-плечам. Эта проблема оказалась достаточно трудной для решения потому что без правильных прокладок вся конструкция нашего проекта не могла двигаться гладко. На рисунке ниже представлено фото всех осей серводвигателей в нашем проекте.

Фото всех осей серводвигателей в нашем проекте

Все остальное работало отлично и результаты этого процесса вы можете посмотреть в следующем видео.

Исходный код программы (скетча)

Источник статьи

(Проголосуй первым!)
Загрузка...
791 просмотров

Комментарии

Создание 3D аниматронного глаза на Arduino — 4 комментария

  1. При монтаже произошла ошибка и Eye Holder был смонтирован вверх ногами, поэтому и винты мешались и их пришлось выкрутить

      • Да, спасибо вашему сайту за инструкцию, собрал на Nano c дополнительным питанием и библиотекой ServoEasing

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

        Сейчас экспериментирую с программированием мимики

        https://disk.yandex.ru/i/KAybdiTcWDe6VA

        • Спасибо вам за конструктивный комментарий и фото собранной конструкции. Надеемся, у вас получится исправить все недочеты в нем

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *