Самодельный текстовый лазерный проектор

в 7:32, , рубрики: diy или сделай сам, stm32, лазерный проектор, Электроника для начинающих

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

Введение

Существуют два метода создания изображения при помощи лазера — это векторная и растровая развертка.
В случае векторной развертки луч лазера перемещается в пространстве вдоль контуров необходимого изображения, отключаясь только на время перехода от одного контура к другому.
Благодаря этому лазер оказывается большую часть времени включенным, за счет чего формируемая картинка получается достаточно яркой.
Именно этот метод обычно используется в различных промышленных лазерных проекторах. При этом для быстрого перемещения лазерного луча приходится использовать достаточно сложные электронно-механические устройства — гальванометры. Их цены обычно начинаются от 80$ за пару, а в домашних условиях гальванометры изготовить проблематично (хотя и реально).

Второй метод создания изображения - растровая развертка. В этом методе луч лазера последовательно движется вдоль всех строк изображения. Именно этот метод используется в ЭЛТ-трубках старых телевизоров и мониторов.
Благодаря тому, что оба вида движений (по вертикали и горизонтали) выполняются циклически, механику можно значительно упростить (по сравнению с векторной разверткой). Кроме того, так как формируемое изображение состоит из отдельных элементов, то его значительно проще формировать с программной точки зрения.
Недостаток растровой развертки — луч будет проходить вдоль всех элементов изображения, даже если их не нужно подсвечивать, что из-за чего падает яркость изображения.
Именно этот метод, из-за его простоты, я и захотел реализовать в своем проекторе.

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

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

Еще один вариант развертки, который можно встретить в сети — объединение вертикальной и горизонтальной развертки за счет использования вращающегося многогранного зеркала, в котором отдельные зеркала-грани расположены под разным углом к оси вращения. Благодаря такой конструкции зеркала, при повороте зеркала от одной грани к другой луч лазера отклоняется на разные углы по вертикали, за счет чего и создается вертикальная развертка.

Несмотря на общую простоту получающегося проектора (нужны только лазер, зеркало с мотором и датчик синхронизации) у метода есть большой недостаток — большая сложность изготовления такого многогранного зеркала в домашних условиях. Обычно угол наклона зеркал-граней приходится подстраивать в процессе сборки, причем делать это нужно с большой точностью, что значительно усложняет конструкцию зеркала.
Вот пример проектора, использующего такой принцип.
Для упрощения конструкции я решил использовать другой принцип развертки — постоянно вращающееся зеркало для формирования горизонтальной развертки и периодически колеблющееся зеркало для формирования вертикальной развертки.

Реализация

Горизонтальная развертка

Откуда можно взять быстро вращающееся зеркало? Из старого лазерного принтера!
В лазерных принтерах для развертки лазерного луча вдоль листа бумаги используется именно многогранное (полигональное) зеркало, установленное на валу скоростного бесколлекторного двигателя. Обычно этот двигатель закреплен на печатной плате, которая им и управляет.

У меня уже был подходящий зеркальный модуль из принтера:
Самодельный текстовый лазерный проектор - 2
Документацию на сам модуль и использованную в нем микросхему найти не удалось, так что для определения распиновки модуля мне пришлось провести простой реверс-инжиниринг. Линии питания на разъеме найти довольно просто — они подключены к единственному на плате электролитическому конденсатору. Однако просто при подаче питания двигатель вращаться не будет — на плату нужно подать сигнал тактирования, который определяет скорость вращения. Этот сигнал — простой меандр частотой от 20 до 500-1000 Гц (для разных моделей может быть по разному).

Чтобы найти нужную линию, я взял генератор импульсов, настроенный на частоту 100 Гц, и подсоединял его выход через резистор в 470 ко всем свободным линиям разъема лазерного модуля. При подаче сигнала на нужную линию мотор начал вращаться. Скорость вращения зеркала получается очень высокой, последующие измерения показали, что она может превышать 250 об/сек. Но, к сожалению, из-за большой скорости вращения мой лазерный модуль довольно громко шумел. Для экспериментов это не является проблемой, а вот для постоянной работы проектора это плохо. Возможно, что за счет использования более нового зеркального модуля или установки конструкции в коробку уровень шума можно значительно снизить.

