Рубрики
Схемы на Arduino

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

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

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

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

  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 для изготовления ног устройства.

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

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

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

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

Схема 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-плечам. Эта проблема оказалась достаточно трудной для решения потому что без правильных прокладок вся конструкция нашего проекта не могла двигаться гладко. На рисунке ниже представлено фото всех осей серводвигателей в нашем проекте.

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

https://circuitdigest.com/sites/default/files/other/Animatronic-EYE-Arduino.mp4

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

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

4 ответа к “Создание 3D аниматронного глаза на Arduino”

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

Ну в результате у вас получилось собрать данный проект до конца?

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

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

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

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

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

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

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