В этой статье я расскажу, как мне удалось создать собственный "художественный" робот. Главный посыл статьи заключается в том, чтобы продемонстрировать, как мы, люди, в стремлении создавать что-то новое обращаемся за помощью к машинам и роботам и что из этого может получиться. Как художественный стиль, так и весь дух проекта были вдохновлены великим мастером поп-арта Энди Уорхолом. В своём творчестве Энди Уорхол часто вдохновлялся такими понятиями, как коммодитизация (переход продукта из марочной категории в категорию рядовых продуктов) и массовое производство. Это вдохновило его на создание художественных полотен, на которых изображены отдельные предметы или объекты, например бутылки с кока-колой, Мэрилин Монро или банки с супом Кэмпбелл. Кроме того, при создании своих картин он использовал особый метод – шелкотрафаретную печать. Это дало ему возможность поставить на поток изготовление картин и художественных работ в собственной студии The Factory.Возможно, я несколько преувеличиваю, но мне кажется, что Энди по достоинству оценил бы искусство моего робота, создающего художественные произведения в его неповторимом стиле. В конце концов, он сам заявил когда-то: "Я хочу стать машиной". Использованная мною техника рисования линий давно известна, имеется множество её вариантов, и многие из них наверняка намного эффективнее той, которую я реализовал. Однако я намеренно не стал использовать в своей работе подобные техники, так как целью данного проекта было не просто достижение конечного результата, а изучение и разрешение многих иногда ожидаемых, а иногда неожиданных проблем, которые могли возникать на этом пути. Если бы я воспользовался уже имеющимися проектами и кодами, я бы, наверное, смог закончить собственный проект гораздо быстрее. Но я не ставил своей целью изготовить робота как можно быстрее. Повторю ещё раз – целью данного проекта было не просто достижение конечного результата, а изучение и разрешение многих иногда ожидаемых, а иногда неожиданных проблем, которые могли возникать на этом пути. Работа над проектом стала для меня сплошным удовольствием! Для выполнения данного проекта потребуется множество различных файлов, например файлы для 3D-печати, код микроконтроллера, схема разводки печатной платы и компьютерная программа с графическим интерфейсом. Все необходимые файлы, разработанные и подготовленные мной для данного проекта, я поместил в репозиторий Github, версии этих файлов я постоянно обновляю. Серводвигатель с металлическим приводом. Datan B2122. 2 шаговых двигателя Nema 17. Модель 17HS4401N. 2 зубчатых шкива 2GT 20. Просверленное отверстие 5 мм. Для приводного ремня шириной 6 мм. 2 зубчатых ремня 2GT 20. Ширина 6 мм. Длина 2 м. 7 шариковых подшипников 623ZZ. 3x10x4 мм. V-образная направляющая 20x20 мм. Длина 1500 мм. Как минимум 4 зажима с храповым механизмом или винтовых. Доступ к 3D-принтеру. Строительный гипс. Гайки, болты и шайбы М3 в ассортименте. В принципе, подойдёт размер M3x10 мм (конические). Программируемый контроллер Arduino Nano. 2 бесшумных шаговых двигателя TMC2130. 4 цилиндрических алюминиевых конденсатора на 10 мкФ. 1 конденсатор 1206 на 330 мкФ. 1 конденсатор 1206 на 100 мкФ. 1 линейный регулятор напряжения LM7805 TO-252. 2 диода Шоттки MDD SS14, DO-214. Нажимная кнопка 6,0x3,5 мм. Сейчас эта кнопка не задействована, я просто добавил её в конструкцию, так как она может понадобиться позже. 2 четырёхштырьковые гнездовые колодки с JST.  1 трёхштырьковая гнездовая колодка с JST.  Источник питания: 7–35 В, мин. ток 1,5 A. Вначале я рекомендую посмотреть видео – вы поймёте, как ведёт себя робот в действии и как его настраивать для создания художественной работы. Говорят, изображение заменяет тысячу слов, и теперь представьте, сколько слов заменит видео, в котором изображения сменяют друг друга 30 раз в секунду! Чтобы использовать робот для рисования, зажимами я закрепил на его раме чистый холст. Затем я подвесил рисующую головку и перебросил ремни через шаговые двигатели, расположенные на углах рамы робота, и отцентрировал рисующую головку (перевел её в домашнее положение). В рисующую головку вставил перманентный маркер. Затем подключил робот по USB-кабелю к компьютеру, на котором запустил управляющее программное обеспечение. В компьютер я загрузил чёрно-белое изображение, созданное в программе Photoshop, а затем разместил рисующую головку в том месте холста, откуда должна начаться прорисовка. Чтобы рисующая головка попала в нужное положение, я отправлял на робот команды перемещения в пределах ограничительной рамки и подгонял расположение изображения до тех пор, пока оно не оказалось именно там, где нужно. Затем я дал команду отправки изображения на робот. Наконец, робот завершил свою работу – на холсте появилось чёрно-белое изображение. И вот настал момент, когда я смог почувствовать себя настоящим художником. Я взял обычную акриловую краску, разбавленную двумя частями клея для декупажа Mod Podge. В итоге я получил акриловую глазурь, которую нанес поверх чёрных деталей. Холст окрасился красивыми цветами, при этом все чёрные детали сохранились и благодаря глазури приобрели особый блеск.И вы можете создать нечто такое же, это потрясающе! На этом шаге выполняются все действия по креплению компонентов на раму робота. Главная часть рамы – V-образная направляющая 20x20 мм. При проектировании робота я взял за основу направляющую длиной 100 см, так как её было легче разместить на рабочем столе, но по зрелом размышлении я решил увеличить её длину до 150 см. В принципе, длина направляющей может быть любой, желаемую длину можно указать в соответствующей переменной в коде Arduino, мы остановимся на этом чуть позже.Вначале нужно распечатать все 3D-файлы, о которых я говорил на первом шаге. Довольно быстро это делается с разрешением 0,3 мм без заполнения.Взгляните на первый рисунок для данного этапа. Во все 3D-отпечатки, имеющие шестигранное углубление с внутренней стороны, нажатием вставляется гайка M3. С другой стороны в гайку закручивается винт M3 произвольной длины. Нажатие вдавливает винт в металлическую направляющую и создаёт прочное механическое соединение (которое при необходимости может быть ослаблено). Вставьте Поворотный регулировочный винт в Приспособление для перевода в домашнее положение, убедившись в том, что винт может свободно поворачиваться в приспособлении. Сдвиньте узел к самому центру направляющей робота и закрепите, как описано выше. Распечатайте два держателя платы и задвиньте их в направляющую. Я предусмотрел возможность крепления держателей винтами, но сейчас в этом нет необходимости. После того как печатная плата будет зажата держателями, натяжение надёжно удержит их на месте. Вначале с помощью винтов M3x10 мм прикрутите к держателям двигатель Nema 17 (по шайбе на каждый винт). Затем вставьте держатели двигателей в направляющую робота и снова закрепите их винтами, следя, чтобы двигатели оставались на краях направляющей. Теперь на валы двигателей можно накинуть ремённые шкивы. Чтобы собранная конструкция робота никому в доме не мешала, но при этом в любое время была готова к использованию, я разместил всю конструкцию на шкафу в гостиной. Для этого я взял старую полку и скрепил робот с этой полкой с помощью винтовых зажимов. Затем я прижал полученную конструкцию зажимами к верхней части шкафа и закрепил универсальными креплениями Command с задней стороны полки. Полоски Command обеспечивают дополнительное крепление, предотвращающее поворот полки, расположенной поверх шкафа, а также обеспечивают возможность определённой регулировки – я могу легко двигать полку вперёд или назад. Другими словами, я могу размещать холст на разной глубине. Первым делом необходимо отрезать остатки суппорта и отшлифовать поверхность, которая соприкасалась с опорами – так мы получим поверхность без неровностей и шероховатостей. Вставьте два 10-миллиметровых шариковых подшипника в левый и правый кронштейны. Для крепления двух кронштейнов на рисующей головке мы используем винт М3х20 мм и стопорную гайку М3 с обеих сторон среднего контейнера. Всё это собирается вместе в следующую уровневую конструкцию: Винт M3x20 мм. Шайба. Средний контейнер. Шайба. Правый кронштейн с шариковым подшипником. Шайба. Левый кронштейн с шариковым подшипником. Шайба. Правый кронштейн с шариковым подшипником.  Шайба.  Средний контейнер.  Шайба.  Стопорная гайка M3. Количество используемых шайб и их положение, возможно, придётся изменить, в зависимости от того, насколько глубоко в кронштейны были вставлены подшипники. Убедитесь, что все элементы плотно соединены друг с другом, но при этом подшипники должны двигаться свободно, чтобы рисующая головка могла свободно перемещаться от каждого из регулировочных винтов кронштейнов. Теперь необходимо установить другой шарикоподшипник со стороны рисующей головки. Вставьте сервопривод под держатель пера, при этом ротор должен находиться ближе к передней части рисующей головки. Вставьте винт со стороны сервопривода, чтобы он вышел через подшипник. Насадите распечатанный на 3D-принтере манипулятор робота на винт, проходящий через подшипник, и на сервопривод с другой стороны. Затяните гайку М3 с левой стороны рисующей головки, другую сторону манипулятора пока не фиксируйте. Перед закручиванием винта сервопривода для крепления правой стороны манипулятора робота необходимо включить сервопривод и установить его в положение 100. Если под рукой нет контроллера Arduino, придётся подождать, пока будет установлена печатная плата и загружен код, и тогда сервопривод можно перевести в положение "no-draw". Как вариант, с каждой стороны манипулятора робота можно добавить подшипники. В этом случае, как я заметил, качество рисуемых линий станет немного выше. Движения робота возможны только благодаря действию гравитации. Для изготовления весовых нагрузок для робота я распечатал на 3D-принтере пластиковые оболочки, которые затем заполнил строительным гипсом. Перед затвердеванием гипса я вставил в оболочки распечатанную на 3D-принтере шпильку, с помощью которой можно легко манипулировать весовыми нагрузками робота. Опытным путём я узнал, что оптимальный вес боковых весовых нагрузок составил около 300 г, а средней – около 530 г. Эти значения отлично подошли для размеров создаваемого мною робота. После того как мне стал известен вес, мне нужно было понять, какому объёму гипса он соответствует. Я провел ряд экспериментов с гипсом и рассчитал значение плотности: Rho = 1,435 кг/л. Плотность используемого вами наполнителя может быть другой, но мне кажется, что большинство видов гипса для домашних работ, изготавливаемых из двух частей гипсового порошка и одной части воды, имеют примерно такие же значения плотности. При расчёте объёма, необходимого для печати пластиковых оболочек, я применил расчётное значение плотности, после чего запустил 3D-печать оболочек соответствующего объёма.Теперь ценный совет: для распечатки весовых нагрузок я использовал полилактидный пластик. Это не водонепроницаемый материал, поэтому незатвердевший гипс может просачиваться через трещины в 3D-печати. Чтобы избавиться от этой проблемы, я с помощью кисти нанёс слой воска (для этого пришлось зажечь восковую свечу) на внутреннюю поверхность 3D-отпечатка. Теперь оболочка стала водонепроницаемой, и гипс будет надёжно удерживаться внутри неё вплоть до затвердевания. Теперь нужно просто засыпать гипс в оболочки до уровня заполнения, отмеченного на рисунках. Пока гипс затвердевает, следите за держателями, чтобы они не сместились с места. Такие держатели можно удалить через 24 часа. Главной программой, управляющей роботом, является программное обеспечение контроллера Arduino Nano. Контроллер обрабатывает входные команды, передаваемые через USB, осуществляет точные расчёты движения, посылает импульсные команды шаговым двигателям, а также перемещает манипулятор робота вверх и вниз либо для рисования линии, либо для простого перемещения по прямой. На первом этапе можно загрузить файлы GERBER, разработанные мной для "мозга" робота, которые я заказал на сайте JLCPCB.com, любезно предоставившего спонсорскую поддержку этому проекту. На печатную плату нанесена понятная маркировка, для её изготовления используются стандартные компоненты. Процесс пайки предельно прост. Чтобы обеспечить простоту подключения/отключения двигателей, я припаял штыревые головки к шаговому двигателю и сервоприводу. Я припаял соответствующие штыревые головки к проводам сервопривода и двум шаговым двигателям. Программируемый контроллер Arduino Nano. 2 бесшумных шаговых двигателя TMC2130. 4 цилиндрических алюминиевых конденсатора по 10 мкФ. 1 конденсатор 1206 на 330 мкФ. 1 конденсатор 1206 на 100 мкФ. 1 линейный регулятор напряжения LM7805 TO-252. 2 диода Шоттки MDD SS14, DO-214. Нажимная кнопка 6,0x3,5 мм. Сейчас эта кнопка не задействована, я просто добавил её в конструкцию, так как она может понадобиться позже. 2 четырёхштырьковые гнездовые головки JST. 1 трёхштырьковая гнездовая головка JST. Для подачи питания на электронные компоненты я использовал зарядное устройство для ноутбука, выдающее напряжение 19,5 В, но вполне можно использовать любой имеющийся блок питания, при условии, что он выдаёт от 7 до 35 В и не менее 1,5 А. После завершения пайки загрузите в Arduino код (см. первый шаг). Важное замечание: не забудьте подключить мою библиотеку fork of the stepper, которую можно загрузить из моего хранилища github. Мне пришлось исключить ненужную функцию, вызывавшую ошибку – линии рисовались не прямо, а с точкой перелома. Если бы вы знали, сколько времени у меня ушло на поиск этой неисправности и отладку! Рабочая нагрузка разделяется между самим роботом и компьютером. По аналогичной схеме работает большинство 3D-принтеров. Я написал интерпретатор GCODE для Arduino, обрабатывающий входящие команды, вычисляющий направления перемещения и рассчитывающий последовательность подачи импульсов на два шаговых двигателя. Программное обеспечение соединяется с роботом по USB-кабелю, на компьютер загружается изображение, которое робот должен перенести на холст, затем оно "нарезается" на отдельные линии. Линии на изображении последовательно отправляются на робота. Программное обеспечение ожидает, когда робот закончит движение, и затем отправляет на робота следующую линию. Я также добавил функцию рисования/перемещения только в пределах ограничительной рамки. Эта функция мне очень помогла при позиционировании, когда картина рисуется на закреплённом холсте. На сегодня управляющая программа обеспечивает отрисовку полных изображений в формате BMP. Все цвета темнее RGB (60, 60, 60) будут отрисовываться роботом как чёрные. Сейчас я также занимаюсь реализацией поддержки векторных изображений для рисования плавных линий и красивых кривых Безье. Узнайте, как прокачаться в других специальностях или освоить их с нуля: Профессия Data Scientist Профессия Data Analyst Курс по Data Engineering ПРОФЕССИИ Профессия Fullstack-разработчик на Python Профессия Java-разработчик Профессия QA-инженер на JAVA Профессия Frontend-разработчик Профессия Этичный хакер Профессия C++ разработчик Профессия Разработчик игр на Unity Профессия Веб-разработчик Профессия iOS-разработчик с нуля Профессия Android-разработчик с нуля КУРСЫ Курс по Machine Learning Курс "Machine Learning и Deep Learning" Курс "Математика для Data Science" Курс "Математика и Machine Learning для Data Science"  Курс "Python для веб-разработки" Курс "Алгоритмы и структуры данных" Курс по аналитике данных Курс по DevOps