Русский
Русский
English
Статистика
Реклама

Сделай сам

50 оттенков жёлтого. Часть 2

03.04.2021 16:09:23 | Автор: admin
Продолжим подкреплять теорию практикой. В первой части статьи я рассказал о своих ранних экспериментах по отбеливанию пластмассы успешных и не очень. Несмотря на большой объём материала, там, по сути, был рассмотрен лишь один вариант с использованием жидкой перекиси водорода и солнечного света. И хотя результаты получились обнадёживающие, у описанного метода есть масса ограничений.




Сегодня мы поговорим о том, как эти ограничения преодолеть.

Глава четвёртая. Мы не можем ждать милостей от природы!


А что, у вас солнца совсем не бывает?
Бывает, но я в тот день болел

Полагаться на такой редкий в наших краях ресурс, как солнце, было бы недальновидно. Следующая партия пожелтевших деталей появилась у меня глубокой осенью, когда солнце стало низким и тусклым, и эффективность отбеливания упала почти до нуля. Да и в любом случае хотелось иметь полный контроль над процессом и не зависеть от внешних условий. А значит, нужно было обзавестись искусственными источниками УФ-излучения.

Поначалу я думал, что для этого необходимы лампы, дающие жёсткий ультрафиолет (типа бактерицидных). Но из роликов 8 bit Guy и других энтузиастов я узнал, что работают и самые простые светодиодные ленты и прожекторы вроде тех, что используют на дискотеках. Мой выбор пал на светодиодный прожектор Anjoet с Aliexpress.


10-ваттный Светильник выпускного вечера обошёлся мне примерно в 1300 рублей

В пару к холодному полупроводниковому источнику света было решено также купить тёплый ламповый (да простят меня за эксплуатацию этого набившего оскомину мема). Им стал Camelion FT8-18W Blacklight Blue G13.


Помимо собственно люминесцентной лампы понадобится также плафон с блоком питания

Для лампы Camelion заявлена длина волны 365 нм, а для прожектора Anjoet и вовсе 395. Это очень близко к диапазону видимого света (от 400 нм), так что у меня были большие сомнения в эффективности ламп.
Внимание! Яркий ультрафиолет, даже из ближнего диапазона, совсем не полезен для глаз. Выключайте лампы, когда находитесь рядом, либо используйте защитные очки.

Первый эксперимент было решено провести с очень старой и очень жёлтой рамкой от корпуса 80-х годов. К сожалению, у меня потерялось фото в состоянии до, но она была ещё желтее, чем крайняя правая заглушка отсюда:



За исключением источника ультрафиолета, всё осталось как и в прошлых опытах: 15-процентная перекись водорода в полиэтиленовом пакете. Самым удобным местом для проведения эксперимента оказалась ванная. Легко закрепить лампу, есть розетка, не страшно пролить перекись, да и синий свет никому не мешает.


Баланс белого на камере сходит с ума

А что до невозможности пользоваться ванной по прямому назначению тут остаётся разве что вспомнить классику с Баша.
xxx: знал я одного чувака
xxx: он в 98 году купил пень на 350мгц
xxx: налил в ванну глицерина
xxx: разобрал холодильник, вынул катушки, сунул в ванну
xxx: охладил глицерин почти до нуля
xxx: положил в него комп
xxx: и разогнал до 1.3ггц
yyy: А где же он мылся тогда?
xxx: после всего что я написал ты ещё думаешь что он мылся?!

После четырёх часов экспонирования оказалось, что если результат и есть, то едва-едва заметный. Для ускорения процесса я решил подогреть перекись примерно до 40C, для чего поместил корытце с пакетом внутрь большого контейнера с тёплой водой (кто читал прошлую статью, помнит о том, к чему может привести подогрев без водяной бани). Заодно я добавил в пакет ещё одну заглушку.



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



Но после того, как я включил прожектор, в ультрафиолетовых лучах проступили таинственные письмена!


Мене, мене, текел, упарсин

Интересно, сколько лет потребовалось на экспонирование этой фотографии? Уже давно нет ни наклейки, ни железа, о котором она сообщала, а корпус по-прежнему уверен, что внутри у него стоит процессор Intel.
После стольких лет?
Всегда.

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



И, к моему огромному удивлению, уже через пару часов рамка заметно побелела! А ещё через четыре часа её цвет восстановился полностью.


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

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

Глава пятая. Купаться запрещено!



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

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

  • 500 мл перекиси водорода с концентрацией от 10 до 15%;
  • 2 столовых ложки с горкой ксантановой камеди;
  • 1 чайная ложка глицерина;
  • 1/4 чайной ложки усилителя для стирки Oxy.

Первые три компонента предлагается смешивать в блендере, а усилитель для стирки добавлять непосредственно перед использованием. Я не сомневаюсь, что этот рецепт работает, однако можно поступить проще.

Для нужд парикмахеров выпускается осветляющий гель на основе всё той же перекиси водорода, который называют оксигентом. Он идеально подходит для наших целей: концентрация от 3 до 12% и оптимальная густота, которая позволяет его легко наносить, но не даёт ему стекать с поверхности. Я использовал 12-процентный гель от фирмы Estel, но наверняка сгодится и любой другой.


Литровая бутыль стоит около 400 рублей

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

Первой на отбеливание оксигентом традиционно отправилась заглушка, и результат не заставил себя долго ждать. Ну а где заглушка, там и весь корпус! Увы, я снова не нашёл фото до отбеливания, но можете поверить мне на слово, что передняя панель была достаточно жёлтой.


Теперь пластиковая панель не отличается по цвету от порошковой краски на стенках

Убедившись, что гель работает, я взялся за более сложный случай старый сканер, который почти 20 лет стоял одним боком к окну. Легко заметить чёткую границу, проходящую вдоль левого края.



Это очень интересный объект для эксперимента, поскольку исходный цвет пластмассы далёк от белого. Те, кто читал предыдущую часть статьи, помнят, что там я спорил с тезисом, будто перекись лишь осветляет пластмассу. Я придерживаюсь мнения, что она в первую очередь именно убирает желтизну, а эффект осветления выражен куда слабее. Так что будет лишняя возможность проверить, кто прав.


Сравнение боковин для наглядности

Я надел хозяйственные перчатки и щедро обмазал край сканера гелем. Малярный скотч выполняет двойную функцию уменьшает воздействие на менее пожелтевшие участки и не даёт гелю затечь в щель между пластмассой и стеклом.



Конечно, идеальной равномерности нанесения добиться сложно, поэтому я рекомендую каждые 10 минут аккуратно разгонять рукой пузырьки под плёнкой и по-другому распределять излишки геля.

Ну а теперь включаем прожекторы (к этому моменту их стало два), и в ванной начинается аквадискотека.


Старый штатив для фотоаппарата прекрасно подошёл на роль держателя

Через шесть часов я стёр гель и увидел под ним искомый серо-синий цвет.


Похоже, что боковины больше не различаются по цвету

У геля есть такая особенность, что после его снятия пластмасса выглядит будто бы немного влажной. Примерно через полчаса этот эффект уходит, и она приобретает тот цвет, который останется надолго. Отбеливание получилось не на 100% равномерным, но чтобы заметить это, нужно сильно приглядываться.


Как я и предполагал, гель убрал желтизну, а не просто осветлил пластик

Ну что ж, метод дважды доказал свою работоспособность. Так не замахнуться ли нам на что-нибудь более масштабное? Мне давно мозолила глаза пожелтевшая панель на стиральной машинке. Она стоит на кухне возле окна, а окно выходит на южную сторону. В итоге за пять лет на панели образовалось заметное пятно.


Кювета явно сделана из другой пластмассы, поскольку пожелтела значительно меньше

Поначалу я нанёс гель только на сильно повреждённый участок основной панели.


Снимки на телефон лучше передают атмосферу

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


Результат в наглядном сравнении

Не скажу, что желтизна ушла полностью, но разница очевидна.

Выводы кратко:


  1. Светодиодные ультрафиолетовые прожекторы хорошо подходят для отбеливания, а вот эффективность люминесцентных ламп под вопросом.
  2. Парикмахерский гель для осветления волос эффективен, но требует аккуратности в использовании.
  3. Гель обязательно нужно накрывать плёнкой. Рекомендуется также периодически его помешивать и разгонять пузырьки.
  4. Лучше покрывать гелем всю деталь целиком, даже если она пожелтела не везде. Белее белого вы пластмассу всё равно не сделаете, а вот если получится ступенька, не факт, что от неё удастся легко избавиться.
  5. Если ступенька всё же появилась, не пытайтесь исправить её, нанося гель только на более жёлтую часть. Скорее всего, в результате у вас будет две ступеньки. Покрывайте всю деталь.

В этой статье я рассказал не обо всех своих опытах, но в противном случае её объём вышел бы совсем запредельным. В дальнейшем я планирую отточить метод и собрать что-то вроде установки для отбеливания, которая давала бы предсказуемый результат для деталей любого размера, которые только можно встретить в компьютерной технике. Так что, вполне возможно, когда-нибудь вы увидите и третью часть этого материала.

Ну а пока спасибо за внимание и успехов! Пусть ретро-железо радует вас первозданным видом и приносит те же эмоции, что и много лет назад.

Подробнее..

Перевод Газоразрядный таймер приготовления эспрессо

07.04.2021 12:05:29 | Автор: admin


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

Я недавно познакомился с ресурсом Далибора Фарни, который самостоятельно освоил технологию создания газоразрядных ламп. И насколько мне известно, он единственный, кто до сих пор такие лампы собирает. Если вам интересно, то Далибор также загрузил интересное видео их сборки.

Посмотрев его изделия, я захотел собрать таймер для эспрессо-машины. Это может звучать несколько эзотерично, но продолжительность приготовления шота играет важную роль, и разница между 20, 25 и 30 секундами оказывается значительна. А поскольку обычно на этот процесс уходит около 25, мне хватит двух газоразрядных ламп, которые смогут отображать до 99 сек.

Результат


Вот, что в итоге получилось:














Сборка


При реализации проекта я столкнулся с двумя основными трудностями:

  • Как определить, работает ли помпа, чтобы знать, когда начинать и заканчивать отсчет.
  • Как коммутировать 170В на 20 анодов (по 10 на каждую лампу).

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

В довершение ко всему, один близкий друг предоставил свою мастерскую и дал некоторые дельные советы, посодействовав в сборке удачного корпуса. Еще раз спасибо, Нилс!

Обнаружение магнитного поля


Моей первой мыслью было использовать магнитометр, применяемый в смартфонах в качестве датчика компаса. Я попробовал две микросхемы: MAG3110 и QMC5883. К сожалению, обе они работают с передискретизацией и не дают возможности получить необработанный сигнал. Я мог видеть изменение величины, но дальнейшая обработка сигнала представлялась невозможной. В итоге единственный вариант применения одной из этих микросхем предполагал определение порогового значения. Я же чувствовал, что можно придумать решение получше.

Поэтому, вооружившись электрической отверткой, решил самостоятельно собрать антенну/катушку, толком не понимая, что вообще делаю. Тем не менее подключение получившейся детали к усилителю и осциллографу дало обнадеживающие результаты. Пик сигнала наблюдался на 50Гц, что выглядело вполне правдоподобно.



Порадовавшись успеху, я сделал выборку значений, выполнил преобразование Фурье и отразил результаты на графике.


Помпа активна между 15 и 5 (время в неизвестных единицах). Очевидно, что на графике присутствует погрешность, так как пик фактически приходится на 50Гц, а не 53.125Гц. Также наблюдаются небольшие всплески кратные этой частоте.

Чтобы конкретно определить, когда вести отчет, а когда нет, я решил подогнать известный частотный спектр к измеряемому, вычислить квадратичную ошибку и все такое. Но на деле получилось все это весьма скверно. Вышло, что самый надежный способ, наоборот, предполагает простое определение порога в 50Гц. Теперь я использую Arduino nano, который постоянно делает выборку, выполняет быстрое преобразование Фурье и проверяет порог 50Гц, определяя, когда начинать и заканчивать отсчет.

Управление двумя лампами


Чтобы не раздувать размер устройства и сохранить элегантность, я решил использовать для переключения ламп не 20 транзисторов, а микросхему. В итоге я нашел последовательно-параллельный преобразователь HV5623, в котором используется 32-разрядный регистр, способный коммутировать 220В по 32-м каналам. Для моего устройства этого вполне достаточно, так как всего в нем используется 2 х 10 катодов, получающие по 170В каждый. Поскольку эта микросхема доступна только в очень мелком корпусе, и припаять ее вручную мне показалось нереальным, я сконфигурировал и заказал готовую коммутационную плату.



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


Электроника


Плата и разъемы под лампы:





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

На ней разместились:

  • Arduino nano;
  • повышающий преобразователь из 5В в 170В (куплен на eBay);
  • коммутационная плата под HV5623 для управления лампами;
  • операционный усилитель на основе LM358 для усиления тока, индуцируемого магнитным полем.

Итоговый тест всей электроники:


Подробнее..

Можно ли сделать деревянный стеллаж без инструмента используя только отвертку и 3D-принтер? Легко!.

14.06.2021 12:13:27 | Автор: admin


Приветствую!Я хочу поделиться с вами очередной своей разработкой, которая позволяет сделать надежную, крепкую мебель и при этом без необходимости иметь инструмент, пылить в доме/квартире и собрать её буквально за один день.Эта статья для аудитории Хабра, которая любит DIYи получает удовольствие от процесса создания вещей своими руками. Осторожно, в статье много изображений и фотографий.

Началось все с


Попросила меня супруга сделать небольшой открытый стеллаж на кухню чтобы всё было недалеко и при этом у всего было своё место. Подумал я, что делать просто ящик прямоугольной формы не хочу это не красиво и будет выглядеть как коробка Рядом с местом предполагаемой установки стоит буфет Хемнэс от ИКЕА. Посмотрел я на него и мне понравился стиль его боковых стенок по углам брусок, а в середине филёнка.
Да, это не стеллаж, но на этой фотографии лучше видно то, о чем я пишу:

Ну думаю надо делать по такой технологии,однако почти сразу понял, что данная сборка возможна только если фрезеровать ножки и вклеивать в паз филенку.У меня есть фрезер и место где это можно сделать, но работать с нимя жуть как не люблю, а люблю работать с SolidWorks и разрабатывать что-либо для печати на 3D-принтере. Поэтому было принято решение разработать детали, с помощью которых можно собрать аналогичную конструкцию, но без фрезеровки, сверления, запилов и прочей грязной работы. Наша цель максимально снизить необходимость в обработкедерева на территории дома.

Распиловка это, на мой взгляд, самая лучшая услуга оказываемая строительными магазинами и почему бы нам её не использовать? Поэтому всю задачу по обработке древесины нужно свести к распиливанию и делать это мы будем сразу в магазине. В итоге домой привозим уже готовые детали, которые нужно будет просто собрать.

Разработка


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

Витоге с чем нам придется работать:

  • Толщина которая нас интересует 18 мм
  • Доступные ширины 200 / 250 / 300 / 400 / 500 / 600 мм
  • Длина от 600 до 3000 мм
  • Брусок на ножки взят такой, как у Хемнэс 40х40 мм

Задача и вводные данные ясны, оттягивать не стоит, нужно делать.

За типовой размер взятыХ-мм на филенку и Х+50 мм на полку. Сделано это неспроста. Допустим мы используем филенку размером 200 мм, соответственно общая ширина боковой стенки будет равна 280 мм. Делать полку 300 мм не получится, так как она будет шире самой стенки и будет выпирать. Во вторых, красивее, когда полка чуть утоплена внутрь, а не заподлицо с боковой стенкой это создает эффект объема и убирает эффект ящика. Соответственно среди типовых размеров в продаже у нас есть щиты размером 250 мм. Вот его мы и будем использовать для разработки общей конструкции деталей.

Если же мы хотим стеллаж глубиной 380 мм, то мы берем щит 300 мм на филенку и 400 мм на полки, НО! в этом случае нам просто нужно при покупке распилить щит вдоль, отрезав 50 мм, а потом поперек на длину равную длине полки.

Некоторое время на работу и в итоге у меня получилсянабориз6 уникальных деталей, которые позволяют собрать конструкцию любой длины. Некоторые детали различны для стартовой/финишнойипромежуточныхстенок. Схема стеллажа, расположения деталей и их названия показаны на схеме ниже:


Деталь panel_rack_bracingкрепится к каждой полке и нужна для придания конструкции жесткости, а также связывания нижней части. Без нее ножки не разъедутся, но конструкция не получится крепкой.
Детали в крупном виде под спойлером.Подписывать каждую не буду, они легко находится на схеме выше.

Фото деталей крупно








Как это работает


Сейчас я опишу технологию сборки на примере небольшой конструкции.
Допустим мы хотим получить столик-стеллаж глубиной 300 мм, высотой 1000 мм и длиной 1200 мм. В стеллаже должно быть 6 полок.

Покупаем в строительном магазине (Леруа / Максидом / OBI / ):

  • брусок на ножки 40х40х2000мм в кол-ве 4 штуки
  • щит на столешницу 12х300х1200 мм (стандартный размер)
  • щит на филенку 18х200х800 мм в кол-ве 3 штуки
  • щит на полки 18х250х2000 мм

Набираем это всё, идем на распиловку ипросим распилить каждый брусок наножкипо 980 мм, а щит для полок на 6 штук по 330 мм.



Там же берем саморезы с пресс-шайбой (клопы) размером 4,2х13 и саморезы с потайной головкой 4,0х30. Вторых нужно будет равным количеству нижних полок умноженное на 2. А вот первых нужно будет намного больше. Считать лучше из общего количества пластиковых деталей умноженного на 2,5.

Распечатываем на 3D-принтере:

  • 40x40_top 8 шт
  • 40x40_btm_right_shelf 2 шт.
  • 40x40_btm_left_shelf 2 шт.
  • 40x40_btm_2sides_shelf 4 шт.
  • panel_rack_bracing 6 шт.
  • rack_holder 12 шт.






На бруски надеваем верхний элемент, прикручиваем к бруску. Затем нижний (в соответствии со схемой), а в середину филенку. Всё плотно прижимаем и скручиваем. Получается такая конструкция стенки:





Далее к середине нижних полок прикручиваем держательpanel_rack_bracing



Столешницу лучше разметить на полу и через специальные отверстия прикрутить к ней ножки, а затем нижние полки.Всё, изделие собрано!Процесс сборки занимает реально очень мало времени у меня на сборку данного стеллажа ушло не более 30 минут. Из необходимого инструмента только шуруповерт или отвертка.

Вот что у нас получилось и как оно выглядит в интерьере



Дополнительныевозможности


Первый плюсплюс данной конструкции мы рассмотрели выше нам ничего не нужно пилить / сверлить / фрезеровать. При определенных длинах полок даже нет необходимости в распиловке в магазине.

Второй же плюс в том, чтоданная системапозволяет собирать стеллажи любой длины. Ранее мы собрали стеллаж длиной 1,2 м, однако мы легко можем собрать такой же стеллаж но длиной 2, 3 и даже 5 и более метров (при условии соединения столешницы на штапики). При этом жесткость конструкции будет аналогичной.

И наконец третий плюс сборка стеллажа в высоту и возможность делать комбинированные сборки, когда одна секция ниже другой. Сейчас я собираю конструкцию в спальню дочери, где одна секция будет глубиной 380 мм (филенка 300 мм, полки 350 мм), а вторая 280 мм. При этом глубокая секция высотой 2,7 м (обязательно крепить к стене или потолку), а низкая 1,6 м.

Большая секция в процессе сборки:







Внимательный читатель наверное уже заметил, что здесь появилась новая, 7/8/9-я детали. Эти деталидержат филенку в середине её длины, центрируют относительно ножки и притягивают к ней. Они немного отличаются от нижних стартовых отсутствием поддерживающей полочки.

Выглядят они следующим образом:




Собственно думаю на этом статью можно закончить и поделиться с вами моделями.
Полный набор файлов для печати выложены на Thingiverse

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


Подробнее..

Перевод Как за 60 создать систему распознавания лиц с помощью Python и Nvidia Jetson Nano 2GB

02.03.2021 16:05:07 | Автор: admin
Теперь с помощью алгоритмов распознавания лиц и Python вы сможете с лёгкостью отслеживать всех людей, которые приближаются к вашей двери.Теперь с помощью алгоритмов распознавания лиц и Python вы сможете с лёгкостью отслеживать всех людей, которые приближаются к вашей двери.

Новый набор инструментов для разработчиков Nvidia Jetson Nano 2GB представляет собой одноплатный компьютер с графическим ускорителем стоимостью 59$, работающий под управлением программного обеспечения с искусственным интеллектом.

Производительность, которую вы можете получить от одноплатного компьютера за 59$ в 2020 году, просто потрясающая. Давайте попробуем использовать этот продукт, чтобы собрать простой вариант домофона, который будет отслеживать всех людей, подходящих ко входной двери вашего дома. С помощью алгоритма распознавания лиц система мгновенно узнает, приближался ли когда-нибудь в прошлом к вашей двери этот человек, даже если в прошлый визит он был одет по-другому.


Что такое Nvidia Jetson Nano 2GB?

Jetson Nano 2GB это одноплатный компьютер с четырёхъядерным ARM-процессором 1,4 ГГц и встроенным графическим процессором Nvidia Maxwell. Это самая дешёвая модель Nvidia Jetson практически того же класса, что и одноплатный компьютер Raspberry Pi.

Компьютер Nvidia Jetson Nano 2GB имеет много общего с Raspberry Pi оба представляют собой одноплатные компьютеры на ОС Linux. Отличие состоит в том, что с целью ускорения работы моделей глубокого обучения модуль Nvidia Jetson оснащён 128-ядерным графическим процессором Nvidia и поддерживает программно-аппаратную архитектуру параллельных вычислений (CUDA).Компьютер Nvidia Jetson Nano 2GB имеет много общего с Raspberry Pi оба представляют собой одноплатные компьютеры на ОС Linux. Отличие состоит в том, что с целью ускорения работы моделей глубокого обучения модуль Nvidia Jetson оснащён 128-ядерным графическим процессором Nvidia и поддерживает программно-аппаратную архитектуру параллельных вычислений (CUDA).

Если вы уже знакомы с линейкой продуктов Raspberry Pi, то вам всё должно быть понятно. Единственным различием двух одноплатных компьютеров является то, что в Jetson Nano установлен графический процессор Nvidia. Компьютер может запускать приложения с ускорением вычислений на графических процессорах (например, модели глубокого обучения) намного быстрее, чем одноплатный Raspberry Pi, у которого нет графического процессора, способного работать с большинством технологий глубокого обучения.

Наборов инструментов для разработчиков с ИИ и модулями ускорителя существует множество, однако у продукта Nvidia есть перед ними одно важное преимущество он непосредственно совместим с библиотеками ИИ для настольных систем и не требует преобразования моделей глубокого обучения ни в какие специальные форматы для их запуска. Для ускорения вычислений на графическом процессоре в продукте Nvidia используются те же самые библиотеки CUDA, что и практически во всех базирующихся на Python системах глубокого обучения. Другими словами, вы можете взять существующую программу глубокого изучения на Python и запустить её на Jetson Nano 2GB (лишь немного её изменив) и в результате получить довольно сносную производительность (при условии, что ваше приложение сможет работать на 2 Гб оперативной памяти). Возможность взять код в Python, который был написан для мощнейшего сервера, и практически без изменений перенести его на автономное устройство стоимостью 59 долларов это ли не заманчиво?

В новом наборе инструментов Jetson Nano 2GB реализованы некоторые новые функции, которых не было в предыдущих версиях оборудования Nvidia. В первой модели Jetson Nano по непонятной причине не была реализована поддержка WiFi, данная же модель поставляется с подключаемым модулем WiFi, поэтому вам не придётся возиться с ethernet-кабелями. В новом модуле также был заменён вход по питанию установлен более современный порт USB-C, а также усовершенствованы некоторые возможности программного обеспечения. Теперь вам не нужно беспокоиться, например, о включении файла подкачки, модуль сделает это за вас.

Приобретение простого в использовании аппаратного устройства с настоящим графическим процессором обойдется вам менее чем в 60$ этот шаг со стороны Nvidia следует признать достаточно агрессивным. По всей видимости, этим они желают показать, что хотят составить прямую конкуренцию Raspberry Pi и пытаются захватить рынок образования / продуктов для программистов-любителей. Будет весьма интересно наблюдать, как на это отреагирует рынок.

Что ж, давайте приступим к сборке нашей системы

Как и при сборке любых аппаратных устройств, вначале нужно подобрать все необходимые детали:

1. Одноплатный компьютер Nvidia Jetson Nano 2GB (59$).

Продукт доступен для предварительного заказа (по состоянию на 5 октября 2020 г.). Сам продукт, как ожидается, будет выпущен в конце октября. Я не знаю, какую цену установит Nvidia на продукт после его релиза, но следует иметь в виду, что предыдущая модель Jetson Nano в течение нескольких месяцев после релиза была в дефиците.

Полная открытость: модуль Jetson Nano 2GB мне достался бесплатно за рецензию на продукты Nvidia, однако с Nvidia у меня нет ни финансовых, ни редакционных отношений. Вот как получилось, что мне удалось составить данную инструкцию до выхода продукта.

2. Адаптер питания с разъёмом USB-C (возможно, такой у вас уже есть?).

В новом компьютере Jetson Nano 2GB для питания используется разъём USB-C. Адаптер питания в комплект не входит, но у вас наверняка завалялся где-то лишний.

3. Камера: либо веб-камера с USB-выходом (возможно, у вас такая уже имеется?), либо камера Raspberry Pi Camera Module v2.x (прибл. 30$).

Если вы захотите поместить небольшую камеру в чехол, отличным выбором станет модуль Raspberry Pi Camera v2.x (примечание: модуль v1.x работать не будет). Приобрести их можно на Amazon или у множества реселлеров.

Некоторые веб-камеры с USB-выходом, например Logitech C270 или C920, прекрасно работают с Jetson Nano 2GB, так что, если у вас уже есть такая камера, можно, не задумываясь, использовать её. Ниже приводится неполный перечень USB-камер, которые должны работать.

Прежде чем торопиться покупать что-то новое, сначала проверьте: а может быть, вполне подойдут уже имеющиеся у вас USB-устройства? Не на всех из них может быть реализована поддержка драйверов Linux, но, возможно, вам удастся найти устройство с соответствующей поддержкой. Я подключил обычный адаптер HDMI-на-USB за 20$ (заказывал на Amazon), и он подошёл идеально. В качестве источника видеосигнала по HDMI мне удалось задействовать свою высококлассную цифровую камеру, причём без каких бы то ни было дополнительных настроек. Красота!

Вам понадобятся ещё несколько других компонентов, но, я полагаю, все они у вас уже есть в наличии:

  • Карта памяти microSD, на ней должно быть не менее 32 ГБ свободного пространства. На неё мы установим Linux. Если у вас имеется любая карта microSD, можете использовать её.

  • Устройство чтения карт microSD, с помощью которого мы установим на компьютер программное обеспечение Jetson.

  • Проводная USB-клавиатура и проводная USB-мышь. Эти устройства будут использоваться для управления Jetson Nano.

  • Любой монитор или телевизионный экран, на которые можно напрямую подавать сигнал HDMI (не через переходник HDMI-на-DVI). Монитор будет использоваться для визуального контроля ваших действий. Монитор вам потребуется для первоначальной настройки Jetson Nano (даже если потом Jetson Nano будет запускаться без монитора).

Загрузка программного обеспечения Jetson Nano 2GB

Перед подключением компонентов к Jetson Nano необходимо вначале загрузить образ программного обеспечения для Jetson Nano. Стандартный образ программного обеспечения Nvidia включает в себя Ubuntu Linux 18.04 с предустановленными Python 3.6 и OpenCV.

Ниже приводится инструкция по загрузке программного обеспечения Jetson Nano на SD-карту:

  1. Скачайте Jetson Nano Developer Kit SD Card Image на сайте Nvidia.

  2. Скачайте Etcher программу, которая запишет образ программного обеспечения Jetson на SD-карту.

  3. Запустите программу Etcher и используйте её для записи загруженного образа Jetson Nano Developer Kit SD Card Image на SD-карту. Это займёт приблизительно 20 минут.

Пора распаковывать остальное оборудование!

Подключаем всё что можно

Прежде всего выньте модуль Jetson Nano 2GB из коробки:

Первый шаг: вставьте карту памяти microSD. Слот для карт памяти microSD хорошо скрыт, и его можно сначала не заметить, он находится на задней стороне под нижней частью радиатора:

Затем к одному из USB-портов необходимо подключить входящий в комплект WiFi-адаптер с разъёмом USB:

После этого подключается камера.

Если используется модуль камеры Raspberry Pi v2.x, его необходимо подсоединить с помощью ленточного соединительного кабеля. Найдите разъём для ленточного соединительного кабеля на Jetson, поднимите крышку разъёма, вставьте в разъём кабель и закройте крышку разъёма. Убедитесь, что металлические контакты на ленточном соединительном кабеле смотрят внутрь радиатора:

Если используется веб-камера с разъёмом USB, просто подключите её к одному из USB-портов, порт ленточного кабеля для этого не нужен.

Теперь подключаем всё остальное:

  • подключите мышь и клавиатуру к USB-портам;

  • подключите монитор с помощью HDMI-кабеля;

  • подключите кабель питания USB-C, чтобы система могла загрузиться.

Если используется модуль камеры Raspberry Pi, в результате у вас получится примерно такая конструкция:

Если используется источник видео с USB, конструкция получится примерно такая:

При подключении кабеля питания начнётся автоматическая загрузка Jetson Nano. Через несколько секунд на мониторе появится экран инициализации Linux. Следуйте инструкциям на экране для создания учётной записи и подключения к WiFi. Все действия будут элементарные.

Установка необходимых библиотек Linux и Python для распознавания лиц

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

На рабочем столе Jetson Nano откройте окно LXTerminal и выполните следующие команды. Если система запросит пароль, нужно будет ввести тот же пароль, который был указан при создании пользовательской учётной записи:

sudo apt-get updatesudo apt-get install python3-pip cmake libopenblas-dev liblapack-dev libjpeg-dev

Вначале обновляем apt стандартный инструмент для установки программного обеспечения Linux, его мы будем использовать для установки других необходимых нам системных библиотек. Затем устанавливаем несколько Linux-библиотек, без которых наша программа не будет работать (эти библиотеки не предустановлены).

В последнюю очередь устанавливаем библиотеку Python face_recrecognition и её зависимости, в том числе библиотеку машинного обучения dlib. Это можно сделать автоматически, запустив единственную команду:

sudo pip3 -v install Cython face_recognition

Поскольку на платформе Jetson отсутствуют предварительно скомпилированные копии dlib и numpy, данная команда скомпилирует эти библиотеки из исходного кода. Вся операция займёт почти час, поэтому у вас будет время, чтобы пообедать.

Когда процесс завершится, ваш компьютер Jetson Nano 2GB с графическим ускорителем и программно-аппаратной архитектурой параллельных вычислений (CUDA) будет готов к распознаванию лиц. Теперь переходим к самому интересному!

Запуск демонстрационной версии приложения распознавания лиц для домофона

Для быстрого распознавания лиц с помощью dlib я создал специальную библиотеку Python face_recognition. Данная библиотека позволяет обнаруживать лица, преобразовывать каждое обнаруженное лицо в уникальное закодированное изображение лица, а затем сравнивать друг с другом несколько закодированных изображений и понимать, соответствуют ли они одному и тому же человеку или разным людям все эти операции реализуются всего парой строк кода.

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

Сначала скачайте код. Полный код с комментариями я разместил здесь, однако вы можете поступить ещё проще загрузить код на Jetson Nano из командной строки:

wget -O doorcam.py tiny.cc/doorcam2gb

В верхней части программы необходимо отредактировать строку кода, чтобы указать, используете ли вы USB-камеру или модуль камеры Raspberry Pi. Файл можно изменить таким образом:

Вставка с кодомСледуйте инструкциям, затем сохраните код, выйдите из GEdit и запустите код:

gedit doorcam.py

На рабочем столе появится окно с видео. Каждый раз, когда новый человек будет подходить к камере, система будет регистрировать его лицо и рассчитает продолжительность нахождения такого человека перед дверью. Если один и тот же человек уйдет и вернётся через 5 минут или позже, система зарегистрирует новый визит и заново рассчитает продолжительность. Чтобы в любое время выйти из программы, нужно нажать на клавиатуре клавишу 'q'.

Приложение автоматически сохраняет информацию о каждом обнаруженном им лице в файле под названием known_faces.dat. При повторном запуске программа будет использовать эти данные как данные о прошлых посетителях. Чтобы очистить список известных лиц, нужно просто выйти из программы и удалить этот файл.

Превращаем систему в автономное аппаратное устройство

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

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

7-дюймовый сенсорный HDMI-экран, способный запитываться от USB-порта:

И обычный зарядный батарейный блок (power bank) с выходом USB-C для подачи питания:

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

Всё работает идеально. Сенсорный экран работает как обычная USB-мышь без дополнительных настроек. Есть единственный недостаток: если Jetson Nano 2GB станет потреблять больше энергии, чем может выдавать USB-аккумулятор, быстродействие графического процессора может снизиться. Но и в том, и в другом случае результаты получаются вполне удовлетворительные.

Проявив немного выдумки, вы можете практически без стартовых расходов создавать собственные проекты, используя в качестве прототипа данное аппаратное устройство для проверки жизнеспособности собственных идей. И, если вы когда-нибудь задумаете организовать производство чего-либо в значительных количествах, помните, что существуют серийные версии одноплатных компьютеров Jetson, которые можно приобрести и использовать для создания реально работающего аппаратного продукта.

Обзор кода Python для домофона

Хотите понять, как работает код? Давайте разберёмся.

Сначала в код необходимо импортировать библиотеки, которые мы собираемся использовать. Самые важные из них OpenCV (в Python она называется cv2), которую мы будем использовать для считывания изображений с камеры, и face_recognition, которую мы будем использовать для обнаружения и сравнения лиц.

import face_recognitionimport cv2from datetime import datetime, timedeltaimport numpy as npimport platformimport pickle

После этого нам нужно указать, как будет осуществляться доступ к камере, так как процесс получения изображения с модуля камеры Raspberry Pi работает иначе, чем процесс получения изображения с USB-камеры. Для этого нужно просто изменить эту переменную на True или False, в зависимости от оборудования:

# Set this depending on your camera type:# - True = Raspberry Pi 2.x camera module# - False = USB webcam or other USB video input (like an HDMI capture device)USING_RPI_CAMERA_MODULE = False

Затем нужно задать ряд переменных, в которых будут храниться данные о людях, которые приближаются к камере. Эти переменные будут выступать в качестве простой базы данных известных посетителей.

known_face_encodings = []known_face_metadata = []

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

У нас имеется функция, сохраняющая и загружающая данные об известных лицах. Это функция сохранения (save):

def save_known_faces():    with open("known_faces.dat", "wb") as face_data_file:        face_data = [known_face_encodings, known_face_metadata]        pickle.dump(face_data, face_data_file)        print("Known faces backed up to disk.")

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

Всякий раз, когда наша программа обнаружит новое лицо, мы вызываем функцию для добавления этого лица в нашу базу данных известных лиц:

def register_new_face(face_encoding, face_image):    known_face_encodings.append(face_encoding)known_face_metadata.append({        "first_seen": datetime.now(),        "first_seen_this_interaction": datetime.now(),        "last_seen": datetime.now(),        "seen_count": 1,        "seen_frames": 1,        "face_image": face_image,    })

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

Нам также потребуется функция справки, с помощью которой можно будет проверить, имеется ли неизвестное лицо в нашей базе данных лиц:

def lookup_known_face(face_encoding):    metadata = None    if len(known_face_encodings) == 0:        return metadata    face_distances = face_recognition.face_distance(        known_face_encodings,         face_encoding    )    best_match_index = np.argmin(face_distances)    if face_distances[best_match_index] < 0.65:        metadata = known_face_metadata[best_match_index]        metadata["last_seen"] = datetime.now()        metadata["seen_frames"] += 1        if datetime.now() - metadata["first_seen_this_interaction"]                  > timedelta(minutes=5):            metadata["first_seen_this_interaction"] = datetime.now()            metadata["seen_count"] += 1    return metadata

В этой части кода мы делаем несколько важных вещей:

  1. Используя библиотеку face_recogntion, мы проверяем, в какой степени черты неизвестного лица совпадают с чертами лиц всех прошлых посетителей. Функция face_distance()выдаёт численное значение степени сходства между неизвестным лицом и всеми известными лицами чем меньше число, тем больше похожих лиц.

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

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

Остальная часть программы (это основной цикл) бесконечный цикл, в котором мы получаем кадры видео, смотрим на лица на изображении и обрабатываем каждое увиденное лицо. Это основная часть программы. Давайте проверим, как всё работает:

def main_loop():    if USING_RPI_CAMERA_MODULE:        video_capture =             cv2.VideoCapture(                get_jetson_gstreamer_source(),                 cv2.CAP_GSTREAMER            )    else:        video_capture = cv2.VideoCapture(0)

Первый шаг получаем доступ к камере любым способом, подходящим для нашего компьютерного оборудования.

Итак, начинаем захватывать кадры с видео:

while True:    # Grab a single frame of video    ret, frame = video_capture.read()    # Resize frame of video to 1/4 size    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)    # Convert the image from BGR color    rgb_small_frame = small_frame[:, :, ::-1]

Каждый раз при захвате кадра видео мы сжимаем его до 1/4 размера. Этот приём позволяет ускорить процесс распознавания лиц, но это происходит за счёт обнаружения на изображении только лиц большого размера. Но, поскольку мы собираем домофон, распознающий лица только тех людей, которые подошли близко к камере, это не должно нас беспокоить.

Нам также придётся столкнуться с тем, что библиотека алгоритмов OpenCV получает изображения с камеры, в которых каждый пиксель представлен в формате "синий-зеленый-красный", а не в стандартном формате "красный-зеленый-синий". Поэтому перед запуском программы распознавания лиц на изображении необходимо преобразовать формат изображения.

Теперь мы можем обнаружить все лица на изображении и преобразовать каждое лицо в кодированное изображение. Это делается всего двумя строками кода:

face_locations = face_recognition.face_locations(rgb_small_frame)face_encodings = face_recognition.face_encodings(                     rgb_small_frame,                      face_locations                  )

Далее необходимо просмотреть каждое обнаруженное лицо и решить, принадлежит ли это лицо человеку, который был здесь в прошлом, или это был совершенно новый посетитель:

for face_location, face_encoding in zip(                       face_locations,                        face_encodings):metadata = lookup_known_face(face_encoding)    if metadata is not None:        time_at_door = datetime.now() -             metadata['first_seen_this_interaction']        face_label = f"At door {int(time_at_door.total_seconds())}s"    else:        face_label = "New visitor!"        # Grab the image of the face        top, right, bottom, left = face_location        face_image = small_frame[top:bottom, left:right]        face_image = cv2.resize(face_image, (150, 150))        # Add the new face to our known face data        register_new_face(face_encoding, face_image)

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

Теперь, когда мы нашли всех людей и выяснили их личности, можем ещё раз пройтись по всем обнаруженным лицам и нарисовать рамки вокруг каждого лица и добавить к каждому лицу свою метку:

for (top, right, bottom, left), face_label in                   zip(face_locations, face_labels):    # Scale back up face location    # since the frame we detected in was 1/4 size    top *= 4    right *= 4    bottom *= 4    left *= 4    # Draw a box around the face    cv2.rectangle(        frame, (left, top), (right, bottom), (0, 0, 255), 2    )    # Draw a label with a description below the face    cv2.rectangle(        frame, (left, bottom - 35), (right, bottom),         (0, 0, 255), cv2.FILLED    )    cv2.putText(        frame, face_label,         (left + 6, bottom - 6),         cv2.FONT_HERSHEY_DUPLEX, 0.8,         (255, 255, 255), 1    )

Я также хотел вывести в верхней части экрана пополняемый список последних посетителей с указанием количества посещений вашего дома:

Графические значки, представляющие каждого человека, находящегося в данный момент у двери.

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

number_of_recent_visitors = 0for metadata in known_face_metadata:    # If we have seen this person in the last minute    if datetime.now() - metadata["last_seen"]                          < timedelta(seconds=10):# Draw the known face image        x_position = number_of_recent_visitors * 150frame[30:180, x_position:x_position + 150] =              metadata["face_image"]number_of_recent_visitors += 1        # Label the image with how many times they have visited        visits = metadata['seen_count']        visit_label = f"{visits} visits"if visits == 1:            visit_label = "First visit"cv2.putText(            frame, visit_label,             (x_position + 10, 170),             cv2.FONT_HERSHEY_DUPLEX, 0.6,             (255, 255, 255), 1        )

Наконец, мы можем вынести текущий кадр видео на экран и поверх этого кадра вывести все наши пояснения:

cv2.imshow('Video', frame)

Чтобы не утратить данные в случае программного сбоя, через каждые 100 кадров будем сохранять на диск список известных лиц:

if len(face_locations) > 0 and number_of_frames_since_save > 100:    save_known_faces()    number_of_faces_since_save = 0else:    number_of_faces_since_save += 1

Ко всему этому ради порядка добавляем пару строк кода, отключающего камеру при выходе из программы.

Код запуска программы находится в самом низу:

if __name__ == "__main__":    load_known_faces()    main_loop()

Всё, что нам нужно сделать, это загрузить базу данных известных лиц (если такая база имеется) и затем запустить бесконечный основной цикл, который будет считывать изображения с камеры и выводить результаты на экран.

Несмотря на небольшой размер всей программы (всего около 200 строк), она способна обнаруживать посетителей, идентифицировать их личности и отслеживать их каждый раз, когда они повторно подходят к двери.

Интересный факт: похожие системы отслеживания лиц установлены вблизи многих рекламных стендов с объявлениями на улицах и автовокзалах. Система определяет, кого из прохожих интересует данное объявление и как долго люди его изучают. Возможно, полчаса назад это прозвучало бы для вас дико, но вы ты только создали точно такую же систему всего за 60$!

Расширение возможностей программы

Данная программа пример того, как с небольшим количеством кода Python 3, запущенного на дешёвом одноплатном компьютере Jetson Nano 2GB, можно создать мощную систему.

Если вы захотите создать многофункциональную домофонную систему, собранное вами устройство можно доработать, например, таким образом, чтобы оно не просто отображало лицо нового человека на мониторе, но и всякий раз, когда к двери подойдёт новый человек, через Twilio отправляла бы вам текстовое сообщение. Или, например, можно попробовать заменить простую базу данных лиц, хранящуюся в памяти, на реальную базу данных.

Также можно попробовать превратить эту программу во что-то совершенно другое. Схема, при которой осуществляется чтение кадра видео, затем выполняется поиск чего-то конкретного на изображении, затем выполняется соответствующее действие, это основа основ всех видов систем машинного зрения. Попробуйте изменить код и подумайте, где ещё его можно применить! Как вам, например, такая идея каждый раз, когда вы приходите домой и открываете входную дверь, вас будет встречать любимая музыка? Ознакомьтесь с некоторыми другими примерами использования библиотеки Python face_recognition и узнайте, как можно реализовать нечто подобное.

Узнайте больше о платформе Nvidia Jetson

Узнайте больше о том, как создавать устройства с помощью аппаратной платформы Nvidia Jetson, запишитесь на новый бесплатный учебный курс Nvidia по Jetson. Более подробная информация приведена на сайте Nvidia. Вы также также можете посетить отличные общественные ресурсы, например сайт JetsonHacks.

Узнайте подробности, как получить Level Up по навыкам и зарплате или востребованную профессию с нуля, пройдя онлайн-курсы SkillFactory со скидкой 40% и промокодомHABR, который даст еще +10% скидки на обучение.

Другие профессии и курсы
Подробнее..

Перевод Как сделать волоконно-оптическую светодиодную лампу

03.03.2021 18:08:18 | Автор: admin

Ранее я уже делал подобные проекты, но в этот раз я хотел сделать что-то попроще, то, что будет легким в изготовлении, и то, что смогли бы сделать многие из вас. "Механические" части лампы печатаются на 3D-принтере, электронная часть довольно проста, а пластиковое оптическое волокно притягивает взгляд. Сейчас я расскажу, как легко и просто изготовить такую светодиодную лампу.


Шаг 1. Детали, необходимые материалы

Много картинок компонентов

И ещё немного по мелочи: провода, термоусаживаемые муфты для соединений и клей для горячего склеивания.

Если у вас нет опыта работы в tinkercad, прилагаю файлы stl:

Шаг 2. Электронная схема

Как видно из рисунка, cхема устройства чрезвычайно проста.

Шаг 3. Сборка

Много картинок сборки

Я начал с 3D-печати компонентов. Сам процесс занимает довольно много времени, поэтому во время печати компонентов я занимался тем, что соединял друг с другом части светодиодной ленты. Перед установкой паяных деталей желательно проверить правильность работы светодиодов в соответствии с инструкциями, приведёнными на шаге 3 проекта "Волоконная оптика и светодиодные лампы Украшение стен" (единственное, что я изменил, это значение DATA PIN на 5 и NUM_LEDS на 32).

После завершения печати рамы последовала самая сложная часть установка и крепление в каналах рамы лампы четырёх полосок светодиодной ленты по 8 светодиодов в каждой. Я чуть-чуть приподнял защитный пластик самоклеющегося слоя светодиодной ленты и для более точной фиксации использовал несколько волоконно-оптических концов, вставленных через боковые отверстия. Затем я аккуратно снял защитный слой и, прижав ленту к раме, закрепил её. На фотографиях выше эти операции показаны в деталях.

После этой процедуры я вставил в боковые отверстия несколько кусков пластикового оптоволокна. Я вырезал куски как можно более перпендикулярно, используя тот же шаблон, что и в проекте "Волоконная оптика и светодиодные лампы - Украшение стен". Получилось 8 отрезков волокна, всего 16 отрезков разной длины соединяют пары отверстий, находящихся на одинаковом расстоянии от боковых сторон рамы лампы (см. фотографии выше).

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

Шаг 4. Программное обеспечение

Последний шаг в изготовлении лампы загрузка программы на микроконтроллер Arduino. Как видно из фотографий выше, я использовал адаптер с USB-порта на последовательный порт с подключённым чипом FT232RL. Естественно, загрузить код можно с помощью других адаптеров с USB-порта на последовательный порт. О технике программирования модуля Arduino Pro Mini есть много статей в Интернете.

Исходный код программы можно загрузить отсюда: github.

Несколько слов о программе

Лампа работает в трёх основных режимах, которые можно выбирать двойным нажатием на кнопку: режим сплошного цвета (с эффектом "дыхания"), режим палитры и режим эффектов. Однократным нажатием на кнопку в режиме сплошного цвета выбираются различные цвета (9 цветов) также с эффектом "дыхания", в режиме палитры выбираются несколько цветовых палитр, которые можно взять здесь: PaletteKnife для FastLED, а в режиме эффектов выбираются да, вы правы, эффекты:)

Программа представляет собой адаптированные коды из FastLED Breath для создания эффекта "дыхания", коды из palettes with button control для создания различных цветовых палитр и коды из DemoReel100 with button для создания эффектов. Для того чтобы перевести модуль Arduino Pro Mini в спящий режим двойным нажатием на кнопку, я воспользовался инструкциями из следующей статьи. При таком двойном нажатии также сохраняются текущий режим работы и настройки каждого режима работы.

Я воспользовался следующими внешними библиотеками (библиотеки sleep.h и EEPROM.h уже встроены в модуль Arduino): FastLED и ArduinoMultiButton.

Шаг 5. Пользование лампой

Как пользоваться лампой, показано на видео ниже.

Шаг 6. Некоторые выводы

Должен признаться, что я делал эту лампу для себя, так как мне хотелось получить в итоге нечто необычное.

Лампы сделанные по этому проектуЛампы сделанные по этому проекту

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

Например, в режиме цветовой палитры я бы несколько понизил яркость или выбрал бы цветовые палитры с меньшей яркостью. Ещё я добавил бы ряд эффектов. Например, добавить шумовой эффект или запитать светодиодную ленту через транзистор MOSFET, снизив тем самым энергопотребление лампы в спящем режиме. Сейчас, если я выключаю лампу двойным нажатием на кнопку, она потребляет около 30 мА, в рабочем режиме она потребляет максимум 400 мА.

Спасибо что прочитали и удачного крафта!

Узнайте подробности, как получить Level Up по навыкам и зарплате или востребованную профессию с нуля, пройдя онлайн-курсы SkillFactory со скидкой 40% и промокодомHABR, который даст еще +10% скидки на обучение.

Другие профессии и курсы
Подробнее..

Одноэтажный дом какой бы строил для себя (может и вам пригодится)

15.03.2021 02:11:17 | Автор: admin

Приветствую.

Так как в комментариях к предыдщей статье "Строю правильный дом под ключ с микроклиматом без/с автоматизацией по цене квартиры 1. Введение" возникло живое обсуждение одноэтажных домов, то решил написать статью о том, какой одноэтажный дом делал бы для себя (может и вам пригодится).

Дом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этаж

Принцип такой же как и в доме КУБ-8400х8400х8400 - ничего лишнего - максимальная простота и удобство во всем (начиная строительством дома и заканчивая его эксплуатацией) - минимализм во всех смыслах.

Оба дома являются универсальными заготовками:

  • возможно строительство по любой технологии;

  • использование любых материалов;

  • любая внешняя и внутренняя отделки.

Оба дома максимально равнозначны.
Таким образом остаются в основном субъективные нюансы - кому что больше нравится.

Стоимость вышла ~ на 20% выше, энергоэффективность на 10-20% ниже, чем у дома серии КУБ - с другой стороны площадь крыши и террасы увеличились.
В следующей статье сравню эти 2 варианта дома.

ТЭП (выборочные):

  • габариты = 14400 х 9000 х 4200 (возможно 4400 будет оптимальней с учетом парапета);

  • площадь застройки = 130м2 (+ пристройка 58м2; + отмостка 74м2);

  • площадь полезная вутренняя = 98м2 или 103м2;

  • высота потолков в чистоте = 3600мм;

Экспликация помещений:

  • тамбур-прихожая = 8,7м2 / 9,4м2;

  • гостиная-столовая-кухня = 41,4м2 / 42,0м2;

  • СУ 1 = 6,1м2 / 6,4м2;

  • техпомещение = 5,4м2 / 5,6м2;

  • СУ 2 = 5,4м2 / 5,6м2;

  • спальня 1 = 11,0м2 / 11,8м2;

  • спальня 2 = 11,0м2 / 11,8м2;

  • спальня 3 = 8,7м2 / 9,4м2;

  • эксплуатируемая кровля = 120,0м2;

  • терраса = 56,0м2.

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

  • спальни можно увеличивать за счет СУ и Тамбура-прихожей;

  • один из СУ можно отдать под кабинет или спальню;

  • вход с любой стороны.

Инженерные системы (внутренние):

Уточнение:

Так как дом одноэтажный, то полноценное функционирование естественного инженерного комбайна под вопросом - требуется большая мощность естественной тяги.
Можно, конечно, вывести утепленную трубу на 5-6м над крышей - но это такое себе : )
Само собой можно добавить вентилятор, и проблема будет решена, но это приводит к зависимости от автоматики.

Тоже самое касается и отопления, вентиляции, кондиционирования, рекуперации итд итп - нужен подвал.
По-хорошему подвал нужен под всем домом, что сразу влияет на стоимость дома.
Можно рассмотреть вариант, когда подвал находится под центральной частью дома - в этом случае встает вопрос отопления левого и правого крыльев дома.

Пока остановимся на том, что инженерные системы в доме будут общепринятыми и стандартными, что приведет к увеличению стоимости инженерных систем.

  • индивидуальный тепловой пункт внутри дома (газовый котел / электрический котел пеллетный котел или горелка с бункером на 7-14 дней автономной работы / твердотопливный котел);

  • отопление (водяной теплый пол);

  • вентиляция (естественного типа или принудительного, но в любом случае стандартного исполнения);

  • рекуперация;

  • кондиционирование;

  • очистка;

  • обогащение;

  • увлажнение;

  • водопровод;

  • канализация;

  • электрика;

  • система умного дома;

  • бензиновый генератор (дешевле) или аккумулятор (удобней);

  • система водостока (скрытый или открытый).

Инженерные системы (наружные):

  • скважина;

  • септик глубокой очистки;

  • или центральные системы.

Фундамент:

(выбирается под конкретную геологию и итоговый вариант дома (с подвалом или без))

  • монолитная плита 300мм с утеплителем XPS 100мм снизу и по торцам плиты;

  • свайно-ростверковый с плитами перекрытий 160мм и утеплителем XPS 150-200мм (полы по грунту как альтернатива);

  • заглубленный фундамент (ФБС или монолит) для организации подвала и возможности пристроек на месте крыльца и/или террасы.

Основание крыльца, террасы итд :

  • или монолитная плита 150-300мм с утеплителем XPS 100мм снизу и по торцам плиты;

  • или сваи с ростверком с деревянными балками и настилом из строганных досок камерной сушки;

  • или заглубленный фундамент (ФБС или монолит) для организации подвала и возможности пристроек на месте крыльца и/или террасы.

Стены периметральные:

  • газоблок D400 400мм.

Внутренние стены и перегородки:

  • или цементно-песчаный блок (ЦПБ) полнотелый 140/200мм;

  • или полнотелый глиняный кирпич 120/250мм;

Крыша эксплуатируемая (эксплуатируемая кровля):

  • оцинкованные кровельные сендвич-панели с утеплителем типа PIR (негорючий и экологичный утеплитель (по всем характеристикам лучше XPS)) 150-200мм по деревянным строганным второстепенным балкам камерной сушки 45х190мм и главным балкам + деревянный настил на эксплуатируемой крыше;

  • так как сендвич-панели значительно подорожали (так как металл весь подорожал), то экономически целесообразней выходит обычный стандартный пирог крыши с усиленными стропилами (только вместо металлочерепицу профлист h=60-75мм);

  • если будет надстройка, то тогда монолитное перекрытие.

Фасад:

  • или с фактурой и текстурой газоблока;

  • или окрашенный газоблок.

Стены и перегородки внутренние:

  • с фактурой и текстурой бетонных блоков/кирпича.

Периметральные стены (внутренняя отделка):

  • покрытие, деревянный каркас и обшивка строганными досками камерной сушки 200х25-50мм.

  • или общепринятые варианты.

Стены периметральные во влажных помещениях (внутренняя отделка):

  • ГКЛВ 12,5ммх2 и керамогранит 600х600-1200х600.

Потолки (внутренняя отделка):

  • строганные доски камерной сушки 200х25-50мм;

Полы (внутренняя отделка):

  • или упрочненный гидрофобный бетонный пол;

  • или керамогранит/ламинат/итд на обычный бетон (подложка при необходимости);

  • или деревянный пол по лагам из половых строганных досок камерной сушки (во влажных помещниях на полу ГВЛВ 12,5ммх2 или фанера и керамогранит).

Окна (900-1000 х 1800-3000):

  • пластиковые двухкамерные энергоэффективные с утепленной четвертью итд.

Двери на террасу (900-1000 х 2800-3000):

  • пластиковые двухкамерные энергоэффективные с утепленной четвертью итд.

Входная дверь (900-1000 х 2800-3000):

  • или теплая металлическая с утепленной четвертью, защитой от осадков в виде навеса итд;

  • или пластиковая двухкамерная энергоэффективная с утепленной четвертью, с защитой от осадков в виде навеса итд.

Межкомнатные двери (800-1000 х 2200-2400):

  • деревянные с фурнитурой.

Дополнительно (при необходимости):

  • отмостка утепленная гравийно-цементная шириной 1200мм с XPS утеплителем 100мм;

  • перголы (металлический каркас с обшивкой деревом) на крыльце и террасе;

  • панорамное остекление 3600х2800-3000(высота) в гостиной-кухне-столовой;

  • окна 900-1000 х 2800-3000 (высота) в замен окон 900-1000 х 1800(высота);

  • лифт на крышу наружный;

  • надстройка мансарды или зимнего сада на крыше;

  • пристройка к дому на месте террасы и/или крыльца.

Как итог получаем по-настоящему качественный и по-настоящему доступный по стоимости теплоемкий дом, готовый для постоянного проживания.

Дом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этажДом-КУБОИД - 1х1,618 - 14400х9000х4200 - 1этаж

Благодарю за внимание.

P.S.:

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

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

Подробнее..

Через тернии к звёздам или LILYGO TTGO T-Internet-POE ESP32 LAN8270A

15.03.2021 10:06:02 | Автор: admin
image
Попалась мне на глаза плата LILYGO TTGO T-Internet-POE ESP32 LAN8270A и конечно я не мог пройти мимо такой интересной новинки: ESP32, LAN8270A, POE, SD карта, Wi-Fi+Ethernet Было интересно пощупать это произведение сумрачного китайского гения своими руками и протестировать в реальной работе, ведь TTX платы сулили очень интересные перспективы для использования в IoT, DIY и вообще в области Wi-Fi+Ethernet и на что фантазии хватит.

Но, как всегда, путь от рекламных проспектов на сайтах продавцов и производителя до запуска платы и проведения на ней тестов оказался очень непростым и тернистым. Далее предлагаю вашему вниманию отчёт о моих увлекательных изысканиях по этой теме.

Камень в огород LILYGO


По моим наблюдениям (многие) производители железа страдают одной родовой болезнью полным отсутствием компетенции в маркетинге и вообще элементарного понимания того, что свои продукты они делают для людей.

