Очки дополненной реальности это нереально крутая штука! Правда до сих трудно сказать, такая ли это необходимая вещь как смартфон, или же просто дорогая игрушка. Рассмотрим интересный проект умных очков для профессионального применения, которые облегчают работу электрика/электронщика. Сделаем его в стиле старого доброго DIY с ардуинами и 3d принтерами.
Каждый кто хоть немного занимался электроникой знает что такое мультиметр и как им пользоваться. Ничего сверхсложного — берем два щупа, выставляем режим измерений, тыкаем и смотрим на дисплее результат. Несмотря на простоту, в профессиональной практике часто бывают случаи, когда в каждой руке по щупу, а измерительный прибор попросту некуда деть и приходится всячески изгаляться чтобы пристроить его куда либо. Это вносит огромные неудобства в работе, а при должной неуклюжести и больших напряжениях еще и к ярким фейерверкам.
Alain Mauer подумал, а почему бы не показывать результат измерений мультиметра прямо перед глазами, используя технологии дополненной реальности наподобие того, как это делается в Google Glass.
Он разработал свой собственный проект умных очков, в основе которого лежит контроллер Arduino Pro Micro, маленький дисплей диагональю 0.66 дюймов (1.68 см), а также bluetooth модуль.
Корпус устройства распечатывается на 3-d принтере и все детали доступны к скачиванию на странице проекта.
Тем не менее, как вы уже догадались из названия статьи, здесь не будет описания сборки деталек по готовой инструкции, вместо этого я покажу как собрал этот девайс из того что нашел в своей куче электронного хлама. И начнем мы с микро-дисплея.
В принципе китайские товарищи продают такие экранчики совсем недорого, но проходящий в это время цирк с черной пятницей давал понять что ждать придется очень долго.
Потому покопавшись в хламе я нашел старый советский калькулятор Электроника Б3-21 с неплохими миниатюрными восьмисегментными индикаторами.
Стоп! Придержите свой праведный гнев и уберите руки от клавиатуры. Я бы не стал ломать подобный раритет ради индикаторов. Пару лет назад я спас три таких экземпляра фактически с помойки. Два из них были более-менее целыми, их я отдал коллекционерам. Последний представлял собой лишь жалкие остатки в виде платы с индикаторами, в то время как сами «мозги» калькулятора располагались на другой части, которую варвары вместе с корпусом куда-то дели.
Как видно по фото, индикаторов в калькуляторе было всего три, и они сделаны в корпусе DIP-14. Каждый индикатор имеет пять символов по семь сегментов в каждом + еще точка. Аккуратно выпаиваем и сажаем на макетную плату. Конструкция по размерам выходит совсем немного больше микродисплея из оригинального проекта.
Так как никакой документации на данные индикаторы днем с огнем не сыскать, используем маленькую хитрость чтобы определить распиновку. Многие мультиметры в режиме прозвонки/измерения сопротивления выдают на щупы достаточно напряжения чтобы заставить слабенько светиться светодиоды, либо такие вот индикаторы. По очереди тыкая все выводы находим нужные аноды (+) и катоды (-). Последние обозначены цифрами, отвечающими за каждый из пяти символов.
Таким образом, чтобы управлять двумя такими индикаторами, потребуется микроконтроллер и всего лишь 18 его портов. Закатаем губу и используем сдвиговые регистры 74HC595. Каждый из них имеет восемь выходов, а подключается всего к трем портам контроллера. Простейшая схема подключения из сети:
Я добавил к конструкции два таких в мелких корпусах. Первый управляет сегментами, а второй — символами. Символов больше чем выходов регистра, потому два крайних символа в нижнем ряду будут не задействованы, что в принципе не страшно, так как я запланировал выводить на верхней строке измеренное значение в виде цифр, а на нижней единицы измерения и трех символов для этого вполне хватит.
Код для отображения символов представляет собой байт, каждый бит которого отвечает в случае первого регистра за зажигаемые сегменты, а в случае второго — за зажигаемые символы. Такие байты также часто представляют в шестнадцатиричной форме записи.
В качестве контроллера я использовал китайскую Arduino Nano. Она немногим более версии Micro и тоже отлично влазит в оригинальный корпус.
Подключаем к ардуинке и проверяем работу индикаторов.
После удачной проверки настала пора задуматься о том, что же будет этот дисплей показывать.
В оригинальном проекте автор использовал «умный» мультиметр OWON B35T, который имеет встроенный интерфейс Bluetooth и умеет отправлять по нему результаты измерений.
Вместо этого пижонства мы прокачаем более дешевый, потрепанный в боях старый добрый Mastech MS8250B, у которого тем не менее есть USB интерфейс.
Реверс-инжинирим этот прибор и видим, что интерфейс сделан на отдельной плате, которая оптически развязана от остальной схемы. Причем здесь применили не пресловутые оптроны, а самые настоящие инфракрасные пары из свето- и фотодиодов. Зазор между ними такой, что наверняка можно мерить вплоть до киловольта без опасения сжечь свой компьютер. На плате виднеется чип CP2102, который является конвертером UART->USB, что является большой удачей, так как протокол UART любая ардуинка знает с пелёнок.
Принцип работы прост и банален, на чип CP2102 подается питание от USB, одновременно загорается ИК-светодиод, который дает мультиметру знать о том, что он подключен к компьютеру, после чего последний начинает весело мигать своим светодиодом в ответ, таким образом отправляя данные об измерениях. Подключаем сей мультик к компьютеру и с помощью ComPort Toolkit смотрим что же он отправляет:
Да, похоже на полный бред. Очевидно, что китайские товарищи не стали использовать стандартную скорость в 9600. Вооружимся логическим анализатором (Saleae-logic совместимым) и посмотрим на сигнал подробнее. ПО от Saleae настолько крутое, что может автоматически определять скорость UART по длине стартового бита.
Анализатор четко определил скорость в 2400. Выставляем правильную скорость в терминале и смотрим на вывод, неистово щелкая режимы мультиметра чтобы собрать больше различных данных.
Ну что же, уже появилась какая-то закономерность, хотя все еще непонятно, что же он отправляет.
Я измерил несколько различных сопротивлений, составив таблицу для сопоставления.
Изучив таблицу я понял, как мультиметр кодирует данные измерений. Можете самостоятельно подумать над этой задачкой, для нетерпеливых вот решение:
Подсказка есть в первой части статьи, так как в мультиметре используются все те же сегментные символы для обозначения цифр, то и шлет он байты, описывающие какие сегменты активированы в шестнадцатиричной форме. Старшие разряды не несут информации, потому смотрим на младшие и одинаковые цифры в результатах измерения. Из этой таблицы становится ясно, что 0 например это 7D, а 2 это 5B. Таким образом, задача передачи еще более упрощается. Достаточно прочитать значения индикаторов мультиметра и зажечь наши в соответствии.
Осталось только засунуть в корпус мультиметра контроллер, который будет включать инфракрасный светодиод, принимать данные измерений по UART, и отправлять их на очки. В данном случае, чисто для проверки технологии я приколхозил туда большую ардуинку, так как маленькие внезапно
Для связи мультиметра с очками я использовал дешевые радиомодули на 433МГц. Увы, это самое плохое решение, которое только можно придумать, но это единственное что было под рукой.
Собираем дисплей, контроллер, приемник и аккумулятор в напечатанный корпус
С оптической частью пришлось потрудиться. Пластикового зеркала как у автора в моей местности не найти. Орудовать стеклорезом я не мастер, потому несмотря на все суеверия я разбил маленькое зеркальце и обточил подходящий осколок до нужной формы под струей воды.
На данном этапе советую вернуться к началу статьи и освежить в памяти конструкцию устройства. Линза здесь играет огромную роль — она фокусирует на глазу изображение от дисплея. От ее типа и положения зависит при какой фокусировке глаза будут четко видны цифры. Разумеется такой же линзы я не нашел, потому использовал обычную пластиковую из дешевого монокуляра. В моем случае я разместил ее между зеркалом и индикаторами, найдя наилучшее положение с точки зрения фокуса. Чтобы сделать отражатель, я расслоил CD-диск, стер с него данные тряпкой и просто вырезал подходящий кусок. После сборки, получаем заветный девайс.
Из-за того что использована неправильная линза, а также того, что индикаторы больше дисплея по размерам, на отражателе видно всего четыре символа в верхней строке, а нижняя строка и вовсе попадает не полностью. На фото камера передает цвета слишком ярко, на деле цифры гораздо более блеклые.
Вообще камерой довольно проблематично снять изображение на отражателе, кроме того она всегда видит цифры в фокусе, что конечно далеко от реальности. Коннектим мультиметр и смотрим, как оно работает.
Камерой трудно захватить обе строки, хотя глаз их видит. Работа с получившимся девайсом выглядит примерно так:
Результат измерений 6.73 вольта. Как видим, инженеры СССР, разработавшие эти светодиодные индикаторы зачем то поместили точку в такое не очень удобное положение, что однако опять же можно считать везением, так как в мультиметре точка и вовсе слева от символа. Ну впрочем, это дело привычки.
Итоги.
Устройство в моем исполнении конечно вышло довольно колхозное, но даже в таком виде его использование приводит в восторг. Увы, индикаторы от старого калькулятора как оказалось, средненький вариант, так как при нормальном освещении цифр практически не видно. Радиомодули также не советую: батарейку передатчик посадит быстро, а связь будет все равно так себе. Ну и самый главный недостаток, наверное, любых очков дополненной реальности — это фокус. Чтобы был эффект того, что изображение накладывается поверх объекта куда направлен взгляд, должна соблюдаться соответствующая фокусировка. А проблема заключается в том, что глаз постоянно ее меняет, от чего вся «магия» теряется. Надеюсь что производители подобных девайсов работают над решением данной проблемы и когда-нибудь мы полностью насладимся преимуществами дополненной реальности в профессиональной деятельности.
Автор: Astrei