Лазер

Для первых тестов я использовал лазерный модуль из дешевой указки. Модуль должен быть закреплен так, чтобы его можно было поворачивать по нескольким осям — это нужно для того, чтобы правильно направить лазер на зеркало:
Самодельный текстовый лазерный проектор - 3
Так как из-за использования растровой развертки свет лазера распределяется по всей площади изображения, то яркость формируемого изображения выходит довольно низкой — изображение можно видеть только в темноте.
Поэтому, уже после того, как я получил изображение, я заменил лазерный модуль на другой, в котором использован лазерный диод из DVD (пример изготовления такого модуля).
Внимание — лазер из DVD очень опасен для зрения, все работы с таким лазером нужно проводить в специальных защитных очках!
Конструкция крепления этого лазерного модуля такая же, как и у предыдущего.

Лазер и модуль полигонального зеркала я установил на небольшой дощечке из оргалита. Лазер должен быть закреплен в одной плоскости с зеркалом. После подачи питания с сигнала тактирования на мотор и питания на лазер нужно выставить лазер так, чтобы его луч попадал на грани зеркала. В результате при вращении полигонального зеркала формируется длинная горизонтальная лазерная линия.

Фотодатчик синхронизации

Для того, чтобы управляющий микроконтроллер мог отслеживать положение движущегося лазерного луча, нужен фотодатчик. В качестве фотодатчика я использовал фотодиод, закрытый кусочком картона с прорезью. Прорезь нужна для того, чтобы более точно обнаруживать момент попадания луча на фотодиод.
Вот так выглядит крепление фотодиода (без картона с прорезью):
Самодельный текстовый лазерный проектор - 4
При нормальной работе мотора отраженный луч лазера должен сначала попадать на фотодатчик, а потом уже — на зеркало вертикальной развертки.
После того, как датчик был установлен, я проверил его работу, подав на него напряжение через резистор. Сигнал с датчика я наблюдал осциллографом — его амплитуда оказалась достаточной для того, чтобы подключить датчик напрямую к GPIO входу микроконтроллера.

Вертикальная развертка

Как я уже упоминал ранее, для формирования вертикальной развертки я использовал периодически колеблющееся зеркало. Каким образом можно сделать привод такого зеркала?
Самый простой вариант — использовать подгруженный электромагнит. Иногда в простейших конструкциях лазерных проекторов используют зеркала, прикрепленные к обычным динамикам. Но такое решение обладает большим количеством недостатков (плохая повторяемость результатов, низкая технологичность конструкции, сложность в калибровке).

В своей конструкции проектора я решил использовать BLDC мотор из DVD для управления зеркалом вертикальной развертки. Поскольку проектор изначально планировался для вывода текста, это значило, что отображаемых линий будет немного, а значит, что зеркало нужно поворачивать на небольшой угол.
BLDC мотор из DVD содержит три обмотки, входящие в состав статора. Если одну из обмоток подключить к плюсу источнику напряжения, а две других поочередно соединять с его минусом, то ротор двигателя будет колебаться. Максимальный угловой размах колебаний определяется конструкцией мотора, в частности, числом его полюсов. Для мотора из DVD этот размах не превышает 30 градусов. Благодаря достаточно большой мощности такого мотора, простоте управления (нужно всего два ключа), вращательному движению этот мотор очень хорошо подходит для изготовления простого текстового лазерного проектора.
Вот так выглядит мой мотор с приклеенным к нему зеркалом:
Самодельный текстовый лазерный проектор - 5
Стоит обратить внимание на то, что отражающая поверхность зеркала должна быть впереди, то есть не закрыта стеклом.

Конструкция в целом