Хорошим примером тут может служить LILYGO TTGO T-Internet-POE ESP32 LAN8270A (далее для краткости будем называть эту плату T-Internet-POE). Производитель сделал интересную плату, но не сделал больше ничего:

  • нет нормальной распиновки контроллера
  • нет принципиальной электрической схемы
  • нет вменяемого описания применения платы и типовых паттернов её использования
  • нет технических пояснений по работе отдельных составляющих платы
  • нет примеров кода (есть 1 (!) скетч на отвали, мальчик, не мешай работать)
  • нет сайта с документацией
  • нет форума с грамотными и мотивированными модераторами
  • нет популярных и мотивирующих статей для тех, кто интересуется этим контроллером, но не знает (не понимает) где он мог бы его применить для своих целей
  • и нет ещё множества вещей, которые должны были бы быть

Короче, нет вообще ничего и каждый, кто рискнёт купить T-Internet-POE, должен быть безупречным воином DIY, иначе у него нет ни одного шанса выстоять в этой битве с LILYGO. Много ли среди нас таких?

И как при таком подходе к делу они вообще умудряются что-то продавать? И насколько выросли бы их продажи, если бы они на минутку отложили в сторону паяльник и вспомнили о своих покупателях?

Вопросы риторические, но так или иначе далее мне придётся проделать всю работу за технический и маркетинговый отделы LILYGO.

В чём фишка?


Говоря простыми словами, на этой плате удалось более-менее удачно объединить в одном устройстве ESP32 (Wi-Fi), Ethernet, POE и ещё добавить к этому торту вишенку в виде microSD картридера. Из одного только сочетания этих составляющих сразу вытекает множество интересных вариантов применения этой платы:

  • работа по Wi-Fi с резервом в виде Ethernet канала
  • работа по Ethernet с резервом в виде Wi-Fi подключения
  • обслуживание одновременно и Wi-Fi и Ethernet линков
  • роутер между Wi-Fi и Ethernet в обе стороны
  • веб-сервер на два интерфейса
  • разные веб-сервера на разных интерфейсах
  • питание (удалённого) контроллера по POE

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

Как вы видите, сфера применения этой платы в IoT и DIY ограничена только вашей фантазией и вашими потребностями и в целом T-Internet-POE как устройство смотрится очень многообещающе.

Далее давайте попытаемся разобраться как со всем эти великолепием совладать, что, учитывая практически полное отсутствие информации по плате, является не такой простой задачей.

Технические характеристики


Мы здесь не будем приводить полный список всех технических характеристик платы вот с чем с чем, а с этим на сайтах продавцов и производителя проблем нет (проблема в том, что кроме этих характеристик там больше ничего нет). Приведём здесь только список ключевых элементов платы:

  • ESP32-WROOM (4 МБ)
  • LAN8720A (Ethernet PHY)
  • POE 802.3af
  • microSD картридер
  • 12 GPIO пинов для внешних подключений

О чём навскидку нам говорит такая конфигурация? О том, что при использовании этой платы в качестве веб-сервера, файлы можно хранить как на microSD карте памяти, так и во внутренней памяти модуля ESP32 (или и там и там сразу).

При этом 12 свободных GPIO производят двойственное впечатление с одной стороны это уже кое-что и значительно лучше чем на ESP8266, а с другой стороны после проектов на Mega 2560 с её десятками GPIO, 12 пинов смотрятся очень и очень скромно и сильно ограничивают возможности разработки тут нужно будет либо изобретать какие-то расширители портов, либо делать тандемные сборки с другими контроллерами.

Варианты контроллера


При ближайшем рассмотрении оказывается, что под одним названием существуют два разных контроллера один на ESP32-WROOM, а второй на ESP32-WROVER-B, что сходу и не разглядишь на вид платы практически одинаковые и можно играть в игру найди 10 отличий.

image

Мне достался контролер на ESP32-WROOM, поэтому дальнейшее повествование будет относится к нему.

Программатор


Инженеры LILYGO так далеко оторвались от своих пользователей, что их решения не всегда можно понять. К таким решениям относится создание ими отдельной платы программатора на чипе CP2104 для контроллера T-Internet-POE.

Зачем? Зачем нужен отдельный программатор, когда этот узел можно было интегрировать на саму плату контроллера или попросту использовать стандартные USB-TTL переходники (как делают все остальные производители железа)? Ответ, видимо, знают только разработчики LILYGO (но простим им этот маленький креатив).

image

Но мало того, что разработчики LILYGO сделали непонятную вещь, они ещё и умудрились сделать её криво:

  • во-первых они применили горячо любимые народом пины с шагом 2,0 мм
  • во-вторых они предусмотрели установку разъёма на обратную (!) сторону платы

(Разработчикам такого решения я бы порекомендовал иногда отвлекаться от работы и уделять время отдыху.)

В результате получился какой-то странный монстр. И всё бы ничего, если бы проблема ограничивалась только эстетической составляющей, но тут вылезают более серьёзные проблемы:

  • если устанавливать и крепить плату в нормальном положении, то пины программатора оказываются снизу платы и к ним невозможно подключиться без демонтажа контроллера;
  • если работать с платой без крепления то разъёмы с шагом 2,0 не обеспечивают должной жёсткости и вся конструкция грозит развалиться в любой момент и всё вокруг позамыкать.

В качестве нивелирования этого косяка разработчиков, можно порекомендовать припаивать линейку пинов с верхней стороны платы и сделать (или купить, если он продаётся) 6-пиновый 2,0 мм гибкий переходник.

Распиновка


Для начала приведём оригинальный вариант распиновки (окультуренный насколько это было возможно). Для тех кто в курсе информации достаточно, остальные мало что поймут из этой китайской грамоты.

image

Попробуем перевести это на русский язык и вообще разобраться с тем, что там происходит с распиновкой элементов и распределением ресурсов контроллера.

Всего на ESP32 имеется 40 пинов (D0D39) из них 14 пинов

D6D11, D20, D24, D28-D31, D37, D38

мы исключаем из рассмотрения как практически неиспользуемые (по разным причинам, подробный разбор назначения этих пинов выходит за рамки этой статьи). Остаются:

Пины подключения Ethernet чипа LAN8720A


D18 ETH_MDIO_PIN
D19 ETH_TX_D0
D21 ETH_TX_EN
D22 ETH_TX_D1
D23 ETH_MDC_PIN
D25 ETH_RX_D0
D26 ETH_RX_D1
D27 ETH_RX_CRS

причём, D18 и D23 устанавливаются в скетче, а остальные 6 пинов чипа LAN8720A являются стандартными и задаются в библиотеке.

Поскольку производитель постеснялся предоставить принципиальную схему контроллера, то я здесь могу только привести аналогичную типовую схему подключения физики Ethernet на LAN8720A.

image

К LAN8720A также относится пин тактирования, который на плате T-Internet-POE подключён к D17 (тоже выбирается в скетче):

D17 ETH_CLOCK

и пин сброса

D5 NRST

microSD картридер


microSD картридер подключён на HSPI:

D2 SD_MISO
D12 SD_CS
D14 SD_SCLK
D15 SD_MOSI

и в случае своего использования забирает свободные для внешних подключений и выведенные на плату пины D2, D14, D15. Вопрос что выгоднее использовать картридер и потерять 3 из 12-и свободных пинов или сохранить 3 лишних GPIO и отказаться от картридера сродни вопросу что лучше: слон или конь? и вам каждый раз придётся отвечать на него при использовании платы T-Internet-POE.

Прочие пины


У нас остаются пины D0 (ETH_CLOCK, не задействован в этом качестве) и D1 (TX0) и D3 (RX0).

Свободные пины


Теперь переходим к самому интересному описанию свободных пинов, выведенных на плату контроллера.

Первой идёт группа D34, D35, D36, D39, работающая только на вход. Лучше конечно на вход, чем вообще ничего, но при таком дефиците GPIO было бы гораздо лучше, если бы эти четыре пина были полноценными GPIO.

И затем 8 полноценных GPIO, которые вы можете использовать в своих проектах. Тут нужно помнить, что хоть эти пины и являются полноценными GPIO, но некоторые из них работают весьма своеобразно (например меняют потенциал на старте контроллера и т.п.). Поэтому прежде, чем к ним что-то подключать, нужно специально выяснять и уточнять эти моменты.

D2 (SD_MISO)
D4
D12
D14 (SD_SCLK)
D15 (SD_MOSI)
D16
D32
D33

Как говорится, вот тебе, мой юный друг программирования и микроконтроллеров, 8 GPIO и ни в чём себе не отказывай.

POE


Тут нужно ещё сказать несколько слов о поддержке POE, поскольку это является одним из достоинств этой платы и одной из её фишек и для многих это будет причиной, по которой они захотят её купить и использовать.

Здесь реализована полноценная поддержка стандарта POE 802.3af с развязкой и управлением питанием на чипе SI3404.

Меня дистанционная запитка контроллера не очень интересует, поэтому этот аспект работоспособности T-Internet-POE я не тестировал, но, судя по всему, с POE здесь проблем нет.

Программная поддержка


Как вы сами понимаете, работать с T-Internet-POE можно при помощи любых программных сред, имеющих представление об этом железе, в том числе в нативном SDK (и вероятно это наиболее правильный вариант), но мы попытаемся выяснить, что можно выжать из этой железки при помощи Arduino IDE.

В качестве программной среды для экспериментов использовались Arduino IDE версии 1.8.5 и ESP32-Arduino версии 1.0.5 (последняя сборка на момент написания статьи).

Сам процесс установки поддержки ESP32 в Arduino IDE я описывать не буду потому, что этому вопросу посвящено огромное количество материалов в интернете, во всех нюансах описывающих этот процесс.

Упомяну здесь только один момент: плюс ко всему, чего не имеет этот контроллер, он ещё не имеет и нативной поддержки в ESP32-Arduino версии 1.0.5. Поэтому в качестве контроллера в менеджере плат выбирался ESP32 DEV Module с настройками:

Flash Mode: DIO
Flash Size: 4MB (32 Mb)
Partition Scheme: 4MB (1,2MB/1,5MB)

Стандартный скетч


Ниже приведён скетч, которым нас порадовал производитель платы. Там особенно комментировать нечего, он просто инициализирует Ethernet интерфейс и посылает запросы к серверу в интернете.

Полный код скетча от производителя платы
/*    This sketch shows how to configure different external or internal clock sources for the Ethernet PHY*/#include <ETH.h>#include <SPI.h>#include <SD.h>#define SD_MISO         2#define SD_MOSI         15#define SD_SCLK         14#define SD_CS           13/*   * ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator   * ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720   * ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720   * ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720*/// #define ETH_CLK_MODE    ETH_CLOCK_GPIO0_OUT          // Version with PSRAM#define ETH_CLK_MODE    ETH_CLOCK_GPIO17_OUT            // Version with not PSRAM// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)#define ETH_POWER_PIN   -1// Type of the Ethernet PHY (LAN8720 or TLK110)#define ETH_TYPE        ETH_PHY_LAN8720// IC-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)#define ETH_ADDR        0// Pin# of the IC clock signal for the Ethernet PHY#define ETH_MDC_PIN     23// Pin# of the IC IO signal for the Ethernet PHY#define ETH_MDIO_PIN    18#define NRST            5static bool eth_connected = false;void WiFiEvent(WiFiEvent_t event){    switch (event) {    case SYSTEM_EVENT_ETH_START:        Serial.println("ETH Started");        //set eth hostname here        ETH.setHostname("esp32-ethernet");        break;    case SYSTEM_EVENT_ETH_CONNECTED:        Serial.println("ETH Connected");        break;    case SYSTEM_EVENT_ETH_GOT_IP:        Serial.print("ETH MAC: ");        Serial.print(ETH.macAddress());        Serial.print(", IPv4: ");        Serial.print(ETH.localIP());        if (ETH.fullDuplex()) {            Serial.print(", FULL_DUPLEX");        }        Serial.print(", ");        Serial.print(ETH.linkSpeed());        Serial.println("Mbps");        eth_connected = true;        break;    case SYSTEM_EVENT_ETH_DISCONNECTED:        Serial.println("ETH Disconnected");        eth_connected = false;        break;    case SYSTEM_EVENT_ETH_STOP:        Serial.println("ETH Stopped");        eth_connected = false;        break;    default:        break;    }}void testClient(const char *host, uint16_t port){    Serial.print("\nconnecting to ");    Serial.println(host);    WiFiClient client;    if (!client.connect(host, port)) {        Serial.println("connection failed");        return;    }    client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);    while (client.connected() && !client.available());    while (client.available()) {        Serial.write(client.read());    }    Serial.println("closing connection\n");    client.stop();}void setup(){    Serial.begin(115200);    WiFi.onEvent(WiFiEvent);    SPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);    if (!SD.begin(SD_CS)) {        Serial.println("SDCard MOUNT FAIL");    } else {        uint32_t cardSize = SD.cardSize() / (1024 * 1024);        String str = "SDCard Size: " + String(cardSize) + "MB";        Serial.println(str);    }    pinMode(NRST, OUTPUT);    digitalWrite(NRST, 0);    delay(200);    digitalWrite(NRST, 1);    delay(200);    digitalWrite(NRST, 0);    delay(200);    digitalWrite(NRST, 1);    ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);}void loop(){    if (eth_connected) {        testClient("baidu.com", 80);    }    delay(10000);}


Когда я в первый раз увидел этот скетч, то задался вопросом: что этим хотел сказать производитель?. Единственное назначение этого скетча показать, что эта технология в принципе работает. Это конечно хорошо, но что дальше? Что со всем этим делать не имея ни документации, ни примеров, ни вменяемой ответной реакции от производителя?

Походу получается, что ответ от LILYGO изучать программирование и создавать ПО самостоятельно (или искать готовые прошивки, хотя это и не спортивно).

Интерфейсы и пинг


Для сетевых профессионалов (и примкнувших к ним) скажу пару слов о скорости работы по интерфейсам Wi-Fi и Ethernet и их отзывчивости. Тестирование проводилось в ненагруженной гигабитной сети, зашумлённость Wi-Fi диапазона специально не контролировалась.

Первый скриншот это пинг контроллера по Wi-Fi интерфейсу. Минимум 24 мс, максимум 105 мс, среднее 67 мс.

image

Второй пинг контроллера по Ethernet интерфейсу. Минимум 0 мс, максимум 9 мс, среднее 2 мс.

image

Как вы видите, пинг по проводному Ethernet кардинально меньше, чем по Wi-Fi (что ожидаемо). Насколько хороши или плохи эти цифры предоставляю судить читателям самостоятельно, меня они вполне устраивают для моих целей.

Тестирование


Тестировать такую систему, как T-Internet-POE на скетчах, подобных предложенному производителем это несерьёзно, поэтому для тестирования контроллера применялась специализированная версия AMS, адаптированная специально для этой платы. Учитывая, что это сервер, который использует полноценные HTML, CSS, Javascript, Ajax, графические файлы и библиотеки, то успешная работа такого сервера на T-Internet-POE будет свидетельствовать о правильно спроектированном железе и возможности его использования в реальных проектах.

Примечание: тестирование производилось на внутренней, не публичной версии AMS для T-Internet-POE. Публикация и распространение этой версии не планируется, возможно это будет сделано позже, после соответствующих доработок.

Тест 1. Запускаем AMS сервер на T-Internet-POE


Запустить AMS на новом контроллере с новым чипом и сетевым интерфейсом это весьма нетривиальная задача, но тем не менее, при правильном подходе и понимании того, что ты делаешь, всё становится возможным.

Косяк номер 1


В процессе этой работы стали вылезать косяки самого контроллера T-Internet-POE и первое, что было выявлено это то, что контроллер отказывается прошиваться при вставленной microSD карте памяти. Не помогает ничего ни замена USB порта, ни питание от отдельного блока, ни нажимание кнопок, ни замена карты контроллер упорно не желает прошиваться при вставленной карте памяти.

Глюк это конкретного экземпляра или родовой дефект всех контроллеров T-Internet-POE сказать трудно (имея в своём распоряжении один экземпляр), можно только констатировать 100-процентную повторяемость и воспроизводимость проблемы.

Что это значит для нас? В практическом плане это значит, что на контроллере T-Internet-POE фактически нет картридера картридер, который блокирует прошивку контроллера это не картридер, а баг.

Что же делать? Остаётся только использовать 1,5 МБ SPIFFS, имеющийся на модуле ESP32. Да, это не очень много, но в принципе 1,5 МБ памяти для IoT устройства это более-менее приемлемо в большинстве случаев.

Косяк номер 2


Ок, от картридера мы отказались, теперь нам нужно подружиться с SPIFFS. Вроде бы задача несложная и даже привычная, но и тут нас ждёт засада: по какой-то причине утилита ESP32FS отказывается нормально работать на этом контроллере (в этой конфигурации). Перенос файлов в память модуля ESP32 приводит к последующей ошибке монтирования SPIFFS диска.

М-да В случае невозможности нормально перенести файлы (сервера) на SPIFFS диск, остаётся только один способ инициализация интерфейса через Serial соединение, и последующий перенос файлов на SPIFFS диск через веб-интерфейс. Способ конечно не очень удобный, но никак не влияющий на конечный результат файлы сервера были успешно перенесены на SPIFFS диск.

Описание самого процесса адаптации кода под новый контроллер я опускаю, поскольку это потребовало бы составления антологии наподобие полного собрания сочинений В. И. Ленина и сразу перехожу к демонстрации факта успешной работы AMS сервера на T-Internet-POE (а значит и работоспособности самой платы T-Internet-POE).

Загрузка страницы по Wi-Fi интерфейсу.

image

Загрузка страницы по Ethernet интерфейсу.

image

Выигрыш по скорости примерно в 4 раза, естественно, в пользу Ethernet. Здесь нужно ещё иметь в виду, что речь идёт о неоптимизированном коде и после проведения соответствующих работ результаты должны значительно улучшиться.

image

Работа сервера по Ethernet интерфейсу на LILYGO TTGO T-Internet-POE ESP32 LAN8270A.

Тест 2. Работа на двух интерфейсах


Тут мне придётся немного поработать разрушителем легенд. В интернете ходят упорные слухи, что одновременная работа Wi-Fi и Ethernet на связке ESP32 и LAN8270A невозможна. Это не так AMS сервер прекрасно работает на двух интерфейсах одновременно и отлично обслуживает запросы по Wi-Fi и Ethernet. Никаких проблем с зависаниями или перезагрузками ESP32 нет.

image

Вот это уже интересный результат, который открывает заманчивые перспективы: поскольку мы имеем собственный сервер, то можем как угодно управлять обслуживанием интерфейсов, например, по Wi-Fi отдавать одни сайты с одним контентом, а по Ethernet другие сайты с другим контентом. Образно говоря, бабушке по Ethernet отдавать сайт с кулинарными рецептами, а внуку по Wi-Fi сайт с избранными статьями из БСЭ.

Тест 3. Бан по одному из интерфейсов


Теперь давайте попробуем на практике реализовать идею с различным обслуживанием интерфейсов веб-сервером. В качестве примера попробуем реализовать отказ в обслуживании для подключений по одному из интерфейсов (Ethernet).

image

Клиент, подключённый к нашему контроллеру по Ethernet интерфейсу получил отказ в обслуживании.

Резервирование интерфейсов


Сама идея резервирования интерфейсов лежит на поверхности и так и просится для реализации. Подобных сценариев существует множество, например, у вас есть IoT контроллер, который подключён к локальной сети по Ethernet. В случае аварийной ситуации, при пропадании проводного линка, контроллер автоматически подключается к резервному беспроводному роутеру и продолжает свою работу.

Сетевой роутинг


Имея в своём распоряжении два рабочих сетевых интерфейса можно как угодно маршрутизировать пакеты в сети. Никто также не мешает в схему маршрутизации по Wi-Fi и Ethernet добавить маршрутизацию данных по nRF24 или LoRa или по любой другой беспроводной сети. Таким образом можно сделать любой роутер для вашей IoT системы.

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

Итоги


Теперь давайте подведём итоги этого небольшого исследования: в общем, несмотря на некоторые косяки и детские болезни, контроллер LILYGO TTGO T-Internet-POE ESP32 LAN8270A мне понравился это отличный инструмент для построения IoT систем, особенно если вы обладаете соответствующей квалификацией и не лишены фантазии и креативного подхода к своему творчеству.

Плюсы и минусы LILYGO TTGO T-Internet-POE ESP32 LAN8270A.

Плюсы:
  • Это работает!
  • Законченное интегрированное решение Wi-Fi + Ethernet + POE + GPIO
  • Хорошая работа без зависаний и перезагрузок (проблем при тестировании выявлено не было)
  • Возможность одновременной работы по двум интерфейсам

Минусы:
  • Тотальное отсутствие документации, примеров и пояснений
  • Относительно высокий порог входа
  • Детские болезни и мелкие косяки в реализации
Подробнее..

Маяк, ночник и конструктор для вашего ребенка (50 деталей, 3D печать)

16.03.2021 02:15:34 | Автор: admin
image

Добрый день, читатели.

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

Предыстория
Как-то в преддверии осенних школьных каникул 2020, за обедом, предложил дочери Придумай, чтобы ты хотела, чтобы мы вместе с тобой разработали на этих каникулах. Например это может быть робот или какой-то механизм, или , но главное, чтобы это был конструктор и ты могла сама его собрать!.

На что дочь ответила Я хочу ночник в виде маяка, и он должен проецировать звезды на потолок.

Для меня это было неожиданно, носказано сделанои на наш взгляд получилосьвполне достойно! :) Теперь мы хотим поделиться с вами всем этим. Задальнейшей историей прошу в статью

Сразу забегу вперед и скажу, что маяк проектировался по принципу конструкторов из 3 мм фанеры, поэтому обладает свойственными им нюансами, но зато его также легко и интересно собирать.

Цель ясна и надо приступать к реализации


Задача 1 выбрать образец
Перед каникулами, по вечерам, мы начали готовиться к предстоящей работе. Несколько вечеров просидели в google в поисках того единственного маяка, который мил сердцу и который хотелось бы взять за основу.
Среди огромного разнообразия Юле очень понравился этот маяк (ссылка на исходный сайт увы утеряна):

image

Задача 2 тест
Теперь перед нами встал вопрос хватит ли мощности у небольшого светодиода, для создания тени на потолке, с расстояния 2 метра? Для дочери это было самое увлекательное, одно только предложение поставить эксперимент её так вдохновило, что даже когда мы уже все узнали, она просила еще что-то проверить :)
Собственно с этим как раз и возникли нюансы. Классические светодиоды, коих огромное количество в любых магазинах и у меня в закромах, имеют направленный луч в 30 и чтобы тень создавалась, нужно опустить светодиод практически к основанию маяка. Но ведь у маяка источник света вверху! Благо у меня нашлась еще одна куча 3 миллиметровых светодиодов с углом 120 и теплым белым свечением это оказался самый подходящий светодиод.

Далее была поездка в Кронштадт, ведь нельзя проникнуться идеей создания маяка, если ты не увидел и не прочувствовал его. А в Кронштадте их аж 17! Поездка была отличная, мы погуляли по дамбе, но в самом городе замерзли, с трудом нашли место где купить чего-то теплого и на обратной дороге на КАД пробили колесо. Зато все точно запомнилось!

image

Задача 3 проектирование
Ну вот пришли каникулы и мы начали разработку. Я сидел в Solidworks и создавал детали, Юля сидела рядом и консультировала :) Выбирали оптимальную высоту, ширину основания и прочее. Процесс был очень увлекательный. Итого вышло 50 деталей.

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

Процесс сборки первых деталей
image
image
image
image


Задача 4 электронная начинка
Схему было решено сделать самой простой без транзисторов и всяких там переключателей. 2 готовых модуля модуль заряда литиевых аккумуляторов и сенсорная кнопка, которую мы решили спрятать под крышей входа.

Схема проще не бывает
image

Всё это, за исключением пайки, ребенок может собрать сам. Что касается электронной части, то я решил припаять только огрызки, а дальше дочь сама соединила элементы между собой на скрутку и маяк ожил на её глазах! Все модули размещаются в тамбуре модуль заряда приклеен на двухсторонний скотч на полу (есть отверстие для разъема micro-usb в задней стенке), а переключатель к крыше.


Макеты STL на thingiverse.com

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

Весь материал доступен для повторения и использования в личных, не коммерческих целях
Подробнее..

Как подключить пару рольставней по трём проводам и управлять ими голосовым ассистентом

23.03.2021 12:19:49 | Автор: admin

Всем привет!

В этой статье я расскажу, как мне пришлось исправить ошибку строителей, которые заложили в штробу всего один 3-х проводной кабель, идущий к двум рольставням, тогда как нужно было проложить два таких кабеля. А так же про недорогой WiFi + RF433 МГц блок управления рольставнями и подключение его к голосовому ассистенту Яндекс Алиса. Если Вам интересны подробности, то прошу под кат.

Распаковка блока управления рольставнями


Я достраиваю свой дом, и недавно у меня на окнах первого этажа установили моторизированные рольставни. Для управления ими я приобрел на Aliexpress WiFi+RF433 переключатели от компании Moes, на упаковке указано название Smart WiFi + RF Curtain Switch. Обошлись они мне по 900 руб. за 1 шт. В комплекте идет небольшая инструкция по подключению и два болтика для монтажа. Панель сделана из стекла, на ней расположены три сенсорные кнопки с синей подсветкой. Подключается устройство всего 4-мя проводами: L-линия, N-ноль, Open, Close. В инструкции нет упоминаний про работу блока с Яндекс-станцией Алиса, но как потом оказалось, устройство прекрасно сопрягается с умной колонкой через приложение Tuya Smart.



Блок управления изнутри


Переключатель состоит из двух плат: верхняя плата, это WiFi контроллер, приемник 433 МГц, емкостные кнопки и две антенны, также разведенные на плате, и нижняя это блок питания, винтовые разъемы для подключения проводов, два реле управления моторами рольставней.

Соединяются обе платы между собой обычной двухрядной гребенкой, с шагом 2 мм.



Подсветка кнопок


Стоит ещё упомянуть, как работает подсветка в модуле управления. Днем подсветку всех кнопок не заметно. Но на панели всегда ярко светится последняя нажатая кнопка. Если нажать клавишу опустить занавес и не важно по WiFi или кнопкой на пульте, то будет светится кнопка Close до того момента, пока не будет нажата другая кнопка. А у клавиши STOP есть две функции: с её помощью можно остановить ставни в любом положении, и вторая функция это перевод свечения кнопок в ночной режим. В полной темноте свечение всех клавиш очень комфортное и абсолютно не раздражает глаза.



Подключение к WiFi


При первом включении сразу же начнут мигать все три кнопки тем самым блок говорит, что его нужно подключить к WiFi сети. Для этого потребуется установить приложение Tuya Smart. запускаем приложение->нажимаем +(добавить устройство)->мелкая бытовая техника->шторы/карниз WiFi->включаем геолокацию->подтверждаем Имя и ключ WIFI сети после непродолжительной паузы устройство будет добавлено и после чего можно сменить его название. Для удобства управления я у себя все три добавленных устройства назвал окно, только присвоил им всем разные комнаты. В голосовом ассистенте Алиса нажимаем (+) -> другое устройство -> находим Tuya Smart -> обновить список устройств.

Я так же в голосовом ассистенте создал такие сценарии, как: Сим-сим откройся, Открой все окна, Включи кино и т. д.



Подключаем пульт 433МГц


Так же для более широких возможностей управления рольставнями, я приобрел пульт, работающий в радиодиапазоне 433 МГц.
Для того, чтобы модуль переключателей запомнил кодовые команды с радиопульта, нужно нажать и удерживать требуемую кнопку на блоке управления до того момента, пока он не издаст одиночный звуковой сигнал и при этом индикатор начнет быстро мигать, после чего нужно нажать такую же кнопку на пульте дистанционного управления. Если переключатель запомнил код, то он переведет индикатор в постоянно светящийся режим. Для обнуления ранее записанного кода, нужно нажать и удерживать кнопку блока управления в течении 10 секунд до того момента, пока он не издаст три прерывистых звуковых сигнала, после чего код пульта из блока будет стёрт.



Косяки строителей


Теперь о проблеме, с которой я столкнулся при подключении рольствней. Строители, которые занимались отделкой, несмотря на мои неоднократные напоминания, заложили всего один трех проводной кабель для двух окон. А всплыла эта проблема, когда приехали установщики роллетов. Ну ладно, подумал я, подключу их параллельно, но, как оказалось, подключать рольставни параллельно между собой нельзя. Я, конечно, сначала не поверил в это, но потом убедился в этом сам, когда попытался проверить это на практике и чуть было на спалил моторы. Проблема заключается в том, что моторы имеют несколько обмоток и между ними установлен фазосдвигающий конденсатор. И если подать управляющий ток на поднятие занавеса Open, то на открытом конце Close будет напряжение 220В, которое начнет вращать рольставни в противоположную сторону, и они останутся на одном месте в заклиненном состоянии, а ток при этом будет протекать через обмотки двигателей. Получится как в той басне про лебедя, рака и щуку.



Так же установщики сказали, что существуют блоки, при помощи которых можно объединять рольставни в группы и подключать их на один переключатель.



Но групповой блок GC-2 мне тоже ни как не поможет, так как ему кроме проводов Open, Close и N-ноль требуется ещё и линия-L. Если игнорировать заземление, то в сумме получается 4 провода. А у меня, как вы помните, их всего 3. Перерыв весь интернет, я так и не нашел решения, хотя встретил братьев по несчастью с такой же проблемой, просящих помощи у сообщества. В итоге у меня остался только один вариант штробить стену и прокладывать недостающие провода. Что меня никак не устраивало, так как на первом этаже уже выполнена свежая отделка и смонтированы натяжные потолки. Мне бы не хотелось портить строительной пылью свежий ремонт. Пришлось напрячь мозг и придумать своё решение.

Благо решение нарисовалось на бумаге в течении пары минут и для его реализации мне понадобилось всего одно реле на 220 В, с тремя контактными группами.



Схема подключения реле


Я думаю у многих может возникнуть вопрос: почему именно 3 группы контактов, а не две? Если исключить самую верхнюю группу контактов на схеме, замкнув эти два провода, то через взаимосвязанные обмотки электродвигателей и через обмотку реле будет протекать ток в любом положении переключателя, и реле всегда будет переходить во включенное состояние.



Монтаж реле


Мне не терпелось и хотелось побыстрее проверить работоспособность схемы. А ввиду отсутствия у меня плоских разъемов 3 мм, я не стал тратить время на их поиски и покупку, а взял и припаял к нужным контактам реле провода. Заизолировал их термоусадочным кембриком и подключил реле к рольставням соеденителями типа скрутка. Разместил его в соединительной коробке, в которой предварительно замазал силиконом все сквозные отверстия.



Ну вот наконец все подключено, можно проверять.

Заключение


Спасибо, что дочитали до конца!

Если Вам понравилась моя статья то поддержите её лайком и подпиской.

Если у Вас есть вопросы, то можете задавать их в комментариях.
Подробнее..

Поселение для достойных людей

27.03.2021 14:09:57 | Автор: admin

Приветствую.

К рекламе никакого отношения нет.
Так как разместить статью в "Я пиарюсь" пока запрещено, то публикую обычную статью, так как время поджимает.

ВВЕДЕНИЕ.

Давно с соратниками продумываем план по созданию поселения.
В этом году было принято решение - пора - чем дальше, тем больше встречаем на пути нелюдей и тем меньше людей.

Основная задача мероприятия - найти достойных людей для кооперации и взаимодействия, а потом уже само поселение (построить само поселение не так уж и сложно).

Почему основная задача найти достойных людей - потому что "лучше будь один, чем вместе с кем попало."
Нас несколько семей - "маловато будет" - идеальный вариант 50-100 семей - будет меньше - не проблема.
Создание правильной среды для воспитания спиногрызов.
Взаимодействие и кооперация внутри поселения и вне его.
Организованно можно сделать/решить напорядок больше чем по одиночке.
Взаимопомощь, взаимовыручка итд итп.

Даже если поселение не стартанет, то в любом случае будет положено начало знакомству людей друг с другом, а там по нарастающей.

Нет цели создать "поселок программистов" - чем большее многообразие специалистов, тем лучше для всех.
Таким образом можно закрыть все или почти все сегменты внутри поседения:
- вкусная и полезная еда (частично закрыто);
- воспитание и обучение;
- медицина (частично закрыто);
- одежда;
- жилье (частично закрыто);
- итд итп.
В общем чем большей автономности и взаимодействия внутри поселения получится создать, тем лучше.

Создание всей оптимально необходимой инфраструктуры.

Возможно рассмотреть каждый дом как отдельную ноду (децентрализация) итд итп и все такое прочее.
Вопрос целесообразности.
Глобальная задумка - рассмотрение домохозяйств или поселений как своего рода mesh-сеть.

Территориально - планируем в ближнем МО, однако, если большинство будет за другой вариант, то также без проблем - концепция удаленого поселения также подходит.

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

ВАРИАНТ 1

Фактическое положение делФактическое положение делФактическое положение делФактическое положение делФактическое положение делФактическое положение делКонцепция генпланаКонцепция генпланаКонцепция генпланаКонцепция генплана

Новорижское шоссе 18км от МКАД.

Вокруг:
- КП "Павлово-2" - администрация точно отбитая, по жителям информации мало (скорее всего адекватных больше);
- СНТ "Березка" - администрация адекватная, большая часть жителей тоже;
- СНТ "Усадьба" - администрация адекватная, половина жителей тоже (со второй половиной не пересекались, но со слов Председателя, вроде ормально).

Аналоги (экология, природа итд итп) в ближнем МО отсутствуют.

Участок ~ 7Га.
Возможно расширение (2-ая, 3-я и 4-ая очереди) что никак не затроент природу вокруг (что есть хорошо).

Так как рядом с Мск, то продажная стоимость за 1 сотку 250-350тр с учетом дисконта.
Исходя из этого большая часть участков по 6 соток, оставшиеся от 6 до 9 соток.
Участки можно объединять.
Итоговая стоимость 1 сотки со всей инфраструктурой будет выходить от 500 до 700тр - зависит от того как много будет этой самой инфраструктуры, какой ландшафт итд итп (вокруг от 600тр до 1800тр).
Также можно рассмотреть вариант поэтапного развития инфраструктуры, тогда стоимость 1 сотки будет ниже.

Электричество на участке - подстанция (надо будет перенести).

Газ по границе, однако стоимость подключения достаточно высокая.
Если готовы к расходам, то почему бы и нет.
В нашем случае газ не принципиален.

Водоснабжение - скважина.

Канализация - септик глубокой очистки (далее или полив участка или полив леса итд)

Вся инфраструктура в 15 минут езды - ТЦ, больницы, школы итд.

До Мск добираться можно как своим ходом, так и на общественном транспорте:
- остановки общественного транспорта;
- далее на автобусе или маршрутке до Нахабино или по Новорижскому шоссе;
- от Нахабино на метро и в Мск или по Новорижскому шоссе.
Также можно запустить свой маршрут как до Нахабино, так и в Мск.

Концепция генпланаКонцепция генпланаКонцепция генпланаКонцепция генпланаКонцепция генпланаКонцепция генплана

ВАРИАНТ 2

Звенигород и окрестности.

Ближнем МО назвать можно с натяжкой, хотя добираться ненамногим дольше по сравению с вариантом 1.

40км от МКАД

Стоимость 1 сотки 300тр в среднем.
С учетом оптовой покупки можно купить в районе 150-200тр за 1 сотку.

ВАРИАНТ 3

Река Шоша, Река Волга или Иваньковское водохранилище.

Дальнее МО.

100-120км от МКАД

Есть платная дорога - по ней за 1 час до Мск - наиболее целесообразно запустить свой транспорт.
По обычной дороге ближе к 2 часам.

Как раз рассматривались варианты земельных участков под поселения.
Продажная стоимость за 1 сотку варьировалась от 50тр до 150тр.

ПЛАН ДЕЙСТВИЙ

  1. Поиск достойных людей (просьба писать в ЛС тем, кто решительно настроен);

  2. Знакомство, начало взаимодействия;

  3. Разработка проектно-сметной документации (эскизная проектно-сметная документация готова), согласования, получение ТУ, разработка ППТ и получение разрешения на строительство - от 6 до 12 месяцев (зависит от администрации Красногорска);

  4. Стройка - займет от 12 до 24 месяцев "с нуля" и "под ключ";

  5. Полноценное заселение.

РеференсРеференсРеференсРеференсРеференсРеференсРеференсРеференсРеференсРеференсРефренсРефренсРеференсРеференсРефренсРефренсРефренсРефренсРефренсРефренс

Просьба писать в ЛС всем тем, кто готов от слов перейти к делу - на словах почти все Д'артаньяаны, а как доходит до дела - далеко не так.

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

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

Благодарю.

Подробнее..

Железяка 1 робот из обычного металлического конструктора

12.04.2021 22:14:50 | Автор: admin

Небольшой дисклеймер. Эта статья нашлась в моих старых "запасах", и она написана несколько лет назад. Но на фоне новости, что компания, которая производит "донора" для робота решила выпустить набор на Arduino, решил показать, что можно сделать похожее самостоятельно. Благо информация до сих пор не устарела, и никто вам не мешает заменить микроконтроллер на что-то другое.



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


Идея, с одной стороны, разрешимая зная, что у импортных аналогов нашего конструктора, к примеру компании Merkur, есть двигатели и управление можно было ожидать успеха и в этом случае. С другой стороны у российского конструктора шаг все-таки метрический, а вся электроника и детали увы заточены под дюймовый стандарт. Причем задача стояла не использовать по возможности никакие крепежные элементы, кроме деталей конструктора.

Для этих целей на один из Новых Годов я подарилсебе набор Грузовик и трактор. Набор конечно же был отобран сыном сразу после появления дома, трактор собран, потом им играли некоторое время, и уже после можно спокойно было разобрать конструкцию обратно на запчасти.

Также из электронно-китайских запасов были взяты мотор-редукторы с колесами и дисками с прорезями для энкодера 2 щт, самый дешевый драйвер двигателя 1 шт, блютус-адаптер HC-06 1 шт, энкодеры 2 шт, макетная плата 17x10 1 шт, провода для макетной платы, перемычки, а также плата Arduino Leonardo.

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

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

После некоторого времени кручения железяк конструктора и прикидывания куда и что разместить, родилась следующая конструкция. Собираем основание тележки с мотор-редукторами и энкодерами.

Собираем основание тележки с мотор-редукторами и энкодерами.

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

К боковой стороне прикручиваете две детали планку сегментную 2 и планку с тремя отверстиями.

Далее устанавливаете скобу I и уголок I как показано на фото. Энкодеры прикручиваете винтами с гайками М3 (у меня под рукой были только M3x15). Скобы чуть отгибаете. Наклон будет нужен для размещения мотор-редуктора в правильном положении.

Устанавливаете мотор-редуктор с припаянными проводами и заизолированной зоной пайки, так чтобы он попал выступом в паз на сегментной планке и закрепляете на ней же винтом с гайкой M3. У меня не было длинного винта M3 длиной 25-30 мм, поэтому я использовал просто винт M3x15, который вставил в отверстие мотор-редуктора. Обращаем внимание на энкодеры, если вы их поставили.

Фиксируем мотор уголком I и зеркально собираем вторую половину основания и скрепляем их между собой.

Колеса

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

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

Для сборки одной оси нам понадобятся шпилька L=75M4, колесо большое, уголок I, диск большой и винты с гайками. Главная задача при сборке ось должна быть закреплена неподвижно и законтрена вторыми гайками, а колесо, наоборот, должно вращаться свободно с небольшим люфтом.

Электроника

Переходим к электронике. Так как у нас экспериментальный робот, то все соединения мы будем делать на макетной плате, а также использовать для управления плату Arduino Leonardo.

Из Панели, 4-х Уголков I, пластика 50x20, Скобы большой и 6 стоек под плату 10x3 (можно использовать три стойки и три винта M3x5) сооружаем каркас для установки макетной платы и платы Arduino.

Далее закрепляем на двусторонний скотч макетную плату 10x17 со сдвигом, так как нам надо будет разместить драйвер двигателя. Если у вас драйвер двигателя с прямыми ножками подключения, вы можете не делать такой сдвиг главное, чтобы после установки платы Ардуино у вас было место для установки остальных плат. Прикручиваем плату Arduino (я использовал опять же стойки, так как у меня их был избыток, а гаек M3 недостаток.

Устанавливаем на макетную плату Bluetooth модуль, плату драйвера и подключаем все провода к макетной плате и плате Arduino по схеме. Энкодеры можно подключить к питанию и Arduino, но я пока их не использовал.

После решил защитить провода и зафиксировать блютус модуль от разбалтывания, поэтому собрал вот такую защиту для передней части нашего робота (у нас передние колеса ведущие). Для этого использовали детали: Скоба II 2 шт, Планка с 10 отв. 2 шт., Пластик 75x100.

Программное обеспечение

На деле это самая простая часть в Интернет полно примеров, как заставить такую тележку бегать управляя ей со смартфона или другим способом. Для этого используется передача через Serial порт команды в виде буквы и ее последующая обработка. Используя данные производителя платы драйвера двигателей по разводке и таблицу истинности легко задать скетч для Arduino. Конечно, легко на словах я потратил 4 часа, пытаясь найти проблему работы скетча. Как оказалось для Arduino Leonardo (что кстати написано в документации на сайте) надо использовать Serial1, вместо простого Serial. Поэтому если у вас плата, отличная от Leonardo, используйте нужную подпрограмму для вашей платы (для UNO, к примеру замените все Serial1 на Serial в тексте). Сам код можно найти по ссылке.

Посмотрев код видно, что мы используем стандартную раскладку WASD для движения и T для остановки.

После того как зальете программу в плату, проверьте что моторы подключены правильно и крутятся в нужную сторону, открыв терминал в Arduino IDE и передавая символы команд. Также можете поэкспериментировать со значением PWM.

Теперь приложение для Android. Тут тоже все достаточно просто: мы воспользуемся конструктором приложений MIT AppInventor 2 и создадим вот такую программу. В ней мы используем события TouchUp и TouchDown к элементам управления, передавая символ движения при его касании и остановки при отпускании.

Вы можете установить на смартфон специальное приложение для отладки или сформировать пакет для установки на Android смартфон, подключить к тележке батарею (я использовал внешний аккумулятор для смартфона), подключить bluetooth устройство (HC-06 в моем случае) и наслаждаться тем, что вы сами создали радиоуправляемую тележку.

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


Подробнее..

Перевод Как я сломал и починил кластер Kubernetes, работающий на Raspberry Pi

21.04.2021 20:21:36 | Автор: admin

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

Мой домашний кластерёнок вырос в зрелый кластер из шести нод (всё благодаря супруге, которая знала, что мне подарить на день рождения, естественно, Raspberry Pi, и не один!), и я встал перед выбором либо ещё раз выполнить собственные инструкции из статьи об установке кластера Kubernetes на Raspberry Pi, либо, применив системную инженерию (DevOps и SRE), полностью автоматизировать процессы переделки кластера и создания системы управления кластером. Эту статью можно считать прямым дополнением к моей первой статье Как я собрал домашний кластер Kubernetes на базе Raspberry Pi.


Соображения о времени и трудозатратах

На тот момент у меня было два варианта, я обдумывал их на ночь глядя. Оба получались затратными по времени.

Вариант 1

Встать с утра пораньше и повторить все операции вручную в соответствии с инструкциями из моей собственной статьи и, возможно, кое-что в процессе улучшить.

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

Затем всё чистится под ноль и начинается снова. Я проделывал это уже не единожды. Но, в конце концов, никому не будет вреда, если попытаться ещё раз.

Вариант 2

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

Конечно, для этого потребуется куда больше времени. Но светят и долгосрочные преимущества: мне больше не надо будет заботиться о самом кластере, я буду знать, что это решение стабильно и можно перенести на него всю свою домашнюю инфраструктуру.

Хроника автоматизации. Начало

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

Принцип 1. Настройка кластера Kubernetes на Raspberry Pi выполняется в три этапа: это настройка карты памяти, настройка нод на системном уровне и развёртывание ресурсов Kubernetes.

Принцип 2. На моём старом Intel NUC работает NFS-сервер, подключённый к хранилищу DROBO. Было бы заманчиво использовать его в качестве постоянного общего хранилища для всех нод.

Принцип 3. Кластер Raspberry Pi работает в моей домашней сети VLAN, поэтому вопросы безопасности меня волнуют не особо. Все службы и ноды должны быть легко доступны без всяких хитростей с именами и паролями.

Итак, держа всё это в голове, я приступил к программированию моего маленького Франкенштейна. Для повторения результатов (то есть для того, чтобы система заработала) вам понадобятся:

  • Mac (для форматирования карты). Если выберу время для установки Linux VM, попытаюсь обновить скрипт обнаружения платформы.

  • Ansible (я использовал версию 2.10.6).

  • Terraform (я использовал версию 0.13.4, но 0.14.8 тоже подойдёт).

  • Make, полезный инструмент, чтобы не колдовать над параметрами.

Кластер rPi. Первый шаг

В качестве жёсткого диска Raspberry Pi использует карту памяти. Возможно, это не вполне оптимальное и не самое быстрое решение для чтения и записи, но его должно быть достаточно для игр и любительских проектов.

Что происходит на первом шаге?

  • Форматируется карта памяти.

  • Карта памяти делится на два раздела: 1 ГБ плюс то, что останется.

  • Образ Alpine Linux копируется на карту памяти.

  • Создаётся системный оверлей.

Системный оверлей настраивает eth0 на "неразборчивый" (promisc) режим, это нужно для работы MetalLB, и разрешает подключение SSH к нодам Raspberry Pi без пароля.

Важно: проверьте источник 001-prepare-card.sh и убедитесь, что /dev/disk5 это именно вставленная карта памяти, иначе можно потерять данные.

Результат: подготовка шести карт памяти займёт около одной минуты.

Кластер rPi. Второй шаг

Начинается самое интересное. Итак, вы вставили в Raspberry Pi карты памяти, подсоединили все кабели (сетевые и питания) и загрузили систему. Теперь нужно получить IP-адреса устройств. Это можно сделать, либо подключив экран к каждому из них и запустив команду ifconfig eth0, либо зайдя в маршрутизатор и проверив информацию на нём. Введите в файл pi-hosts.txt соответствующие значения.

[masters]pi0 ansible_host=192.168.50.132 # Pi0[workers]pi1 ansible_host=192.168.50.135 # Pi1pi3 ansible_host=192.168.50.60  # Pi3pi4 ansible_host=192.168.50.36  # Pi4pi2 ansible_host=192.168.50.85  # Pi2pi5 ansible_host=192.168.50.230 # Pi5

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

Добавьте в файл ~/.ssh/config следующую строку, она даст root-доступ для всех нод с именами pi*.

Host pi?  User root  Hostname %h.local

Теперь наши микровычислители (вот видите, насколько я стар!) готовы, и нам нужно подготовить их к запуску Ansible. Это можно легко сделать с помощью скрипта 001-prepare-ansible.sh, который подключиться по ssh к каждому определённому в файле pi-hosts серверу, на каждом сервере настроит chrony для NTP и установит интерпретатор Python.

Важно: возможно, потребуется открыть файл rpi.yaml и изменить раздел vars в соответствии с вашими предпочтениями. Я поступил именно так.

После этого шага запускаем на Ansible команду ansible-playbook rpi.yaml -f 10, которая выполнит следующие действия:

ОБЩИЕ:

  • Установит необходимые пакеты.

  • Разобьёт на разделы и отформатирует карту памяти RPI.

  • Настроит параметры "большого" раздела как системного диска.

  • Добавит записи в файл fstab.

  • Подтвердит изменения.

  • Перезапустит Pi, чтобы тот загрузился с "постоянного" раздела.

KUBEMASTER:

  • Настроит мастер-ноду с помощью kubeadm.

  • Сохранит токены локально (в файле static/token_file).

  • Определит на Pi пользователя с правами root с доступом к kubectl.

  • Сохранит настройки Kubernetes локально (в файле static/kubectl.conf).

KUBEWORKER:

  • Скопирует токены на рабочие ноды.

  • После этого через файл токенов рабочие ноды будут присоединены к мастер-ноде.

  • Скопирует kubectl.conf на root-пользователей рабочих нод.

БАЗОВЕ:

  • Снимет отметку с мастер-ноды, что позволит ей принимать рабочие нагрузки.

  • Установит на ноды py3-pip, PyYaml и Helm.

Если вы дошли до этого места, мои поздравления! Вы только что создали базовый кластер Kubernetes, который делать пока ничего не умеет, но готов научиться, если уделить ему немного внимания. Всё оказалось довольно элементарно нужно просто запустить несколько скриптов и дождаться их завершения. Я считаю, что это определённо лучшее решение, чем возиться руками.

Важно: скрипты можно запускать сколько угодно раз. Переформатировать карты памяти после каждого раза не нужно.

Результат: подготовка шести нод с базовой установкой Kubernetes занимает пару минут, в зависимости от скорости подключения к Интернету.

Кластер rPi. Третий шаг

После успешного выполнения двух предыдущих шагов кластер Pi готов к первым развёртываниям. Настройка осуществляется в несколько шагов, и, конечно, эти шаги также можно автоматизировать, об этом позаботится Terraform.

Вначале посмотрим на конфигурацию.

# Variables used for barebone kubernetes setupnetwork_subnet    = "192.168.50"net_hosts = {  adguard = "240"  adguard_catchall = "249"  traefik = "234"  torrent_rpc = "245"}nfs_storage = {  general = "/media/nfs"  torrent = "/mnt/drobo-storage/docker-volumes/torrent"  adguard = "/mnt/drobo-storage/docker-volumes/adguard"}# ENV variable: TRAEFIK_API_KEY sets traefik_api_key# ENV variable: GH_USER, GH_PAT for authentication with private containers

Кластер запускается в сети по адресу 192.168.50.0/24, но по умолчанию MetalLB будет использовать "конец" пула сетевых адресов с адресами 200-250. Поскольку у меня есть домашний торрент-сервер и DNS от Adguard, мне нужно задать для них конкретные адреса. Также мне нужен обслуживающий дашборды и прочие инструменты балансировщик нагрузки Traefik.

Важные замечания:

Значения nfs_*_path должны быть совместимы с настройками, заданными на втором шаге.

Убедитесь, что в конфигурационный файл Kubernetes ~/.kube/config is добавлены данные из файла static/kubernetes.conf. В качестве контекстного имени я использую home-k8s.

Что делает Terraform?

Устанавливает flannel, а также патч конфигурационных параметров для host-gw; устанавливает metalLB и задает сетевые параметры var.network_subnet 200250.

Устанавливает прокси Traefik и открывает к нему доступ в домашней сети через балансировщик нагрузки metalLB. Доступ к самому дашборду Traefik осуществляется по traefik.local.

Дашборд Traefik запускается на кластере Pi.Дашборд Traefik запускается на кластере Pi.

Устанавливает DNS-службу Adguard с запросами к хранилищам данных (persistent volumes claims) с использованием NFS; открывает доступ к дашборду (adguard.local) через Traefik и к самой службе через выделенный в домашней сети IP-адрес.

Adguard Home запускается на кластере Pi.Adguard Home запускается на кластере Pi.

Устанавливает и развёртывает на всех нодах стек мониторинга Prometheus и Grafana. Вносит изменения в DaemonSet Prometheus, устраняя необходимость в монтировании томов. Также через Traefik определяет Grafana как grafana.local. Имя и пароль пользователя Grafana по умолчанию admin:admin. В Grafana уже есть предустановленный плагин devopsprodigy-kubegraf-app. Я считаю его лучшим для мониторинга кластеров.

На кластере Pi запускается дашборд Grafana.На кластере Pi запускается дашборд Grafana.

Устанавливает дашборд Kubernetes и через Traefik определяет его как k8s.local.

Дашборд Kubernetes запускается на кластере Pi.Дашборд Kubernetes запускается на кластере Pi.

Устанавливает и развёртывает торрент-сервер (rTorrent) с веб-интерфейсом Flood. Дашборд отображается как torrent.local. Для хранения данных (в том числе конфигурационных) дашборд использует множество точек монтирования. Причина, по которой значение репликации должно быть установлено в 1, объясняется просто. У rTorrent есть проблемы с файлами блокировки, и, поскольку эта программа использует разделяемый каталог, она просто не запустится, если будет обнаружен файл блокировки. У меня rTorrent настроен на прослушивание на порте 23340.

Поскольку Raspberry Pi запускается с карты памяти, эта карта из-за постоянных операций чтения-записи со временем может выйти из строя. Поэтому я решил регулярно делать резервные копии etcd на NFS. Программа резервного копирования запускается раз в сутки с параметрами, устанавливаемыми Terraform. Каждая резервная копия весит около 32 мегабайт.

Запуск Terraform

Чтобы несколько упростить задачу, я создал Makefile, который может оказаться полезным при настройке. Возможно, понадобится установить следующие переменные окружения:

TRAEFIK_API_KEY // Traefik API keyGH_USER // Github userGH_PAT // Github Personal Access Token

Важно: учётные данные Github сейчас не задействованы, но в ближайшее время я планирую добавить функцию аутентификации для извлечения частных образов из GHCR.

ADDITIONAL_ARGS=-var 'traefik_api_key=$(TRAEFIK_API_KEY)' -var "github_user=$(GH_USER)" -var "github_pat=$(GH_TOKEN)"apply:cd infrastructure; terraform apply $(ADDITIONAL_ARGS) -auto-approve -var-file ../variables.tfvarsplan:cd infrastructure; terraform plan $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsdestroy:cd infrastructure; terraform destroy $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsdestroy-target:cd infrastructure; terraform destroy $(ADDITIONAL_ARGS) -var-file ../variables.tfvars -target $(TARGET)refresh:cd infrastructure; terraform refresh $(ADDITIONAL_ARGS) -var-file ../variables.tfvarsinit:cd infrastructure; rm -fr .terraform; terraform initimport:cd infrastructure; terraform import $(ADDITIONAL_ARGS) -var-file ../variables.tfvars $(ARGS)lint:terraform fmt -recursive infrastructure/

Заключительные замечания

Полный код можно взять на GitHub. Им можно свободно пользоваться и менять как угодно (как обычно, ваши комментарии и замечания горячо приветствуются). Я также опубликовал переделанные образы Docker (rTorrent и Flood) с multiarch-архитектурой, поддерживающей процессоры ARM64. Я довольно часто вычищаю весь кластер и делаю сборку с нуля, используя упомянутый репозиторий, а по мере появления новых функций я буду вносить в него соответствующие изменения.

Автоматизация экономит время и нервы и надо признать! хорошо выполняет свою работу. Именно поэтому DevOps-инженеров так ценят на рынке (зарплаты с пятью нулями в месяц уже обычное дело). Если хотите так же приходите учиться, помимо современных учебных программ, у нас есть менторы из ведущих компаний Рунета, которые поделятся с вами своим практическим опытом.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы
Подробнее..

Перевод Полив газона с помощью модели сегментации изображений и системы на базе Arduino

30.04.2021 20:15:00 | Автор: admin

Инженерная цель данного эксперимента заключалась в разработке системы из трёх частей, а именно модели сегментации изображения, скрипта управления двигателем и спринклера, работающего под управлением Arduino. Эта система должна целенаправленно поливать участки травяного газона, что позволит сэкономить значительное количество воды, а заодно и времени.


Задача

Представьте, что вы прогуливаетесь по своему кварталу мимо красивых зелёных лужаек. Что такое?.. Вода же должна литься на газон, а не на тротуар рядом! Здесь люди ходят! Слева от вас большой газон орошается из-под земли десятком спринклеров. Но, хоть вся трава и поливается обильно, на газоне тут и там заметны проплешины. Многие не видят в этом проблемы эка невидаль! и безмятежно прыгают через лужи. Но проблема здесь не только в лужах, а в том, что, несмотря на использование такого количества воды, газон всё равно не растёт нормально. И проблема эта более серьёзная, чем можно подумать. В Америке от 30 до 60 % городской пресной воды используется для полива газонов, и самое печальное, что приблизительно 50 % этой воды тратится впустую из-за небрежно или неправильно установленной системы полива.

Уход за газонами недешёвое занятие. Чтобы газоны росли так, как нужно, необходимо правильно подобрать удобрения, компост и, самое главное, правильно их поливать. В этой статье я расскажу о разработанном мною решении какие шаги я предпринял при планировании, создании прототипа и внедрении.

Первоначальные соображения

В начале этого проекта у меня не было ни опыта работы с методами машинного распознавания образов, не говоря уже о каком-никаком плане.

Сухие проплешины.Сухие проплешины.

Разница в цвете между светло-коричневыми участками и зеленью здоровой травы сразу бросается в глаза. Я начал решать задачу так: проанализировал RGB-значения различных областей изображения. Если бы я мог выявлять "менее зелёные" области и найти критерий, по которому такие участки можно было выделять, я мог бы их точно определить. Однако всё оказалось не так просто, как я думал.

Главной проблемой было множество внешних факторов, на которые я повлиять не мог, но они могли сами повлиять на результаты. Например, RGB-значение участка изображения может быть изменено ночным электрическим освещением. При таком количестве посторонних факторов система была бы просто нежизнеспособна. Мне определённо нужно было искать лучшее решение.

Сегментация изображений

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

Сегментация изображений.Сегментация изображений.

Используя метод сегментации изображений, я смог бы обнаружить проплешины на газоне. И я засел за изучение методов создания моделей сегментации изображений с помощью Tensorflow.

Я обнаружил замечательную библиотеку под названием ImageAI, написанную Олафенвой Мозесом. Библиотека ImageAI позволяет обнаруживать объекты с использованием набора данных, созданного пользователем. С помощью ImageAI мне удалось подобрать оптимальный набор данных, наиболее подходящий для моей модели.

Первый набор данных / Тестовый

Методы машинного обучения работают только в том случае, если в них заложены данные. Без большого количества точных и осмысленных данных обучать модели и получать прогнозы об окружающем нас мире практически невозможно. Если мы хотим хорошо обучить студента, мы должны предоставить ему как можно больше ресурсов, чтобы обучение было эффективным.

Бесплатные общедоступные наборы данных можно найти на множестве веб-сайтов и во многих приложениях. Эти данные, в частности, могут использовать инженеры при работе над проектами. Однако для моего проекта никаких наборов данных не было, и поэтому мне пришлось создавать свои собственные. Как выяснилось, создание набора данных оказалось чуть ли не самой сложной проблемой во всём проекте.

Набор данных для сегментации изображений состоит из двух частей: изображений и аннотаций. Существует множество способов аннотирования изображений, то есть пометок места расположения объекта на изображении. Я использовал формат Pascal VOC, сохраняющий аннотации в файлах .xml. То есть, если мой набор данных содержит 50 изображений, мне пришлось бы аннотировать каждое отдельное изображение и создать 50 xml-файлов с аннотациями соответствующих изображений.

Вначале у меня было много вопросов о наборе данных: сколько изображений нужно иметь, как аннотировать изображение, как использовать аннотацию в коде, как узнать, подходит ли для модели то или иное изображение, и так далее. Тут мне здорово помог Олафенва Мозес, который, к счастью, написал очень информативную статью о том, как создавать пользовательский набор данных и использовать его в библиотеке ImageAI.

Первым шагом было получение изображений, и он оказался значительно сложнее, чем предполагалось. Как я ни старался, я не смог найти в сети нужные мне высококачественные изображения. Я погуглил строку "трава с проплешинами", и для первого набора данных мне удалось загрузить всего 65 изображений. Чтобы вы понимали большинство наборов данных содержат тысячи изображений, и только тогда их имеет смысл использовать для обучения модели.

После сбора изображений я закомментировал их с помощью программы Label IMG. Я создал каталог с изображениями и каталог для аннотаций. Затем я поставил аннотацию к каждому изображению, обведя в рамки все проплешины. Привожу ниже скриншот программы Label IMG, которую я использовал для аннотирования изображений.

Программа Label IMG.Программа Label IMG.

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

Набор данных 1. Результаты.Набор данных 1. Результаты.

После тестирования модели на изображении моей лужайки перед домом у меня получился вот такой результат. Я так долго не мог добиться, чтобы программа хотя бы доходила до конца без ошибок, что был в восторге даже от того, что она, наконец, обвела проплешину рамкой! То, что полученный результат был ужасен и абсолютно бесполезен для работы системы, я понял уже позднее. Модель, в принципе, способна обозначать область с плохой травой. Однако получившиеся границы очень неточны, и такой результат практически бесполезен.

Наборы данных 24 / Последующие тесты

После оценки полученных на первом наборе данных результатов стало очевидно, что для правильной разработки модели мне не хватает изображений. Я понял, что мне нужно гораздо больше данных, но загружать изображения вручную.... нет уж, увольте.

Полистав Интернет, я обнаружил такую вещь, как парсеры (web scrapers). Парсер это инструмент, способный извлекать данные и содержимое с веб-сайтов и загружать эти файлы на локальный компьютер. Это было как раз то, что мне нужно, и после изучения краткого руководства я создал элементарный парсер, загружающий изображения, содержащие ключевые слова "трава с проплешинами", "плохая трава" и "плохой газон". С помощью этого парсера я собрал папку из 180 изображений, и это был мой второй набор данных.

После удаления всех непригодных изображений у меня получился третий набор данных из 160 изображений. После обучения модели на третьем наборе данных результаты всё равно оставались нестабильными и неточными. Как и в прошлый раз, я подумал, что главная проблема заключается в отсутствии достаточного количества изображений в наборе.

Я обратился кое к кому за помощью, поизучал ещё теорию и вычитал, что есть такой хитрый приём аугментация изображений (image augmentation), то есть процесс, с помощью которого набор данных может быть расширен посредством внесения изменений в существующие изображения. Количество изображений меняется за счёт того, что меняются их ориентация и RGB-значения пикселей. Пример аугментации изображений.

Пример аугментации изображений.Пример аугментации изображений.Пример дополненных и реальных данных.Пример дополненных и реальных данных.

Для нас, людей, все приведённые выше изображения одинаковы, если не считать крохотных изменений; однако для компьютера, который рассматривает изображения как массивы значений пикселей, эти изображения совершенно разные. Попробуем использовать эту идею и создадим больше обучающих данных. И вот, я, страдавший от нехватки изображений, сразу получил их много больше, чем значительно улучшил свой набор данных. Для пополнения всего каталога изображений я использовал библиотеку Keras с определёнными параметрами и граничными значениями. Мой четвёртый набор данных содержал 300 изображений. Теперь я был уверен, что модель, наконец, заработает. Но неожиданно возникла ещё одна серьёзная проблема.

Проблема совместимости библиотек

В большинстве проектов по программированию, особенно проектов в области анализа и обработки данных, для работы определённых функций и инструментов требуется ряд библиотек и зависимостей. В этом конкретном проекте библиотека ImageAI потребовала установки определённых версий различных библиотек, в том числе tensorflow-gpu 1.13 и keras 2.4.

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

В январе вышло обновление библиотеки ImageAI, и оно сразу поставило крест на работе других библиотек, которые я использовал в проекте, оно было просто несовместимо с ними. И вот, время обучения, обычно составлявшее около 5 минут на эпоху, стало составлять более 14 часов. Кроме того, модель постоянно перестраивалась под данные, а это свидетельствовало о том, что она была неспособна генерализовывать новые данные.

Сначала я подумал, что такое длительное время обучения обусловлено большим количеством изображений в наборе данных, но скоро стало очевидно, что проблема кроется не в этом и она более серьёзная. Я ещё раз обратился к учебникам, но ничего путного найти не смог. Если бы вы знали, сколько различных вариантов я перепробовал, чтобы устранить проблему!.. Я пробовал менять способы извлечения набора данных, менять аппаратный ускоритель, менять размер пакета... Ни один из этих вариантов не снизил время обучения модели.

Но тут я наткнулся на недавно опубликованный пост в разделе проблем и вопросов на Github, в котором кто-то жаловался на такую же точно проблему, как и у меня. Олафенва Мозес, создатель библиотеки, ответил на это пост и объяснил проблему, предложив собственное решение. Суть этого решения была такой: три основные библиотеки Tensorflow, Keras и ImageAI должны иметь чётко определённые версии.

Окончательный набор данных / Модель

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

Набор данных 4. Результаты.Набор данных 4. Результаты.

Я решил добавить ещё больше данных и в итоге получил набор из 1738 изображений. Чтобы обучить модель, мне пришлось аннотировать каждое изображение, вручную очерчивая участки на каждом из них. К счастью, этой работой я занимался не один, а с друзьями. Менее чем за два часа нам удалось аннотировать все изображения.

Окончательный набор данных был разделён на 1400 тренировочных и 338 тестовых изображений. После обучения модели за 5 эпох я провел валидацию и получил впечатляющий результат 0,7204, что, безусловно, стало моим лучшим результатом с начала проекта.

Набор данных 5. Результаты.Набор данных 5. Результаты.

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

Создание спринклера

Схема системы.Схема системы.

Чтобы контролировать полив, мне нужно было обеспечить вращение спринклера по двум осям так я мог бы контролировать расстояние и направление разбрызгивания воды. Я использовал два шаговых двигателя NEMA с разными характеристиками мощности и крутящего момента. Нижний двигатель NEMA-23 использовался для управления направлением разбрызгивания воды. Верхний двигатель NEMA 14 вращал стержень с закреплённым на нём с помощью трубки из ПВХ спринклером, чтобы можно было управлять расстоянием, на которое разбрызгивается вода. Для управления этими двигателями я использовал Arduino, два регулятора частоты вращения двигателя A4988 и два адаптера питания 12 В.

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

Я рассчитал угол, на который необходимо повернуть спринклер от начального места до центра проплешины, определил приблизительное количество пикселей/футов на моём изображении и после этого вычислил приблизительное расстояние до центра проплешины.

Результат работы скрипта управления двигателем.Результат работы скрипта управления двигателем.

На рисунке выше показаны результаты работы скрипта управления двигателем. Их них следует, что спринклер должен повернуться на 42, а расстояние до проплешины составляет примерно 3 м 89 см.

Согласно скрипту угол до проплешины составляет 42.Согласно скрипту угол до проплешины составляет 42.

Длина рулетки 3 м (10 футов); от центра проплешины до спринклера примерно 12 футов 9 дюймов (3,8862 м), как и предсказал скрипт.

Я выполнил несколько тестов для определения коэффициентов преобразования шагов в углы и шагов в футы, и это позволило мне создать скрипт Arduino для ориентирования спринклера на проплешину с использованием данных скрипта управления двигателем.

Готовность к окончательному тестированию

К сожалению, всю систему в итоге мне протестировать не удалось.

Перед окончательным тестом я стал проверять готовую конструкцию, чтобы убедиться, что она способна держать спринклер и поворачивать его. Но я был очень неосторожен: в моторы попала вода, и они сгорели. Двигатели были довольно дорогими, а покупать новые было непрактично.

Анализ кода / Краткий обзор

Google Colab PatchDetector

PatchDetector на Github

!wget https://github.com/fazalmittu/PatchDetection/raw/master/BlackedOutLawn.jpg!wget https://github.com/fazalmittu/PatchDetection/raw/master/BlackedOutLawn_Detected.jpg!wget https://github.com/fazalmittu/PatchDetection/releases/download/v3.0/detection_model-ex-04--loss-25.86.h5!wget https://github.com/fazalmittu/PatchDetection/releases/download/v3.0/detection_config1700_v1.json!wget https://github.com/fazalmittu/PatchDetection/raw/master/BlackedOutFullLawn.jpg!wget https://github.com/fazalmittu/PatchDetection/raw/master/BlackedOutFullLawn_Detected.jpg!wget https://github.com/fazalmittu/PatchDetection/raw/master/SprinklerPOV.jpg!wget https://github.com/fazalmittu/PatchDetection/raw/master/SprinklerPOV_Detected.jpg!wget https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/pretrained-yolov3.h5

Этот код используется для импорта модели и изображений (для тестирования), которые я хранил на Github, чтобы их можно было легко извлечь с помощью Google Colab. Последняя строка импортирование предварительно обученной модели YOLO-v3, которая, в свою очередь, использовалась для обучения модели (трансферное обучение).

!pip uninstall -y tensorflow!pip install tensorflow-gpu==1.13.1!pip install keras==2.2.4!pip install imageai==2.1.0!pip install numpy

Этот код импортирует определённые версии библиотек, необходимых при проектировании. Используемые библиотеки: tensorflow-gpu, keras, imageai и numpy.

%load_ext autoreload%autoreload 2  from google.colab import driveimport sysfrom pathlib import Pathdrive.mount("/content/drive", force_remount=True)base = Path('/content/drive/MyDrive/PatchDetectorProject/')sys.path.append(str(base))zip_path = base/'AugmentedDataSetFinal.zip'!cp "{zip_path}" .!unzip -q AugmentedDataSetFinal.zip!rm AugmentedDataSetFinal.zip

Этот код используется для получения набора данных из места, которое я определил для него на Google-диске. Для сохранения на Github набор данных был слишком велик, поэтому мне пришлось использовать альтернативный источник.

from imageai.Detection.Custom import DetectionModelTrainerfrom __future__ import print_functiontrainer = DetectionModelTrainer()trainer.setModelTypeAsYOLOv3()trainer.setDataDirectory(data_directory="AugmentedDataSetFinal")trainer.setTrainConfig(object_names_array=["patch"], batch_size=4, num_experiments=5, train_from_pretrained_model="pretrained-yolov3.h5")trainer.trainModel()

В этом коде осуществляется обучение модели. В нём указывается объект для поиска ("patch" (проплешина)), количество эпох (5), размер пакета (4) и используется трансферное обучение.

from imageai.Detection.Custom import DetectionModelTrainertrainer = DetectionModelTrainer()trainer.setModelTypeAsYOLOv3()trainer.setDataDirectory(data_directory="AugmentedDataSetFinal")trainer.evaluateModel(model_path="AugmentedDataSetFinal/models", json_path="AugmentedDataSetFinal/json/detection_config.json", iou_threshold=0.5, object_threshold=0.3, nms_threshold=0.5)

Этот код используется для валидации модели. С окончательной моделью я получил оценку 72,04 %. Я считаю этот результат очень хорошим, учитывая, что обнаруживаемые мною объекты представляют собой проплешины без определённой формы, цвета или размера.

from imageai.Detection.Custom import CustomObjectDetectionfrom PIL import Image, ImageDrawimport numpy as npdetector = CustomObjectDetection()detector.setModelTypeAsYOLOv3()detector.setModelPath("/content/detection_model-ex-04--loss-25.86.h5")detector.setJsonPath("/content/detection_config1700_v1.json")detector.loadModel()detections = detector.detectObjectsFromImage(input_image="SprinklerPOV.jpg", output_image_path="SprinklerPOV_Detected.jpg", minimum_percentage_probability=30) i = 0coord_array = []for detection in detections:    coord_array.append(detection["box_points"])    print(detection["name"], " : ", detection["percentage_probability"], " : ", detection["box_points"])    i+=1print(coord_array)detected = Image.open("SprinklerPOV_Detected.jpg")box = ImageDraw.Draw(detected)for i in range(len(coord_array)):  box.rectangle(coord_array[i], width=10)detected

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

!wget https://github.com/fazalmittu/PatchDetection/raw/master/FeetToPixel.JPGimg_ft = Image.open("FeetToPixel.JPG")ft_line = ImageDraw.Draw(img_ft)ft_line.line([(175, 1351), (362, 1360)], fill=(0, 255, 0), width=10)ft_distance = np.sqrt(9*9 + 187*187)print(ft_distance)img_ft

С этого кода начинается скрипт управления двигателем. Код импортирует изображение, на нём разложенная на траве рулетка. Я использовал это изображение для определения примерного количества пикселей в футе.

Пиксели/футы.Пиксели/футы.
from PIL import Image, ImageDraw#TOP LEFT = [0, 1]#BOTTOM LEFT = [0, 3]#TOP RIGHT = [2, 1]#BOTTOM RIGHT = [2, 3]img = Image.open("SprinklerPOV_Detected.jpg")middle_line = ImageDraw.Draw(img)avg_1Line = ImageDraw.Draw(img)avg_2Line = ImageDraw.Draw(img)avg_1 = (coord_array[1][1] + coord_array[1][3])/2avg_2 = (coord_array[1][0] + coord_array[1][2])/2middle_line.line([(2180, 0), (2180, 3024)], fill=(0, 255, 0), width=10)# avg_1Line.line([(coord_array[1][0], coord_array[1][1]), (coord_array[1][0], coord_array[1][3])], fill=(255, 0, 0), width=10)# avg_2Line.line([(coord_array[1][0], coord_array[1][3]), (coord_array[1][2], coord_array[1][3])], fill=(255, 0, 0), width=10)def find_angle():  line_to_patch = ImageDraw.Draw(img)  line_to_patch.line([(avg_2, avg_1), (2180, 3024)], fill=(255, 0, 0), width=10)  length_1_vertical = 3024 - avg_1  length_2_horizontal = 2500 - avg_2  print("Distance = ", np.sqrt(length_1_vertical*length_1_vertical + length_2_horizontal*length_2_horizontal)/ft_distance, "ft")  angle_radians = np.arctan(length_2_horizontal/length_1_vertical)  angle = (180/(np.pi/angle_radians)) #Convert radians to degrees  return angleprint(avg_1, avg_2)print(find_angle())img

Этот код используется для определения угла до проплешины. Я нарисовал треугольник от центра проплешины до места, где вначале находился спринклер. Для определения угла до центра проплешины я воспользовался тригонометрическими формулами и координатами каждой из точек. Для определения расстояния до центра проплешины в футах я также использовал тригонометрические функции и коэффициент пересчёта пикселей в футы.

/* *  * Fazal Mittu; Sprinkler Control *  */const int ROTATEstepPin = 3; const int ROTATEdirPin = 4; const int ANGLEstepPin = 6;const int ANGLEdirPin = 7;const int ROTATEangle = 42.25191181;//TODO: Find Conversion: Steps --> Angle 1000 steps = 90 degreesconst int ANGLEangle = 12.76187539;// pixels --> ft: 187 pixels = 1 feetbool TURN = true;float angleToSteps(float angle){  float steps = 1000/(90/angle);  return steps;}float ftToSteps(float feet) {  float steps = 100/(8/feet);  return steps;}void setup() {  Serial.begin(9600);  pinMode(ROTATEstepPin,OUTPUT);   pinMode(ROTATEdirPin,OUTPUT);  pinMode(ANGLEstepPin,OUTPUT);   pinMode(ANGLEdirPin,OUTPUT);}void loop() {  int ROTATEsteps = angleToSteps(ROTATEangle); //Angle was determined using Python Script  int ANGLEsteps = angleToSteps(ANGLEangle);  delay(7000);  if (TURN == true) {    for(int x = 0; x < ROTATEsteps; x++) {      digitalWrite(ROTATEstepPin,HIGH);       delayMicroseconds(500);       digitalWrite(ROTATEstepPin,LOW);       delayMicroseconds(500);     }    delay(5000);    for (int x = 0; x < 100; x++) { //100 steps = 8 ft, 0 steps = 14.5 ft      digitalWrite(ANGLEstepPin,HIGH);       delayMicroseconds(500);       digitalWrite(ANGLEstepPin,LOW);       delayMicroseconds(500);    }  }  TURN = false;}

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

Заключение

Даже несмотря на печальную судьбу двух двигателей, работа над этим проектом доставила мне истинное удовольствие. Я узнал, как собирать данные, как увеличивать количество изображений, как строить модели. Я понял, как интерпретировать результаты, как создавать систему управления, как подключать механические части, а также научился разгребать подводные камни на пути к успеху.

А если вы хотите научиться работать с данными и обрабатывать их помощью машинного обучения обратите внимание на наш курс по ML или на его расширенную версию Machine Learning и Deep Learning, партнером которого является компания Nvidia.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы
Подробнее..

Декоративная подсветка лестницы. Часть вторая. Программная

06.05.2021 12:20:25 | Автор: admin

Доброго всем дня! В предыдущей части я представил на суд свою реализацию избитой идеи подсветки лестничного марша. Статья касалась только "железной" части проекта. В этот раз постараюсь описать процесс "оживления" сего девайса. Процесс получился достаточно затяжной, поскольку проект ведется "в свободное от основной работы время" с перерывами и явно проигрывает по важности прочим домашним делам :). Доработка ведется и сейчас, но уже есть, что показать.

Среда разработки

Пусть меня закидают грязными тряпками, но тут для меня однозначно лучшая - Keil uVision (4)5. Эта одна из самых мощных IDE для большого количества камней. Я даже не буду агитировать за нее и описывать все преимущества, поскольку мое мнение в данном вопросе крайне предвзято. Просто я давно работаю с этой IDE и она мне нравится. Самый большой ее минус - она платная и стоит очень конских денег. Но только не в данном случае. На наше счастье у Keil есть демо режим с ограничением в 32Кб. А в LPC11C14 всего 32Кб! Получается для этого камня можно вполне легально и полноценно использовать этот мощный инструмент! Достаточно скачать его с официального сайта. Заполняем простую анкету и получаем ссылку на скачку.

Остался открытым вопрос работы с "железом". Самый удобный - это использовать заводской программатор. Keil поддерживает большое количество отладочных систем и JTAG адаптеров. Такой подход позволит вести полноценную отладку проекта. А что делать, если нет отладчика\программатора и требуется только прошить контроллер? А на этот случай есть замечательная утилита Flash Magic, которая позволяет оживить устройство, используя вшитый в ARM загрузчик. Данная утилита работает только с контроллерами NXP. Загрузка происходит через UART. Эта замечательная прога не раз выручала меня в командировках, когда под рукой не было программатора или он выходил из строя. Замечу, что все необходимые сигналы у девайса уже выведены на разъем для программирования. Ссылка для скачивания Flash Magic здесь.

Сборка платы

Долго ли, коротко ли шли платы из Поднебесной, но вот они у меня на столе.

Пустышки на столеПустышки на столе

Монтаж не заставил себя долго ждать и вот что получилось в результате:

Плата смонтированаПлата смонтирована

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

Подготовка софта

По началу тут было всё относительно просто. Пишем\адаптируем все необходимые драйверы для периферии, а именно:

  • драйвер датчика освещенности MAX44009EDT

  • драйвер датчика расстояния VL53L0X

  • драйвер управления адресной лентой

  • драйвер CAN интерфейса

После того, как все драйвера были подготовлены наступила очередь первого тестового включения на публике.

Тестовое включениеТестовое включение

Признаюсь честно - особого эффекта сия конструкция на домашних не произвела. Папаня и раньше всякие свистелки-перделки делал. Одним фонариком больше, одним меньше. Интерес проявила лишь домашняя любимица - кошка Куня. И та все норовила лапой зацепить светлячка. Ну да ладно, будем делать дальше.

Здесь хотел сделать небольшое техническое отступление, поскольку хронологически событие, с которым оно связано, именно здесь и наступило. Я раньше не работал с компонентами из ближайшего магазина и цели максимально снизить стоимость у меня на работе не стоит. Спрос идет за качество. А тут я в полной мере ощутил что значит "китайское электричество до конца не изучено". Просто все работало - работало, а в один не очень прекрасный день вдруг перестало. Причина была выявлена очень быстро. Сгорел линейный стабилизатор AMS1117-5.0. И не просто сгорел сам и все, а прикинулся перемычкой и утащил с собой всех, кто на него надеялся. Цензурных слов у меня в тот момент не было. Я, как человек, привыкший доверять техническому описанию на компоненты не мог понять, что не так. Стабилизатор работал в штатном режиме. А фраза из описания "The AMS1117 series have internal power and thermal limiting circuitry designed to protect the device under overload conditions" уже была похожа на издевку. Немного полазив по просторам инета я понял, что не у меня одного такие проблемы с этим стабилизатором. А что вы хотите? Дешево! Какой спрос? Короче, не имея никакого желания заново перепаивать половину схемы я поставил годами проверенный вариант - LM1117-5.0 (кстати, не в Чип-Дипе купленный). На мое счастье он встал на плату как родной.

Ну да ладно, плата восстановлена, можно двигаться дальше.

И тут наступил какой-то творческий ступор. А что дальше? Есть железо, на котором можно сделать много разных эффектов. А что делать конкретно? Можно просто включать монотонную подсветку (неинтересно и скучно), можно поиграть с цветами (пестрота быстро надоест), можно организовать необычные динамические сцены. Много чего можно, надо на чем-то остановиться. Здесь главное не переборщить с творчеством!

Тут я очень долго думал, откладывал на потом, опять думал и вот что в результате решил. Сделаю что-нибудь необычное. Не такое, как у всех. Может подобное и есть где-то, но я не нашел. Суть эффекта в следующем:

  • в темноте светится дежурная подсветка (первая ступень)

  • при пересечении датчика плавно разгорается центральная полоса подсветки вдоль всего пролета лестницы (видим линию по центру вдоль пролета)

  • как только линия вдоль пролета разгорелась, она разделяется на две, которые расходятся в стороны (посадочные огни вдоль полосы)

  • между этими огнями начинает плавно по очереди разгораться подсветка ступеней

Это описание касается только стадии включения. Гашение ступеней можно сделать аналогично, только в обратную сторону или просто плавно погасить.

Что-же потребуется для реализации?

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

Перемычки из витой пары между фрагментами (ступенями)Перемычки из витой пары между фрагментами (ступенями)

Для того, чтобы выполнить вышеописанные условия ленту пришлось уложить "змейкой".

Логическая организация ступенейЛогическая организация ступеней

Кроме этого необходимо не забыть, что потребление сего чуда достаточно большое и питание каждого фрагмента (ступени) желательно сделать индивидуальным.

Для того, чтобы проще было "рисовать" на таком "экране" и не требовалось каждый раз вычислять положение нужной LED-точки в программе подготавливается массив, содержащий "карту" их расположения:

// создание карты светодиодов (см. файл LED-карты)void CREATE_LEDS_MAP (void){static const uint8_t stepPerStair = STAIRS_NUM;static const uint8_t ledsPerStep = LEDGROUPS_FOR_STAIR;for (uint8_t step = 0; step < stepPerStair; step++){for (uint8_t led = 0; led < ledsPerStep; led++){if (step % 2 == 0){LedMap[led][step] = ((step) * ledsPerStep) + led + 1;            }            else            {LedMap[led][step] = ((step + 1) * ledsPerStep) - led;            }        }    }}

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

Не обращайте внимание на внешний вид ступени - это временный вариант Не обращайте внимание на внешний вид ступени - это временный вариант

В качестве заключения

Я постарался описать всё, что происходило в процессе разработки сего девайса, кроме собственно жирной точки в виде финального видео. Никак не доходят руки смонтировать все непосредственно на лестнице (да и лестница, мягко говоря, пока не оформлена). Просто я решил больше не затягивать, а показать то, что есть пока проект не затянуло в болото. Если кому интересно выкладываю рабочие файлы:

Печатная плата

Программа

P.S. Если у кого-то будет желание доделать или внести что-то свое могу отдать два комплекта пустышек (по комплекту на лестницу) и процы к ним (как помните, у меня их много).

Подробнее..

Рождение Гуся как создаётся умный стрелковый тренажёр

18.05.2021 00:13:00 | Автор: admin

Гусь домашний тренировочно-игровой стрелковый стенд с лазерными мишенями и интеллектуальным сопровождением для отработки меткости и техники стрельбы, а также для развлечения всех любителей пострелять!

Тренажер представляет собой несколько умных устройств, которые должны работать в связке автономно, а при online включении становиться частью глобальной облачной инфраструктуры. Системы рейтингов, редакторы и магазины сценариев игр и программ тренировок то, над чем еще предстоит пофантазировать и во что должен эволюционировать Гусь.

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


Одной прекрасной ночью, накануне сдачи экзамена по безопасному владению оружием, мне приснился сон - я был в тире и стрелял по световым мишеням. Сначала показалось, что я очутился в Counter Strike и отрабатываю AIM (меткость), но вскоре дошло это тренировка! Я не просто стрелял по произвольным мишеням, холостил, отрабатывал чёткость и плавность движений. Тир как будто был наделён интеллектом, контролировал каждое моё движение и корректировал программу занятий. Оказалось, нас много, все стрелки тренируются и соревнуются, каждый у себя дома.

Это было чертовски увлекательно!

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

Идея была объединить игру, тренировку и современные технологии.

Гусиные пёрышки

Гусь каждому придётся по вкусу, он прост и ненавязчив. Умён и хитёр. Его лазерные мишени не так просто подстрелить, когда с ним соревнуешься. А когда тренируешься он мягок и покладист, только держи на мушке. Благодаря своему зоркому глазу Гусь всё видит, а электронному уму ещё и точно знает, когда и куда стреляли.

У Гуся есть компаньон. На оружие или муляж устанавливается насадка-контроллер с универсальным оптическим датчиком спуска и лазерной имитацией дробового пятна. С напарником Гусь обретает чуткий слух и осязание. Гусь запомнит удачные и плавные выстрелы, обратит внимание на резкие движения и неудачный выход на цель, а стрелок получит статистику и рекомендации.

Гусиные навыки

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

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

Сценарии включают в себя траектории, характеристики движения, моменты появления и яркость цели, произвольные задержки и переходы. Для тренировки в режиме "Спортинг" устройство запускает цель по основным стандартным траекториям, например боковые или угонные мишени. Для тренировки скорости реакции и меткости мишени появляются в произвольных местах и исчезают. А в игровых режимах задания ограничиваются только фантазией создателя, который будет реализовывать задуманный геймплей в виде набора сценариев.

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

Собирая статистику промахов и попаданий, показания с гироскопа и акселерометра, путем нехитрых вычислений и машинного обучения, можно получить множество полезных показателей. Сравнивая эти данные с результатами разных программ тренировок становится возможным выявление наиболее эффективных. Это с одной стороны. С другой развитие в сторону коллаборации пользователей и объединение в своего рода социальную сеть с тренерами и стрелками, программами упражнений, игровыми уровнями, соревнованиями и рейтингами. Гусь в таком представлении выполняет роль терминального устройства для взаимодействия пользователей удалённо.

Arduino, STM32, ESP32 - о железяках...

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

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

Будучи опытными программистами, но новичками в электронике, мы двинулись в неизвестность как обычно, от простого к сложному, преодолевая трудности и неизбежно натыкаясь на непредвиденные неприятные сюрпризы.

Первая же попытка собрать прототип на отладочной плате и написать программу не увенчалась успехом. Скудный объем оперативной и Flash памяти контроллера Arduino не позволил даже запрограммировать движок проигрывания сценариев, не говоря уже о подключении сенсорного экрана, беспроводных датчиков и видео модуля с распознаванием.

Обсудив с коллегой, мы решили закончить войну с ардуинкой за ресурсы и попробовать микроконтроллер STM32. Взвесив все за и против, решено было для начала взять также отладочную плату, но сразу помощнее, так как наши амбиции росли, а планируемый функционал расширялся. Популярная BluePill на STM32F103 на фоне возросших амбиций уже тоже смотрелась слабовато. Поэтому пока мы остановились на плате WeAct на STM32f411 c 512Kb Flash и 128Kb оперативной памяти.

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

Шина питания и автономность

По задумке устройство однозначно должно быть автономным с запасом питания минимум на час-два активной тренировки. При этом по схемотехнике шина питания должна включать как минимум две линии линия стабильного напряжения 3.3В и линия ~5-6В для питания сервоприводов.

Первая идея была простой взять за основу вариант с последовательным 2S подключением пары аккумуляторов 18650. Имея до 9В на выходе, ставим понижающий импульсный преобразователь, формирующий стабильные 5-6 В шины сервоприводов, и к ней же в свою очередь подключаем отладочные платы микроконтроллеров (у них на бору вариант стабилизатора AMS1117).

Вариант оказался абсолютно не из той оперы... Во-первых, сервоприводы при движении создают помехи, которые сгладить не просто, конденсаторы тут не помогали. Во вторых, сложности с зарядкой. Требовалось дополнительно ставить модуль балансировки заряда и подбирать подходящий блок питания. А хотелось-то сделать "как у всех" поддержать стандартную зарядку USB Type-C.

Взвесив за и против, мы выбрали путь повышения напряжений и схему параллельного подключения аккумуляторов 2P. Тем более, что под руками оказалась замечательная плата TP4056 в варианте с USB Type-C, с ней проблема контроля заряда и разряда аккумулятора оказалась закрыта.

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

На выручку пришли старые добрые линейные стабилизаторы серии LM780x. Со стабилизатором LM7805 и парой конденсаторов линии питания наконец стали ровными, не зависимо от работы сервоприводов.

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

Голова целеуказателя и видео-модуль

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

В качестве первого и пока устоявшегося варианта на эту роль отлично подошла плата ESP32-CAM. Одновременно на этот же модуль была возложена вся коммуникация, Bluetooth (BLE) для взаимодействия с насадкой-контроллером и датчиком спуска на оружии, а WiFi для интеграции с облаком и обновлений.

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

Насадка-контроллер и датчик спуска

В качестве начинки для насадки-контроллера сразу решено было использовать знакомый ESP32, но на этот раз ESP32-WROOM-32 без отладочной платы. Bluetooth (BLE) для связи насадки с базой, а сам микроконтроллер для обработки показаний с датчиков гироскопа/акселерометра и распознавания голосовых команд с микрофона.

Датчик спуска (курка) решено было реализовать в виде внешнего модуля на трех проводах с подключением через разъем наушников MiniJack. В идеале датчик спуска должен крепиться на спусковую скобу, не мешая производить выстрелы, и фиксировать пересечение спусковым крючком луча оптопары.

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

Питание в навесном устройстве также оказалось задачей не с самым очевидным решением.

Время автономной работы должно быть сравнимо с базой, при этом достаточно иметь одну шину питания со стабильными 3.3В. С учетом наличия мощного зеленого лазера и прожорливого при беспроводной работе ESP32, стабилизатор должен выдавать ток хотя бы до 750мА.

Здесь напрашивается несколько вариантов. Первый и самый простой использовать стабилизатор на 3.3В (тот же AMS1117) и работать с аккумулятором в верхней половине заряда. Другими словами, заведомо использовать более мощный аккумулятор, но разряжать его не ниже допустимого для стабилизатора минимального напряжения. Второй вариант использовать buck&boost преобразователь, способный выдавать стабильные 3.3В как при большем, так и меньшем входном напряжении классно и удобно. Но на практике этот вариант оказался дорогим в реализации, такие чипы сложно найти в наличии и они бьют по цене устройства. И третье решение в лоб использовать дешевый повышающий преобразователь на 5В и после него понижающий стабилизатор на 3.3В.

Пока мы решили остановиться на первом варианте, хотим провести ряд экспериментов и замеров, чтобы сравнить разницу эффективности первого варианта с неиспользованием части емкости аккумулятора и третьего варианта с потерями в лишнем стабилизаторе.

Включение и выключение устройств

Следующим моментом, непосредственно влияющим на автономность устройства, оказалось управление питанием, а именно, как будет реализовано включение, выключение и спящий режим.

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

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

В насадке-контроллере Гуся подобный тумблер применять было бы не эстетично. Здесь напрашивается всего одна тактовая кнопка и для управления питанием, и для управления устройством во время работы. Было решено спроектировать схему на транзисторе, которая будет одновременно выполнять несколько функций:

  • удерживание кнопки при выключенном устройстве включает;

  • включенный микроконтроллер состоянием пина управляет ключевым режимом транзистора на линии питания;

  • кнопка при включенном устройстве работает как тактовая, подключенная к входному пину микроконтроллера;

  • длительное удерживание кнопки при включении устройства вводит прошивку в режим обновления;

  • нажатие на дополнительную копку принудительно отключает питание, переводя транзистор в закрытый режим.

Данная схема реализована пока только в теории, хотя и проверена на симуляторе, но планируется ее применить в следующей версии платы насадки-контроллера. Возможно, сообщество Хабра подкинет хорошие идеи или поможет обнаружить незамеченные косяки.

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

Калибровка лазера

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

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

Лабораторная птица

Гусь амбициозен, но молод и скромен. Многому ещё Гусю нужно научиться и набраться опыта, сменить оперение и вырасти на потеху всем охотникам и стрелкам. На волю Гусю хочется, но пока в лаборатории ему теплее и комфортнее.

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

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

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

На текущем этапе мы реализовали все основные технические решения, некоторые из которых еще стоит доработать. Полностью разработали дизайн корпусов, подготовили модели для 3D печати и литья. Мы подобрали комплектующие и воспроизвели почти весь цикл производства устройства своими силами в условиях "гаража", собрали первый рабочий экземпляр, вместе с которым вскоре шагнём на следующий этап выход на рынок. Но в этом нам потребуется помощь, заинтересованность потенциальных пользователей и вовлечённость специалистов.

Гусь в Facebook, VK, Intagram, Telegram.

Подробнее..

Электросамокат не только средство передвижения

20.06.2021 16:11:04 | Автор: admin

Простая доработка электросамоката на примере модели Kugoo M5, для возможности небольших перевозок. Возможно раздельное использование доработок 1, 2.

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

1:

Наименование

Кол. шт.

Цена, ~

Примечание

Электросамокат с сидением, имеющий расположение крепления в задней части, схожие с моделью Kugoo M5.

1

50 000

Ввиду разнообразия моделей, подобные приспособления могут быть использованы на разных моделях.

Пластиковая корзина (багажник, корзина подсидельная)

1

1800

Болт оцинкованный М5х16 мм.

5

28

Для крепежных работ следует использовать диаметр болтов не менее используемых в элементах багажника.

Болт оцинкованный М5х10 мм.

6

28

Гайка с фланцем М5.

11

40

Шайба пружинная 5 мм (гровер шайба).

12

30

Шайба оцинкованная 5 мм.

4

5

Крепление плоское, 210х90х2 мм

2

230

Уголок усиленный монтажный 60x60x100х1.5 мм.

2

116

Сверло по металлу 5 мм

1

100

Элементы электросамоката не требуют сверления, нужно для крепежа

Черная матовая эмаль с кисточкой

1

130

15 мл

Стоимость крепежа может быть ниже, например при покупке "на вес" либо поштучно. Предполагается наличие дрели, двух ключей М8, плоскогубцев, напильника по металлу либо мультитула, миниатюрной газовой горелки либо "турбо" зажикалки, ножа-резака (наподобии канцелярского либо сапожного), свободного времени (количество зависит от мастерства, ~ 3ч.).

Сразу оговорюсь, почему бы не использовать штатное крепление пластиковой корзины, входящее в комплект?

  • Во первых оно сделано некачественно, крепление только к стойке сидения, при движении корзина сдвигается по горизонтали. Крепление к низу (в виде предлагаемого гнутого прутка) - не может быть прикреплено к штатному багажнику электросамоката и к тому же его отверстия крепления различны по длине (кривые). Предлагаемое крепление более крепкое и универсальное.

  • Во вторых теряется возможность использования рюкзака (процесс 2), что сильно уменьшает вместимость перевозимых вещей.

Процесс 1.

Использование более тонких и менее габаритных Уголков усиленных монтажных и Крепления плоского нежелательно, диаметр болтов 5 мм и отверстий в багажнике электросамоката совпадают.

Изображения крепежа

Один из углов "Уголка усиленного монтажного" нужно закруглить, также желательно убрать острые внешние грани (мультитул, надфиль, напильник и т.п.)

Закругление

Снимаем крепежные элементы, не несущие грузовую нагрузку, диаметром 5 мм.

У элемента "2" будет крепление провода освещения для заднего фонаря - штатный болт заменяем на: Болт оцинкованный М5х16 мм - > Шайба пружинная || Крепление провода -> Гайка с фланцем Символами -> здесь и далее обозначена последовательность элементов крепежа; символами || - элемент багажника электросамоката, уголка, пластины.

Начало

Крепим Уголки усиленные монтажные, используем Болты оцинкованные М5х10 мм:

1 - Гайка с фланцем (фланцем наружу, плоскостью гайки параллельно креплению багажника) -> Уголок усиленный монтажный -> Шайба пружинная -> Болт
2 - Гайка с фланцем -> Шайба оцинкованная -> Шайба пружинная || Шайба пружинная (c внутренней стороны уголка) -> Болт
3 - Болт -> Шайба пружинная -> Шайба оцинкованная || Гайка с фланцем

Крепим уголки

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

Эмаль

Примеряем Крепление плоское, намечаем отверстия, сверлим их в креплении, примеряем Болты оцинкованные М5х16 мм

Крепление плоское

Примеряем Пластиковую корзину, делаем в ней отверстия, прикрепляем конструкцию в следующем порядке (снизу вверх):
Болт оцинкованный М5х16 мм -> Шайба пружинная || Уголок усиленный монтажный || Крепление плоское || Пластиковая корзина || Крепление плоское -> Гайка с фланцем (фланцем вниз).

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

Корзина

Размещение Пластиковой корзины выбрано специально как указано на фото, для наибольшей крепости и возможности доработки 2. Пластиковые накладки, на багажнике (под 45) - относятся к доработке 2.

Задний фонарь, хотя частично накрывается пластиковой корзиной, с расстояния от 1 м. отлично виден, и корзина не закрывает световой поток. Желающие увеличить световой поток могут приклеить на низ корзины светоотражающую полоску (например, отрезок металлизированного скотча).

На пол корзины, для исключения "натирания" выступающими гайками можно положить вырезанный мягкий и легкий материал (например коврик ~ 36р. и др.).

2:

Наименование

Кол. шт.

Цена, ~

Примечание

Электросамокат с сидением, имеющий расположение крепления в задней части, схожие с моделью Kugoo M5.

1

50 000

Ввиду разнообразия моделей, подобные приспособления могут быть использованы на разных моделях.

Перегородка-сифон к дождеприемнику

1

80

Двухсторонний скотч

1

150

Рюкзак

1

650

Желательно выбирать модель с крепкой, непромокаемой тканью

Процесс 2.

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

Берем Перегородку-сифон и с помощью миниатюрной газовой горелки либо "турбо" зажикалки, плоскогубцев и ножа, с периодическими прикидками делаем форму похожую на фото

Подставка под рюкзак

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

Вырез

При желании конечно можно сделать поаккуратнее на вид, но по надежности все получилось крепко.

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

Общий вид с доработками, способ крепления рюкзака показан:

Когда рюкзак и пластиковая корзина не заполнены - рюкзак, трос-замок и мелочи можно возить в пластиковой корзине:

Это моя первая публикация, и связана, в основном как ни странно с отсутствием нормальных штатных креплений и самим наличием корзин для электросамокатов. Сколько в магазинах не смотрел - ничего нормального не нашлось.

Подробнее..

Самодельный ламповый стереофонический усилитель из доступных деталей

19.04.2021 00:19:54 | Автор: admin

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

Хочу сразу сказать, я ни разу не аудиофил и теплым ламповым звуком не страдаю. Интерес к ламповой технике у меня чисто технический. Ну и немножко эстетический. Тихое гудение трансформатора и теплый оранжевый свет ламп немного завораживает.

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

Сразу встал вопрос, какую схему выбрать для повторения, коих в интернете просто огромнейшее количество. Поэтому я сформулировал некоторые требования:
1. Выходная мощность не менее 15-20 Вт на канал. Чтобы можно было работать на имеющиеся у меня колонки СОЮЗ 130АС-002 и обеспечивать при этом достаточную громкость и приемлемое качество. Это требование автоматически тащит за собой необходимость мощного двухтактного выходного каскада и режим АВ. Использование однотактного режима на таких мощностях потребует применения очень мощной (и дорогой) лампы и очень мощного и дорогого выходного трансформатора. КПД такого усилителя будет также оставлять желать лучшего.

2. Использование доступных радиоламп и деталей. Как известно, средний срок службы радиоламп составляет около 1000 часов. А значит, при обычной эксплуатации усилителя их придется периодически менять, а значит, их надо где-то доставать. Поэтому желательно собрать усилитель на достаточно ходовых и доступных (как по цене так и по доставаемости) радиолампах. Также существенная проблема при сборке ламповой техники силовые и выходные трансформаторы. Заниматься их намоткой и перемоткой ну вообще никак не хочется. Необходимо использовать готовые решения.

3. Усилитель хотелось бы собрать полностью на электровакуумных приборах, без единого полупроводника. То есть даже выпрямитель анодного напряжения сделать не на полупроводниковых диодах, а на электровакуумных кенотронах. Данное требование технически не оправдано, это скорее для спортивного интереса. Хотя, использование в качестве выпрямителей кенотронов вместо полупроводниковых диодов, позволяет автоматически решить проблему с задержкой подачи анодного напряжения питания ламп. Хотя, эта "проблема", на мой взгляд, высосана из пальца.

4. Усилитель должен быть полностью законченной конструкцией с минимальным набором присущих усилителю функций: несколько коммутируемых входов, регуляторы громкости, баланса и тембра, индикаторы уровня.

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

Источник питания

Для питания схемы необходим достаточно мощный источник питания, ведь КПД ламповых усилителей очень низкий. Кроме того, раз мы решили использовать выпрямитель на кенотронах, это еще больше ухудшает КПД. Чтобы не заниматься намоткой, в качестве силового трансформатора было принято решение использовать широко распространенный и достаточно доступный трансформатор ТС(А)-270 от массовых цветных телевизоров серии УЛПЦТ. Этот трансформатор относительно легко можно достать, например, на авито. Там его можно купить за 500-1000 р., причем, в сборе с самим телевизором. Единственное, для такой серьезной покупки необходимо позвать не слишком хилого товарища, ведь вес этой модели телевизоров 60 70 кг и в одиночку его перетаскивать не очень комфортно. Несмотря на то, что этот трансформатор заточен под использование исключительно в телевизоре, большое количество различных обмоток дают широкие возможности подобрать необходимое напряжение. Трансформатор собран из двух одинаковых катушек, имеющих одинаковый набор обмоток. Соединяя обмотки нужным образом, где последовательно, а где параллельно можно получить что-то близкое к нужному.

Для вышеприведенной схемы нужно 200 В, 200 мА и 400 В, 25мА (на каждый канал). Плюс накал, который посчитаем отдельно.

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

Итак, смотрим что у нас есть на трансформаторе (на одной половине): обмотка 122+2,2 В, 400 мА, две по 71 В, 200 мА, одна 97 В, 70 мА. Итак, если взять обмотку на 122 В и включить последовательно синфазно с ней две параллельно соединенных обмотки на 71 В мы получим в итоге 193 В, что после выпрямления даст на конденсаторе фильтра порядка 230 В. Почему не 270, как по формуле? Дело в том, что на кенотроне, который имеет большое внутреннее сопротивление в отличие от полупроводникового диода, падает намного большее напряжение. И это падение тем больше чем больше ток нагрузки, нагрузочная характеристика у кенотрона имеет существенный завал. Соответственно, на ламповый выпрямитель нужно подавать большее напряжение чем если бы стоял полупроводник. Насколько больше? Для этого необходимо обратиться к справочнику и найти нагрузочную кривую на нужный кенотрон. Вот, например, кривая для кенотрона 5Ц4С.

Этот кенотрон мы поставим в цепи выпрямления 400 В. Забегая вперед, скажу что ток потребления по этой цепи для всего усилителя будет примерно 70 мА. Согласно графику, для тока потребления 70 мА и выходному напряжению 400 В необходимо подавать на вход около 320 В переменного напряжения. Где же взять такое напряжение? 193 В у нас уже есть, добавим к нему последовательно синфазно оставшуюся обмотку на 97 В, получим 290 В. Блин, чуть-чуть не хватает до 320. Можно добавить еще обмотку 16,5 В, как я сделал в одной из промежуточных версий усилителя, но тогда вырастет и напряжение 230 В, что и так уже немного больше чем надо. Можно было и забить на это, ламповая техника не очень критична к питающим напряжениям, плюс-минус 20-30 В для нее погоды не сделают, но на радиорынке мне очень удачно попался небольшой маломощный трансформатор ТПП 226 с четырьмя обмотками на 20 В и двумя на 4 В. Включив их последовательно синфазно, получил почти ровно 400 на нагрузке. Да, максимальный ток кенотрона 5Ц4С 120 мА, что с запасом хватает для питания цепи 400 В.

Кстати, важный момент. В описании к кенотрону указан параметр максимальная емкость фильтра, 5 мкФ. Полез на интернетные форумы узнать, с какой целью указано это ограничение и чем грозит его превышение. Ни одного верного ответа на этот вопрос не нашел, кто только и что только не фантазирует на эту тему. Большая часть придерживается ошибочного мнения что это для того чтобы не превысить ток во время заряда емкости при включении питания. Хотя в реальности фильтрующая емкость заряжается очень плавно по мере прогрева кенотрона и превысить ток в принципе не возможно. На самом деле причина, вероятно, немного в другом. Для этого необходимо вспомнить принцип работы двухполупериодного выпрямителя с емкостным фильтром. Причем не важно, на кенотроне он или на полупроводниках.

Во время полуволны емкость заряжается до амплитудного значения, а затем в промежутке между полуволнами помаленьку разряжается на нагрузку, во время следующей полуволны снова заряжается. Ток через выпрямительный прибор течет только тогда когда мгновенное напряжение переменного тока больше напряжения на нагрузке, т. е. во время прохода верхушки полуволны. При этом форма тока имеет вид короткого импульса (заштрихованная фигура на рисунке) и этот импульс тем короче, чем больше емкость фильтра. Но поскольку энергии в нагрузку надо передать одно и то же количество, то чем короче импульс, тем больше его амплитуда. Грубо говоря, если длительность импульса 1/10 периода, а средний ток нагрузки 100 мА, то амплитуда токового импульса 1 А! Как я писал выше, у кенотронов очень большое внутреннее сопротивление и такой большой импульс тока даст очень большое падение напряжения на нем. На аноде будет рассеиваться очень большая мощность, большая плотность тока через катод приведет к его быстрому выходу из строя. Поэтому разработчики кенотрона рекомендуют ограничить емкость пятью микрофарадами, тогда импульс тока будет длиннее, энергия размажется по большей площади, амплитуда тока будет не такой большой, перегрев анода будет в пределах нормы и лампа прослужит заявленный изготовителем срок.

А что же делать нам? Ведь такие огромные пульсации питающего напряжения неприемлемы для качественного Hi-End усилителя. Выход один ставить дроссель. Дроссель съест переменную составляющую и пропустит на выход только постоянное напряжение. После дросселя можно ставить любую емкость, хоть 1000 мкФ. Дроссель поставил максимум какой удалось найти унифицированный, Д20-1,5Гн-0,2А.

Для питания цепи 200 В необходим ток 400 мА. Кенотронов на такой ток немного. Даже если взять относительно доступный 5Ц3С, у которого максимальный ток 230 мА, то таких кенотронов все равно надо включать 2 шт в параллель, или по 1 шт на каждый канал. Кроме того, на каждый кенотрон надо подавать 3 А на накал, т. е. 6 А на две штуки. И падение напряжения на 5Ц3С даже больше чем на 5Ц4С. Кроме того, 5Ц3С с прямым накалом, а это те еще заморочки. Для него надо мотать отдельную изолированную обмотку для накала. Можно, конечно, применить 5Ц8С, он дает 420 мА по максимуму, но эту лампу я достать не смог. Зато относительно без проблем приобрел 2 диода 6Д22С.

Это демпферные диоды, разработанные для строчной развертки цветных телевизоров. Телевизоры довольно быстро модифицировали чтобы исключить эти лампы из схемы и они остались не у дел. Их до сих пор можно найти в новом состоянии и за небольшие деньги. А параметры у них приличные: средний выпрямленный ток 300 мА, ток в импульсе 1 А и они замечательно работают как обычный выпрямитель. При этом жрут на накал всего по 2 А каждый, накал косвенный, с отдельной обмоткой париться не нужно. К этим диодам я пришел не сразу, а сначала попробовал на их месте менее мощные и более доступные 6Д20П. Эти диоды тянут по 220 мА каждый, чего, в принципе, впритирочку но хватает. Но я все же решил заменить их на более мощные чтобы был запас по выпрямленному току и по импульсному току. Тем более что по накалу оба диода жрут примерно одинаково. Для ограничения импульсного тока в цепь перед конденсатором поставил резистор 10 Ом, емкость конденсатора при этом не ограничивал. Осциллограмма тока, снятая с этого резистора показала амплитуду импульса тока около 1 А, что для этого диода терпимо.

Для работы выходного каскада необходим источник отрицательного напряжения порядка -30 В. Ток потребления по этой цепи крошечный, единицы миллиампер, поэтому можно применить маломощные диоды. Я использовал двойные диоды 6Х2П, которые вообще то предназначены для детектирования радиосигнала, но и как выпрямители тоже работают отлично.

Теперь про накал ламп. На накал нужно: 2х1,9А (диоды), 2А (кенотрон), 4х1,35А выходные лучевые тетроды, 2х0,42А (триод-пентоды), 3х0,31А (двойные триоды), 2х0,3А (индикаторы), 2х0,3А (маломощные диоды). Итого в сумме имеем более 14 А, что соответствует мощности порядка 90 Вт. Именно такая мощность (и это еще безо всего остального) будет уходить только в тепло на подогрев катодов. Само собой, ни о каком КПД и экономии не может быть и речи. Но у трансформатора ТСА-270 только 3 накальных обмотки: на 0,9 А, на 2,1 А и на 2,95 А. Этого тотально не хватает. Что же можно сделать? Можно задействовать две полуобмотки на 16,5 В, 1,85 А. Запитать от них выходные лампы, включив накалы последовательно. Излишек погасить резистором. Мощные диоды запитать от обмотки 2,95 А. Она будет работать с почти амперным перегрузом, но должна сдюжить. Маломощные диоды необходимо запитать от отдельной обмотки на 0,9 А. Связано это с тем что потенциалы катодов и подогревателя должны соотноситься определенным образом. Как и почему чуть далее. От этой же обмотки запитаем лампочки индикации включения. На оставшуюся обмотку 2,1 А навесим всю оставшуюся мелочь кроме кенотрона. Получается небольшой перегруз, на 0,3 А, но не сильно критично, должно выдержать. Ну, а для кенотрона так уж и быть домотаем отдельную обмотку. На 5 В мотать не так много, всего 14 витков. Все витки можно намотать на одной катушке или же (что правильнее) разместить половину на одной, половину на другой катушке. Я их намотал обычным гибким монтажным проводом сечением не менее 0,75 мм2 в теплостойкой изоляции прямо поверх бумаги. Очень не хотелось разбирать трансформатор, поскольку половины магнитопровода у него склеены слоем какой то фигни, и после разборки не всегда удается эту фигню отчистить чтобы соединить половины плотно, без зазора. Зазор в трансформаторе (в отличие от дросселя) вещь вредная. Наличие отдельной обмотки также позволит в случае необходимости и не переделывая схему воткнуть вместо кенотрона с косвенным накалом 5Ц4С кенотрон с прямым накалом 5Ц3С.

Вроде бы все удалось запитать, хоть и с перегрузом по некоторым накальным обмоткам. Такой вариант у меня работал некоторое время, но потом вылезла неприятная особенность. Дело в том, что я применил трансформатор ТСА с алюминиевыми обмотками, которые распаяны на лепестки спецприпоем. От времени, а также из-за перегруза и перегрева у накальных обмоток в месте припайки ухудшился контакт, который в свою очередь привел к еще большему перегреву и окислению в этом месте. Чтобы не было таких проблем, рекомендую применять трансформаторы с медными обмотками (с индексом ТС или СТ в названии). Такие трансформаторы, как правило, стояли в более старых моделях телевизоров семейства УЛПЦТ, преимущественно тех, у которых еще надо крутить пассатижами ручку ПТК для переключения программ. Я такой трансформатор все же потом добыл и поменял. А временно проблему с плохим контактом решил заменой лепестков на зажимные клеммы от электрических колодок, которые продаются в магазинах электротоваров. Также я разгрузил наиболее перегруженную обмотку на 2,95 А. Для этого пришлось сделать хитрый финт ушами. Как я написал выше, для питания выходных ламп использовалась обмотка на 16,5 В. Но для питания двух, последовательно включенных ламп нужно 12,6 В. Излишек у меня гасился на 10-ваттном резисторе сопротивлением 4,4/1,35=~3,3 Ом. На нем впустую рассеивалось 6 Вт мощности (на каждом канале). В новой схеме я разделил накальную обмотку 2,95 А на две полуобмотки (они располагаются на разных катушках), средняя точка которых заземлена. А каждая полуобмотка напряжением 3,3 В включалась последовательно противофазно с обмоткой 16,5 В. Таким образом, из напряжения 16,5 В вычитается 3,3 В и на накал выходных ламп подается 13,2 В или по 6,6 В на каждую. Что немного больше нормы, но до максимальных 7 В по паспорту запас есть. В то же время протекающий ток накала этих ламп суммируется с током накальной обмотки выпрямительных диодов и суммарный максимальный ток этой обмотки получается 4,3 А. А выпрямительные диоды потребляют из этого тока только 3,8 А, что дает нам 0,5 А запаса! Неплохое решение проблемы. К тому же мы сэкономили целых 12 Вт мощности, которые раньше просто отапливали помещение, в котором стоит усилитель.

Монтаж деталей внутри корпусаМонтаж деталей внутри корпуса

Однако делать такие финты не всегда возможно. Причина в том, что для ламп нужно учитывать еще максимальное пробивное напряжение катод-подогреватель. Оно зависит от свойств изоляции подогревателя. Например для лампы 6Д22С максимальное напряжение между катодом и подогревателем 100 В если потенциал подогревателя выше и 900 В если потенциал катода выше. У нас на катоде 250 В, а потенциал подогревателя около земли, поскольку середина накальной обмотки заземлена. Укладываемся в пределы. Для ламп 6П44С напряжение между катодом и подогревателем 220 В, при этом катод сидит на земле, а на подогревателе переменная составляющая максимум 16,5 В. Тоже укладываемся. А вот с маломощными диодиками сложнее. У них положительный потенциал подогревателя вообще не допускается, а отрицательный может быть не более 350 В. Поэтому придется запитать накал диодов от отдельной обмотки и соединить цепь накала с выпрямленным потенциалом минус 185 В. Да, максимальная амплитуда напряжения на катоде равна удвоенному выпрямленному напряжению, т. е. 370 В, что даже уже немножко превышает максимальные 350 В по паспорту. Но почти за год эксплуатации проблем из-за этого не было.

А для чего нужно такое большое отрицательное напряжение? Ведь для схемы необходимо всего минус (30...35) В. И отвод на выпрямитель можно сделать с обмотки 71 В, тогда выпрямленное напряжение будет около минус 100 В и проблем не будет никаких. Так и было сделано в промежуточной версии усилителя. Там напряжение смещения устанавливалось обычным резистивным делителем. Но выяснилась одна неприятная особенность. При колебаниях напряжения сети в пределах 210 - 250 В, а также при просадке напряжения на трансформаторе при работе усилителя под нагрузкой наблюдалось уменьшение напряжения смещения, что приводило к увеличению тока покоя. Причем, чем больше нагрузка, тем больше просадка, тем меньше напряжение смещения, больше ток покоя и, тем самым, еще большая просадка напряжения. Такая вот положительная обратная связь. Было решено стабилизировать напряжение смещения газовым стабилитроном. Из доступных низковольтных удалось разжиться только СГ-202Б. Его напряжение стабилизации около 84 В, что, в принципе, терпимо. А вот что не терпимо так это очень большое напряжение зажигания, которое по справочнику может достигать 135 В! Т.е. более чем на 50% больше чем напряжение стабилизации. Конечно, в реальности это напряжение будет ниже, чем в справочнике, но мы то проектируем устройство, которое должно работать при любых разбросах входящих в его состав электронных компонентов. А вот, например, у стабилитрона СГ-1П напряжение стабилизации 150 В, а гарантированно зажигается он при напряжении не более 175 В, т.е. при напряжении, превышающем не более чем на 20 % от номинального. Поэтому для гарантированного зажигания стабилитрона его делитель необходимо запитывать по возможности от большего напряжения.

Также я решил стабилизировать питание предварительных каскадов стабилитроном СГ-1П. Особой необходимости в этом нет, просто такой стабилитрон у меня валялся в коробке.

Стабилитрон СГ1П и дополнительный маломощный трансформаторСтабилитрон СГ1П и дополнительный маломощный трансформатор

Есть еще один тонкий момент, связанный с накалом, о котором следует упомянуть. Это влияние т. н. паразитного диода катод-подогреватель. Подогреватель как и все нагретые тела испускает электроны и, если на катоде относительно него положительный потенциал, то вместе с подогревателем они образуют открытый диод косвенного накала через который переменное напряжение накала (помеха 50 Гц) может проникать на катод. Этому старается препятствовать изоляция подогревателя, но по мере износа лампы, ее изолирующие свойства ухудшаются и ток (утечки) возрастает. Порядок величины тока утечки не более 15 - 20 мкА. Вроде бы величина тока не такая большая, но если в цепи катода стоит высокоомный резистор (катодный повторитель) или лампа усиливает очень слабые сигналы, влияние тока утечки может оказаться существенным. В нашей схеме почти у всех ламп в цепи катодов стоят низкоомные резисторы, на которых ток утечки даст почти не ощутимое падение напряжения. Но вот у ламп 6Н23П, на которых собран диффкаскад, в цепи катода стоит источник тока, имеющий очень большое сопротивление. Для этого каскада ток утечки представляет опасность.

Бороться с этим явлением можно двумя способами: 1. Подать на подогреватель потенциал заведомо больший чем потенциал катода. Тогда паразитный диод будет заперт обратным напряжением и помех вносить не будет. Если напряжение на катоде 3-4 В, то подав на подогреватель 20-25 В мы гарантированной запрем диод. Потенциал можно получить с помощью делителя напряжения и подключить к любому из концов обмотки накала. Но в нашем случае этот вариант не годится, поскольку катод находится под потенциалом около 100 120 В и для запирания диода необходимо напряжение 140-150 В. Это напряжение уже слишком велико для других ламп, питающихся от этой же накальной обмотки. Можно, конечно, намотать для этих ламп еще одну дополнительную обмотку 6,3 В, 1А и таким образом немного разгрузить обмотку на 2,1 А, которая работает с небольшим перегрузом. И к этой обмотке подвести через высокоомный резистор потенциал 150 В от стабилитрона. Этот способ я бы рекомендовал тем кто, возможно, захочет повторить мою схему. Но в моей конструкции усилителя это бы потребовало слишком больших переделок. Поэтому я прибег к способу номер 2: симметрировать потенциал подогревателя относительно общего провода. В этом случае, помехи от левой и правой половин подогревателя будут одинаковы по величине, но противоположны по знаку и взаимоуничтожатся. Симметрирование осуществляется с помощью переменного резистора концы которого подключены к обмотке накала, а движок соединен с общим проводом. Вращая движок резистора необходимо найти такое положение ротора при котором уровень сетевой наводки будет минимален (перед этой регулировкой необходимо отключить ООС усилителя, т. к. она также давит помехи). Эту доработку я делал последней, поэтому на схеме она не отражена.

По питанию все, теперь кратенько пробежимся по схеме усилителя.

Усилитель

Сигнал от внешнего источника через разъемы Х2 Х4 поступает на коммутатор на галетном переключателе, которым можно выбрать один из трех входов. После коммутатора сигнал приходит на пассивный регулятор тембра (низких и высоких частот). Многие, вероятно, будут говорить что эта штука не нужна. Но на мой взгляд - требуется. Поскольку разные источники имеют разные частотные характеристики и для оперативной регулировки темброблок необходим. Схема темброблока стандартная, но, в отличие от бытовой аппаратуры, диапазон регулирования сделан меньше. Это позволяет использовать вместо переменных резисторов с характеристикой В более доступные резисторы с характеристикой А. Методика расчета таких регуляторов неоднократно описана, можно посмотреть, например, здесь.

Для корректной работы регуляторов тембра источник сигнала для темброблока должен иметь как можно меньшее сопротивление, а нагрузка наоборот как можно большее. Поэтому, а также для компенсации потерь сигнала в пассивном регуляторе, после темброблока сигнал поступает на каскад усиления на двойном триоде 6Н23П. Каскад работает с автосмещением и небольшой местной ООС по току. С выхода каскада сигнал поступает на регуляторы громкости и баланса. Регуляторы зашунтированы конденсаторами небольшой емкости для предотвращения спада АЧХ из-за входной емкости следующего каскада. После регуляторов сигнал поступает на триодный каскад усиления на триодной половине лампы 6Ф1П. Каскад работает с автосмещением и на катодный резистор заходит сигнал общей ООС. ООС сделана отключаемой. При переводе тумблера в верхнее положение, катодный резистор шунтируется и каскад работает как обычный с автосмещением. Также каскад охвачен местной частотозависимой ООС по напряжению. Это необходимо для ограничения полосы пропускания усилителя по высоким частотам для предотвращения самовозбуждения. Каскад непосредственно нагружен на дифференциальный каскад на двойном триоде 6Н23П. Диффкаскад питается от источника тока, собранного на пентодной части лампы 6Ф1П. Уровень этого тока задается резистором в цепи катода лампы. С диффкаскада противофазные сигналы поступают соответственно каждый на свой мощный выходной каскад на лучевом тетроде 6П44С. Каскады работают с принудительным смещением. Уровень напряжения смещения задает ток покоя каскада, который должен быть примерно 100 мА. Катодные резисторы дают небольшую ООС по току и позволяют измерить ток покоя в каждом плече не разбирая усилитель (падение напряжения на резисторе около 500 мВ). Это требуется для диагностики ламп и выявления тех, в которых эмиссия катода упала уже ниже допустимого. Небольшая балансировка каскадов обеспечивается резистором в цепях вторых сеток. Зачем это надо, я хз, эта часть схемы один-в-один скопирована у автора. Вращение ручки этого резистора абсолютно никак не сказывается на работе схемы. При наличии на трансформаторе симметричных обмоток, этот вывод можно было бы подключить к отводу трансформатора для реализации ультралинейного включения, что могло бы несколько улучшить линейность усилителя. Для этого можно было бы использовать два трансформатора ТН с перекрестным включением обмоток, такие схемы также можно найти по ссылке в начале статьи. Выходные каскады нагружены на две полуобмотки трансформатора ТН. Несмотря на то, что обмотки явно несимметрично намотаны, возникающие при этом повышенные межвитковые емкости не оказывают существенного влияния, поскольку лучевые тетроды 6П44С токовые лампы и паразитные емкости не оказывают какого либо существенного влияния. С выходных обмоток снимается сигнал на акустическую систему. Обмотки соединены таким образом чтобы на нагрузке 4 Ом обеспечить наименьшие потери в проводе. Для этого на отвод 4 Ом работают последовательно включенные обмотки на 5,4 А и две параллельно включенные на 3,4 А. На 8 Ом работают предыдущие плюс еще одна обмотка на 3,4 А. Примерная выходная мощность при 4 Ом нагрузке: (6,3+6,3)^2 / 4 = 40 Вт, при 8 Ом нагрузке: (6,3+6,3+6,3)^2 / 8 = 45 Вт. С отвода на 4 Ом снимается сигнал на индикатор уровня и ООС.

Немного про ООС. Вообще говоря, качество звучания двухтактных ламповых усилителей, работающих в классе АВ, крайне паршивое. Когда я его включил первый раз после обычного транзисторного, даже мои далеко не музыкальные уши чуть в трубочку не свернулись. И это действительно так и есть и подтверждается измерительными приборами. Большие линейные искажения, большие нелинейные искажения, узкая полоса частот, которая ограничена снизу десятками герц из-за недостаточной индуктивности выходных трансформаторов, наводки 50 Гц от силового трансформатора. Также свою лепту вносит большой разброс параметров отдельных экземпляров ламп, который довольно большой даже у новых, не говоря уже о б/у. Повышая ток покоя, нелинейные искажения можно немного снизить, но это даст повышенную нагрузку на источник питания. В общем, так себе вариант. С этим нужно что то делать и я решил охватить весь усилитель (кроме самого первого каскада) отрицательной обратной связью (ООС). Тем более что у усилителя было некоторое избыточное усиление и я решил его потратить с пользой.

В чем физический смысл ООС? На вход усилителя в противофазе подается часть усиленного выходного сигнала. Из-за этого уровень сигнала на выходе уменьшается. Какой же прикол уменьшать выходной сигнал, спросите вы? А прикол в том, что вместе с выходным сигналом на вход в противофазе поступают помехи и искажения, которые родились уже внутри, охваченной ООС части схемы. А поскольку они поступают в противофазе, на выходе усилителя они вычитаются! Итак, достоинства ООС:

1. Уменьшение нелинейных искажений

2. Уменьшение линейных искажений, расширение полосы частот

3. Уменьшение шума, фона и помех, проникающих по питанию

Недостатки ООС:

1. Необходимость ограничения полосы усиления усилителя для предотвращения превращения отрицательной ОС в положительную и самовозбуждения

2. Это скорее не недостаток, а просто особенность ламповых схем: в них невозможно реализовать сколько-нибудь глубокую ООС из-за огромной нелинейности выходного трансформатора и низкого усиления ламповых каскадов. Поэтому кардинально улучшить качество ламповых усилителей по аналогии с транзисторными не получится.

Индикатор уровня. Кроме эстетической функции индикатор несет и чисто утилитарную показывает уровень выходного сигнала. Например, только благодаря ему я заметил что усилитель самовозбуждается на частоте 1 МГц при включении ООС когда я недостаточно ограничил полосу усилителя. Я наивно полагал, что выходной трансформатор сработает фильтром и ограничит полосу, но межобмоточная емкость ее не то что не ограничила, но и превратила ООС в ПОС. После этого я добавил местную частотозависимую ООС в первый каскад усиления и все стало норм. Сигнал звуковой частоты поступает на переменный резистор, которым можно подстроить уровень индикации. У меня он настроен так чтобы полностью закрывалось все поле индикатора уже при выходной мощности 10 Вт. С переменного резистора сигнал поступает на катод диода, который совместно с RC-цепочкой работает здесь детектором огибающей сигнала. Продетектированный сигнал поступает на лампу индикатора. Индикатор включен по типовой схеме и в пояснениях не нуждается. Единственное, я столкнулся с тем что луч некоторых индикаторов отклонен у кого влево, у кого вправо. Это не неисправность. Связано это с тем что металлический экран с люминофором бывает намагничен что и вызывает отклонение луча. Проведя рядом с ним слабеньким магнитиком, зеленый луч можно выправить и поставить ровно.
Про смещение. Для задания режима работы выходных ламп, лучевых тетродов необходимо достаточно большое отрицательное напряжение "смещения". В данной схеме применен вариант с фиксированным или принудительным смещением. Недостатками этого решения является необходимость в дополнительном выпрямителе - источнике этого отрицательного напряжения. Кроме этого, его необходимо стабилизировать и регулировать по мере износа ламп. Причем, регулировать желательно для каждой лампы отдельно, поскольку у них может быть существенный разброс параметров от экземпляра к экземпляру. В этом свете, использование автосмещения может быть предпочтительным. Автор исходной схемы предлагает попробовать такой вариант самостоятельно. В этом случае в катодную цепь каждой лампы включается резистор сопротивлением 150, шунтированный конденсатором не менее 1000 мкФ на 50 В. В такой схеме ток покоя лампы поддерживается неизменным вне зависимости от анодного напряжения и старения лампы. Недостатком является большая мощность, рассеиваемая на этом резисторе - около 6 Вт на каждом, или 24 Вт на весь усилитель, что многовато. Чтобы объединить достоинства обоих вариантов можно применить схему комбинированного смещения. В катодной цепи оставить резистор автосмещения, но намного меньшего номинала, например 30 Ом, а на сетки также подавать фиксированное смещение, но можно нестабилизированное и общее для всех ламп. Иными словами, некоторый уровень смещения (например, 80%) общий для всех ламп, а автосмещение обеспечивает оставшиеся 20% напряжения смещения, которое и дает стабилизацию тока покоя. Но это опять же в моей конструкции не использовано в связи с необходимостью существенных переделок. Это рекомендуется для тех, кто захочет повторить данную схему.

Схема с учетом исправления всех ошибок и учетом всех рекомендаций приведена ниже.

В ней для упрощения исключен дополнительный трансформатор, а для повышения напряжения в цепочку дополнительно включены обмотки 17 В. Тока в них хватает. Исключен источник отрицательного напряжения смещения со стабилитроном и регулировками, использована схема с автосмещением по причинам, описанным выше. В качестве выходных трансформаторов применены ТС-180. Выходные лампы в ультралинейном включении. С точкой подключения вторых сеток, и, соответственно, величиной этой "ультралинейности" можно поиграться. Исключен стабилитрон 150 В. В остальном, схема повторяет описанную выше. Несмотря на упрощение схемы, ее характеристики не хуже, описанной выше.

Конструкция и детали.

Корпус, как я уже писал выше, использовал готовый от компьютера мультикассы. На нем сверху вполне свободно разместились силовой трансформатор, выходные трансформаторы, дроссели питания, лампы. Единственный минус корпуса он дюралюминиевый и не экранирует от магнитных полей силового трансформатора, а это сделать крайне необходимо. Сзади корпуса были отверстия под стандартные разъемы материнской платы АТХ, их пришлось закрыть алюминиевой пластиной. Входные разъемы для аудиосигнала я использовал типа CANON, просто потому что у меня такие разъемы были. Вообще, тип разъема не имеет значения, можно использовать и RCA и советские DIN-5. Выходные клеммы винтовые типа ЗМП или аналоги. Их преимущество надежный зажимной контакт, удобство монтажа на задней панели и доступная цена. Также на заднюю панель выведены тестовые гнездышки малогабаритные типа Г1,6 под штеккер Ш1,6. С их помощью можно контролировать питающие напряжения и режимы выходных ламп без разборки корпуса усилителя. Это тоже периодически нужно делать поскольку лампы со временем садятся. На задней панели смонтирован выключатель ООС на тот случай если захочется послушать настоящий теплый ламповый звук со всеми искажениями и наводками.

Силовой трансформатор типа ТС(А)-270. Предпочтение следует отдавать трансформаторам с медными обмотками (без буквы А), но и алюминиевые будут работать ничем не хуже. Трансформатор крайне необходимо устанавливать в железном кожухе. К сожалению, понял я это слишком поздно, когда уже разместил все элементы на корпусе. Магнитное поле рассеяния трансформатора довольно велико, поскольку он работает почти с полной загрузкой. Это поле мало того что наводится на проходящие рядом в корпусе соединительные провода, оно также наводится на стоящие рядом выходные трансформаторы и в динамиках слышен слабый гул 50 Гц, даже когда усилитель только включен и лампы еще не прогрелись. Кожух обязательно требуется снабдить вентиляционными отверстиями. Трансформатор можно использовать с готовой панелькой для предохранителей, в нее же вместо контактных штырьков после небольшой доработки легко встает разъем под стандартный компьютерный кабель питания.

Ламповые панельки для мощных ламп керамические от массовых черно-белых телевизоров. В свое время у меня этих панелек было завались, теперь же их пришлось покупать. Барыги на радиорынке за них сейчас хотят много денег, поэтому их тоже имеет смысл купить в сборе с ламповым Ч/Б ТВ на авито. Из того же ТВ можно взять и силовой трансформатор ТС-180, который можно употребить в качестве выходного. Панельки для маломощных ламп девятиконтактные, керамические с ушками для монтажа. Стоят недорого.

Выходные трансформаторы ТН-56 кроме того что трудно достать, так еще и просят за них около 1000 - 1500 р. Их можно без проблем заменить на следующие по списку в семействе, например, ТН-60, ТН-61. Главное, проверить по справочнику чтобы выходные обмотки были примерно на одинаковый ток нагрузки. Вместо этих трансформаторов неплохо подходят силовые ТС-180. Большой набор обмоток позволяет включать их с разным коэффициентом трансформации и использовать режим ультралинейного включения, причем место подключения второй сетки можно также выбирать, пробуя разные варианты. Что также хорошо, эти трансформаторы (в отличие от ТН) полностью симметричны. Единственное, при использовании этих трансформаторов мне потребовалось включить блокировочные конденсаторы порядка 1000-2200 пФ между анодами выходных ламп и корпусом для блокировки самовозбуждения на высоких частотах. На полосе частот усилителя эти конденсаторы никак не сказываются.

Дроссели по питанию выходного каскада должны быть на ток не менее 0,4А, и иметь индуктивность как можно большую. Мне удалось достать пару на 1,5 Гн. Это маловато, но сойдет. Дроссель по питанию 400 В, должен быть на ток не менее 0,1 А. Если приобрести пару телевизоров УЛПЦТ, из них можно добыть не только трансформаторы, но и примерно подходящие дроссели Др 5- 0,08 (5 Гн, 0,08 А) и Др 0,4 0,34 (0,4 Гн, 0,34 А).

На передней панели установлен галетный переключатель селектор входов, можно взять любой на 2 направления и на 3 положения. Рядом с переключателем стоят переменные резисторы. Я сначала использовал сдвоенные советские типа СП-3, но, к сожалению, у них от старости совсем стал плох резистивный слой. Сколько я в них не пшикал смазками и жидкостями для улучшения контакта, они при повороте издавали шорох, а один из них в какой то точке вообще уходил в обрыв. Пришлось их заменить на новые китайские. Единственная трудность состоит в том, чтобы найти резисторы с характеристикой В. Если в регуляторы НЧ, ВЧ, баланса еще можно поставить резисторы с характеристикой А (поскольку глубина регулировки тембра невелика), то на регулятор громкости необходимо постараться и найти все же с характеристикой В. Поскольку человеческое ухо имеет логарифмическую характеристику чувствительности, то и громкость необходимо изменять с логарифмической зависимостью.

На передней панели смонтированы две неоновые лампочки индикации появления анодного напряжения +400 В и +200 В. Они зажигаются когда кенотроны прогреются и выпрямленное напряжение вырастет до напряжения зажигания этих ламп. Тип ламп не важен, можно взять лампочки из блока выбора программ телевизоров УЛПЦТ. Рядом с лампочками смонтирован выключатель питания.

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

Конденсаторы используются пленочные типа К73-17 также из старых телеков, резисторы МЛТ оттуда же. Конденсаторы нужно подбирать по максимальному рабочему напряжению с запасом, ламповая техника вся высоковольтная. Резисторы выбираются не столько по мощности, сколько по удобству монтажа. Более крупные резисторы имеют более длинные и толстые выводы, прочнее держатся в лепестках.

Дополнительный трансформатор, дроссель по напряжению 400 В смонтированы внутри корпуса. Просто потому что их я добавлял позже и места на поверхности уже не было. Газовый стабилитрон СГ-1П сначала тоже стоял наверху, но после добавления еще одного каскада усиления, он переехал в поддон.

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

Фильтрующие электролитические конденсаторы 220 мкФ с малой высотой по вертикали, смонтированы на пластиковой изоляционной пластине и ей же придавливаются к верхней панели. Соединены монтажным проводом. Более мелкие электролитические конденсаторы фиксируются полукруглыми планками (такие планки используются для прижима кабелей).

Подстроечные резисторы смонтированы на верхней поверхности и торчат штоками наружу. Это необходимо для оперативной регулировки при необходимости. На штоках сделаны шлицевые пропилы под плоскую отвертку.

Монтаж выполнен проводами от компьютерных блоков питания. Особого скрытого смысла в этом нет, просто у меня полно таких проводов. Цепи накала крайне необходимо вести витой парой проводов, контакт с корпусом в каком либо месте не допускается. Все общие провода по возможности сходятся в одном месте на конденсаторах фильтра питания выходных каскадов. Также следует следить за тем чтобы не образовывалось замкнутых петель земляных проводов, иначе поле рассеяния силового трансформатора наведет на них довольно существенную ЭДС помехи 50 Гц.

Для защиты от поражения электрическим током заказал для усилителя кожух из прозрачного оргстекла. Такие услуги предлагают многие фирмы. В одной конторе с меня запросили около 3 т. р., в другой удалось изготовить за 1500. Кожух крепится на петлях и может открываться вверх для замены ламп и регулировок. Вверху кожуха сделано множество мелких отверстий для вентиляции. Снизу передней части кожуха сделана одна широкая щель для захода охлаждающего воздуха. Шильдики для органов управления и ламп сначала хотел сделать также из тонкого оргстекла, заполнив след от лазера краской, но затея не удалась. Результат получился фиговый. Пришлось воспользоваться специальным пластиком для подобного рода табличек. Смотрится, конечно, не так как я хотел с оргстеклом, но, в целом, неплохо.

Измерение параметров

Самое главное проверить приборами, что же мы, в итоге, напаяли.

Измерение выходной мощности.

Это один из основных параметров усилителя. Для этого нам потребуется генератор сигналов низкочастотный, осциллограф, милливольтметр и нагрузка 4 Ом на каждый канал. У меня есть в наличии генератор Г3-118, двухлучевой осциллограф С1-18, милливольтметры В3-38. Если измерительных приборов нет, вместо генератора можно подавать сигнал с линейного выхода звуковой карты, при этом необходимо скачать программу генератор звуковых сигналов, их много бесплатных. Контролировать сигнал также можно подавая его на линейный вход звуковой карты, единственное делать это надо через резистивный делитель чтобы не спалить вход - раз и чтобы не превысить максимальный уровень звуковухи - два. И да, тоже необходимо будет скачать и установить программу осциллограф. Такие программы уже сложнее и чаще платные. Измерять уровень можно и обычным мультиметром. Тут, однако, надо иметь ввиду что обычные ширпотребовские мультиметры заточены под измерение переменного тока низкой частоты, 50 200 Гц, не более, поскольку там стоят дешевые выпрямительные диоды. На частоте 1 кГц и выше, такие мультиметры могут давать уже достаточно существенную погрешность. Нагрузка 4 Ом самодельная, сделанная из большого количества 2-ваттных резисторов, обдуваемых вентилятором. Вентилятор питается от выпрямленного напряжения с этой же нагрузки. По быстрому нагрузку можно сделать из 4-х последовательно включенных 10-ваттных керамических резисторов по 1 Ом, которые придется купить.

Подключим генератор на вход усилителя, сразу на оба канала. Громкость установим на максимум, регуляторы тембра в среднее положение. Установим частоту стандартную для подобного рода измерений 1 кГц. К выходу каждого канала подключим нагрузку 4 Ом, параллельно ей по каналу осциллографа и по милливольтметру. Будем увеличивать уровень входного сигнала с генератора наблюдая при этом за пропорциональным увеличением выходного сигнала. Когда на экране осциллографа у синусоид будут видны различаемые на глаз искажения (это соответствует КНИ 5 - 10%), увеличивать уровень прекратим и будем считать эту мощность максимальной для данного усилителя.

Уровень выходного напряжения смотрим по вольтметру и рассчитываем выходную мощность по формуле P=U^2/R=81/4=~20 Вт. Эх, всего то 20 Вт, а ведь было обещано 43! Посмотрев сигнал на анодах и катодах выходных ламп, видно, что это они входят в ограничение, им не хватает как диапазона напряжения питания 200 В, так и тока катода. Напряжение питания можно повысить если применить трансформатор с большим коэффициентом трансформации, например ТС-180 со всеми включенными обмотками. При этом необходимо будет пропорционально уменьшить ток покоя, иначе будет превышена максимальная допустимая мощность на аноде лампы. Однако это потребует существенной переделки питания усилителя. Также не очень эффективно используется габаритная мощность выходного трансформатора, его выходные обмотки недогружены. В общем, обдумав все и прикинув варианты, я пришел к выводу что из существующей схемы без существенных переделок большего уже не выжать. Поэтому будем считать что такая мощность нас устраивает. Кстати, при включенной ООС выходная мощность усилителя чуть больше, поскольку ООС немного корректирует вносимые искажения.

Измерение АЧХ.

Для измерения АЧХ усилителя нужно установить регуляторы тембра в среднее положение, установить определенное напряжение на выходе усилителя, например 3 В. И уменьшать частоту генератора в сторону низких частот до тех пор пока напряжение на выходе усилителя не упадет менее 0,707*3=2,121 В. Это будет нижняя граничная частота усилителя. Аналогично потом нужно увеличивать частоту генератора до тех пор пока напряжение на выходе усилителя снова не упадет менее 2,121 В. Это будет верхняя граничная частота усилителя. Это нужно проделать сначала для одного канала усилителя, затем для другого. Но для получения наглядной картинки мы воспользуемся прибором СК4-56. Это анализатор спектра, но он имеет внутри генератор качающейся частоты и его легко можно приспособить для измерения АЧХ. Для этого на вход усилителя подаем сигнал не с генератора сигналов, а с выхода генератора качающейся частоты анализатора спектра. АЧХ измеряем сначала в одном канале, потом в другом, подключая вход анализатора сначала к одному каналу, потом к другому. Анализатор спектра также следует подключать через делитель напряжения для защиты его входа (имеет тенденцию дохнуть), а также чтобы его входной усилитель не ушел в зашкал. На анализаторе ставим ручную развертку, настраиваем частоты границ экрана (от -5 кГц до 45 кГц). Затем устанавливам уровень сигнала таким чтобы точка была в середине сетки прибора. Ставим самую медленную развертку и запускаем измерение. На экране прибор нарисует нам АЧХ канала усилителя. По уровню минус 3 дБ полоса частот усилителя 10 Гц 30 кГц. Проделываем такую же операцию при минимальном и максимальном положении регулятора тембра ВЧ. Потом так же и с другим каналом.

АЧХ в области ВЧ (в клетке 5 кГц по горизонтали, 10 дБ по вертикали, 0 Гц - где всплеск):

АЧХ в области ВЧ (в клетке 5 кГц по горизонтали, 10 дБ по вертикали, 0 Гц - где всплеск). Завал характеристики в среднем положении связан с некоторым поворотом самой трубки прибора.АЧХ в области ВЧ (в клетке 5 кГц по горизонтали, 10 дБ по вертикали, 0 Гц - где всплеск). Завал характеристики в среднем положении связан с некоторым поворотом самой трубки прибора.АЧХ в области НЧ (в клетке 10 Гц по горизонтали, 10 дБ по вертикали, 0 Гц - где провал)АЧХ в области НЧ (в клетке 10 Гц по горизонтали, 10 дБ по вертикали, 0 Гц - где провал)

Измерение КНИ.

Измерим КНИ с помощью того же прибора СК4-56. Только подавать сигнал будем с генератора низкой частоты. Для получения как можно более точных результатов необходимо использовать генератор с как можно меньшей величиной собственных искажений. Убедиться в этом можно, подав сигнал напрямую на анализатор спектра. На экране должна торчать только одна палка, соответствующая частоте настройки генератора (1 кГц). Также нормируем уровень сигнала чтобы основная гармоника (1 кГц) находилась на уровне 0 дБ сетки, соответственно, побочные гармоники будут иметь уровень минус 20 дБ, минус 40 дБ и т.д.

Спектр сигнала при небольшой выходной мощности (~ 1 Вт):

Спектр сигнала при почти максимальной выходной мощности (~ 20 Вт):

Считать вручную КНИ очень долго, поэтому воспользуюсь маткадом. Вообще говоря, есть КНИ (коэффициент нелинейных искажений) и КГИ (коэффициент гармонических искажений) немного разные вещи и считаются по разным формулам. Но при малых значениях, КНИ и КГИ в первом приближении совпадают, поэтому будем считать КНИ. Считать будем приближенно, по первым 10 гармоникам. Записываем уровни первых 10 гармоник, переводим из децибел в абсолютные значения, считаем по формуле, получаем уровень КНИ на частоте 1 кГц и почти номинальной мощности 3,7 %.

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

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

Подробнее..

Подбор выходного трансформатора для двухтактного лампового усилителя

29.04.2021 00:23:42 | Автор: admin

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

Многие любители ТЛЗ предпочитают использовать готовые трансформаторы ТВЗ от советской радиоаппаратуры или готовые покупные, и, соответственно, использовать те же режимы ламп, что и в советской аппаратуре, или режимы ламп, рекомендованные изготовителем трансформаторов. Данная информация пригодится тем, кто хочет спаять что-нибудь теплое и ламповое, но кто совершенно не хочет возиться с намоткой трансформаторов и кого отпугивают цены на готовые трансформаторы, предлагаемые различными фирмами.

Хочу сразу предупредить, в ламповой технике я не силен, изучаю ее походя, в процессе, так сказать. Поэтому некоторые мои рассуждения для специалистов могут показаться весьма наивными.

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

I=\frac{U}{R}=\frac{8\,В}{4\,Ом}=2\,А, P=U\cdot I=8\,В\cdot 2\,А=16\,Вт

Лампы же наоборот - обычно работают с высокими напряжениями и относительно небольшими токами. Например, для лампы 6П44С, как в моем усилителе, согласно справочнику средний ток анода составляет максимум 100 мА (420 мА допускается в импульсе длительностью 4 мс), напряжение на аноде 250 В (550 В допускается при включении лампы).

Чтобы преобразовать высокое напряжение на лампе в низкое на динамике и низкий ток лампы в большой ток через динамик и необходим трансформатор. 100 мА необходимо трансформировать в 2 А, а 8 В, соответственно, в 160 В. Ориентировочный коэффициент трансформации в этом случае должен быть примерно около 20 (потерями в трансформаторе для простоты изложения пренебрежем).

К_{тр}=\frac{U_{вх}}{U_{вых}}=\frac{I_{вых}}{I_{вх}}=\frac{160\,В}{8\,В}=\frac{2\,А}{0,1\,А}=20

При этом сопротивление динамика, пройдя через такой трансформатор для лампы будет выглядеть как

R_{a}=R_{н}\cdot K_{тр}^2=4\,Ом\cdot 20^2=1600\,Ом

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

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

Рассмотрим двухтактный выходной каскад на лампах 6П44С из нашего усилителя. Сколько же мощности можно из него выжать? Как было указано выше, из справочника, средний ток анода составляет максимум 100 мА (420 мА в импульсе 4 мс), а напряжение на аноде 250 В (550 при включении лампы). Сначала разберемся с напряжением. В двухтактном каскаде лампы работают по очереди, каждая на свою половину первичной обмотки. Средняя точка этой обмотки подключена к источнику питания. Какое максимальное напряжение Uп можно подать на среднюю точку? Когда одна из ламп открывается полностью, напряжение на ее аноде минимально (опять таки для упрощения будем считать что оно равно 0). При этом напряжения на аноде другой, запертой лампы становится равным 2Uп. Максимальное напряжение на запертой лампе по справочнику может достигать 7 кВ, но хотя это в импульсе не более 18 мкс. Поэтому Uп можно выбрать близким к максимальному 250 В, и даже немного больше него, например, с небольшим запасиком 260 В. Слишком сильное превышение этого напряжения чревато межэлектродными пробоями и высокими электростатическими силами, сокращающие срок службы катода. Максимальный ток анода (в импульсе) может достигать 420 мА. Таким образом, мгновенная мощность двухтактного каскада будет около 260 В0,42 А= 109 Вт. Действующая мощность, соответственно, 55 Вт. Это теоретический максимум, который можно получить от данного каскада. Если бы выходное сопротивление ламп было бы равно 0, то вся эта мощность могла бы перейти в нагрузку. Но, как всем известно, выходное сопротивление лампы ненулевое, более того, порядок значений этого сопротивления килоомы. Условием передачи максимальной мощности от источника в нагрузку является равенство сопротивления этой нагрузки внутреннему сопротивлению источника. Поэтому при расчете трансформатора с нуля, его, чаще всего, начинают с выбора коэффициента трансформации таким, чтобы сопротивление нагрузки после прохождения через трансформатор было равно выходному сопротивлению лампы в выбранной рабочей точке. Хотя обычно высокой точности равенства выходного сопротивления лампы сопротивлению нагрузки не требуется.

Итак, даже в идеальном случае равенства выходного сопротивления лампы сопротивлению нагрузки, в последнюю передается только половина мощности. Вторая половина рассеивается на внутреннем сопротивлении лампы и греет аноды. В нашем случае, из 55 Вт в нагрузку может уйти максимум 22,5 Вт. Но в реальности эта мощность будет еще меньше. Во-первых, из-за неидеального согласования сопротивлений лампы и нагрузки (поскольку мы трансформатор взяли готовый, а не мотали с нуля), во-вторых, из-за потерь в самом трансформаторе (они небольшие, но есть), в третьих, из-за просадки напряжения питания под нагрузкой (если оно выбрано без запаса), в четвертых, по мере износа лампы максимальный ток (и, соответственно, выходная мощность) также будет также постепенно снижаться. Именно по указанным выше причинам в моем усилителе удалось выжать только 20 Вт в нагрузке (напряжение питания в моем усилителе около 230 В, вместо 260).

Попробуем прикинуть, насколько хорошо подходит под эти параметры использованный трансформатор ТН-56. Итак, граничные параметры со стороны ламп: ток в импульсе 420 мА, ток действующий 420мА/1,41=300 мА. Напряжение амплитудное 260 В, напряжение действующее 260В/1,41=184 В. Параметры трансформатора при включении указанным на схеме образом: максимальное действующее напряжения на входных полуобмотках 127 В, максимальный ток 0,44 А, на выходных обмотках на отводе 4 Ом напряжение 12,6 В, ток 3,15 А, мощность 40 Вт, на отводе 8 Ом напряжение 18,9 В, ток 2,36 А, мощность 45 Вт. Коэффициент трансформации (для 4 Ом) 127В/12,6В=10.

Учитывая коэффициент трансформации, действующее значение тока во вторичной обмотке будет 0,3А10=3 А, а напряжение 177В/2/10=9,2 В. Почему берем половину напряжения? Потому что даже при идеальном согласовании только одна половина напряжения ушла в нагрузку, вторая упала на внутреннем сопротивлении лампы. Максимальная выходная мощность с ограничением по току получается 334=36 Вт. Максимальная выходная мощность с ограничением по напряжению - 9,29,2/4=21 Вт. Как видим, запас по току еще есть, не весь ток лампы используется, напряжения не хватает. Насколько нужно поднять еще напряжение чтобы использовать полностью запас по току? Посчитаем. Если мы хотим выжать 36 Вт, нам нужно напряжение на вторичной обмотке трансформатора 12 В, тогда напряжение на первичной обмотке трансформатора будет 120 В (все еще не превышает максимальных 127 трансформатор не войдет в насыщение). Напряжение питания должно быть 12021,41=338 В. Как то слишком многовато для лампы, не следует, на мой взгляд, настолько сильно превышать паспортное значение. Хотя, может, и не нужно настолько превышать. Мы же исходили из предположения, что у нас сопротивление нагрузки и лампы согласованы, то есть, равны и напряжение делится между ними поровну. А судя по тому, что в моем усилителе напряжение на нагрузке 9 В достигается уже при напряжении питания 230 В, можно предполагать, что на самом деле сопротивление лампы меньше сопротивления нагрузки и поэтому в нагрузку идет большее напряжение. Для того, чтобы выяснить, насколько хорошо они согласованы, необходимо знать выходное сопротивление лампы. К сожалению, в справочнике на эту лампу этот параметр не указан. А не указан он потому что очень сильно зависит от режима работы лампы. Лучевой тетрод может работать как в пентодном режиме, при этом имея высокое выходное сопротивление, так и в триодном, с низким выходным сопротивлением.

Как измерить выходное сопротивление лампы? Известным способом путем подключения разных нагрузок и измерения напряжения на них. Сначала подключим нагрузку 4 Ом, измерим напряжение на ней U1, затем к тем же клеммам подключим нагрузку 8 Ом, измерим напряжение на ней U2. Рассчитаем внутреннее сопротивление по формуле

R_{i}=\frac{32\cdot (U_{1}-U_{2})}{4U_{2}-8U_{1}}\cdot K_{тр}^2

U1, В

U2, В

Ri, кОм

Pвых=1 Вт

2

3,6

3,2

Pвых=5 Вт

4,5

8,6

8,2

Pвых=9 Вт

6

11,5

38,4

Измерения и расчет проведем для 3 уровней выходной мощности 1, 5 и 9 Вт. Данные занесем в таблицу. Как видим, выходное сопротивление лампы по мере увеличения выходной мощности также увеличивается. Кстати, при включении ООС в усилителе, измеренное выходное сопротивление лампы на мощности 1 Вт составило всего 170 Ом. На какое из этих выходных сопротивлений ориентироваться при выборе коэффициента трансформации (если изготавливать трансформатор с нуля) остается непонятным. Получается, для лучевых тетродов при выборе коэффициента трансформации следует ориентироваться не на согласование по сопротивлению, а на согласование по току.

Таким образом, чтобы максимально использовать возможности лампы по току поднимем на ней напряжение, насколько это возможно. В моей схеме усилителя это можно сделать, подключив концы общей точки полуобмоток выпрямителя +230 В не к земле, а к обмоткам 17 В, питающей накалы выходных ламп. Таким образом, напряжение питания выходного каскада можно поднять на 171,41=24 В до 255 В, при этом максимальная выходная мощность подросла до 25 Вт, что неплохо.

Еще больше повысить напряжение в моей схеме с вакуумными выпрямителями не получится все обмотки уже задействованы. Единственный вариант в этом случае переходить на полупроводники. Тогда, играясь с обмотками, вполне можно набрать и 340 В. Повышая напряжение, следует иметь ввиду, что повышенное напряжение на аноде лампы скажется на ее долговечной работе, частая и долговременная работа на максимальной мощности (и токе) приведет к быстрой деградации катода. Повышая напряжение также необходимо пропорционально снижать и ток покоя лампы (до 50 мА, например), чтобы рассеиваемая на аноде мощность (50мА340В=17 Вт) не превышала максимальные для анода 21 Вт рассеиваемой мощности. При максимальной выходной мощности 36 Вт и идеальном согласовании сопротивления лампы и нагрузки на двух лампах двухтактного каскада будет выделяться также 36 Вт или по 18 Вт на каждой лампе, что в пределах нормы.

При использовании трансформатора ТС-180 вместо ТН-56 в этой же схеме мы получим примерно аналогичные результаты по выходной мощности. Единственное, за счет возможности его ультралинейного включения, большей мощности и большей индуктивности первичной обмотки этот трансформатор выдает менее искаженную синусоиду даже без использования ООС. Результаты по мощности аналогичные потому как там тоже первичная обмотка состоит из таких же двух половин по 127 В, вторичная из 3 секций по 6,8 В, коэффициент трансформации примерно такой же. Но там можно дополнительно включить несколько вторичных обмоток, повышая тем самым коэффициент трансформации. Но никакого существенного выигрыша это не дает, поскольку мощность каскада все равно всего только 55 Вт, из которых некоторая часть по любому уйдет в тепло на анодах. Включив трансформатор с чуть большим коэффициентом трансформации чем требуется, можно, не особо проигрывая в мощности, уменьшить ток через лампы, что положительно скажется на их долговечности.

Поднять выходную мощность можно только одним способом применить более мощные и высоковольтные лампы, например 6П45С. Прикинем, сколько мощности можно будет выжать из такого каскада в паре с трансформаторами ТС-180.

Для этой лампы ток анода импульсный составляет 800 мА при напряжение на аноде 400 В (700 В включении лампы). Действующее значение тока 567 мА, действующее значение напряжения 283 В. Мощность в каскаде 160 Вт. При идеальном согласовании сопротивления лампы и нагрузки в последнюю, допустим, удастся передать 80 Вт. Вторые 80 Вт рассеятся на анодах ламп, по 40 Вт в каждой, что немного превышает максимально допустимые 35 Вт. Что можно взять от трансформатора?

Действующее напряжение на первичной обмотке трансформатора будет около 283В/2=142 В. Для работы на этом напряжении можно последовательно синфазно соединить половину сетевой обмотки 127 В, 0,85А и вторичную обмотку 63 В, 0,5 А. При этом, максимальное действующее значение тока от лампы 0,567А, что немного превышает максимально допустимое для этой обмотки, но не сильно критично. Вторичная обмотка трансформатора 42 В, 0,4 А остается незадействованной. Ее можно употребить для ультралинейного включения. По некоторым данным, использование отдельной независимой обмотки для подачи сигнала на вторую сетку выходной лампы может положительно сказаться на линейности каскада. Коэффициент трансформации при таком включении 190/13,6=14 (для отвода 4 Ом). Напряжение на отводе 4 Ом будет 142В/14=10 В, ток 0,567А14= 8 А. Как видно, запас по току опять таки большой, а выходного напряжения не хватает. Да и ток 8 А выходная обмотка не потянет, там максимум 4,7 А. В этом случае повышать напряжение на лампе не будем, а домотаем на трансформаторе еще одну обмотку на 6,8 В, 4,7 А. Это всего 23 витка, домотать не проблема.

Пересчитаем трансформатор. Коэффициент трансформации при таком включении 190/20,4=9,3 (для отвода 4 Ом). Напряжение на отводе 4 Ом будет 142В/9,3=15,2 В, ток 0,567А9,3= 5,3 А. Выходная мощность, ограниченная по напряжению 15,215,2/4=57 Вт, по току - 5,35,34=112 Вт. И все равно напряжения не хватает, можно немного повысить анодное напряжение, например до 450 В. Тогда действующее в первичной обмотке будет 160 В, во вторичной обмотке 17,2 В, максимальная мощность, ограниченная напряжением - 74 Вт. При этом ток в выходных обмотках будет 17,2/4=4,3 А, что не превышает максимально допустимый ток обмотки в 4,7 А, но в то же время близок к нему. Наверное, это максимум что можно выжать из данного каскада и данного трансформатора. Что тоже весьма неплохо, это в 4 раза больше чем в исходном усилителе на лампах 6П44С.

Следует отметить, что все приведенные расчеты - очень грубые, "прикидочные". Для получения более точных данных, необходимо более серьезное моделирование и макетирование с измерением реальных величин.

Подробнее..

Делаем вечную лампочку

18.03.2021 14:16:42 | Автор: admin
На упаковках светодиодных ламп указывают срок службы 30, 40 или 50 тысяч часов, но многие лампочки не живут и года.
Сегодня я расскажу, как за пять минут без каких либо инструментов модифицировать лампочку так, чтобы её срок службы значительно увеличился.




Прежде всего напомню, что все светодиодные лампочки имеют гарантию от года до семи лет. Если лампочка вышла из строя в течение срока гарантии, её можно обменять в магазине, где она была куплена. Для обмена в больших магазинах, вроде Леруа Мерлен, не потребуется даже чек и упаковка.

В проекте Lamptest.ru я тестирую параметры света ламп, но не могу протестировать надёжность. Я прекрасно понимаю, что для большинства покупателей важнее, чтобы лампочка работала долго, а не какие у неё параметры.

Причины выхода из строя ламп в основном две выгорание светодиодов и выход из строя конденсаторов.

Если снизить мощность лампы на треть, срок жизни светодиодов значительно возрастёт (разумеется, яркость лампы при этом снизится). Этим мы и займёмся.

В самых дешёвых лампах используются очень плохие конденсаторы, которые не живут и года. Такие лампы модифицировать нет смысла долго они всё равно не проживут.

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

Существует два типа конструкции ламп традиционная двухплатная (внутри корпуса плата драйвера, над ней круглая плата со светодиодами) и одноплатная (драйвер расположен прямо на плате со светодиодами, а конденсаторы припаяны к этой плате сзади). Для простой и быстрой модификации нужна лампа с одноплатной конструкцией.

Из своих запасов я нашёл лампы, идеально подходящие для переделки Navigator NLL-A60-15-230-4K-E27 с датой выпуска 0419 (надеюсь у современных ламп такого типа такая же конструкция). Эта лампа имеет реальную мощность 13.66 Вт, даёт 1210 лм света, имеет индекс цветопередачи CRI(Ra) 83, у неё полностью отсутствует пульсация. Лампа оснащена импульсным драйвером. Такие лампы можно найти в продаже по цене от 120 рублей.



Разумеется, можно взять и модель с тёплым светом NLL-A60-15-230-2.7K-E27.
Первым делом снимаем колпак. У этой лампы его можно просто оторвать рукой (потребуется большое усилие). Под колпаком единая плата. На ней нас интересуют резисторы R1 и R2, они задают ток светодиодов.



Резисторы включены параллельно, их номиналы 2.7 Ом и 5.6 Ом. Аккуратно ломаем резистор R2, всеми силами стараясь не сломать всё вокруг резистора.



Вот и всё. Можно надевать колпак обратно.

Мощность лампы снизилась с 13.66 до 8.83 Вт. Световой поток снизился с 1210 до 925 лм. Теперь лампа способна заменить лампу накаливания 85 Вт, что тоже неплохо. У лампы значительно выросла эффективность: было 89 лм/Вт, стало 105 лм/Вт.

Главное, лампа стала гораздо холоднее.



Температура корпуса непеределанной лампы достигает 67 градусов, у модифицированной всего 52 градуса.



Температуру на включённых светодиодах тепловизор показывает неправильно, но сравнить вполне можно.



Разница в температуре на светодиодах очень большая 21 градус.



Светодиоды в модифицированной лампе теперь будут работать очень долго, дело за конденсаторами (им, кстати, тоже будет полегче из-за меньшей температуры внутри лампы). Если они не подведут, эта лампочка будет работать десятилетиями.

Несколько важных замечаний:

для модификации пригодны только новые лампочки (если лампа давно работает, деградация светодиодов уже началась и она не остановится);
при переделке вы лишаетесь гарантии на лампу (впрочем, если лампа всё же выйдет из строя и вы приклеите обратно плафон, никто не будет разбираться, что вы там внутри резистор отломали);
не забывайте, что когда ламп включена в сеть, на плате присутствует опасное напряжение.

Я продолжу поиск удачных и массовых моделей для подобной модификации, и как только найду интересные варианты, расскажу, как переделывать и их, разумеется измерив параметры после переделки.

2021, Алексей Надёжин
Подробнее..

50 оттенков жёлтого. Проверяем на практике технологию Retrobright

22.03.2021 22:08:50 | Автор: admin

Пару недель назад на Хабре вышла хорошая статья с объяснением химических процессов, которые происходят при пожелтении и отбеливании ABS-пластика. Автор доступно изложил теорию, ну а я хотел бы дополнить её практикой. Так совпало, что где-то год назад я начал собственные эксперименты по восстановлению цвета. Пост будет в первую очередь интересен любителям ретро-железа, но не только им, поскольку изделия из такой пластмассы есть почти в каждом доме. Материал получился очень большим, так что я разобью его на две части.

Кратко напомню суть явления для тех, кто не читал статью. В состав ABS-пластика входят три основных компонента акрилонитрил, бутадиен и стирол. Под воздействием тепла и ультрафиолетового излучения стирол распадается, образуя соединения жёлтого цвета. Однако в присутствии концентрированной перекиси водорода ультрафиолет, наоборот, способствует разрушению этих соединений, восстанавливая цвет. Тот, кто нам мешает, тот нам поможет!.

Глава первая. Головокружение от успехов

Итак, для отбеливания нужны две вещи УФ-излучение и перекись водорода. Источником ультрафиолета в простейшем случае может выступать солнце. Так что дело за малым добыть перекись. Об аптечном растворе 3% можно даже не думать зря потратите время. Концентрированный вариант продаётся свободно. Его можно найти в магазинах химических реактивов и в компаниях, продающих средства для чистки бассейнов. Там вообще можно взять 10-литровую ёмкость за 1000 рублей. Но для первого эксперимента такой объём показался мне избыточным, так что я купил литровую бутыль в магазине Русхим.

Прежде чем перейти к описанию опытов техника безопасности!

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

Первым подопытным стал комбо-привод, который, несмотря на довольно скромный возраст, пожелтел просто до неприличного состояния. Идеальный кандидат: если сработает с ним, сработает с чем угодно.

Рис. 1. Привод выпущен в 2003 году. Видимо, долго стоял на солнцеРис. 1. Привод выпущен в 2003 году. Видимо, долго стоял на солнце

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

Рис. 2. Пакеты не дают перекиси испарятьсяРис. 2. Пакеты не дают перекиси испаряться

Поначалу я не знал, какая концентрация подойдёт лучше. На форумах мне встречались разные цифры от 6 до 30%. В общем, накладку лотка я погрузил в прямо в концентрированный 37-процентный раствор, а основную панель в разбавленный примерно до 15%.

Рис. 3. Уже через пару часов заметна разницаРис. 3. Уже через пару часов заметна разница

Попутно выяснилось, что закрытый пакетик с застёжкой не лучшее решение, потому что в процессе реакции активно выделяется кислород, и его приходится регулярно стравливать. Также у меня были опасения, что из-за пузырьков отбеливание может получиться неравномерным. Но, забегая вперёд, скажу, что за всё время опытов с жидкой перекисью я так ни разу и не увидел пятнистого результата.

Отбеливание, как и большинство реакций, ускоряется при повышении температуры. Поэтому, чтобы основная панель, погружённая в менее концентрированный раствор, не отставала от накладки, я добавил небольшой подогрев. В качестве плитки выступила магнитная мешалка с выключенным двигателем.

Рис. 4. Если температура воздуха выше 20 C, подогрев необязателенРис. 4. Если температура воздуха выше 20 C, подогрев необязателен

В конце дня я извлёк детали из пакетов и увидел, что результат превзошёл самые смелые ожидания.

Рис. 5. Разницы между деталями из разных пакетов не заметноРис. 5. Разницы между деталями из разных пакетов не заметно

Желтизны как не бывало! При этом надписи совершенно не пострадали. Фактически лицевую панель дисковода удалось восстановить до первоначального состояния.

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

Рис. 6. Практически цветовой веерРис. 6. Практически цветовой веер

Причём на этот раз окно было закрыто. Здесь мне могут напомнить известную ещё со школы истину, что стекло не пропускает ультрафиолет. На самом деле смотря какое стекло и смотря какой ультрафиолет. Ближний (UVA, 400315 нм) через оконное стекло проходит, и этого хватает для отбеливания.

Рис. 7. Quartz кварцевое стекло, TPX полиметилпентен, Glass оконное стекло, PS полистирол, PVC поливинилхлорид, PMMA полиметилметакрилат (оргстекло). Источник: http://www.goodfellow.com/larger-quantities/polymers/tpx-characteristics/Рис. 7. Quartz кварцевое стекло, TPX полиметилпентен, Glass оконное стекло, PS полистирол, PVC поливинилхлорид, PMMA полиметилметакрилат (оргстекло). Источник: http://www.goodfellow.com/larger-quantities/polymers/tpx-characteristics/

Окрылённый первыми успехами, я бросился отбеливать все детали, до которых мог дотянуться. И вот тут-то оказалось, что не всё так просто.

Глава вторая. Непоправимые улучшения

Следующими на опыты пошли очередной дисковод и две мышки курильщика.

Рис. 8. Привод CD-ROM с аппаратными кнопками. Когда-то я делал на основе такого проигрывательРис. 8. Привод CD-ROM с аппаратными кнопками. Когда-то я делал на основе такого проигрывательРис. 9. Похоже, мышка Kami изначально была скорее серой, чем белойРис. 9. Похоже, мышка Kami изначально была скорее серой, чем белой

Погода, как назло, испортилась, солнца стало не хватать, поэтому я стал всё больше думать о подогреве. Да ещё и некоторые участники форумов писали, что ультрафиолет прекрасно заменяется нагревом до 70C. Звучало интригующе, так что я залил детали перекисью и поставил греться.

Рис. 10. Если бы я мог, я бы вернулся в этот момент и всё сделал по-другомуРис. 10. Если бы я мог, я бы вернулся в этот момент и всё сделал по-другому

Чтобы эксперимент был совсем чистым, я закрыл контейнер непрозрачной крышкой. И в этом была моя первая ошибка. Я отвлёкся на работу и вернулся к деталям только через час. И увидел вот что:

Рис. 11. Варись, вуншпунш!Рис. 11. Варись, вуншпунш!

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

Рис. 12. Видна довольно чёткая границаРис. 12. Видна довольно чёткая граница

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

Рис. 13. Заметка на будущее: перед отбеливанием отклеивать всё, что можно отклеитьРис. 13. Заметка на будущее: перед отбеливанием отклеивать всё, что можно отклеить

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

Рис. 14. А вот и первая жертваРис. 14. А вот и первая жертва

Видимо, она одним краем касалась дна ёмкости, а пузырьки выделялись так активно, что сформировали вокруг неё воздушный карман. Перекись перестала омывать эту часть, пластмасса перегрелась и поплыла. Ну что ж, во всяком случае, теперь у меня есть уникальный дисковод в стиле Сальвадора Дали.

Глава третья. Работа над ошибками

После серии неудач я понял, что Retrobright не терпит спешки и экономии на вспомогательных приспособлениях. Мышку Kami удалось спасти, погрузив в подогретую перекись другой стороной на точно отмеренную глубину.

Рис. 16. У этого контейнера двойное дно, так что мышка не перегреетсяРис. 16. У этого контейнера двойное дно, так что мышка не перегреется

В итоге в её внешнем виде ничто не напоминало о допущенной ошибке.

Рис. 17. Радует, что яркость надписи совсем не измениласьРис. 17. Радует, что яркость надписи совсем не изменилась

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

Рис. 18. В этой статье есть таблица с описанием совместимости разных материалов с перекисью:habr.com/ru/post/501310/Рис. 18. В этой статье есть таблица с описанием совместимости разных материалов с перекисью:habr.com/ru/post/501310/

Оно не даёт им всплывать, даже если их полностью облепляют пузырьки.

Рис. 19. Также можно приклеить ко дну контейнера пластиковые проушины и привязывать детали к нимРис. 19. Также можно приклеить ко дну контейнера пластиковые проушины и привязывать детали к ним

Результат отбеливания второй мышки:

Рис. 20. Не скажу, что желтизна ушла на 100%, но на 90 пожалуйРис. 20. Не скажу, что желтизна ушла на 100%, но на 90 пожалуй

Здесь, кстати, можно отчасти не согласиться с одним из утверждений оригинальной статьи. В её выводах сказано:

В противоположность распространенному мнению Retr0bright не исправляет пластик, а просто его отбеливает.

Исправление конечно, слишком многозначное слово. Но присмотритесь к средней кнопке на этой мыши. Изначально она была тёмно-бирюзового цвета, а по прошествии лет стала жёлто-зелёной. Если бы Retrobright просто сделал пластик более белым (как если бы в краску добавили белил), кнопка получилась бы светло-жёлто-зелёной. Но, как по мне, здесь именно что пропала желтизна. Цвет кнопки стал более холодным, но общая её яркость почти не изменилась. Несколько побледнела лишь надпись Genius. Видимо, она выполнена по иной технологии, нежели надписи на DVD-приводе и мышке Kami.

Заключение

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

Рис. 21. Ничто не вечно под луной...Рис. 21. Ничто не вечно под луной...

У кадров может быть немного разный баланс белого, но субъективно я бы сказал, что пластик почти наполовину вернулся к старому состоянию. Причём всё это время дисковод лежал в тёмном месте. Разумеется, это несложно исправить, но в целом стоит быть готовым к тому, что отбеливание периодически придётся повторять. Если, конечно, вы хотите регулярно любоваться вещью, а не отбеливаете её для разовой фотосессии.

По поводу того, как продлить эффект, у энтузиастов тоже есть различные предложения. Кто-то советует смазывать свежеотбеленные детали силиконом, кто-то защитными составами для мебели с воском или парафином в составе. Это я тоже хочу проверить. Через год вернусь с результатами!

А вот вторая часть этой статьи выйдет, надеюсь, уже через недельку-другую. Небольшой анонс:

Рис. 22. Полагаться на одно только солнце в наших краях было бы недальновидно!Рис. 22. Полагаться на одно только солнце в наших краях было бы недальновидно!

Выводы кратко:

  1. В самом простом случае достаточно погрузить детали в жидкую перекись. Другие ингредиенты (камедь, глицерин, усилитель для стирки) необязательны.

  2. Оптимальная концентрация перекиси в районе 15%.

  3. Полиэтиленовая плёнка, бытовые пластиковые контейнеры и оконное стекло не препятствуют отбеливанию.

  4. УФ-излучение можно заменить нагревом, но возрастает риск испортить наклейки и надписи. Крайне рекомендуется использовать водяную баню.

  5. Также за счёт нагрева можно сделать детали светлее, чем они были изначально. Это может быть полезно, если вы подбираете неоригинальные запчасти на замену.

Буду рад ответить на ваши вопросы в комментариях. К критике тоже прислушаюсь, тем более что это первая моя публикация на Хабре. Спасибо за внимание!

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru