Мысль скрестить электронику и украшения — она очень сильно старая. Поэтому когда мы ее вспомнили, то поиски дали большое количество работ на этот счет. Правда, зачастую, под электронными украшениями подразумевались украшения из электроники — облаченные в эпоксидку кусочки платы, элементы, кулоны-микросхемы. Мы же хотели сделать светодиодные украшения. Не такие, как в китайских игрушках, которые продают на каждом углу, потому как в них все достаточно неинтересно — есть несколько программ мигания, переключаемых по кнопке, а что-то посложнее и поинтереснее. Например, бегущие огни, реагирующие на окружающее освещение, горящие ярче в темноте и тускнеющие на свету. Или мерцающие в такт окружающей музыке. Или меняющие цвет в зависимости от температуры вокруг. Или показывающие сердечный ритм носителя. Иными словами, нам хотелось какой-то активной реакции. Сразу скажу — получилось примерно так:
Предупреждение: данная статья писалась в первую очередь для нетехнических специалистов, поэтому имеет некоторые упрощения, которые могут вызвать неодобрение у инженеров. Не стесняйтесь их высказывать.
Таким образом сформировались требования к электронной части:
- там должно быть несколько управляемых светодиодов (управляемые — это значит, что мы можем не просто включать и выключать их свечение, но и контролировать их яркость и, что немаловажно, цвет);
- обязательно наличие минимум одного сенсора — датчика освещенности, датчика температуры или микрофона. Датчики пульса пока отложили — они требуют непосредственного приближения к телу (поэтому ваш фитнес-браслет бесполезен в этом плане, если его надеть поверх рубашки);
- управление должно быть программируемым. Это значит, что мы можем в любой момент поменять логику управления светодиодами на более подходящую под антураж готового украшения, например, если в украшении превалируют холодные цвета, то сделать свечение соответствующим;
- устройство должно быть компактным и легким, потому как тяжелые штуки сильно ограничивают возможность их применения;
- схема должна питаться от аккумуляторов или от батареек, которых можно купить на любом углу, для удобства потребителя.
Зафиксировав эти требования, мы начали серьезно размышлять. Как и любая техническая задача, эта имела множество вариантов решения.
Например, мы могли бы взять стандартный конструктор типа LiliPad или Adafruit GEMMA, созданных как раз для этих целей. Если посмотреть примеры GEMMA, то там как раз можно увидеть большое количество похожих проектов со светодиодами, есть даже серьги. К сожалению, конструктор очень хорошо подходить на стадии прототипа, когда устройство нужно собрать из грязи и палок, чтобы проверить, работает ли оно вообще, но, увы, абсолютно не подходит для сколь либо маленькой серии — мешают дополнительные разъемы, соединения и конструктив в целом. Ну и стоимость конструктора и деталей к нему (а мы помним, что нам необходимы еще светодиоды и датчики) тоже неприятно играет на стоимости конечного изделия не в самую интересную для покупателя сторону. Так что конструкторы — вариант хороший, но порождающий большое число вопросов.
Альтернатива — разрабатывать электронную часть целиком и самостоятельно. Это путь одновременно и более простой (поскольку мы можем оставить только то, что нужно), и сложный (потому что создание программируемого устройства даже для нашей несложной на первый взгляд задачи таит в себе множество подводных камней и компромиссных решений). Разумеется, увидев такую замечательную возможность поразмять некоторые части тела, мы не смогли пройти мимо.
Тут, наверное, стоит сделать небольшой экскурс в изготовление электроники и как это происходит.
Рисуется принципиальная схема устройства — то, как электронные компоненты должны соединяться друг с другом, чтобы работать вместе. Схема проверяется на практике — из подручных средств и на проводках собирается первое устройство. Если оно заработает, то, значит, исходная схема была правильная и можно двигаться дальше.
После того, как у нас есть проверенная принципиальная схема устройства, начинается самое интересное — разводка печатной платы, т.е. такого кусочка текстолита с дорожками, на который напаиваются электронные компоненты. Можно, конечно, делать все на проводках, но это будет медленно, скучно и крайне ненадежно. Кроме того, современные технологии достигли такого распространения, что изготовить печатную плату с промышленным качеством можно за очень небольшие деньги. Впрочем, мы это еще увидим. Проектирование печатной платы состоит в том, чтобы показать, как мы будем располагать элементы и как будут они между собой взаимосвязаны. Или, проще говоря, нам надо перерисовать принципиальную схему красиво и с учетом реальных физических размеров деталей.
Просто спроектировать печатную плату (на профессиональном жаргоне — “развести”) недостаточно, еще надо подготовить ее к производству, т.е. сформировать правильный набор документов, который включает в себя внешний вид результата, схему проводящих дорожек, схему сверления и металлизации. Обычно даже у опытных инженеров это получается не сразу, особенно в случае, когда устройство непростое. Эти файлы (в формате Gerber) передаются в производство. Пока печатная плата выпускается, происходит закупка элементов, которые будут припаиваться на нее. На профессиональном языке список таких элементов называется BoM (от английского Bill of Materials — список компонентов).
После получения печатной платы и закупки всех необходимых компонентов происходит монтаж элементов на плату, который может быть ручной (обычно применяется для небольших тиражей до тысячи экземпляров) или автоматический (специальными станками для больших партий). Ручной монтаж выглядит в виде инженера с паяльником, который просто припаивает элементы на плату согласно предоставленной ему схеме.
После завершения монтажа устройство программируется (если оно содержит микросхемы, которые это допускают) и тестируется, т.е. проверяется его работоспособность и устойчивость к различного рода внешним воздействиям. Если устройство прошло все тесты, то его признают работоспособным и передают дальше на корпусировку (т.е. помещение в коробочку) или на дальнейшую обработку (как в нашем случае). Если нет — производят диагностику причин, чинят, повторно тестируют и либо бракуют окончательно, либо передают дальше.
В общем, процесс производства электроники не самый простой и тривиальный. Если вы твердо вознамерились сходить этим путем, то крайне рекомендуем заручится поддержкой квалифицированных инженеров по данному направлению, желательно, с опытом в данном деле.
Итак, у нас есть идея и есть требования. Осталось воплотить их “в железе”.
Размышления над вопросом породили большое число сомнений:
- светодиоды — достаточно “прожорливые” элементы, поскольку являются источниками света. Управляемые светодиоды — “голодные” втройне, потому как по сути представляют собой три разных светодиода, объединенные в одном корпусе (по цветовым составляющим — красный, зеленый и синий). А, как мы помним, мы хотели компактное устройство, т.е. для большой батарейки у нас просто нет места;
- батарея и питание — узкое место проекта в целом. Напомню, у нас по плану помимо светодиодов должны быть датчики и схема управления свечением, которые тоже потребляют электрическую энергию. А покупателя вряд ли устроит, если его украшение будет работать в течение нескольких минут, а потом потребует смены элементов питания;
- устройство должно быть программируемым — т.е. мы должны иметь возможность управлять свечением на уровне программы. Что автоматически требует наличия микропроцессорного устройства, называемого микроконтроллером. Это такая микросхема, к которой можно подключить и светодиоды, и датчики. Внутри нее есть простой микропроцессор и память, что позволяет записать в нее программу для управления всеми подключенными устройствами. И этот микроконтроллер, как следует из предыдущих пунктов, должен потреблять очень мало электрической энергии, дабы не обрекать пользователя на постоянную смену батареек;
- поскольку различных датчиков великое множество, было решено сосредоточится только на одном из них — датчике освещенности. В качестве такого датчика используется фоторезистор, который работает по такому принципу — если на него падает свет, то его сопротивление уменьшается, если он в темноте — увеличивается. Это простой датчик, подключив который ко входу микроконтроллера, мы получим прибор для измерения освещенности. Забегая вперед, скажу, что существуют датчики температуры и звука, которые работают по тем же принципам и могут заменить фоторезистор, не внося в итоговую схему значительных изменений;
- печатная плата, на которой должен производится монтаж должна быть круглой или со скошенными углами — опять же, из эстетических соображений, прямоугольных и квадратных украшений не так много.
Итак, зарываемся в поиск, перебираем комбинации и в результате получаем такое удовлетворяющее нас решение:
- питание — стандартная батарейка CR2032, она же “таблетка”, размером с десятирублевую монету. Обеспечивает 3 Вольта, долго хранится, работает в широком диапазоне температур, дешева, продается в любом супермаркете. Держатель для такой батарейки прост до ужаса и стоит тоже очень недорого;
- микроконтроллер — Atmel Attiny85, компактный, малопотребляющий, легко программируемый, дешевый. Дополнительный плюс состоит в том, что данный чип имеет аналоговый вход (т.е. туда можно подключить датчик без дополнительных схем) и малое количество ножек (что в нашем стремлении к компактности — очень большой плюс);
- светодиоды — SK6812 mini, которые 3.5 мм на 3.5 мм. Нам показалось, что обычные пятимиллиметровые светодиоды будут весьма габаритны и сильно прожорливы для данной схемы. Кроме того, их обычно питают напряжением 5 Вольт, а наша батарейка обеспечивает только 3 Вольта, т.е. для работы потребовалось бы использовать преобразователь, что не хотелось;
- фоторезистор он же датчик света — традиционный, который используется в камерах и домофонах для определения наступления ночи.
После того, как мы определились с компонентами, скачиваем документацию на контроллер и светодиоды и погружаемся в изучение. Всплывают нюансы — светодиоды подключаются последовательно, “паровозиком” и управляются по одному проводу, в который контроллер должен сформировать особым образом сигнал, грубо говоря — послать определенную последовательность чисел, каждая из которых будет означать с какой интенсивностью зажигать каждый из встроенных светодиодов (а мы же помним, что в одном корпусе у нас их три — красный, зеленый и синий). Т.е. нам надо последовательно послать яркости красного, зеленого и синего для первого светодиода, потом для второго, потом для третьего и так далее, в зависимости от того, сколько у нас их включено последовательно. Если вы видели в строительных магазинах светодиодные ленты, переливающиеся всеми лучами радуги, то знайте, что они работают примерно по такому же принципу.
Помимо управления данным светодиодам требуется защита от помех, что потребует по одному конденсатору на каждый светодиод. Помимо этого, такой же конденсатор от помех требуется для микроконтроллера.
Далее, светодиоды, даже в таком компактном исполнении все равно жадны до питания. Поэтому их жадность надо ограничивать, а ограничитель у нас один — сопротивление. Т.е. каждый светодиод требует еще дополнительный токоограничивающий резистор. Забавно, что в процессе развития изделия оказалось, что эти резисторы не сколько помогают, сколько вредят — при количестве светодиодов больше четырех возникала нехватка тока и пришлось поменять их на нуль-омные, т.е. банальные перемычки, чтобы светодиоды работали правильно. В последующих версиях схемы мы их совсем убрали.
Фоторезистор тоже потребовал дополнительного резистора, играющего роль делителя напряжения. Примеров схем для подключения можно найти полно, если вбить в поисковой системе “arduino подключение фоторезистора”.
Отдельно стоит сказать за программирование микроконтроллера — чтобы залить прошивку (код программы в двоичном виде) в Attiny85, требуется специальное устройство — “программатор”. К счастью, он собирается на базе электронного конструктора Arduino (в котором стоит его старший брат, тоже микроконтроллер компании Atmel, но посерьезнее), который можно купить в любом радиоэлектронном магазине или в Китае за небольшие деньги.
Ну и, наконец, выключатель — мы же не хотим, чтобы пользователь постоянно вставлял и вынимал батарейку.
Впрочем, несмотря на все вышеперечисленное, принципиальная схема оказалась простая по сравнению с большинством бытовых устройств (скорее всего, ваш термопот сложнее по электронике, чем наша схема):
В итоге у нас получилось устройство, которое имеет размеры чуть больше обычной таблеточной батарейки. Собственно элемент питания и выключатель помещаются на одной стороне, светодиоды, микроконтроллер и датчик освещенности — с другой. Поскольку светодиоды также могут влиять на датчик освещения, находящийся рядом (допустим, засветить его так, что он будет считать, что кругом светло, хотя по факту может быть еще та темнота), то было решено его монтировать с возможностью отогнуть в плоскость, перпендикулярную направлению свечения.
В результате разводки у нас получилась достаточно простая печатная плата. Перед разводкой мы проверили схему и она оказалась работоспособоной, правда с одной оговоркой — мы проверяли ее на постоянном источнике питания, а не на батарейке, поэтому опасения, что такого небольшого элемента питания хватит ненадолго оставались вплоть до того момента, когда мы спаяли первое устройств.
Итак, схема сделана, плата разведена. И тут же первый компромисс — дело в том, что микроконтроллеры Attiny85 выпускаются в двух типах корпусов — DIP (это такие классические микросхемы с ножками-штырьками, которые вы наверняка видели на заре распространения электроники и в простых устройства) и SO (это планарные микросхемы, маленькие и компактные, не требующие дополнительных отверстий для пайки и монтируемые поверх платы пайкой). В момент проектирования у нашего поставщика компонент SO-версия была дороже и, самое главное, ее не было в наличии. Поэтому мы взяли DIP-версию, но с расчетом, что мы ее сначала запрограммируем, а потом аккуратно откусим ножки и запаяем как SO, напрямую к плате. Это вносило дополнительный технологический риск — поменять прошивку в этом варианте после напайки микроконтроллера на плату было бы не очень тривиальной задачей, но кто из нас не любит трудностей?!
Мы заказали платы в Китае, там этот процесс отлажен, и занялись сбором компонентов. Светодиоды и держатели для батарейки были так же заказаны в Китае, на местном рынке их либо не было, либо стоили неприличных денег. Остальное куплено в ближайшем электронном супермаркете. Микроконтроллеры также можно было заказать в Китае, но большое количество негативных откликов и собственный печальный опыт (когда присланные компоненты оказывали недостаточно хорошего качества) удержали нас от такого шага. Поэтому к моменту получения готовых печатных плат весь BoM был у нас на руках. Осталось даже время, чтобы неспешно спаять программатор для микроконтроллеров.
После получения плат мы спаяли одно тестовое устройство. Поскольку программа для микроконтроллера была отложена до получения готового устройства (и это было правильно, чуть позже расскажу почему), мы не впаивали микроконтроллер “насовсем”, а сделали переходную площадку, в которую микросхему можно воткнуть как лампочку в патрон. Как и следовало ожидать — устройство не заработало. Пристально поглядев на устройство (в течении пары часов), мы нашли ошибку — светодиоды были припаяны неправильно. Дело в том, что при монтаже микросхем и элементов с большим количеством ножек очень важно эти ножки не перепутать и поставить элемент правильно. Для этого инженеры на маркировке на печатной плате используют ключ — изображение точки, которая должна совпадать с такой же на корпусе микросхемы. В результате процесс пайки такого элемента выглядит так — совмещаем ключи, припаиваем одну ножку, припаиваем все остальные. Перепутать ключ обычно черевато негативными последствиями — автор этих строк как-то запихнул микроконтроллер в программатор не той стороной — через пять секунд в воздухе запахло жареным, а палец, коснувшийся чипа, получил аккуратный ожог по форме корпуса. К счастью, никто больше не пострадал и после остывания микроконтроллер тоже остался рабочим.
Так вот, при проектировании нашей платы мы применили самопальное описание для светодиодов (трехмиллиметровые SK6812 достаточно редко встречаются, нежели WS2812) и в ней благополучно ошиблись с ключом. В результате при монтаже ключ светодиодов должен находится по другую сторону относительно ключа, отмеченного на плате. Тестовая плата благополучно отправилась в утиль.
Второй тестовый образец был собран уже с учетом этой ошибки. Теперь мы были уверены, что наша схема работоспособна и принялись за программирование прошивки.
Выглядело это так:
- чип микроконтроллера вставлялся в программатор;
- в него заливалась прошивка;
- чип вынимался и вставлялся в устройство;
- включалось питание и проверялась работоспособность;
- все повторялось сначала.
Отмечу, что порой за день эту операцию приходилось повторять по нескольку десятков раз. Можно было припаять программатор напрямую к чипу на плате, но, как вы помните, мы легких путей не ищем.
На этапе программирования вскрылось тоже много интересного.
Началось все с того, что ни одна из стандартных библиотек работы с управляемыми светодиодами не заработала. Причина была не в одном месте, а в двух. Во-первых, временные интервалы для кодирования управляющих сигналов предназначались для других типов светодиодов и немного не совпадали с теми, что были указаны в документации по нашим. Во-вторых, оказалось, что микроконтроллер в случае батарейного питания работает на пониженной частоте и по умолчанию может уменьшать ее еще сильнее для экономии энергии (что и делает, когда на батарейке), что опять таки ведет к изменению временных интервалов для управления светодиодами. Пара часов в обнимку с осциллографом помогло подстроить библиотеку под нужные интервалы, а полчаса и немного экспериментов позволило найти команду, запрещающую микроконтроллеру изменять частоту работы. В результате среднепродолжительного боя мы смогли нормально управлять светодиодами, зажигая их теми цветами, которые требовались нам, а не в абсолютно случайном порядке.
Второй сюрприз преподнес датчик освещения. После его программирования мы долго не могли понять, почему реакции на закрывание его пальцем (т.е. полного затемнения) нет от слова “совсем”. Ответ пришел спустя несколько дней пристального вглядывания в примеры работы с такими датчиками. Оказалось, что при настройке аналогового порта, к которому должен быть подключен датчик, требовалось использовать одну нумерацию, а при чтении показаний — другую (да-да, мне тоже вспомнился анекдот “Надо же, ошибка в одной цифре, а какая разница!”). После этого осознания все заработало как должно. Прошивка была написана.
Поскольку нам прислали не одну, и не две печатные платы, а сразу десять (одна, как мы помним, была утилизирована), мы на радостях распаяли все остальные.
Выяснилось, что закон больших чисел работает и на малых партиях — на двух платах из десяти проявился производственный брак — наши китайские коллеги недостаточно хорошо проложили электрическую связь между передним и задним слоем платы, в результате ничего не работало по причине отсутствия питания. К счастью, это легко устраняется пропайкой межслойных отверстий с проводником.
Устройства собраны, протестированы и были переданы для дальнейшей обработки для придания вида готового украшения. Фактически мы потратили на всю разработку не больше недели, но из-за отвлечений на другие задачи и ожидания (свободного времени, компонентов, печатных плат) весь этот процесс был размазан по временному интервалу длиной в полгода.
Если кому интересно — исходный код и материалы проекта выложены на Гитхабе.
На этом история не заканчивается. После первого поучительного опыта мы сделали еще несколько версий платы.
Вторая версия была в двух вариантах — с шестью светодиодами по кругу и четырьмя (один в центре) и отличалась тем, что тут мы использовали SO-корпусировку чипа. Но и тут не обошлось без эксцессов — при разводке платы из-за путаницы в названиях была выбрана неправильная контактная площадка и в результате ножки чипа для монтажа пришлось поджимать под корпус. Помимо этого вывели контакты для прошивки и тройку «питание-сигнал-земля» на отдельные площадки, для возможности добавить еще светодиодов в качестве выносного элемента.
Помимо этого вскрылся еще один неприятный недостаток — мастер очень просила сделать плату идеально круглой (в нашей версии она больше походила на прямоугольник с закругленными углами). Сделали, параллельно проверив китайскую промышленность на производстве плат тоньше миллиметра в толщину. Полученный результат полностью удовлетворил — заменив держатели на предназначенные для батареек CR2016 мы получили еще более лекговесную платформу, из которой уже можно сделать, например, сережки.
Для прошивки этих устройств использовался программатор а-ля «колхоз» на пого-пинах. Как оказалось, процедура загрузки прошивки по-прежнему оставалась нетривиальной — нужно было прижать плату достаточно плотно к пинам, что с первого раза удавалось не сразу.
Апофеозом развития этой ветки платформы стала третья и последняя версия. В ней контакты для прошивки были выведены на отдельный гибкий шлейф, заказана дополнительная плата под программатор. На этой итерации мы оценили PCBA сервис Seeedstudio, которые изготавливали для нас печатные платы — силами китайской промышленности платы приехали со смонтированным большинством элементов, на месте мы напаивали контактный разъем под программатор, держатель батарейки, фоторезистор и светодиоды — они (кроме фоторезистора) не нашлись в доступных для монтажа компонентах.
Результат выглядит примерно так:
В общем и целом, проект получился интересный. Как оказалось, даже кажущиеся простыми вещи могут таить внутри весьма непростые нюансы, что наглядно и было показано.
Автор: Максим