Вот так выглядит проектор целиком:
Самодельный текстовый лазерный проектор - 6
Проекционная часть крупным планом:
Самодельный текстовый лазерный проектор - 7
Полигональное зеркало вращается по часовой стрелке, так что луч лазера двигается слева направо.
Здесь уже установлен мощный лазерный диод из DVD (внутри коллиматора).
Зеркало вертикальной развертки установлено таким образом, что проецируемое изображение оказывается направлено вверх — в моем случае, на потолок комнаты.
Как видно из фотографии, лазером и механикой проектора управляет микроконтроллер stm32f103, установленный на маленькой отладочной плате (Blue Pill). Эта плата вставлена в Breadboard.
Схема конструкции:
Самодельный текстовый лазерный проектор - 8
Как я уже упоминал раньше, для управления мотором полигонального зеркала нужен только один сигнал — тактирования («POLY_CLOCK»), который вырабатывает один из таймеров stm32, работающий в режиме ШИМ. Частота и скважность этого сигнала остается неизменной в процессе работы проектора. Для питания платы мотора я использую отдельный блок питания на 12 В.

Два ШИМ сигнала для управления положением зеркала вертикальной развертки формирует другой таймер микроконтроллера. Эти сигналы заведены на микросхему ULN2003A, которая и управляет мотором от DVD. Таким образом, устанавливая различную скважность ШИМ каналов этого таймера, можно изменять угол поворота мотора.

К сожалению, в существующем виде конструкция не имеет обратной связи по положению зеркала обратной связи. Это значит, что микроконтроллер может привести зеркала в движение, но его текущего положения он «знать» не будет. Из-за инерционности ротора двигателя и индуктивности катушек изменение направления движения зеркала тоже происходит с некоторой задержкой.
Все это приводит к двум последствиям:

  • Плотность линий получается переменной. Это связано с тем, что скорость вращения зеркала не контролируется.
  • Немалую часть линий использовать нельзя. Вертикальное зеркало колеблется циклично, так что часть времени линии можно было бы выводить сверху вниз, а другую часть — снизу вверх. В результате из-за отсутствия данных о положении приходится отображать линии только при движении мотора в одну строну. Так как отображается только часть линий, яркость изображения падает (то есть лазер используется не полностью).

Тем не менее, благодаря отсутствию обратной связи, конструкция получается очень простой.

Процесс формирования изображения проектором тоже довольно прост:

  • Каждый раз, когда луч лазера попадает на фотодиод, в микроконтроллере формируется прерывание.
    В этом прерывании контроллер определяет текущую скорость горизонтальной развертки.
    После этого сбрасывается специальный таймер синхронизации. Это — момент синхронизации.
  • Этот таймер синхронизации в определенные моменты времени формирует свои прерывания, соответствующие нужным моментам времени в процессе горизонтальной развертки.
  • В частности, через некоторое время после момента синхронизации нужно начать формировать сигнал управления лазером. Я в своей конструкции формирую его при помощи связки DMA+SPI. Фактически, при помощи этих модулей в нужный момент времени на выход MOSI SPI побитно предается одна из строк изображения.
  • После того, как вывод изображения в строке закончился, нужно принудительно включить лазер. Это нужно для того, чтобы фотодиод смог вновь принять его свет.

Модуляция лазера у меня также реализована при помощи одного из ключей микросхемы ULN2003A. Резистор R3 нужен для простейшей защиты лазерного диода от слишком большого тока. Он закреплен прямо на конце провода лазера и заизолирован. Для питания лазера я использовал отдельный регулируемый блок питания. Важно контролировать ток, потребляемый лазером, и следить, чтобы он не больше максимально допустимого.

Пример формируемого изображения (шрифт высотой 8 линий):
Самодельный текстовый лазерный проектор - 9
Некоторое искажение пропорций текста связано с тем, что проектор светит на стену под углом.
Сейчас каждый цикл колебаний зеркала вертикальной развертки состоит из 32 шагов (один шаг соответствует повороту полигонального зеркала на 1 грань).

В текущей реализации проектор может выводить около 14 полноценных линий, остальные линии либо сливаются друг с другом, либо неправильно смешиваются с остальными.
В фотографии в начале статьи также используется шрифт высотой 8 линий. Как видно, даже две строки текста более-менее нормально отображаются.

В то же время таблица знакогенератора в этом проекте содержит шрифты высотой 12 и 6 линий:
Самодельный текстовый лазерный проектор - 10
На этой фотографии хорошо заметна переменная плотность линий.

Пример «бегущей строки», отображаемой таким проектором:

На видео изображение мерцает по вертикали, в реальности глазом этот эффект незаметен.

Файлы проекта

Автор: iliasam

Источник

Поделиться

* - обязательные к заполнению поля