Цифровая фоторамка своими руками

Цифровая фоторамка своими руками

Теги статьи: Добавить тег

Фоторамка из подручных материалов

Автор: Aheir
Опубликовано 02.11.2010

Сегодня, пожалуй, устроим выездной фестиваль клуба «Очумелые ручки». Ситуация, в принципе, стандартная: некоторое время назад покупал в подарок электронную фоторамку, естественно, сам побаловался пару дней, и, знаете ли, понравилось. Но покупать себе готовые игрушки, а тем более любоваться собственными фотографическими шЫдеврами на экране 7-10 дюймовой диагонали — не наш метод, как ни крути.
Следовательно, производим ревизию запасов, и по результатам инвентаризации обнаруживаем, во-первых, монитор Samsung SyncMaster 152S, вот такой:

Достался он мне когда-то по случаю, бесплатно, без ноги и в не рабочем состоянии. Был починен и с тех пор валялся на антресолях.
Во-вторых, обнаруживаем материнскую плату от нетбука Asus Eee 900, вот такого:

Далее, глубокомысленно переводим взгляд с одной железки на другую (3-4 раза), чешем репу (по вкусу) и приступаем.
Для начала, задумаемся: что умеет ноутбук и что из этого хотелось бы задействовать? С программной точки зрения он умеет почти все, что обычный комп. С аппаратной, в данном случае, на материнке мы имеем: пару SSD-накопителей (т.е. винчестер нам не нужен), аудиовыход (значит, можно прикрутить колонки), Ethernet (неплохо бы сохранить возможность подключаться к нему), несколько USB-разъемов (аналогично — было бы полезно задействовать), Wi-Fi карточку (прекрасно, нужно только раздобыть антенны), ну и выход VGA — куда ж без него. Вполне себе приличный набор, нужно отметить.
Вот в свете всего этого, разбираем монитор (пластик и плату с кнопками пока откладываем в сторону, смотрим на две одинокие платы позади матрицы (БП монитора и контроллер), убеждаемся, что места еще довольно много и закрепляем по бокам пару колонок от монитора (теперь уж даже и не вспомню, от какого именно, взяты оттуда же, с антресольки), а сверху на блок питания, обязательно позаботившись о дополнительной изоляции, второй (он же — дежурный, он же — для ноутбука) БП на 12В с выходным током до 3А (место происхождения этого БП — все то же). Получаем вот такую картину:

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

Если заглянуть под радиатор, можно увидеть эти самые медные прокладки. Я использовал пластины меди около 4 мм толщиной:

Органы управления и индикации решено было расположить в нижней части конструкции, там имеются 4 отверстия с резьбой для закрепления штатной ноги монитора, на них вполне удобно закрепить печатную плату с разъемами и светодиодами (для определенности назовем ее платой управления). Помимо основной функции (показывать фотографии), лично мне от фоторамки требуется только одно — работа по расписанию. Т.е. в 10 утра включилась, в 12 ночи — выключилась. Все. Адекватных способов устроить это имеющимися средствами я не обнаружил, поэтому на плате управления, помимо входного разъема питания 220В, кнопки включения материнки, индикатора питания и активности жесткого диска, стерео аудио-разъема 3.5 мм, 4 разъемов USB, разъема RJ-45, оптического Tos-Link SP-DIF, кнопки ресета и кнопок управления монитором разместились еще и микроконтроллер Atmega 8515 с часами реального времени и небольшим светодиодным 7-ми сегментным индикатором на 5 знакомест. Более-менее в сборе все это выглядит примерно так:

Собиралось все по месту, на стяжках и термоклее, с прокладками из изолона и т.п. Закреплено все надежно, ничего не болтается и не отваливается. В верхнем левом углу на фото видно две Wi-Fi антенны (вот их в хозяйстве не нашлось, пришлось кинуть клич на сайте объявлений и через пару дней и 50 руб денег они были у меня). Я таки установил родную турбинку рядом с радиатором, но так ее и не подключил: эксперименты показали, что в этом нет совершенно никакой необходимости, все в достаточной степени охлаждается пассивным образом.
Теперь подробности. Все необходимые интерфейсы были удлинены проводами для подключения к плате. Частью использовались штатные разъемы на материнской плате (аудио, сеть), частью — провода припаивались непосредственно к материнке (USB). Кроме того, продублированы кнопки включения и сброса, удалены на материнской плате и перенесены на плату управления светодиоды активности диска и питания. Звуковой чип поддерживает SP-DIF, соответственно, был добавлен оптический передатчик сигнала для него. Вовремя возникла мысль добавить пульт ДУ, поэтому на плате так же размещен модуль USB ИК-приемника из комплекта тюнера GoTView (опять же — с антресолей):

Естественно, корпус приемника удален и оставлена только плата (надо сказать, совершенно безобразно и на отвратительном материале сделанная — ну да речь не об этом).
Схема всего этого безобразия выглядит вот так:

Проект схемы и платы в P-CAD доступен для скачивания в конце статьи. Честно говоря, схема не отличается особой правильностью оформления. Например, большинство разъемов выполнено не в виде компонентов, а как наборы отверстий. Были на то свои причины. Но представление о том, как там что взаимодействует, она даст полное.
Чем здесь занимается микроконтроллер. Как уже сказано, этот элемент я ввел в первую очередь для реализации работы по расписанию. Для этого заведены часы реального времени на DS1307, 3 кнопки для настройки (настройка текущего времени, времени включения, времени выключения: по нажатию кнопки устройство входит в режим установки соответствующего параметра, далее удержание кнопки — настройка часов, отпустили — запомнили, повторно нажали и удерживаем — настройка минут), 5-ти значный LED-индикатор (С ним — отдельная история: нашел в хламе нечто советского производства (что-то вроде таких использовались в первых АОНах), новый, понадеялся на лучшее, не проверил, впаял — оказалось полностью работают только 3 знакоместа (в остальных битые сегменты), хорошо, что 3 первых. Так что индикация времени реализована в два этапа: «ЧЧ-» на первом этапе и «-ММ» — на втором — жалкое подобие бегущей строки). Кроме того, МК умеет нажимать на кнопку включения материнской платы, кнопку включения монитора (и то, и другое — посредством оптопары), может включать и выключать питание монитора при помощи реле, а еще знает о том, что материнская плата включена (по свечению светодиода) и о событии нажатия на кнопку «Power» на пульте ДУ (по считыванию соответствующего сигнала с ноги микроконтроллера в модуле приемника ИК-сигнала). Все эти сложности понадобились для реализации алгоритмов включения и выключения устройства. Например, монитор включается после загрузки ОС, примерно через 30 с от момента нажатия на кнопку включения (время установлено эмпирически), а при нажатии кнопки питания на пульте из-за особенностей софта выключения не происходит и требуется организовывать длинное нажатие, которое безусловно выключает почти любой ПК. Такие вот нюансы использованного железа, подробно их описывать особого смысла нет, поскольку они слишком «аппаратно зависимы». Прошивка написана в CVAVRе, сложностью и уникальностью не отличается.
Как выснилось в ходе экспериментов, хотя на материнской плате и есть аудиоусилитель, «раскачать» предложенные колоночки он не в состоянии, поэтому на плате управления поселился еще и усилитель на микросхеме L272 (мощный операционник, для аудио, в общем-то, не предназначенный, но вполне справляющийся с такой ролью в даном случае — да простят меня аудиофилы), который усиливает сигнал при условии, что в гнезде наушников отсутствует штеккер.
На плату полностью перенесена плата управления монитором: 5 кнопок и светодиод — ничего сложного.
VGA платы цепляем коротеньким самопальным кабелем ко входу монитора, не забываем об экранировании — используем соответствующие провода. Вблизи наблюдаем довольно запутанную картину проводов:

Немного о конструкции. Боковые стенки выполнены их фольгированного текстолита, напротив динамиков насверлены отверстия, панель платы управления выполнена заводским способом:

Вообще, конечно, предполагалось, что она встанет сверху на металлическую крышку и перекроет ее, но получилось иначе). Сама крышка взята от какого-то промышленного 15" монитора (в принципе, можно было и родную использовать, но эта приглянулась «цельнометалличностью» и наличием родной устойчивой ноги на VESAвское крепление — довольно редко встречается). В ней сделаны необходимые вырезы, в основном — под радиатор. Левая и правая боковины прикручиваются винтами непосредственно к блоку матрицы, там есть штатные глухие отверстия с резьбой, по 4 с каждой стороны. Этого крепления вполне достаточно для обеспечения жесткости всей конструкции.
Внешне рамка оформлена в деревянном багете (на самом деле, конечно, МДФ: купил наличник для двери, запилил «на ус» на станке, собрал на клею). Внутренние размеры рамки выполнены в точности по родной пластиковой окантовке — вот зачем мы ее откладывали в сторону, а не выбрасывали сразу.
Далее совмещаем полученную рамку и собранный блок матрицы, по периметру последнего клеим к рамке небольшие брусочки, и к ним через уголки притягиваем блок электроники. В принципе, все видно на фотографиях. Вот так это быглядело в процессе склеивания:

А это уже окончательно собранный и покрашенный вариант на подставке:

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

Немного о софте. В качестве ОС для этой железяки выбрана Ubuntu 10.04 для нетбуков, проблем с установкой и настройкой никаких, все работает, что называется, «из коробки». Весомый плюс: пульт, который прикидывается HID-клавиатурой и мышью, заработал сам, без дополнительных настроек. В качестве оболочки (медиацентра) я поставил XBMC (X-box Media Center). Весьма приятная софтинка, право слово. Насколько я понимаю, есть ее порты на Винду и некоторые другие ОСи, так что если кто-то задумывается об HTPC — присмотритесь, штука довольно гибкая. Поскольку процессор на материнке не самый слабый, памяти достаточно, звуковую подсистему мы несколько усовершенствовали, то ничто не мешает этой рамке не только востроизводить MP3-шки из домашней локальной сети, но даже счастливо крутить DivX-овые avi-шки с файлохранилища — производительности хватает без вопросов. Кроме того, железка показывает прогноз погоды, если закрыть XBMC, то можно играть в игрушки с помощью пульта (судоку, например), а при подключении USB-клавиатуры и мыши (лучше, конечно, беспроводных) с комфортом шариться в И-нете. Ну и со своей основной задачей — слайдшоу — рамка тоже справляется вполне достойно.

Способы реализации

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

Таким образом, при условии, что разбирать рамку нельзя, остается только использовать ее интерфейсы внешней памяти — SPI (для работы с SD Card) и USB. Достаточно сделать устройство, имитирующее внешний накопитель, подключить его к рамке — и она сама будет запрашивать с такого устройства изображения. При помощи микроконтроллера эмулировать SD карту достаточно сложно, да и форм-фактор самой карты довольно сложно повторить. Можно было бы использовать готовую WiFi SD карту, но все такие карты, про которые я знаю, имели слишком высокую цену (>40$, что близко к стоимости самой рамки).
Использование USB для решения такой задачи подходит больше — не проблема найти производительный микроконтроллер с поддержкой USB; подключение к рамке осуществляется стандартным разъемом. Более того, на Хабре уже была публикация, посвященная эмуляции USB диска при помощи микроконтроллера stm32. В комментариях к этой статье обсуждалась возможность передачи динамически изменяемых данных таким методом. Из-за кеширования операционной системой данных при считывании файла нет смысла менять содержимое эмулируемых файлов — ОС просто не будет их запрашивать, так как не сможет узнать, что они изменились. Однако фоторамки не кешируют файлы (в них просто нет нужного объема ОЗУ)! Проверить это можно, подключив к фоторамке любую USB флешку, со светодиодом, мигающим при чтении файлов — он будет мигать постоянно при считывании файлов. Поэтому я решил использовать именно этот способ.

Программная часть

268Мб. В реальности этого нет, что и вызывает ошибки при определении типа файловой системы. Попытка увеличить объем диска, увеличив объем эмулируемого файла до 400 МБ не сработала — возможно, там еще что-то не сходилось. Поэтому я решил переделать «emfat» для эмуляции файловой системы FAT16.
В конечном счете это удалось, и накопитель начал корректно обнаруживаться всеми устройствами:

Стоит отметить, что у FAT16 тоже есть ограничение на размер диска — не менее 4087 кластеров, то есть 16 МБ в данном случае. Для выполнения этого условия приходится создать в «emfat» виртуальный файл на 20 Мб.

Проверка с фоторамкой прошла нормально — рамка успешно отображала тестовое изображение, хранящееся в Flash памяти контроллера. Следующий этап — вывод пользовательских изображений. Проще всего эмулировать BMP файлы — у них довольно простая структура, изображение может быть 256-цветным, т.е. на один пиксель приходится один байт. Вот только в таком случае для хранения картинки размером 800*600 понадобится 480 Кбайт ОЗУ. У микроконтроллера такого объема памяти нет, а значит остается один вариант — формировать изображение «на лету». Принцип работы следующий — в том случае, когда устройство-хост запрашивает с накопителя данные из файла, «emfat» вызывает callback-функцию, соответствующую этому файлу. В эту функцию передаются номер сектора, из которого запрашиваются данные, и указатель, по которому эти данные нужно записать. Зная номер сектора, можно определить, какой участок изображения запрошен и сформировать его.
В процессе экспериментов обнаружился неприятный факт — Windows может запрашивать данные из секторов не по порядку их следования. Почему так сделано — непонятно, но это усложняет формирование изображения на лету, так как приходится но номеру сектора вычислять — какой участок данных запрашивается в данный момент. Еще одна проблема — строки в BMP файлах идут снизу вверх, что еще больше запутывает расчет позиции.
Для отображения текста я использовал библиотеку mcufont. Она удобна тем, что позволяет использовать сжатые шрифты, за счет чего заметно сокращается использование Flash памяти. Так как я использовал достаточно крупные шрифты, то эта возможность является довольно важной.
Эта библиотека напрямую записывает сформированное изображение в память, так что для работы библиотеки приходится выделять отдельный массив в ОЗУ.
Также я реализовал отрисовку изображений из памяти контроллера. Все изображения, как и текст, выводятся в черно-белом виде, за счет чего в одном байте изображения можно хранить информацию о 8 пикселях. Для того, чтобы преобразовать обычные изображения в вид, пригодный для подключения к проекту, была использована программа LCD Assistant.

В результате на подключенном USB накопителе формируется изображение вот такого вида:

После того, как работа программы была проверена на STM32F4DISCOVERY, я сделал само устройство, которое представляет собой микроконтроллер с подключенным к нему WiFi модулем на ESP8266. Из подходящих у меня был только контроллер STM32F107RCT7.
Схема получившегося устройства вышла довольно простая:

А вот из-за ограничений на размер платы — 17×36мм (я планировал установить ее в готовый корпус) и большого размера контроллера печатная плата вышла не самая простая в изготовлении — двухсторонняя, с монтажом деталей с двух сторон. При этом некоторые линии питания пришлось сделать проводом.
Вид получившейся платы (в процессе отладки вместе с модулем ESP-01):

При указанных размерах платы наиболее подходящим был WiFi модуль ESP-03. Вот так выглядит получившаяся плата с уже установленным модулем:

И со стороны контроллера:

В процессе экспериментов оказалось, что чувствительности керамической антенны явно не хватает — модуль с трудом подключался к роутеру. После подключения к выводу WIFI_ANT кусочка проволоки длиной 31 мм чувствительность заметно улучшилась, и стала сходной с чувствительностью ESP-01. Место, где фоторамка установлена постоянно, находится в нескольких метрах от роутера, и там нормально работает и родная антенна модуля, так что на фотографии дополнительной антенны нет.
Так как при постоянной работе ESP8266 довольно сильно нагревалась, я решил включать ее только во время запросов информации. Управление питанием можно производить, используя вывод CH_PD модуля. Перевод этого вывода в 0 приводит в переходу ESP8266 в режим пониженного потребления.
Для того, чтобы было удобнее тестировать работу ESP8266, я написал для микроконтроллера отдельную прошивку, реализующую мост USB-UART. Именно через нее ведется настройка модуля для работы с роутером, так что после включения ESP8266 автоматически подключается к нему.

Принцип работы получившегося устройства достаточно прост — каждые 10 минут контроллер пытается запросить данные с сервера, и если это удается, обновляет данные о погоде. Данные о текущей температуре и прогноз на 3 дня вперед берутся с сайта openweathermap.org, информация о температуре снаружи и внутри балкона — c сервера majordomo. В то же время фоторамка запрашивает изображение каждые 6 секунд, отображая при этом текущую информацию. Так как оба процесса могут происходить одновременно, то для приема данных от ESP8266 используется DMA.

В результате, на фоторамке отображается вот такое изображение:

Ссылка на основную публикацию
Хороший набор инструментов для автомобиля отзывы
Счастливым обладателям автомобилей необходимо иметь при себе инструменты, помогающие в чрезвычайной ситуации с машиной. Ежегодно выпускается большое количество разнообразных инструментов,...
Фейковая карта visa с деньгами
Getting a valid Visa credit card number Visa credit card number (Bulk Generate Visa Cards) To check if your credit...
Фейсбук страница владимира панаева
с 16 по 26 Декабря Поволжское отделение Российской академии художеств Лаврушинский пер., д. 15Москва 15 декабря в 18.00 в Координационном...
Хонор похожий на айфон
Apple активно продвигает iPhone XS, но есть ли достойная альтернатива дорогому и в чём-то «сырому» устройству? Honor наносит ответный удар...