Введение
Существуют два метода создания изображения при помощи лазера — это векторная и растровая развертка.
В случае векторной развертки луч лазера перемещается в пространстве вдоль контуров необходимого изображения, отключаясь только на время перехода от одного контура к другому.
Благодаря этому лазер оказывается большую часть времени включенным, за счет чего формируемая картинка получается достаточно яркой.
Именно этот метод обычно используется в различных промышленных лазерных проекторах. При этом для быстрого перемещения лазерного луча приходится использовать достаточно сложные электронно-механические устройства — гальванометры. Их цены обычно начинаются от 80$ за пару, а в домашних условиях гальванометры изготовить проблематично (хотя и реально).
Второй метод создания изображения - растровая развертка. В этом методе луч лазера последовательно движется вдоль всех строк изображения. Именно этот метод используется в ЭЛТ-трубках старых телевизоров и мониторов.
Благодаря тому, что оба вида движений (по вертикали и горизонтали) выполняются циклически, механику можно значительно упростить (по сравнению с векторной разверткой). Кроме того, так как формируемое изображение состоит из отдельных элементов, то его значительно проще формировать с программной точки зрения.
Недостаток растровой развертки — луч будет проходить вдоль всех элементов изображения, даже если их не нужно подсвечивать, что из-за чего падает яркость изображения.
Именно этот метод, из-за его простоты, я и захотел реализовать в своем проекторе.
Для перемещения лазерного луча вдоль линии (горизонтальной развертки) очень удобно использовать зеркало, вращающееся с постоянной скоростью. Благодаря тому, что вращение непрерывное, скорость движения луча может быть достаточно большой. А вот переход от одной линии к другой реализовать сложнее.
Самый простой вариант — использовать несколько лазеров, направленных на вращающееся зеркало. Недостатки этого метода — число отображаемых линий будет определятся числом использованных лазеров, что усложняет конструкцию, а ширина зеркала должна быть достаточно большой. Хотя есть и достоинства — единственный подвижный элемент в такой системе — это зеркало, а использование нескольких лазеров позволяет добиться достаточно высокой яркости изображения. Вот пример проектора, использующего такой принцип.
Еще один вариант развертки, который можно встретить в сети — объединение вертикальной и горизонтальной развертки за счет использования вращающегося многогранного зеркала, в котором отдельные зеркала-грани расположены под разным углом к оси вращения. Благодаря такой конструкции зеркала, при повороте зеркала от одной грани к другой луч лазера отклоняется на разные углы по вертикали, за счет чего и создается вертикальная развертка.
Несмотря на общую простоту получающегося проектора (нужны только лазер, зеркало с мотором и датчик синхронизации) у метода есть большой недостаток — большая сложность изготовления такого многогранного зеркала в домашних условиях. Обычно угол наклона зеркал-граней приходится подстраивать в процессе сборки, причем делать это нужно с большой точностью, что значительно усложняет конструкцию зеркала.
Вот пример проектора, использующего такой принцип.
Для упрощения конструкции я решил использовать другой принцип развертки — постоянно вращающееся зеркало для формирования горизонтальной развертки и периодически колеблющееся зеркало для формирования вертикальной развертки.
Реализация
Горизонтальная развертка
Откуда можно взять быстро вращающееся зеркало? Из старого лазерного принтера!
В лазерных принтерах для развертки лазерного луча вдоль листа бумаги используется именно многогранное (полигональное) зеркало, установленное на валу скоростного бесколлекторного двигателя. Обычно этот двигатель закреплен на печатной плате, которая им и управляет.
У меня уже был подходящий зеркальный модуль из принтера:
Документацию на сам модуль и использованную в нем микросхему найти не удалось, так что для определения распиновки модуля мне пришлось провести простой реверс-инжиниринг. Линии питания на разъеме найти довольно просто — они подключены к единственному на плате электролитическому конденсатору. Однако просто при подаче питания двигатель вращаться не будет — на плату нужно подать сигнал тактирования, который определяет скорость вращения. Этот сигнал — простой меандр частотой от 20 до 500-1000 Гц (для разных моделей может быть по разному).
Чтобы найти нужную линию, я взял генератор импульсов, настроенный на частоту 100 Гц, и подсоединял его выход через резистор в 470 ко всем свободным линиям разъема лазерного модуля. При подаче сигнала на нужную линию мотор начал вращаться. Скорость вращения зеркала получается очень высокой, последующие измерения показали, что она может превышать 250 об/сек. Но, к сожалению, из-за большой скорости вращения мой лазерный модуль довольно громко шумел. Для экспериментов это не является проблемой, а вот для постоянной работы проектора это плохо. Возможно, что за счет использования более нового зеркального модуля или установки конструкции в коробку уровень шума можно значительно снизить.
Лазер
Для первых тестов я использовал лазерный модуль из дешевой указки. Модуль должен быть закреплен так, чтобы его можно было поворачивать по нескольким осям — это нужно для того, чтобы правильно направить лазер на зеркало:
Так как из-за использования растровой развертки свет лазера распределяется по всей площади изображения, то яркость формируемого изображения выходит довольно низкой — изображение можно видеть только в темноте.
Поэтому, уже после того, как я получил изображение, я заменил лазерный модуль на другой, в котором использован лазерный диод из DVD (пример изготовления такого модуля).
Внимание — лазер из DVD очень опасен для зрения, все работы с таким лазером нужно проводить в специальных защитных очках!
Конструкция крепления этого лазерного модуля такая же, как и у предыдущего.
Лазер и модуль полигонального зеркала я установил на небольшой дощечке из оргалита. Лазер должен быть закреплен в одной плоскости с зеркалом. После подачи питания с сигнала тактирования на мотор и питания на лазер нужно выставить лазер так, чтобы его луч попадал на грани зеркала. В результате при вращении полигонального зеркала формируется длинная горизонтальная лазерная линия.
Фотодатчик синхронизации
Для того, чтобы управляющий микроконтроллер мог отслеживать положение движущегося лазерного луча, нужен фотодатчик. В качестве фотодатчика я использовал фотодиод, закрытый кусочком картона с прорезью. Прорезь нужна для того, чтобы более точно обнаруживать момент попадания луча на фотодиод.
Вот так выглядит крепление фотодиода (без картона с прорезью):
При нормальной работе мотора отраженный луч лазера должен сначала попадать на фотодатчик, а потом уже — на зеркало вертикальной развертки.
После того, как датчик был установлен, я проверил его работу, подав на него напряжение через резистор. Сигнал с датчика я наблюдал осциллографом — его амплитуда оказалась достаточной для того, чтобы подключить датчик напрямую к GPIO входу микроконтроллера.
Вертикальная развертка
Как я уже упоминал ранее, для формирования вертикальной развертки я использовал периодически колеблющееся зеркало. Каким образом можно сделать привод такого зеркала?
Самый простой вариант — использовать подгруженный электромагнит. Иногда в простейших конструкциях лазерных проекторов используют зеркала, прикрепленные к обычным динамикам. Но такое решение обладает большим количеством недостатков (плохая повторяемость результатов, низкая технологичность конструкции, сложность в калибровке).
В своей конструкции проектора я решил использовать BLDC мотор из DVD для управления зеркалом вертикальной развертки. Поскольку проектор изначально планировался для вывода текста, это значило, что отображаемых линий будет немного, а значит, что зеркало нужно поворачивать на небольшой угол.
BLDC мотор из DVD содержит три обмотки, входящие в состав статора. Если одну из обмоток подключить к плюсу источнику напряжения, а две других поочередно соединять с его минусом, то ротор двигателя будет колебаться. Максимальный угловой размах колебаний определяется конструкцией мотора, в частности, числом его полюсов. Для мотора из DVD этот размах не превышает 30 градусов. Благодаря достаточно большой мощности такого мотора, простоте управления (нужно всего два ключа), вращательному движению этот мотор очень хорошо подходит для изготовления простого текстового лазерного проектора.
Вот так выглядит мой мотор с приклеенным к нему зеркалом:
Стоит обратить внимание на то, что отражающая поверхность зеркала должна быть впереди, то есть не закрыта стеклом.
Конструкция в целом
Вот так выглядит проектор целиком:
Проекционная часть крупным планом:
Полигональное зеркало вращается по часовой стрелке, так что луч лазера двигается слева направо.
Здесь уже установлен мощный лазерный диод из DVD (внутри коллиматора). Зеркало вертикальной развертки установлено таким образом, что проецируемое изображение оказывается направлено вверх — в моем случае, на потолок комнаты.
Как видно из фотографии, лазером и механикой проектора управляет микроконтроллер stm32f103, установленный на маленькой отладочной плате (Blue Pill). Эта плата вставлена в Breadboard.
Схема конструкции:
Как я уже упоминал раньше, для управления мотором полигонального зеркала нужен только один сигнал — тактирования («POLY_CLOCK»), который вырабатывает один из таймеров stm32, работающий в режиме ШИМ. Частота и скважность этого сигнала остается неизменной в процессе работы проектора. Для питания платы мотора я использую отдельный блок питания на 12 В.
Два ШИМ сигнала для управления положением зеркала вертикальной развертки формирует другой таймер микроконтроллера. Эти сигналы заведены на микросхему ULN2003A, которая и управляет мотором от DVD. Таким образом, устанавливая различную скважность ШИМ каналов этого таймера, можно изменять угол поворота мотора.
К сожалению, в существующем виде конструкция не имеет обратной связи по положению зеркала. Это значит, что микроконтроллер может привести зеркала в движение, но его текущего положения он «знать» не будет. Из-за инерционности ротора двигателя и индуктивности катушек изменение направления движения зеркала тоже происходит с некоторой задержкой.
Все это приводит к двум последствиям:
- Плотность линий получается переменной. Это связано с тем, что скорость вращения зеркала не контролируется.
- Немалую часть линий использовать нельзя. Вертикальное зеркало колеблется циклично, так что часть времени линии можно было бы выводить сверху вниз, а другую часть — снизу вверх. В результате из-за отсутствия данных о положении приходится отображать линии только при движении мотора в одну строну. Так как отображается только часть линий, яркость изображения падает (то есть лазер используется не полностью).
Тем не менее, благодаря отсутствию обратной связи, конструкция получается очень простой.
Процесс формирования изображения проектором тоже довольно прост:
- Каждый раз, когда луч лазера попадает на фотодиод, в микроконтроллере формируется прерывание.
В этом прерывании контроллер определяет текущую скорость горизонтальной развертки. После этого сбрасывается специальный таймер синхронизации. Это — момент синхронизации. - Этот таймер синхронизации в определенные моменты времени формирует свои прерывания, соответствующие нужным моментам времени в процессе горизонтальной развертки.
- В частности, через некоторое время после момента синхронизации нужно начать формировать сигнал управления лазером. Я в своей конструкции формирую его при помощи связки DMA+SPI. Фактически, при помощи этих модулей в нужный момент времени на выход MOSI SPI побитно предается одна из строк изображения.
- После того, как вывод изображения в строке закончился, нужно принудительно включить лазер. Это нужно для того, чтобы фотодиод смог вновь принять его свет.
Модуляция лазера у меня также реализована при помощи одного из ключей микросхемы ULN2003A. Резистор R3 нужен для простейшей защиты лазерного диода от слишком большого тока. Он закреплен прямо на конце провода лазера и заизолирован. Для питания лазера я использовал отдельный регулируемый блок питания. Важно контролировать ток, потребляемый лазером, и следить, чтобы он не превышал максимально допустимого значения для использованного лазерного диода.
Пример формируемого изображения (шрифт высотой 8 линий):
Некоторое искажение пропорций текста связано с тем, что проектор светит на стену под углом.
Сейчас каждый цикл колебаний зеркала вертикальной развертки состоит из 32 шагов (один шаг соответствует повороту полигонального зеркала на 1 грань).
В текущей реализации проектор может выводить около 14 полноценных линий, остальные линии либо сливаются друг с другом, либо неправильно смешиваются с остальными.
В фотографии в начале статьи также используется шрифт высотой 8 линий. Как видно, даже две строки текста более-менее нормально отображаются.
В то же время таблица знакогенератора в этом проекте содержит шрифты высотой 12 и 6 линий:
На этой фотографии хорошо заметна переменная плотность линий.
Пример «бегущей строки», отображаемой таким проектором:
На видео изображение мерцает по вертикали, в реальности глазом этот эффект незаметен.
> Файлы проекта
Комментарии (44)
DmitryITWorksMakarov
17.11.2017 12:24Для вертикальной развертки тоже можно использовать вращающееся зеркало (не качающееся). Правда в этом случае еще тусклее будет изображение, так как только на одном полупериоде вертикальной развертки будет изображение. Двухстороннее зеркало скорее всего не подойдет из-за смещения луча из-за толщины зеркала (хотя, возможно, это как то скомпенсировать).
Ilyato
17.11.2017 19:09+1Почему не такое же барабанное как и для горизонтальной? Чем больше граней тем больше Света будет попадать на рабочую область экрана, и тем меньше нужна частота вращения. И синхронизацию в таком случае (вертикального и горизонтального барабанов) можно попробовать сделать механическую.
DmitryITWorksMakarov
20.11.2017 07:43да… точно! Такое же надо. Я представил двухстороннее зеркальце без центровки по толщине. А с таким же барабаном должно все супер быть.
С механической синхронизацией возиться еще. Мне кажется, проще программно…
aivs
17.11.2017 15:09Мне нужна эта штука, не знаю зачем, но нужна!!! Выглядит круто!
Geograph
17.11.2017 19:09Можно время на стену проецировать.
iliasam Автор
17.11.2017 21:32К сожалению, конструкция вышла слишком шумной, чтобы использовать ее ночью, а днем изображение практически не будет видно.
Doomsday_nxt
18.11.2017 00:25надо использовать зелёный лазер
iliasam Автор
18.11.2017 00:33Зеленые DPSS лазеры очень плохо модулируются, а использование растровой развертки требует высокочастотной модуляции лазера.
Alexeyslav
18.11.2017 02:21На стену время можно проецировать непосредственно со светодиодов, линза только нужна.
Shpiler
17.11.2017 15:31Неужели наконец-то самоделка на гиктаймсе на нормальном контроллере! А то как же задолбали эти камни глупости на букву "A.."
ser-mk
17.11.2017 15:57в порядке фантастического бреда
Заголовок спойлераесть дешевые лазерные стоп линии
что если пропускать эту лазерную линию через допустим LCD экран, с удаленной подсветкой он будет почти прозращен. Экран будет выступать управляемым фильтром, если нам нужно что бы луч не проходил, меняем поляризацию на фильтре и получаем таким образом нами формируемую лазерную строчку. Далее эту строчку можно уже подать на качающиеся / вращающиеся зеркало для формирования вертикальной развертки.
скорее всего конечно фильтр не выдержит лазера, но я бы если увлекся, попробывал этот вариант)thealexsb
17.11.2017 19:09+1Такая технология с прозрачным LCD экраном используется в часах с проектором
jaiprakash
17.11.2017 16:21А почему для вертикальной развёртки не шаговик?
iliasam Автор
17.11.2017 21:36Я рассматривал такой вариант.
Но я предположил, что скорости 30 Гц на шаговом моторе добиться сложно, он мог оказаться слишком шумным. Также габариты мотора из DVD значительно меньше габаритов большинства доступных шаговых моторов.
scg
17.11.2017 17:21Давно у меня валяется зеркальный модуль от принтера, который я приобрел для точно такой же цели. Теперь я знаю как его запустить, спасибо. Какое напряжение нужно на него подать?
iliasam Автор
17.11.2017 21:39У меня модуль был рассчитан на 24 В (судя по надписи снизу модуля), но нормально работал от 10-12 В.
Можно попробовать найти документацию на управляющую микросхему.
Если на плате есть электролитический конденсатор, соединенный с линиями питания, то можно попытаться подавать на плату половину от напряжения указанного на конденсаторе.
begemot_sun
17.11.2017 18:57Зеркала нужно делать в форме многогранников. Как зеркало для вертикальной, так и зеркало для горизонтальной развертки. Тогда не нужно никаких маятниковых механизмов.
Кстати, все это давно придумано в сканерах штрих-кодов. Может просто его разобрать, и модулировать сигнал лазера нужным сигналом?
commanderxo
17.11.2017 19:40+5Делал что-то подобное из старого жёсткого диска. Вертикальная развёртка при помощи слегка наклоненных граней зеркала. Расчитал координаты граней и экспортировал в STL. Призму зеркала напечатал на 3D-принтере и обклеил зеркальной плёнкой.
Gryphon88
19.11.2017 00:29Можете рассказать, как рассчитывали зеркало и клеили плёнку (у меня по жизни морщины с пузырями получаются)? Кстати, я точно помню, что эту статью читал, но забыл, на каком ресурсе.
commanderxo
19.11.2017 23:59Зеркало расчитывал просто — 8 граней с разным наклоном. Шаг, если не ошибаюсь, 2 градуса. По-разному скошенные грани слегка нарушают центровку, поэтому для наилучшего баланса я располагал номера не подряд, а стараясь разместить последовательные грани на разных сторонах зеркала.
Зеракала нарезал из зеркального полистирола толщиной 1мм, у него одна сторона фольгинированная, а другая — самоклеющаяся.
Тут на гитхабе исходники 3D модели и ещё пара фотографий. Чтоб ловить начало отрисовки оставил на оси мотора один из блинов НЖМД и просверлил на краю маленькое отверстие. Напротив — оптопару с компаратором. Ардуино Nano модулирует светодиод из лазерной указки. Мотор управляется стандартным драйвером для RC-моделей с Ebay, ардуино сообщает ему нужную частоту. Зеркало имеет инерцию и раскручивать нужно плавно, чтоб не сорвалась синхронизация в моторе.
Качество получилось похуже чем у автора этой статьи, зато работает бесшумно и практически вечно.
MisterSmith
17.11.2017 21:42Гениально! Давно что то подобное хотел собрать. Но не очень понятен ход лазерного луча.
iliasam Автор
17.11.2017 21:49Там ничего сложного нет — луч лазера попадает на одну из узких граней полигонального (четырехгранного) зеркала, и отражается от него на зеркало вертикальной развертки. Так как это зеркало установлено под углом в 45 градусов, луч лазера отражается вверх — на потолок.
За счет вращения полигонального зеркала луч «бегает» в пространстве, в том числе и по зеркалу вертикальной развертки, за счет чего формируются линии.
За счет колебаний зеркала вертикальной развертки эти линии отрисовываются в разных местах по вертикали.
Jeyko
17.11.2017 22:51Сам давно вынашиваю в сознании компактную реализацию саджа. Хотя бы просто со статичной надписью, активируемой сильным звуком. PLEASE BE QUIET — RESIDENTIAL AREA
Дело в том, что мои окна выходят на улицу аккурат напротив светофора. И зачастую какая-нибудь особь в два часа ночи стоит там либо с музлом либо выхлопом, грохочущим на всю окрестность.
Усугубляется ситуация тем, что они зачастую переезжают светофорные сенсоры и тот, не чувствуя ТС, не переключается. И они стоят, грохоча обрезанными глушаками, пока не выведут меня из себя, и несоображая встать на сенсор!
teleghost
18.11.2017 00:32Брат, да это просто бомба! Лично мне не жаль отдать весь суточный лимит плюсов, да НЛО не велит. Чёрт возьми, полный mind blow!
А у меня никак не выходит из головы фраза, услышанная давно на лекциях в ВУЗе — по поводу фазирования луча ультразвуковой решёткой: как ФАР, только в оптическом диапазоне. Никакой механики. Вот сижу и думаю — всё ли я правильно запомнил? Представляете, каких вещей можно наделать?iliasam Автор
18.11.2017 11:05Сейчас такие штуки (Optical Phased Array) пытаются в лидарах использовать: www.greencarcongress.com/2016/08/20160823-quanergy.html
ToSHiC
18.11.2017 14:06Можете попробовать вместо гальванометров использовать bldc inrunner автомодельные моторчики, там как раз вся конструкция — это ось с цилиндрическим магнитом да 3 обмотки, соединённые в треугольник (или звезду, не принципиально). ШИМ на полюса обмоток позволит напрямую задавать положение, такая схема используется в широко используемых нынче стабилизаторах для камер.
iliasam Автор
18.11.2017 14:13По-моему, в этих стабилизаторах для обратной связи о положении камеры используются дополнительные гироскопы, которые крепятся на камеру.
Это я к тому, что в гальванометре обязательно должна быть обратная связь о реальном положении ротора, без нее невозможно быстро управлять положением зеркал.Alexeyslav
19.11.2017 14:35Не обязательно. Все необходимые данные можно получить — нам известны крайние положения ротора при подаче тока в обмотки, инерционность ротора можно измерить несколькими экспериментами. Строим матмодель и вуаля — она нам даёт положение ротора в любой момент времени с достаточной точностью. Конечно, в процессе работы параметры будут меняться но это лишь вызовет сдвиг картинки вверх-вниз и амплитуда развертки, которые можно компенсировать дополнительным оптическим датчиком «нулевого» и «максимального» положения ротора и периодически компенсировать дрейф. Возможно, при этом прийдется отказаться от жесткого построчного вывода, а модулировать лазер по данным из массива координаты которого выдаёт матмодель.
И да, по датчикам «нулевого» и «максимального» положения можно определить все нужные коэфициенты для матмодели.GoldenStar
20.11.2017 22:13Что только не придумают, но только не трехгранную зеркальную пирамиду. Вращайте мотор и получите такую же развертку но по другой оси на 120 градусов. Можно будет программно позиционировать как по вертикали, так и по горизонтали надпись или изображение
Alexeyslav
21.11.2017 01:06Проблема в том что лазер вынужден будет проходить дугу в 120 градусов, и только малую часть может быть полезен. Из-за этого вырастают требования к пиковой мощности лазера.
roboter
20.11.2017 13:43видел проект где лазером засвечивается светочувствительный полимер, и получается 3D принтер на таком принципе.
lmike
20.11.2017 17:05Воспоминания о похожих экспериментах, но с др. подходом ;)
Когда-то, «давно», использовали вот это, т.к. занимались «выращиванием» материала, в лаборатории.
Проблематичным, с точки зрения «домашнего» изготовления, являются: обработка кристалла резка/полировка/крепление пьезоэлектриков к граням кристалл, наличие тигля (платинового), ну и соблюдение безопасности, в процессе.
Цена готового кристалла, на рынке, в современных реалиях, мне не известна.
Схему для пьезоэлектриков сотрудник собирал собирал «на коленке», управляющие последовательности (на электрическую схему, для пьезоэлектриков) вводили через параллельный порт, с ДВК (точно не помню, по-моему ДВК-3М или более новая)
«программу» писали на паскале…
При растровом выводе, в нашем варианте, яркость зависела от времени задержки на точках растра. Выводили только текст (бегущая строка тоже была)
Vitalley
Для горизонтальной развёртки надо найти какое-то цилиндрическое зеркало и установить со смещением оси, тогда возможно и шрифт более детальный применить.
iliasam Автор
У получившегося проектора разрешение по вертикали довольно низкое. Из-за этого нет особого смысла увеличивать разрешение по горизонтали.
latonita
А нельзя взять электромагитный модуль из dvd? Там подвеска так сделана, можно управлять положением линзы
iliasam Автор
К сожалению, линза там вроде бы только линейно двигается, а не вращается, так что ее проблематично использовать для создания проектора.
Alexeyslav
Вращать вовсе не обязательно, она должна вибрировать. Если закрепить один конец зеркала на подвижной «платформе» а другой на неподвижной, то оно будет менять угол наклона.