Оглавление:

Модуль лазерного рулевого управления DIY для Arduino: 14 шагов (с изображениями)
Модуль лазерного рулевого управления DIY для Arduino: 14 шагов (с изображениями)

Видео: Модуль лазерного рулевого управления DIY для Arduino: 14 шагов (с изображениями)

Видео: Модуль лазерного рулевого управления DIY для Arduino: 14 шагов (с изображениями)
Видео: 14 июня 2023 г. 2024, Июль
Anonim
Image
Image

В этом руководстве я продемонстрирую конструкцию двухосного модуля управления лазерным лучом с одним зеркалом с использованием деталей, напечатанных на 3D-принтере, и недорогих компонентов с eBay.

Этот проект имеет сходство с Arduino Laser Show с Full XY Control и Arduino Laser Show With Real Galvos, но я считаю, что это первый проект, в котором используется 3D-печатный дизайн с недорогими соленоидами. Я помещаю все файлы дизайна под GPLv3, чтобы проект можно было улучшить и улучшить.

Хотя в настоящее время я только собрал модуль и написал очень простой тестовый код, я надеюсь, что однажды я смогу вывести его на следующий уровень, включив код векторной графики из моего более раннего Instructable, Super Fast Analog Voltages от Arduino.

Шаг 1. Соберите детали, не напечатанные на 3D-принтере

Лазерный агрегат состоит из следующих частей:

  • 4 микро соленоида
  • Одно зеркало 1/2 дюйма
  • Четыре винта M3

Отдельные соленоиды, которые я использовал, были куплены на eBay по 1,45 доллара за штуку. Круглое зеркало было найдено в проходе для поделок в HobbyLobby - упаковка из 25 штук обошлась мне менее чем в 3 доллара. Вы также можете найти зеркала на eBay.

Вам также понадобится недорогая лазерная указка, опять же от eBay. Фиолетовый лазер и светящийся в темноте винил - отличное сочетание для этого проекта!

Руки помощи не нужны, но они будут очень полезны для удержания и позиционирования лазерной указки. Большой зажим для папок можно использовать для удержания кнопки питания.

Вам понадобится Arduino (я использовал Arduino Nano) и способ управления соленоидами. Как заявил VajkF в комментариях, вы можете использовать готовые H-мосты, например, на основе L298 или L9110. Они легко доступны на eBay за несколько долларов, а также могут использоваться для управления двигателями и проектов робототехники.

Поскольку у меня не было H-моста, я построил свой собственный драйвер из дискретных компонентов:

  • Четыре биполярных транзистора NPN (я использовал MPS3704)
  • Четыре резистора (я использовал резистор 1,2 кОм)
  • Четыре диода (я использовал 1N4004)
  • Аккумулятор 9 В и разъем для аккумулятора

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

Шаг 2: 3D-печать модуля рулевого управления зеркалом

3D-печать модуля рулевого управления зеркалом
3D-печать модуля рулевого управления зеркалом
3D-печать модуля рулевого управления зеркалом
3D-печать модуля рулевого управления зеркалом

Модуль лазерного рулевого управления состоит из двух частей, напечатанных на 3D-принтере: основания для установки четырех соленоидов и шарнирной платформы для зеркала.

Я прикрепил для вас два файла STL к 3D-печати, а также файлы FreeCAD на случай, если вам понадобится изменить дизайн. Весь контент находится под лицензией GPLv3, так что вы можете вносить свои улучшения и делиться ими!

Шаг 3: соберите лазерный модуль

Соберите лазерный модуль
Соберите лазерный модуль
Соберите лазерный модуль
Соберите лазерный модуль
Соберите лазерный модуль
Соберите лазерный модуль
  • С помощью горячего клея прикрепите четыре соленоида к нижней части.
  • С помощью горячего клея прикрепите зеркало к центру верхней части.
  • Вставьте металлические поршни в соленоиды, а затем установите верхнюю часть на стойки (но не завинчивайте). Слегка поверните верхнюю часть и с помощью небольшой отвертки поднимите каждый поршень на место. Кромка диска должна войти в канавку на поршне. Будьте осторожны, так как петли, напечатанные на 3D-принтере, очень хрупкие. Приложив терпение и, возможно, несколько неудачных попыток, вы сможете установить все четыре поршня, не скручивая и не давя на петли.
  • После того, как все поршни установлены, частично вставьте винты M3, но перед их затяжкой осторожно надавите на каждый поршень и убедитесь, что зеркало свободно наклоняется. Если он не движется свободно или не заедает, может потребоваться снять верхнюю пластину, оторвать один или несколько соленоидов и снова прикрепить его под небольшим углом наружу (в этом может помочь установка проставок между ним и центральной стойкой).

Шаг 4: Распечатайте воротник лазерной указки

Печать на воротнике с лазерной указкой
Печать на воротнике с лазерной указкой
Печать на воротнике с лазерной указкой
Печать на воротнике с лазерной указкой

Хомут лазерной указки надевается на головку лазерной указки. Затем вы можете использовать набор рук для помощи, чтобы схватить воротник и позволить вам точно расположить лазер на скамейке.

Шаг 5: соберите приводную цепь

Соберите приводную цепь
Соберите приводную цепь

Схема привода показана на схеме. Как было сказано ранее, моя версия построена из отдельных компонентов, но вы также можете использовать легко доступный H-мост. Если вы решите построить свой собственный, вам нужно будет построить четыре копии этой схемы, по одной для каждого из четырех соленоидов.

Каждая цепь будет подключаться к выводу Arduino, два для управления левым и правым соленоидами и два для верхнего и нижнего соленоидов. Их нужно будет подключить к контактам с поддержкой ШИМ, например:

  • Контакт 9: соленоид вверх
  • Контакт 3: нижний соленоид
  • Контакт 11: левый соленоид
  • Контакт 10: правый соленоид

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

Шаг 6. Загрузите образец кода

Загрузите образец кода
Загрузите образец кода

В пример кода добавлены следующие функции:

  • Регулирует частоту ШИМ таким образом, чтобы механизм работал почти бесшумно на низких скоростях. Жужжание в тесте движения 1 полностью исчезло!
  • Добавляется в виде уравнений напряжения на основе статьи Шимпфа, чтобы «линеаризовать» нелинейный отклик соленоидов.

Я также включил реализацию Аттрактора Лоренца на основе кода из этого блога.

Точность результатов оставляет желать лучшего, но я все еще работаю над этим!:)

Следующие шаги иллюстрируют некоторые методы, используемые в коде.

Шаг 7: уменьшение громкости

В моем тесте движения 1 вы можете услышать громкое жужжание, особенно во время движения вверх и вниз. Оказывается, это было вызвано тем, что частота прерывания ШИМ по умолчанию Arduino находится в пределах слышимого диапазона. Быстрое включение и выключение напряжения катушки заставит их вибрировать на этой частоте, превратив их в крошечные громкоговорители.

Чтобы решить эту проблему, я увеличил частоту ШИМ в коде:

#define PWM_FREQ_31372Hz 0x01 // Устанавливает частоту ШИМ на 31372,55 Гц # define PWM_FREQ_3921Hz 0x02 // Устанавливает частоту ШИМ на 3921,16 Гц #define PWM_FREQ_980Hz 0x03 // Устанавливает частоту ШИМ на 9808.39 Гц & 0b11111000) | частота; // Установить частоту таймера 1 (контакты 9 и 10) TCCR2B = (TCCR2B & 0b11111000) | частота; // Устанавливаем частоту таймера 2 (контакты 3 и 11)}

Установка частоты ШИМ Arduino - полезный прием для приглушения соленоидов или двигателей. Поэкспериментируйте с различными частотами, чтобы увидеть, какая из них даст вам наилучшие результаты. Хотя это включает в себя более сложное программирование, здесь есть хороший ресурс о том, как работают таймеры.

Шаг 8: настройка напряжений для уменьшения искажений

Настройка напряжений для уменьшения искажений
Настройка напряжений для уменьшения искажений

Мои первоначальные тесты движения показали, что были значительные искажения в отклике соленоидов. В тесте движения 3 (левый рисунок) то, что должно было быть круговой спиралью, вместо этого превратилось в прямоугольную ткань с зазубренными краями.

Для решения этой проблемы требовалось немного математики, но я смог найти в Интернете потрясающую статью, которая помогла мне достаточно хорошо разобраться в проблеме, чтобы решить ее с помощью программного обеспечения.

Далее вы пройдете через весь процесс, через который я прошел, чтобы настроить систему и улучшить внешний вид полученных следов!

Шаг 9. Совершенствование программного обеспечения с помощью математики

Совершенствование программного обеспечения с помощью математики
Совершенствование программного обеспечения с помощью математики
Совершенствование программного обеспечения с помощью математики
Совершенствование программного обеспечения с помощью математики

Секретом настройки системы оказался отличный документ под названием «Подробное объяснение силы соленоида» Пола Х. Шимпфа из Университета Восточного Вашингтона (ссылка). В частности, уравнение 17 дало мне силу соленоида в различных терминах.

Следующие термины легко измерить:

  • R - сопротивление моего соленоида
  • l - длина соленоида
  • x - смещение поршня в соленоиде
  • V - напряжение на соленоиде

Я также знал, что сила, создаваемая соленоидом, должна уравновешивать силу, создаваемую пружинами, напечатанными на 3D-принтере, на двухосном зеркале. Сила пружины регулируется законом Гука, который гласит:

F = -kx

Хотя я не знал значения k, я, по крайней мере, знал, что сила, которую я получил из уравнения 17 из статьи Шимпфа, должна была равняться силе из закона Гука.

Значение альфа (α) было непростым. Хотя уравнения 13 и 14 показали, как вычислить эти значения на основе площади соленоида (A), количества витков (N) и значений магнитной проницаемости (μ), мне не хотелось разрывать соленоид для подсчета количество витков, и я не знал материала, из которого сделан сердечник моего соленоида.

Шаг 10: Недорогой тестер компонентов спасает положение

Недорогой тестер компонентов спасает положение!
Недорогой тестер компонентов спасает положение!
Недорогой тестер компонентов спасает день!
Недорогой тестер компонентов спасает день!
Недорогой тестер компонентов спасает день!
Недорогой тестер компонентов спасает день!

Однако оказалось, что уравнения 15 и 16 дали мне то, что мне было нужно. У меня был недорогой тестер компонентов M328, который я купил на eBay за 10 долларов. Его можно было использовать для измерения индуктивности моего соленоида, и я обнаружил, что, вставляя якорь на разную глубину, я получаю разные значения индукции.

Измерение с полностью вставленным якорем дало мне значение L (0).

Длина моего соленоида составляла 14 мм, поэтому я измерил индуктивность якоря в пяти положениях, и это дало мне различные значения L (x):

  • L (0,0) = 19,8 мГн
  • L (3,5) = 17,7 мГн
  • L (7,0) = 11,1 мГн
  • L (10,5) = 9,3 мГн
  • L (14) = 9,1 мГн

Затем я использовал электронную таблицу, чтобы построить график моих значений в сравнении со значением уравнения 15 и 16 для конкретного выбора μr, а затем варьировал свой выбор, пока не нашел хорошее совпадение. Это произошло, когда μr было 2,9, как показано на графике.

Шаг 11: Найдите константу пружины K, решите проблему

Image
Image
Анализ текущих проблем и возможных решений
Анализ текущих проблем и возможных решений

Единственное, что осталось неизвестным, это K, жесткость пружины. Я измерил это, приложив 9 В к одному из соленоидов в моей двухосной сборке и измерив расстояние, на котором зеркало было опущено. С этими значениями я смог решить уравнения для K, которое, как я обнаружил, было около 10,41.

Теперь у меня были значения, необходимые для расчета силы тяги соленоида в различных положениях хода. Установив F (x) равным силе пружины из закона Гука, я могу найти требуемое напряжение V.

На графике показано напряжение, необходимое для перемещения соленоида в любое желаемое положение x.

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

Это соотношение определенно нелинейно, но с уравнениями из статьи Шимпфа я могу написать свой код Arduino для вывода правильных напряжений, чтобы отклонение луча было линейным:

float positionToVoltage (float x) {

// Восстанавливающая сила, создаваемая петлями (закон Гука) в желаемом x. const float spring_F = -spring_K * (x - spring_X0); // Напряжение, при котором тянущая сила соленоида соответствует // восстанавливающей силе шарниров return sqrt (-2 * R * R * (- spring_F) * solenoid_len / (a * L_0 * exp (-a * x / solenoid_len))); }

Это приводит к гораздо более круговой спирали, чем в моем первоначальном тесте движения. Миссия выполнена!

Шаг 12: вопросы и ответы о схеме драйвера с использованием дискретных компонентов

Почему я не могу подключить соленоид напрямую к Arduino?

Вопрос в том, какой ток может обеспечить Arduino без повреждений. Это примерно 40 мА на контакт. Зная, что Arduino работает при 5 В, мы можем использовать закон Ома для вычисления необходимого минимального сопротивления нагрузки (в данном случае соленоида). Разделив 5 вольт на 0,040 ампер, мы получим 125 Ом. Если нагрузка имеет большее сопротивление, мы можем подключить ее напрямую к Arduino, в противном случае мы не сможем. Небольшой соленоид обычно имеет сопротивление 50 Ом, поэтому мы не можем управлять им напрямую от Arduino. Если бы мы это сделали, он потреблял бы 100 мА, что явно слишком много.

Почему вы используете 9 В для соленоида, а 5 В для Arduino?

Arduino работает от 5 В, но для соленоида этого немного. Использование транзистора позволяет нам выбрать напряжение для соленоида, которое не зависит от 5 В, используемых для Arduino.

Как узнать, подходит ли транзистор для этого проекта?

Как и в случае с Arduino, основным требованием является то, чтобы ток, протекающий через соленоид, не превышал максимальные значения для транзистора (в частности, ток коллектора). Мы можем легко вычислить наихудший сценарий, измерив сопротивление соленоида и разделив на него напряжение питания. В случае тока питания 9 В для соленоидов и сопротивления соленоида 50 Ом в худшем случае мы получаем 180 мА. Например, MPS3704 рассчитан на максимальный ток коллектора 600 мА, что дает нам запас около 3.

Как определить минимальное значение сопротивления между выходом Arduino и базой транзистора?

Выход Arduino будет подключать основание биполярных транзисторов через токоограничивающий резистор. Поскольку Arduino работает при 5 В, мы снова можем использовать закон Ома для вычисления сопротивления, необходимого для ограничения тока ниже 40 мА. То есть разделите 5 вольт на 0,04 ампера, чтобы получить значение не менее 125 Ом. Более высокие значения резистора уменьшат ток, что даст нам еще больший запас прочности.

Есть ли максимальное значение для этого сопротивления, которое я не должен превышать?

Оказывается, да. Транзистор имеет так называемое усиление по току. Например, если коэффициент усиления равен 100, это означает, что если мы подадим 1 мА на базу, то через нагрузку, управляемую транзистором, пройдет до 100 мА. Если мы вложим 1,8 мА в базу, то через нагрузку будет протекать до 180 мА. Поскольку мы вычислили ранее, что при 9 В через соленоид протекает 180 мА, то базовый ток 1,8 мА - это «золотая середина», и меньше, и наш соленоид не включится полностью.

Мы знаем, что Arduino выдает 5 В, и мы хотим, чтобы ток шел 1,8 мА, поэтому мы используем закон Ома (R = V / I) для вычисления сопротивления (R = V / I). 5 В, разделенные на 1,8 мА, дают сопротивление 2777 Ом. Итак, учитывая сделанные предположения, мы ожидаем, что сопротивление должно находиться в диапазоне от 125 до 2777 - выбор чего-то вроде 1000 Ом дает нам довольно хороший запас прочности в любом случае.

Шаг 13: Анализ текущих проблем и возможных решений

Анализ текущих проблем и возможных решений
Анализ текущих проблем и возможных решений

Текущий прототип демонстрирует потенциал, но остается несколько проблем:

  1. Движение по осям X и Y не кажется перпендикулярным.
  2. Когда зеркало меняет направление, происходит скачок.
  3. Разрешение довольно низкое, видны рисунки ступенек.
  4. На более высоких скоростях движения лазерный луч искажается вибрациями и звоном.

Проблема 1) может быть вызвана конструкцией гибких шарниров, напечатанных на 3D-принтере, которые передают движение от одной оси к перпендикулярной оси.

Проблема 2) возникает из-за слабины в муфте между ведущими поршнями и платформой зеркала, это приводит к рывкам и пропускам зеркала при переходах между осями X и Y. Это внезапное движение приводит к затемненному X-образному зазору, где лазерная точка делает более быстрое неконтролируемое движение.

Проблема 3) возникает из-за того, что по умолчанию Arduino PWM имеет только 255 уровней, и многие из них теряются из-за формы кривой напряжения. Это можно было бы значительно улучшить, используя таймер 1, который является 16-битным и может иметь 65536 уникальных значений.

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

Поскольку вопросы 1) и 2) связаны с механической конструкцией, одной из возможностей может быть удаление металлических поршней и их замена небольшими редкоземельными магнитами, которые прикреплены непосредственно к наклонной пластине. Соленоиды представляют собой открытую катушку, которая притягивает или отталкивает магниты без физического контакта. Это приведет к более плавному движению и исключит возможность рывков при одновременном уменьшении общей массы.

Уменьшение массы является основным решением проблемы 4), но любые оставшиеся проблемы могут быть решены непосредственно в программном обеспечении путем реализации профиля управления движением в программном обеспечении для ускорения и замедления зеркала управляемым образом. Это уже широко используется в прошивках 3D-принтеров, и здесь также могут работать аналогичные методы. Вот некоторые ресурсы, связанные с управлением движением применительно к 3D-принтерам:

  • "Математика профилей управления движением", Чак Левин (ссылка)
  • "Объяснение контролируемого рывком движения", (ссылка)

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

Шаг 14: Дальнейшая работа и возможные применения

Хотя разработка решений этих проблем потребует значительного объема работы, я надеюсь, что этот модуль управления лучом с открытым исходным кодом может стать доступной альтернативой проектам на основе гальванометров в таких приложениях, как:

  • Недорогое лазерное шоу для ди-джеев и виджеев.
  • Электромеханический векторный дисплей для старинной аркадной игры, такой как Vectrex.
  • SLA-3D-принтер DIY на основе смолы, который в духе движения RepRap может печатать собственный модуль лазерного рулевого управления.
  • Цифровое панорамирование или оптическая стабилизация изображения для фотоаппаратов.
Конкурс Arduino 2017
Конкурс Arduino 2017
Конкурс Arduino 2017
Конкурс Arduino 2017

Второй приз Arduino Contest 2017

Рекомендуемые: