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

Diy или сделай сам

Перевод SB181 логический вычислитель на базе АЛУ 74LS181

10.06.2021 16:07:13 | Автор: admin


Уже какое-то время в моей мастерской дожидаются своего проекта пара микросхем АЛУ 74LS181. Но так как мысль о создании на их базе целого процессора была несколько пугающей, я решил задействовать эти чипы в роли логического вычислителя: своеобразного 8-битного калькулятора, который получает шестнадцатеричные входные данные и отображает результаты различных логических операций в двоичном и hex-форматах. Будучи собранным исключительно на базе логики микросхем 74-й серии без какого-либо микроконтроллера или ЦПУ, такое устройство оказывается удобным помощником в 8-битном программировании.

Описание схемы


Микросхема шифратора 74C923 на 20 клавиш (хотя подключена она только к 16) получает пользовательский ввод. В зависимости от положения движкового переключателя вводимое число сохраняется в регистре А, регистре В или функциональном регистре. Переключатель просто перенаправляет стробирующий импульс Data Available из 74С923 на вход синхронизации соответствующего регистра. Резистор подтягивает входы синхронизации каждого регистра на высокий уровень, исключая их произвольное срабатывание в пассивном состоянии. Этот импульс срабатывает до появления на выходе фактических данных, поэтому я просто инвертировал данный сигнал через элемент И-НЕ, чтобы регистры защелкивались на заднем фронте. В противном случае защелки всегда сохраняли бы предыдущую введенную цифру.


Небрежно проложенные провода

Регистры А и В являются 8-битными защелками, использующими 74HC273. Каждое нажатие кнопки сдвигает 4 нижних бита регистра в 4 верхних, и в то же время значение кнопки загружается в нижние 4. Это позволяет вводить 2 шестнадцатеричные цифры одну за другой, как это делается на калькуляторе. Затем содержимое этих двух регистров передается на входы операндов А и В АЛУ 74LS181. Эти сохраненные значения регистров также отправляются на дисплейную плату, где hex-значение отображается двумя TIL311, а двоичное при помощи светодиодной гистограммы.

Функциональный регистр это 4-битный 74HC175. Несмотря на то, что АЛУ 74LS181 поддерживает множество функций, практическое применение имеет лишь их ограниченное число. Поэтому в данном случае я выбрал те же 16 функций, что и agp.cooper. Отображение вывода кнопочной панели 0-15 в разные значения, требуемые на входах S-функции микросхемы 74LS181, реализуется с помощью EEPROM. Это также означает, что можно выбирать различные функции или их порядок на кнопочной панели просто перепрограммируя ее. То есть я могу приблизительно сгруппировать функции каждой кнопки, расположив простые внизу, а более сложные сверху. В таком случае EEPROM просто обработает этот перенос.

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


Логическая плата с тремя регистрами-защелками, EEPROM и двойной 74LS181

Другая кнопка подключена к схеме защелки, основанной на логическом элементе И-НЕ. Это позволяет устанавливать входной сигнал переноса для нижнего 74LS181. Ширина каждого из этих двух чипов АЛУ составляет всего 4 бита, но подключение выхода переноса нижнего к входу верхнего дает уже 8-битное АЛУ. Здесь мне не нужно озадачиваться схемой ускоренного переноса, поскольку это полностью статичная настройка, где не требуется отслеживать синхронизацию или другие тайминги.

Затем сигналы выхода F АЛУ отправляются на плату дисплея, где снова отображаются в hex- и двоичном форматах. Дополнительный светодиод показывает, был ли сгенерирован верхним 74LS181 выход переноса.


Дисплейная плата

Сборка


SB181 состоит из 3 отдельных печатных плат. Это позволило добиться относительно компактного размера корпуса, а также вписаться в стоимость по $2 за JLCPCB.

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

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

Основная логическая плата содержит всего 3 регистра-защелки, функциональную EEPROM и пару АЛУ 74LS181. Вывод этих компонентов передается на плату дисплея через шлейф.
Дисплей постоянно показывает значения двух операндов в регистрах А и В, а также вывод текущей функции АЛУ.

Микросхемы TIL311 представляют красивый шестнадцатеричный дисплей. Расстроила меня лишь их стоимость, а также характеристики энергопотребления, которые не позволили запитать устройство по USB. В результате я использовал стандартную схему импульсного источника питания, которая получает 12В при 750мА и понижает их до 5В. Гистограммные дисплеи тоже отлично справляются с отображением двоичных данных, для чего задействуют 8 из 10 доступных светодиодов. Один из оставшихся при этом используется для индикации выхода переноса.

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

В своей схеме я смешал оси X и Y шифратора клавиш, поэтому для обеспечения правильного расположения чисел пришлось проложить несколько проводов. Я также забыл, что выход переноса 74LS181 активируется низким уровнем сигнала, в связи с чем пришлось сделать перенаправление, пробросив на плате отдельный провод.

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


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

Схемы


Плата клавишного блока
Логическая плата
Дисплейная плата


Подробнее..

Можно ли сделать деревянный стеллаж без инструмента используя только отвертку и 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

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


Подробнее..

Рояль, азот и котик как это было

16.06.2021 12:16:05 | Автор: admin
Если кто-то пропустил, то с 24 по 28 мая мы реализовали проект под кодовым названием Рояль, азот и котик. И настало время рассказать о том, как мы всё организовали, с грязными подробностями, скандалами, интригами и расследованиями.

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

Итак, наливайте в кружку кофе, смузи или ягер, и устраивайтесь поудобнее: впереди много гик-порно, мужиков с перфораторами и сварочными аппаратами, красивых девушек и, собственно, самого рояля Красный октябрь, который, как и полагается музыкальному инструменту Made in USSR, пережил падение и даже не расстроился (в прямом и переносном смысле). Чего не скажешь о капиталистическом ноутбуке

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


Ок, а куда мы будем ронять этот рояль?


Очевидно, что ронять мы его будем на компьютер или ноутбук, так как речь идет о ситуации, когда под угрозой оказываются данные, хозяин которых не позаботился о цифровой копии в облаке. Чертежи, секретные материалы или резервная копия базы данных 1С: Бухгалтерии потеря этих данных уже обыгрывалась, и не один раз, как в фильмах, так и в страшных снах системных администраторов. Поэтому хотелось найти что-то свежее. И тогда мы схватились за идею, что это будет NFT-гифка с котиком, ценность которой стремительно растет.

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

Итак, история придумана, основные инструменты подобраны, осталось дело за малым, весь этот план реализовать

Окей, гугл, как подвесить рояль к потолку?


Да, по этому запросу результатов катастрофически мало, поэтому придется делать всё самим.

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


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

А что с помещением?


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

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

И тут мы вспомнили о нашем друге, Алексее Горове, владельце студии Faraloft, в которой мы снимали уже несколько видео-проектов, и, не особо рассчитывая, позвонили ему. Хабр? Рояль? Жидкий азот? Разбить ноутбук? Ахаха, я в деле! ответил Алексей, и мы в очередной раз поверили в великую силу Хабра.

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

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


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

Ок, а что с роялем?


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

Наконец, нашелся один в Подмосковье (Электросталь), вполне вписывался в бюджет.

  • А он у вас в рабочем состоянии? спрашивали мы.
  • Да, две недели назад настраивали, говорила Валентина Ивановна, его владелица. Будьте с ним аккуратнее, пожалуйста!
  • Ну что вы, Валентина Ивановна! Будем сдувать с него пылинки! отвечали мы, стараясь сохранить благородные интонации в голосе.

К нам в студию он прибыл тщательно упакованный от царапин:


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


Фабрика Красный октябрь (бывшая фортепианная фабрика Беккер) выпускала отличные музыкальные инструменты.
Немного из истории фабрики: В 1947 году на фабрике было создано конструкторское бюро, и в 1950-е о достоинствах инструментов Красный Октябрь заговорили в Европе. Сенсацией стало завоевание ленинградским роялем Гран-при на Всемирной промышленной выставке в Брюсселе в 1958 году, ведь прославленные Блютнер, Бехштейн и Стейнвей его и за конкурента не считали.
И да, качество рояля весьма добротное, после падения у него сломались только педали, две ножки и отлетела одна из клавиш, но при этом он даже не расстроился и на нем можно было продолжать играть:


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

Ок, а как мы его подвесим к потолку?


Первый набросок схемы крепления рояля к потолку выглядел так:

За кадром остались пенные напитки RuVDS, без которых никак нельзя было разобраться.

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



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


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




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

Алексей Горов (владелец студии Faraloft) монтирует строительные леса, без которых до балки было не добраться.


Простите, Валентина Ивановна, мы постарались не царапать ваш рояль

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


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


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

Первое тестовое поднятие рояля:


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

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


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


А что, если на рояле можно будет поиграть?


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

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

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

Параллельно мы начали думать о том, как организовать игру на рояле, и собрали на коленке прототип устройства на базе Arduino Nano и Raspberry Pi. В первом варианте у нас зажигались нужные лампочки адресной светодиодной ленты.


В конечном варианте мы добавили плату расширения с реле и два ряда соленоидов на фанерке:


Устройство собрано и готово ко встрече с роялем:


В финальном варианте это выглядело так:


Хотя сперва и была идея распечатать корпус на 3D-принтере, мы не стали прятать внутренности. Во-первых, чтобы оставить видимыми светодиоды, по которым нам будет понятно, работают ли основные узлы устройства или нет. А во-вторых, это же проект для Хабра, гик-порно и немного киберпанка:

Кадр из заставки сериала Мир дикого запада.

На сайте мы разместили клавиатуру, на которой нарисовали и цифры с нотами, что жирно намекало на то, что мы что-то там зашифровали:


Очевидно, что желающих проиграть свою мелодию будет много (за весь проект на рояле было проиграно около 2100 мелодий), поэтому мы реализовали механизм очереди через Telegram-бота. Участник проигрывал мелодию, она записывалась и передавалась ботом через API на Raspberry Pi. Пользователю сразу же после этого приходило первое оповещение с прогнозом времени воспроизведения, а затем, примерно за 20 секунд до того, как будет проигрываться запись, приглашение посмотреть этот момент вживую через трансляцию на сайте:


Участник переходил по ссылке и слушал, как его мелодия проигрывается в какой-то далекой московской квартире:


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


А что там с азотом?


Собственно, зачем вообще нужен был азот? Ну, во-первых, это красиво. А во-вторых, современные HDD делаются довольно прочными и вполне себе могут пережить такую незначительную неприятность, как падение рояля. Поэтому мы решили подойти к вопросу уничтожения NFT c котиком основательно и добавить в сюжет жидкий азот. Чтобы наверняка.

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


Резиновая пробка или герметик под действием азота могли бы довольно быстро разрушиться, поэтому Только сварка! Только хардкор!

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


Да, судя по всему, одного из участников Дом 2 заморозили, чтобы реанимировать в 2035-м году и придать шоу новое дыхание:


Процесс переливки в жидкого азота в сосуд Дьюара:


В назначенный час мы, как и обещали, залили ноутбук жидким азотом:


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


А вот что стало с ноутбуком после заморозки и встречи с 500-килограммовым роялем:


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

Итоги проекта и немного статистики:


  • 7635 уникальных посетителей заглянуло на сайт проекта.
  • 10 литров жидкого азота было вылито на ноутбук перед падением рояля.
  • 45 метров троса понадобилось для поднятия и удержания рояля.
  • 4 человека прошло квест до конца.
  • 2340 раз рояль проиграл мелодии участников проекта.
  • 113 раз рояль сыграл мелодию Чижик пыжик где ты был?


Хронология постов по проекту:


  1. Спаси котика из-под рояля
  2. Котики в NFT: революция в цифровом мире или хайповая пирамида?
  3. Рояль над котиком, день первый
  4. Хроники котика: брутфорс рояля, крыса-кун и деанон Оксаны
  5. Финал квеста и победители: особенности криогравитационного воздействия на портативные ЭВМ
  6. Hack the hackers: полное руководство по прохождению квеста
  7. Как организовать трансляцию на 5 суток (почти) без разрывов?
  8. Рояль, азот и котик: как это было <=== Вы сейчас здесь



Подробнее..

Миниатюрный датчик качества воздуха на батарейке с e-ink экраном

21.06.2021 12:17:59 | Автор: admin
Приветствую всех читателей Habr! В своей сегодняшней статье, хочу рассказать вам о своем новом DIY беспроводном устройстве датчике качества воздуха. Помимо оценки качества воздуха, датчик может оценивать уровень освещенности в помещении, температуру, влажность и атмосферное давление, на основе данных атмосферного давления, устройство может предсказывать прогноз погоды. Это полностью открытый проект.



Внутреннее устройство


Датчик работает на микроконтроллерах nRF52, были разработаны 4 версии плат датчика под радиомодули nRF52 разных производителей. Одна основная и еще три расширенные версии (пояснения будут чуть ниже по тексту).

Используемые в проекте модели радиомодулей:

  • основной MINEW MS88SF3 (nRF52833, nRF52840)
  • дополнительные: MINEW MS50SFA1 (nRF52810, nRF52811), MINEW MS50SFA2 (nRF52832), EBYTE E73-2G4M08S1C (nRF52840) и EBYTE E73-2G4M08S1E (nRF52833)

Используемые в проекте сенсоры:

  • сенсор качества воздуха в помещении для измерения ЛОС SGP40
  • сенсор давления, температуры и влажности BME280
  • сенсор освещенности MAX44009

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

Устройство может выводить данные на экране и передавать данные в системы Умного Дома, так же может работать в режиме без сети.

Для вывода информации использовался e-ink дисплей со сверхнизким потреблением и диагональю 2.13 дюймов компании WaveShare.



Характеристики дисплея:

  • Разрешение: 250x122
  • Диапазон рабочих температур: 0 50 C
  • Потребление в рабочем режиме: 3мА
  • Потребление в режиме глубокого сна: 1мкА
  • Минимальное время обновления экрана: 0.3 сек.

В ближайшее время в проект будет добавлена поддержка дисплея DES e-Ink 2.13 c рабочим температурным режимом -20C~60C (что такое DES).
..upd Пока статья писалась сделал драйвер, дисплей протестирован, в морозильнике работает :), из минусов разрешение 212х104, но зато морозов не боится, в общем рабочий вариант.


Основная версия PCB датчика:

Дополнительные версии:



Основным сенсором в данном проекте является сенсор качества воздуха в помещении SGP40. Можно сказать что это новинка на рынке от компании Sensorion c весьма неплохими характеристиками.


Сенсор измеряет общую концентрации летучих органических веществ (TVOC). В сравнении с предыдущим датчиком этой компании SGP30 потребление было значительно снижено, 48 мА при измерении у SGP30 и 2.6мА у SGP40. Правда предыдущий датчик мог отдавать уже готовые значения VOC и эквивалента СО2, в то время как новинка отдает сырые данные которые в дальнейшем надо обрабатывать на стороне МК при помощи поставляемой с датчиком библиотеки с алгоритмом расчета качества воздуха. Даташит на датчик SGP40.


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

Схема устройства:



Передача датчиком данных с сенсоров в системы Умного Дома реализована на открытом проекте MySENSORS.




Функционал датчика


Устройство, при подаче питания, осуществляет попытку поиска сети, если сеть не найдена, то устройство переходит в основной режим работы без работы в сети (не шлет данные), но периодически делает короткие запросы на поиск сети(~раз в 2 часа). Интервал опроса сенсора SGP40 3 секунды, чтение остальных сенсоров, отправка данных, основное обновление экрана раз в 1 минуту. Обновление экрана и отправка данных(если сеть доступна) происходит при изменении данных уровня качества воздуха (TVOC) на 10 единиц, температуры на 0.5C, влажности на 5%, давления на 1 единицу, при изменении уровня освещенности на 10 люкс, при изменении прогноза по погоде. Интервал опроса батарейки задается пользователем в интервале от 1 часа до 24 часов, по умолчанию опрос один раз в 6 часов.
Так же есть дополнительная подпрограмма для обновления экрана и отправка данных при резком повышении уровня TVOC на 30 единиц, интервал проверки раз в 6 секунд.

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

Доступный функционал кнопки меню:

  1. Инверсия экрана
  2. Отправка презентации
  3. Вход в режим конфигурации внешними командами по радио
  4. Поиск сети
  5. Сброс устройства

Так же, помимо кнопки меню, датчик может настраиваться внешними командами из интерфейса УД. Для этого необходимо активировать нужный пункт меню конфигурация датчика нажатием кнопки меню. После активации режима конфигурации, датчик перейдет в режим прослушивания на 20 секунд. В этот интервал необходимо отправить команду. Внешними командами можно настроить интервал проверки батарейки, изменить вывод информации на экран в инверсии, выбор режима работы: LP (чтение сенсора SGP40 раз в 3 секунды) или ULP (чтение сенсора SGP40 раз в 5 секунд).

Датчик умеет анализировать данные атмосферного давления и рассчитывать по ним прогноз погоды, выводить на экран данные о прогнозе погоды и отправлять эти значения в УД. Описание алгоритма расчета прогноза погоды (NXP Application Note 3914 | John B. Young)

На экране рядом с каждым типом данных выводится индикация направления изменения значений.



Для компиляции нужной версии ПО необходимо сконфигурировать файл aConfig.h.

//#define MY_DEBUG#define LANG_RU // If this is not used the English localization will be displayed.#ifndef LANG_RU#define LANG_EN#endif#define SN "eON Air Quality Sensor"#define SV "0.99"#define MY_RADIO_NRF5_ESB#define MY_NRF5_ESB_PA_LEVEL (0x8UL)//#define MY_PASSIVE_NODE//#define MY_NODE_ID 151//#define MY_NRF5_ESB_MODE (NRF5_1MBPS)#define MY_NRF5_ESB_MODE (NRF5_250KBPS)#define ESPECIALLY#define SEND_RESET_REASON#define MY_RESET_REASON_TEXT

Потребление датчика в режиме сна составляет в среднем 33мкА (смотрите даташит на SGP40), в режиме считывания сенсоров и обновления экрана 4мА(среднее), в режиме передачи данных 8мА(среднее), время передачи одного сообщения 10мc (идеальные условия).
Датчик работает от батарейки CR2477 (950мА), среднее расчетное время работы устройства 1 год(зависит от конфигурации прошивки, установленных сенсорах на устройстве, больше сенсоров больше данных нужно будет отправлять, а передача по воздуху это основной потребитель), данных о реальном сроке работы пока нет, устройство пока работает 2 месяца.



Модели разработанного корпуса датчика я печатал на FDM 3D принтере, что бы добиться более или менее приличного вида, корпус после печати шлифовался и полировался. На задней крышке корпуса можно установить магниты.



GitHub проекта github.com/smartboxchannel/

В файле readme находится инструкция по установке и настройке среды для редактирования и компиляции ПО для датчика.

OPEN SOURCE HARDWARE CERTIFICATION
OSHWA UID: RU000004


В завершении, уже как обычно, сделаю небольшой фото анонс проектов с которыми в скором времени поделюсь и о которых расскажу (Датчики влажности почвы Zigbee, Уличный датчик температуры и влажности Zigbee Long Range, Датчик качества воздуха bme680 c e-ink3.7).

Новые проекты на стадии тестирования












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

Если вы как и я, хотите понять что такое Zigbee, попытаться сделать свои первые DIY Zigbee устройства, то приглашаю вас в чат для разработчиков zigbee девайсов/прошивок ZIGDEV

Всем, кто хочет делать устройства, начать строить автоматизацию своего дома, я предлагаю познакомиться с простым в освоении протоколом Mysensors телеграм-чат MySensors

А тех кто смотрит в будущее IOT приглашаю в телеграм-чат Open Thread (Matter, Project CHIP). (что такое Thread?, что такое Matter?)

Спасибо за внимание, всем добра!


Подробнее..

Как я переделываю недиммируемые светодиодные светильники в диммируемые. Статья вторая

10.06.2021 04:21:04 | Автор: admin

Учтя всю критику и советы в первой статье, я решил питать светодиодные ленты в светильниках от специализированного драйвера. В качества драйвера был выбран драйвер фирмы Mean Well LDH-45B-350. Этот драйвер можно питать напряжением в широких пределах от 18 до 32 вольт. Я для питания приобрёл блок той же фирмы что и сами драйверы Mean Well LRS-100-24.

Небольшое отступление.

Скажу, что я немного разочаровался в этих блоках питания, да и драйверах, думал солидная фирма, всё должно быть так сказать по красоте и работать без нареканий, но на деле всё оказалось вообще не так. Блоки покупал в интернет магазине Чип и Дип, думал что никаких проблем не будет, солидный магазин, солидная фирма, должно всё работать идеально долгие годы. Но по факту первый звоночек я получил ещё когда собирался питать светодиодные ленты постоянным стабилизированным напряжением используя для этого 2 минвеловских блока питания соединённых последовательно LRS-50-24 и LRS-50-36.
Уже тогда я заметил, что эти блоки гудят при определённой частоте ШИМ. То есть регулировку яркости ленты я делал с помощью ШИМ и полевого транзистора IRF520N. Думал, может что-то не так рассчитал, не такой транзистор поставил и проблема в моём ШИМ, который как-то влияет на блок и заставляет его пищать. Но оказалось ни фига подобного, когда я уже потом к одному блоку, а именно к LRS-50-24 подключил указанный выше светодиодный драйвер, при определённой яркости этот блок всё равно начинал пищать. Тогда я решил купить блок помощнее на 100 ватт, вот он уже с этими драйверами вроде как перестал пищать или пищит, но гораздо тише чем 50-ти ваттный. В общем хочу всех предостеречь и посоветовать покупать блоки помощнее, c двойным, а то и тройным запасом по мощности. Я может даже куплю и поставлю блок на 150 ватт LRS-150-24. Хотя 3 моих светодиодных светильника потребляют в сумме 60 ватт. Но блок придётся покупать с более чем двойным запасом, чтобы не пищал и не гудел. Причём как уже сказал, пищат оба моих 50-ти ваттных блока и на 24 вольта и на 36 вольт. То есть, вряд ли это мне 1 такой из тысячи попался который гудит. А вот 100 ваттный вроде как и не гудит, или гудит, но гораздо тише. В общем даже если он и гудит, то этот уровень гудения меня устраивает, в отличии от 50-ти ваттных, они гудят довольно сильно.

Второй косяк который всплыл оказался в светодиодном драйвере. При уменьшении яркости с помощью ШИМ, 2 светильника переставали светить, а вот 1 светил. Проблема оказалось в том, что один из драйверов выдавал большее напряжение на выходе чем остальные. Естественно такая ерунда меня не устраивала, когда 2 светильника не горят, а один ещё светит, пусть и очень-очень тускло, я хочу сделать всё идеально, поэтому решил его обменять, но я уже впаял его в плату, пришлось выпаивать, а я ненавижу (хотя и могу) выпаивать детальки у которых больше чем 4 ножки, и ножки которых разнесены на несколько сантиметров друг от друга. Выпаять я конечно выпаял, аккуратно, не перегрев и не повредив ни плату, ни драйвер, но удовольствие такое занятие мне не доставляет, и покупая драйверы этой фирмы, я даже не подозревал что мне придётся их когда либо выпаивать, и уж тем более не думал, что придётся выпаивать сразу же, потому что один оказался бракованный. Причём он в принципе работал хорошо, до определённого понижения яркости, и перед впаиванием в плату, я как человек ОЧЕНЬ подозрительный их всё же проверял, но не на всём диапазоне яркости, и не очень досконально. Вот и оказалось, что при очень низкой яркости, когда уже все светильники не светили, один все же светил. Так что опять хочу предостеречь тех, кто будет покупать такие драйверы, и тем более платочный вариант. Лучше перед впаиванием сразу досконально проверить каждый драйвер, померить напряжение которое он выдаёт на максимуме и минимуме, ну и в середине диапазонов, в идеале вообще проверять всё со всеми подключаемыми светильниками которые должны работать синхронно.

Ну и ещё одна проблема прежде чем вернусь к самой теме статьи. Знаете сколько мне менял ЧИП ДИП драйвер который стоит 10$ ? 1/12 ГОДА! 1 месяц! Охренеть конечно сервис, а если бы это ни дача была, которую я только делаю, где могу месяц и подождать, тем более у меня в комнате 3 таких драйвера и соответственно 3 светильника, и 2 светят, то есть свет в комнате есть, а например в квартире, и светильников в комнате было бы не 3 как у меня, а один. Драйвера нет, получается освещения в комнате нет. Если всё заточено под драйвер, и человек не предусмотрел возможности быстренько переделать и пустить по этим проводам 220 вольт и поставить обычную лампочку в случае чего. Сиди месяц без света, пока ЧИП ДИП будет проводить экспертизу твоего драйвера, цена которому 10$. В общем это печально, такого от ЧИП ДИП я не ожидал.

В общем вот такие проблемы с блоками и драйверами. Подытожу:
1) некоторые (скорее всего маломощные) блоки питания Mean Well гудят (ну или могут гудеть);
2) из 6 драйверов 1 оказался бракованный, ЧИП ДИП это признал и поменял на новый;
3) экспертиза и обмен товара в ЧИП ДИП может занять около 1 месяца и даже немного больше 30 дней, может в самой Москве это было бы и быстрее, но из РБ города Гомель, отправка на экспертизу в Москву, потом отправка обратно нового товара. В общем я ждал более 30 дней прежде чем получил новый драйвер!

Ну да ладно, а теперь самое интересно.

Плата LED драйверов

Для светодиодных драйверов LDH-45B-350 была изготовлена плата со следующей схемой:

Схема соединения LED драйверовСхема соединения LED драйверовДизайн платы в EagleДизайн платы в Eagle

Шаблон (маска) платы размерами 186 х 76 мм:

Шаблон (маска) платыШаблон (маска) платы

Ну и фото того что получилось в итоге:

Плата LED драйверовПлата LED драйверовПлата LED драйверовПлата LED драйверовПлата LED драйверов (обратная сторона)Плата LED драйверов (обратная сторона)

Чёрная гребёнка подключается к моей универсальной плате управления со 128 мегой о которой я писал в этой статье . А вот с помощью синих разъёмов, выводы PWM DIM соединяются вместе, и через резистор на 10К подключаются к выводам DIM -. Почему я не стал это соединение и сам резистор делать сразу на плате на постоянно, да потому что в будущем, возможно, я сделаю независимое включение/выключение каждого светильника, а может даже и независимую регулировку яркости, если придумаю простой интерфейс управления всем этим великолепием. Если всё будет очень сложно управляться, то колхоз с кучей кнопок и выключателей я делать конечно же не буду. Пока все светильники включаются синхронно и яркость регулируется также синхронно, но заложена возможность дальнейшей переделки на полностью независимое включение/выключение светильников, и может даже независимую регулировку яркости. В общем посмотрим. Независимое включение/выключение каждого светильника точно сделаю, даже уже придумал простой интерфейс управления, чтобы на стене не нужно было делать кучу выключателей. Будет только 1 выключатель и энкодер для управления яркостью, а поскольку на стене будет ещё и дисплей из матриц, показывающий яркость освещения, вот с помощью него и энкодера и будет сделан интерфейс для возможность выключения каждого светильника по отдельности.

Плата матриц

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

МатрицыМатрицы

Схема платы с матрицами:

Схема соединения матрицСхема соединения матрицДизайн платы матриц в EagleДизайн платы матриц в Eagle

Шаблон (маска) платы матриц размерами 105 х 62 мм:

Шаблон (маска) платы матрицШаблон (маска) платы матриц

Ну и фото того что получилось:

Плата матрицПлата матрицПлата матриц (обратная сторона)Плата матриц (обратная сторона)Плата матрицПлата матриц

Плата управления матрицами

Ну и для управления платой матриц, надо изготовить плату управления матрицами.
Схема её следующая:

Схема платы управления матрицамиСхема платы управления матрицамиДизайн платы управления матрицами в EagleДизайн платы управления матрицами в Eagle

Шаблон (маска) платы управления матрицами, размерами 105 х 52 мм:

Шаблон (маска) платы управления матрицамиШаблон (маска) платы управления матрицами

Ну и то фото того что получилось:

Плата управления матрицамиПлата управления матрицамиПлата управления матрицами (обратная сторона)Плата управления матрицами (обратная сторона)

Плата матриц с платой управления

Плата матриц с платой управленияПлата матриц с платой управленияПлата матриц с платой управления (обратные стороны)Плата матриц с платой управления (обратные стороны)Плата матриц с платой управления обратные стороныПлата матриц с платой управления обратные стороны

Демонстрация работы дисплея

Поскольку мой дисплей состоит из 3 матриц, а каждая матрица 8 на 8 точек, то общая длинна дисплея получается 24 столбца. Максимальное количество символов на экране 4, это когда будет светиться 100%. Поэтому каждый символ будет занимать 6 столбцов (5 столбцов на сам символ + пустой столбец для отделения символов друг от друга).

Как многие поняли из видео, регулировка яркости у меня будет ступенчатая с шагом в 5%. Изменяться она будет энкодером. Всего будет 20 фиксированных значений яркости от 0 до 100%.

Осталось собрать всё это воедино и готово!

Подробнее..

Перевод Лучшие одноплатники на базе чипа RP2040 в 2021 году. Часть 1

11.06.2021 02:20:41 | Автор: admin

С момента выхода Raspberry Pi Pico мы опубликовали несколько статей о системах на базе чипа RP2040 от обзора возможностей одноплатника самой компании до более продвинутых систем других производителей. Сейчас их выпущено уже столько, что публиковать обзор всех подобных плат просто нет смысла. Зато можно разместить подборку лучших систем.

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

Немного о критериях выбора плат с RP2040


Какой размер и сколько требуется пинов? У меньших по размеру плат вроде Pimoroni Tiny RP2040 меньшее количество пинов, чем у оригинальной малинки, так что такие платы можно использовать в относительно ограниченном количестве проектов.

Нужна ли беспроводная связь? С полноценным модулем Wi-Fi и Bluetooth поставляется лишь Arduino Nano RP2040 Connect. Но помимо нее производители предлагают дополнения к Pico вроде Adafruit Airlift board или Pimoroni Pico Wireless Pack.

Экосистема. Понятно, что Raspberry Pi Pico совместима со всей экосистемой продукции Raspberry Pi Foundation. Есть и другие платы, вроде Adafruit Feather RP2040, которые совместимы с представителями продуктовой линейки FeatherWing. Возможности таких плат отличаются от возможностей оригинальной системы.

Наличие дополнительных коннекторов. Это, в первую очередь, Stemma QT, Qwiic и Grove, которые идеально подходят как для простых, так и сложных проектов. У Pico нет дополнительных коннекторов, зато они есть у плат других производителей.

Выбираем лучшие платы с RP2040 чипом


Raspberry Pi Pico


  • Плюсы: низкая цена, всего $4, небольшой размер, простота в использовании, встроенный ADC.
  • Минусы: нет USB-C, только три ADC-пина.

Первый в мире и самый дешевый одноплатник (вернее, микроконтроллер) на базе RP2040 стоит всего 4 доллара США. У него полноценный 40-пиновый GPIO. Поскольку де-факто это стандарт, некоторые сторонние платы совместимы с распиновкой Pico, включая Kitronik Robotics Board или Pimoroni. Они добавляют к функциональности Pico беспроводную связь, несколько светодиодов или другие элементы.

Конечно, покупая самую недорогую модель, вам придется идти на компромиссы. Во-первых, у Pico всего три analog-to-digital пина, тогда как у некоторых сторонних плат четыре или больше. Кроме того, у Pico всего 2 МБ памяти, что весьма немного, хотя и достаточно для решения многих задач.

Плюс ко всему, у Pico micro-USB коннектор, разработчики (вероятно с целью удешевления) решили не устанавливать USB-C. Тем не менее, учитывая обширную экосистему, Pico можно считать must have микроконтроллером для разработчика.

Adafruit Feather RP2040


  • Плюсы: удачный форм-фактор, STEMMA QT, FeatherWing, возможность подключения и зарядки аккумулятора, разметка пинов на обеих сторонах платы.
  • Минусы: нет подтягивающих резисторов на пинах I2C и нет мониторинга батареи.

Adafruit, партнер Raspberry Pi по чипу RP2040, выпустила несколько отличных плат RP2040 за короткий промежуток времени. У компании есть собственный набор форм-факторов. Самая большая плата, Feather, как раз и получила чип RP2040. У Feather RP2040, совместимого с экосистемой FeatherWings, меньше контактов, чем у Raspberry Pi Pico. Но все же разрабочтики выбрали оптимальный минимум.

Потери в пинах GPIO компенсируются возможностью подключения LiPo / Li-Ion батареи, отличной разметкой контактов и наличием Stemma QT, плюс разъема Adafruit, который выбирают для компонентов, которые подключаются посредством I2C. Благодаря Stemma QT у нас нет проблем с подключением и полярностью, что позволяет нам сосредоточиться на проекте, а не на поиске нужных пинов.

Если вы ищете самую универсальную плату RP2040 на рынке, вы ее нашли. Конечно, стоит она дороже, чем Raspberry Pi Pico, но Adafruit Feather RP2040 отличный продукт, который можно использовать в вашем следующем проекте.

Сytron Maker Pi Pico


  • Плюсы: низкая стоимость, простота использования, дополнительные фичи, дополнительные светодиоды и коннекторы.
  • Минусы: с ESP-01 придется повозиться

Raspberry Pi Pico это увлекательный и недорогой способ заняться программированием и электроникой. Правда, во многих случаях к Pico придется докупать компоненты, чтобы расширить сферу его применения. Maker Pi Pico это большое количество дополнительных функций с небольшим размером. При этом стоимость устройства менее 10 долларов, включая предварительно распаянный Raspberry Pi Pico.

За 10 долларов вы получаете просто потрясающее количество функций: кардридер micro SD, зуммер / аудиоразъем 3,6 мм, NeoPixel, контакты GPIO свободны для использования, плюс шесть разъемов Grove для работы с совместимыми компонентами. У каждого из контактов GPIO есть полезный, который можно использовать для быстрой отладки. Включенный в комплект ESP-01 обеспечивает базовый доступ к Wi-Fi. А еще компания Cytron выпустила обновленное руководство о том, как подключить Maker Pi Pico к беспроводной сети. За 10 долларов сложно найти что-то получше.

Adafruit QT Py RP2040


  • Плюсы: небольшой размер, порт Stemma QT, USB-C.
  • Минусы: ограниченное количество GPIO пинов.

QT Py RP2040 от Adafruit похож на Pimoroni Tiny 2040. У платы тоже небольшой размер, плюс тщательно подобранный выбор контактов GPIO для проектов. QTPy RP2040 от Adafruit можно без проблем распаять на плате большего размера. Плюс у системы есть разъем Stemma QT / Qwiic, который обеспечивает дополнительное соединение I2C для работы с совместимыми компонентами. Отличное решение для прототипирования.

Низкая стоимость и простота использования QTPy RP2040 не единственные преимущества платы. Здесь есть еще форк Adafruit MicroPython, CircuitPython, со множеством библиотек для работы с компонентами Stemma QT / Qwiic. Даже если у вас уже есть Raspberry Pi Pico, QTPy RP2040 все равно должен быть частью вашего проекта.

Pimoroni Tiny 2040


  • Плюсы: небольшой размер, больше ADC-пинов, чем у Pico, есть кнопка Reset.
  • Минусы: плата несовместима с add-on системами для Pico, сложности с распайкой, высокая цена.

Размер этой платы составляет всего лишь треть от и так небольшого Raspberry Pi Pico. Разработчики позаботились о сохранении всех функций Pico с добавлением новых. Есть, например, дополнительный аналоговый вход. Из-за небольшого размера платы она стала дороже, причем ровно в три раза, чем Pico. Стоимость Pimoroni Tiny 2040 составляет $12.

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

Подробнее..

Перевод Проект VG64 добавляем второй монитор к Commodore 64

11.06.2021 14:22:51 | Автор: admin

После появления идеи добавления второго дисплея к Commodore 64 я довольно быстро реализовал этот проект. Все железо уместилось в картридж стандартного размера (вместе с коннектором DE-15). Видеовыход совместим с VGA (31 кГц).

Внутри картриджа 128 КБ SRAM для кадрового буфера и простой 1-битный ЦАП.

TL;DR


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


Программный интерфейс


Картридж можно поместить в любую часть 64 КБ адресного пространства, включая I/O1 или I/O2. Есть Verilog код для представления либо в окне в буфере кадра @EXPROM, что заберет 8 КБ памяти Basic, либо основанный на регистрах подход, экономящий оперативную память.

В приведенных примерах для регистров управления используется I/O1 на $DE00. У вас может возникнуть желание изменить поданный пример, если есть конфликт с каким либо другим эддоном (второй SID-чип и т.п.). В целом, существует поддержка специального токена, который позволяет избежать конфликтов, но у меня нет дополнительного ПО, которое эти конфликты вызывает.

Регистры

IOBASE = token
IOBASE+1 = lsb address
IOBASE+2 = msb address
IOBASE+3 = data

Кадровый буфер линейный, использовать его несложно, подобно собственным режимам C64 с растровым отображением. В SRAM его начало $00000.

Вывод видео


Вне зависимости от выбранного режима видео выводится с pixel rate в 25 МГц благодаря встроенному генератору 100 МГц. Этот параметр близок к стандарту в 25,175 МГц для экрана с разрешением 640x480 при FPS 60 Гц. Соответственно, любой подключаемый мною дисплей показывал изображение корректно и без проблем. Вертикальная и горизонтальная синхронизация, а также области гашения настроены на правильную полярность и длину для запуска этого режима. Возможны две интерпретации данных кадрового буфера: режим высокого разрешения 640x480 1 бит на пиксель и многоцветный режим низкого разрешения 320x480. Оба режима palette direct.

Железо


Аппаратное обеспечение достаточно простое: регулятор 3,3 В, CPLD, генератор и SRAM. SRAM тратит половину своего времени на ответы хосту, и еще половину на загрузку пиксельных данных. Используемый здесь CPLD, Xilinx 95144XL, устойчив к 5 В, поэтому он установлен на шине расширения C64, хотя и запитан от регулятора 3,3 В вместе с остальным оборудованием.


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

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

Важный момент вам понадобится программатор JTAG для загрузки битового потока в CPLD.

И еще картридж не работает с платой Ultimate 64. Более того, установка картриджа на эту плату может вызвать повреждение картриджа. Зато все работает со всеми версиями плат C64, C128 и C64 Reloaded. Точно не знаю, совместим ли картридж со всеми версиями C64 или C128, выпущенными Commodore, но я никаких проблем не вижу.



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


  • 4-х слойная печатная плата. Включены файлы Gerber. Скос на краю значительно увеличивает стоимость, поэтому просто отшлифуйте его вручную (обязательно сделайте это, в противном случае можно повредить female-контакты).
  • Корпус картриджа сверху и снизу. Включены файлы STL.
  • Алюминиевый поляризованный конденсатор, 22 мкФ, 6,6 мм
  • Переключатель мгновенного действия, например pn 430156043726, если нужна кнопка reset для вашего компьютера.
  • Коннекторы .1"
  • резисторы 0603: 2 499R, 3 300R, 2 30R
  • конденсаторы 0603: 10 0,1 мкФ, 7 0,01 мкФ
  • 2 светодиода 3,2x1,6 (полезно для отладки, но не обязательно)
  • XC95144XL-5TQ100C CPLD (скорость не важна)
  • JEDEC 128kx8 SO Async SRAM a la AS6C1008-55PCN (не медленнее)
  • Прямой угловой разъем VGA высокой плотности с отверстиями, гнездовой разъем DE15

Verilog


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

Упаковка пикселей


В режиме высокого разрешения каждый бит соответствует одному пикселю. 1 = белый, 0 = черный. Адреса перемещаются от (0,0) в верхнем левом наиболее видимом положении к нижнему правому (639 479), по столбцу, затем по строке. Бит 7 в каждом байте это первый пиксель.
В многоцветном режиме пиксели выводятся с той же скоростью, что и в монохромном режиме, но каждый цветовой канал имеет разное разрешение. Зеленый это 1/2 pixel rate, а красный и синий 1/4 pixel rate. Сопоставление битового шаблона с цветовым каналом побайтно (фрагментарно) и составляет:

G0 G1 G2 G3 R0 R1 B0 B1

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

R0 R0 R0 R0 R1 R1 R1 R1
G0 G0 G1 G1 G2 G2 G3 G3
B0 B0 B0 B0 B1 B1 B1 B1

Преобразование изображений для отображения с помощью ImageMagick, монохромный режим:

convert input.tiff -resize 640x480 -colors 2 -depth 1 output.mono

Цветной режим:

convert input.tiff +dither -posterize 2 -resize 640x480 output.tiff
convert output.tiff -separate channel%d.png

Код написан на Python мне этот вариант показался самым простым:

from PIL import Imagefrom array import *import numpy as npir = Image.open("channel0.png")ig = Image.open("channel1.png")ib = Image.open("channel2.png")ir = ir.resize((640,480))ig = ig.resize((640,480))ib = ib.resize((640,480))r = ir.load()g = ig.load()b = ib.load()arr=np.zeros((480,80,8))out=np.zeros((480,640))for y in range(0,480):        for x in range(0,80):                # 0 1 2 3 is green level                # 4 5 is red level                # 6 7 is blue level                # GREEN                        arr[y][x][0]=(g[x*8+0,y]+g[x*8+1,y])/2                arr[y][x][1]=(g[x*8+2,y]+g[x*8+3,y])/2                arr[y][x][2]=(g[x*8+4,y]+g[x*8+5,y])/2                arr[y][x][3]=(g[x*8+6,y]+g[x*8+7,y])/2                # RED                arr[y][x][4]=(r[x*8+0,y]+r[x*8+1,y]+r[x*8+2,y]+r[x*8+3,y])/4                arr[y][x][5]=(r[x*8+4,y]+r[x*8+5,y]+r[x*8+6,y]+r[x*8+7,y])/4                #BLUE                arr[y][x][6]=(b[x*8+0,y]+b[x*8+1,y]+b[x*8+2,y]+b[x*8+3,y])/4                arr[y][x][7]=(b[x*8+4,y]+b[x*8+5,y]+b[x*8+6,y]+b[x*8+7,y])/4for y in range(0,480):        for x in range(0,80):                for bit in range(0,8):                        arr[y][x][bit] = int(round(round(arr[y][x][bit])/255))newfile=open("output.bin","wb")for y in range(0,480):        for x in range(0,80):                out[y][x] = int(arr[y][x][0] + arr[y][x][1]*2 + arr[y][x][2]*4 + arr[y][x][3]*8 + arr[y][x][4]*16 + arr[y][x][5]*32 + arr[y][x][6]*64 + arr[y][x][7]*128)                newfile.write(out[y][x].astype(np.ubyte))newfile.close()

Демонстрационное видео:


Собираем и припаиваем:




По этой ссылке можно загрузить все необходимые для работы файлы.

Подробнее..

Реверс инжиниринг приборной панели Nissan Muran Z50

13.06.2021 10:20:17 | Автор: admin
Имеем Nissan Murano 2005 года выпуска. Американец. Ни блютуза ни, уж тем более, цифровой приборной панели, а хочется. Если с блютузом проблема решается прикручиванием устройств подобных этому:

то оцифровать приборную панель уже будет посложнее. Однако, глаза боятся, а руки делают.

Для экспериментов я приобрел приборку от европейца, но принципиально она ничем от американца не отличается, кроме как расположением кнопок одометра и стоп-сигнала, и настройками тока для стрелочки спидометра (а еще она не такая жирная и не пытается найти у меня нефть). Дело в том, что у европейца и американца отличается максимальная скорость на спидометре, соответственно при 240км/ч на американце, европеец покажет приблизительно 210. Таким образом, графическая накладка не взаимозаменяемая:


Далее, согласно документации на приборную панель (файл Приборка.pdf, все архивы оставлю в конце) подключаем питание к приборке. Контакты 22, 23, 24 черные провода, на схеме обозначены буквой B подключаем к минусу (один или все вместе неважно), и контакты 21Y/R желтый с красной полосой и 20O оранжевый (оба сразу) к + 12 вольтам. Контакт 15R/W красный с белой полосой это освещение приборки, то же 12 вольт, но подключать не обязательно. Важное замечание: фактический номер контакта может отличатся от указанного в схеме, ибо инженеры нисан японцы на всю голову и менуют номер контакта по японскому! То есть на плате три штекера один основной для подключения к тачке и два для подключения кнопок стоп-сигнала и сброса одометра. Так вот вместо того, чтобы обозначить в каждом штекере контакты от 1 и до максимального, они объединили номера всех трех штекеров в одну группу, таким образом первый по номеру контакт находится на первом штекере, а последний на третьем. Короче ориентируйтесь по цветам и моим картинкам. Вот фото задней части:


Вот схема из файла Приборка.pdf (страница 10) с номерами контактов и куда чего идет:


А теперь опишу как работает панель согласно документации Приборка.pdf.

  • Лампа ремня безопасности контакт 3
  • Лампа омывайки контакт 6
  • Лампа аккумулятора контакт 4
  • Лампа сигнализации контакт 5
  • Работа спидометра:

Контакт 14 V/W Фиолетовый с белой полосой. Приборная панель выдает на него +5 вольт. Сигнал с датчика скорости замыкает контакт на землю формируя на нем логическую единицу. На один оборот колеса приходится 8 импульсов на землю.

И тут начинается самое вкусное. Все остальные данные которые выводит приборная панель, приходят по шине UART, а именно: тахометр, уровень топлива, температура охлаждайки, ошибка двигателя, CVT, ABS, низкое давление в шинах, AWD, AWD Lock, сигнал поворота, дальний свет, VDC OFF, SLIP, индикаторы круиз-контроля CRUISE и SET, CVT, индикатор открытой двери, уровень масла, габариты, сигнал пищалки и режим коробки (P, D, R, S и так далее включая ручной режим и номер передачи). Пробег одометра рассчитывается согласно показаниям сигнала спидометра и пишется в память приборной панели (в том числе). Когда я подключаю чужую приборку к своему авто, показания одометра не родной приборки не сбрасываются.

Далее приведу показания приборки при подключении питания, но отсутствии управляющих сигналов (согласно файлу Приборка.pdf страница 32). UART не подключен и линии контактов 3, 4, 5 и 6 висят в воздухе:

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

ABS, VDC OFF, SLIP, Ошибка тормоза все эти индикаторы должны гореть при подключении питания и отсутствии связи.

Дальний свет, не закрыта дверь, низкое давление в шинах, CRUISE, SET, AWD, AWD LOCK, масло, поворотники, ошибка двигателя, CVT эти лампы будут выключены.

Теперь нам необходимо подключиться к контактам UART и вывести данные в компьютер при помощи USB-UART моста. Я использовал вот такой:


Вы можете использовать любой другой по запросу USB to UART bridge. Упоротые могут достать из arduino UNO проц или закоротить его на ресет и использовать встроенный UART. Короче TX приборки (контакт 18R/L красный с синей полосой) подключаем к RX нашего UART преобразователя и любой из черных проводов (контакты 22, 23, 24) к контакту GND UART. Далее запускаем любой монитор COM порта, выбираем свой UART в списке, подключаемся и наблюдаем поток сознания. Это краткая версия. Теперь подробнее. Качаем, например, это и втыкаем UART в USB. В списке COM Port должен появится новый COM к нему и подключаемся. Вот теперь и наблюдаем поток сознания от приборной панели в главном окне программы. Если не наблюдаем значит вы все сделали правильно, поскольку еще необходимо подобрать скорость приема данных Baud Rate. Выбирая разные режимы, я отмел все, что выше 115200, ибо при таких настройках терминал выдавал сплошные нули. В настройках между 9600 и 19200 стала появляться хоть какая-то структура. Но дальше понятнее не становилось. Приуныв, я подпер подбородок рукой и, внезапно, обнаружил на столе осциллограф! Ого подумал я. У меня есть такая штука! Короче решил я посмотреть, что покажет эта шайтан-машинка. Кое-как подобрав настройки, я наблюдал непонятное нечто, с которым, ума не приложу, что делать. Ладно поищем что же вообще обозначает Baud Rate. Ага, википедия говорит, что это количество бит данных в секунду. Ну, думаю, дай гляну по осциллографу длину самого короткого импульса. Оказалось, что-то около 70 наносекунд. Почесав репу, решил это дело разделить на 1000000 наносекунд, а почему нет? Результат оказался близок к 14400. Есть такая скорость снова подумал я, и выставил на всякий случай такие настройки: Baud Rate 14400, Data bits 8, Parity odd, Stop bits 1, Handshaking XON/XOFF. И, черт возьми, все внезапно заработало! Ну то ест ничего не изменилось, окно выдавало все такой же странный набор символов, но чуйка подсказывала что я двигаюсь в правильном направлении. Короче снял я со спидометра такую штуку:

Это после декодирования

A0 0F 00 0F 00 14 00 00 00 00 14 A1 0B 00 0B 00 6E 00 00 00 00 6E A2 0F 00 02 00 14 10 00 00 00 09 A3 07 00 00 00 6E 05 00 00 00 6C A4 0F 00 0C 40 34 3F 00 00 00 48 A5 02 00 0E 00 6E 01 08 00 00 6B A6 0C 00 01 00 14 1F 00 00 00 06 A7 00 00 0F 00 6E 00 00 00 00 61A8 00 00 00 00 14 00 00 00 00 14 A9 00 00 00 00 6E 00 00 00 00 6E

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

(Повторяющийся кусок)

A0 0F 00 0F 00 14 00 00 00 00 14A1 0B 00 0B 00 6E 00 00 00 00 6EA2 0F 00 02 00 14 10 00 00 00 09A3 07 00 00 00 6E 05 00 00 00 6CA4 0F 00 0C 40 34 3F 00 00 00 48A5 02 00 0E 00 6E 01 08 00 00 6BA6 0C 00 01 00 14 1F 00 00 00 06A7 00 00 0F 00 6E 00 00 00 00 61A8 00 00 00 00 14 00 00 00 00 14A9 00 00 00 00 6E 00 00 00 00 6E

Предпоследние два байта всегда по нулям первые, если перевести HEX в DECIMAL растут с 160 по 169. HEX набор символов о котором речь шла выше, это ничто иное как десятичные числа в шестнадцатеричном (чуть пальцы не сломал пока писал) формате.

Стало жарко. Дай думаю скормлю эти же данные приборке через Terminal. Втыкаю TX USB-UART преобразователя в RX приборки, и она начинает пищать всеми цветами радуги. Тут я догадываюсь что не все так просто. Видимо UART физического уровня несколько отличается от того, что используется в тех же ардуинах. Снимаю накладку с приборки, туплю на плату, перерисовываю схему и ага! Действительно это дифференциальная пара. Не вдаваясь в подробности скажу лишь, что я подпаялся непосредственно к площадкам, идущим прямо к контроллеру и тогда все заработало нормально. Вот фото куда чего паять:


А теперь, самое вкусное. Несем всю эту нанотехнологию в машину, подрубаем свою модифицированную приборку, UART к буку и приборке. Причем к приборке теперь подрубаем не выход, а наоборот ВХОД (Контакт 19R/B красный с черной полосой) что бы снять данные которые шлет машина на приборную панель. Затем врубаем зажигание, запускаем на буке Terminal и он начинает записывать все, что приходит на приборку. А теперь начинаем тыкать во все кнопочки подряд в своей машине. Открываем-закрываем двери, включаем дворники, жмем газ-тормоз-реверс-с-м у кого что, свет дальний ближний, поворотники. Желательно убить мотор и вариатор, что бы мы могли снять коды ошибки мотора и вариатора. Причем мотор надо убить в разных вариантах и позах и каждый датчик по отдельности. В общем снял я данные с машины, и вот что вышло:

(Небольшой кусок от A0 до A9)A0 40 00 00 78 3F 00 00 00 00 07A1 00 00 00 10 00 00 00 00 00 10A2 40 00 00 78 3F 00 00 00 00 07A3 00 00 00 10 00 00 00 00 00 10A4 40 00 00 78 3F 00 00 00 00 07A5 00 00 00 10 00 00 00 00 00 10A6 40 00 00 78 3F 00 00 00 00 07A7 00 00 00 10 00 00 00 00 00 10A8 40 00 00 78 3F 00 00 00 00 07A9 00 00 00 10 00 00 00 00 00 10

Ого подумал я. Это же почти как у спидометра! Дай, думаю, скормлю приборке логи, что я записал с машины. Скормил. Приборка повторила все то, что я вытворял в авто с авто на авто. Эка я умен не скромничал я про себя! Решил изменить некоторые знаки и снова скормить приборке измененный файл. Ничего не произошло. Хм подумал я. Чего же делать то? И приуныл, снова подперев рукой подбородок.

.Странные цифры в конце каждой секции
Четыре пары нулей и потом какие-то цифры
Открыл я виндокалькулятор. Зачем-то переключил в режим HEX. Почему-то решил взять все числа в формате HEX исключая номер секции и последнее число и перемножить их между собой методом XOR. Внезапно! Сумма XOR чисел оказалась равна последнему числу в секции. Интересно подумал я. Видимо бит честности осенило мою голову. Изменил несколько чисел, заXORил их между собой, сумму вписал в конце секции и скормил приборке. Приборка изменила показания тахометра. Все понятно. Структура стала ясна:

A0 40 00 00 78 3F 00 00 00 00 07

Номер секции A0

Данные 40 00 00 78 3F 00

Биты конца строки 00 00 00

Бит четности 07

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


Управление крайне примитивное жмякаем Выбрать порт. Ждем Еще ждем Опять ждем Во всяком случае так у меня. Вылезет окошко со списком портов. По клику по имени порта, подключается к порту. Л Логика! Что бы начать передачу тыкаем кнопку Начать передачу. Л Логика! Левая часть содержит 10 секций от A0 до A9. Во время передачи эти секции последовательно грузятся в выбранный порт. Подводим указатель мыши к любой ячейке и крутим колесо. Значения меняются и на лету меняются показания на приборке. В правой части должен был выводиться ответ от приборки, но я @овнокодер, у меня все тупило, потому сейчас там просто форматированный вывод. Можно сохранить текущие настройки HEX в файл и потом его загрузить. Для этого жмякаем одноименные кнопки. Софт автоматом подсчитывает сумму и пересчитывает байт честности. Так что его не трогаем, да и нифига у вас не выйдет. Байт в синем квадратике менять можно, но скорее всего это разделитель. Он вроде как никак не влияет на данные. Для полнофункциональной работы достаточно скармливать первые две секции A0 и A1. В первой секции содержаться данные тахометра и еще что-то, во второй все лампочки-ошибки и положение ручки АКПП. Короче разберетесь. Посредине синие точки, это включатели отправки секции. Если синяя, значит эта секция отправляется в COM port. При запуске открывается дефолтная оснастка, которая 100% работает. Софтина кривая вылетает с завидной регулярностью, да и пофигу. В архивчике лежит все, что надо для самостоятельных танцев с бубнов, включая мануалы к авто и моя кривая софтина.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Разработка контроллера резервного питания. Трассировка

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

В предыдущей статье http://personeltest.ru/aways/habr.com/ru/post/557242/ была описана схемотехника контроллера резервного питания. Такой контроллер может пригодится в разнообразных технических системах и устройствах. Поэтому конструктив платы был выбран максимально нейтральный с возможностью выноса элементов управления на отдельную панель.

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

  • электромагнитная совместимость удовлетворяющая стандартам

  • высокая теплоотдача и большая рассеиваемая мощность без радиаторов и вентиляторов

  • низкая цена печатной платы

  • минимальные размеры

  • возможность изменять варианты сборки

  • обеспечение электробезопасности и электрической прочности

  • ремонтопригодность с минимальной оснасткой и оборудованием

  • пригодность для коррекций ошибок трассировки и схемотехники

  • технологичность сборки и невысокая цена сборки

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

  • удобство монтажа в целевой системе

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

В 4-х слоях удастся сделать максимально большие полигоны земли и питания, а также полигоны отвода тепла.
Толщину платы выбираем из соображений жесткости и из перечня доступных вариантов у производителя плат. Внутренние слои расположены ближе к внешним чтобы иметь лучшую емкостную связь с дорожками в верхних слоях и обеспечивать лучшую ЭМС, а также для лучшей передачи тепла от SMD компонентов в стороны от них.
Шесть слоев конечно было бы лучше, но нельзя забывать что цена еще не выкинута из списка приоритетов.

Вопрос выбора программных инструментов для трассировки решается в пользу Altium Designer. Как считают его разработчики он на сегодня наиболее массово применяемый инструмент в данной области.
Цена за standalone лицензию Altium до акций могла обойтись пределах 10 тыс. евро, еще 3 тыс. евро возможно придется отдать за опцию PDN Analyzer если потребуется точнее рассчитать потери и наводки в проводниках.
К счастью есть возможность поработать с триальной версией Altium и при должной сноровке выполнить трассировку необходимой нам платы в триальный период.

Результат работы показан ниже:

Вид трассировки с отображением всех 4-х слоев Вид трассировки с отображением всех 4-х слоев Вид сверху и вид снизуВид сверху и вид снизу

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

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

Расположение основных узлов на платеРасположение основных узлов на плате

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

Для данной платы были созданы следующие основные правила:

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

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

Слева диалог установки зазоров, справа диалог установки минимального пути для класса цепей 220VСлева диалог установки зазоров, справа диалог установки минимального пути для класса цепей 220V

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

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

Площадки и их особенности

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

Площадки со скруглениямиПлощадки со скруглениями

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

Посадочное место силового транзистора. Красным обозначены открытые области маски для пасты. Посадочное место силового транзистора. Красным обозначены открытые области маски для пасты.

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

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

Шелкография

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

Какие рекомендации действительно важны

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

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

Рекомендация по установке термо-барьеров. Она напрямую конфликтует с требованиями ЭМИ и теплопередачи, однако выполнение рекомендации обеспечивает исключительное удобство ремонта. Как правило если элемент не греется, не проводит большие токи, то ремонтировать его не приходится, если только не считать тюнинга.
Современные контрактные сборщики, по моему опыту, не отдают плат с дефектом надгробного камня, а исправляют его у себя, если он появляется. Они также и претензий не предъявляют в случае отсутствия термо-барьера.
Что же касается ремонта, то современные паяльники без труда справляются с отпайкой компонентов без термо-барьеров. Словом, рекомендация сомнительная.

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

Проблемы земли
Вопрос о земле - важнейший в цифро-аналогово-силовых схемах. Малейшая неосмотрительность может привести к тяжелым финансовым последствиям либо, в лучшем случае, к значительной деградации качества работы схемы.
У Altium есть инструмент под названием PDN Analyzer для точного расчета потенциалов в проводниках с большими токами к которым относятся и полигоны земель. Однако в данном проекте этот анализатор не использовался. Все же это дорогое и трудоемкое удовольствие оправданное в более сложных проектах. Здесь подход был проще.
Были идентифицированы несколько основных доменов земли которые необходимо максимально разделить:
- цифровая земля микроконтроллера
- аналоговая земля микроконтроллера
- возвратная земля силовых ключей и DC/DC преобразователя
- чувствительная земля DC/DC преобразователя
- непосредственно заземление

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

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

Ниже показана результирующая топология каждой из земель.

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

Следующим этапом будет программирование, наладка и тестирование платы. Но об этом позже.

Подробнее..

Wi-Fi Интернет в соседнюю комнату

14.06.2021 14:06:00 | Автор: admin

Когда мы купили квартиру и делали в ней ремонт, телефоны были еще кнопочными, а Wi-Fi роутеры если и существовали, то в качестве диковинки. Предполагалось, что интернет будет подключен через витую пару к компу, а сам комп будет стоять на балконе, потому что балкон будет теплым и в нем будет кабинет. Квартира была без отделки, и поэтому мы решили сделать умный ход чтобы не тащить провода под плинтусами от коридора до балкона (как обходить двери?) мы заложили гофру в бетонный пол и протащили кабель напрямки. И нет, штробить бетон не пришлось, потому как он и так был снят для монтажа теплого водяного пола. Первые пару лет я даже гордился таким решением. Еще бы! Никаких дыр в стенах, никаких уродских кабель-каналов и интернет где нужно! Но года через 2-3 начали появляться всякие гаджеты, мы купили Wi-Fi роутер и тут появилась проблема.

Схема 1. Часть плана квартирыСхема 1. Часть плана квартиры

На схеме роутер отмечен синим крестиком.

Если в кабинете и в соседней комнате все было шикарно, то на кухне (она же зал, где диван и все часто тусят) сигнала почти не было. Мешала несущая кирпичная стена. Для решения вопроса я рассматривал 3 варианта:

1. Купить новый мощный роутер, который будет пробивать все преграды. За и против:

+ Изящное решение: не надо ничего сверлить и переделывать глобально.

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

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

2. Купить повторители.

+ Опять же не надо ничего вскрывать и сверлить и нет минусов предыдущего пункта.

- Учитывая схему нашей квартиры и расположение розеток нужно минимум 2 повторителя, чтобы обойти стену.

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

3. Продырявить стену рядом с роутером и поставить в зале свой роутер.

+ Надежный сигнал

+ Опрятный внешний вид

- Непонятно как это реализовывать и возможно ли это вообще?

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

Роутер D-Link DIR-615Роутер D-Link DIR-615

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

-Подскажите, у роутера такого-то есть 2 антенны, они обе равноценные? Каждая и передает и принимает? Или одна только передает, а другая только принимает сигнал?

-ХЗ, вежливо ответил продавец и порекомендовал звякнуть производителю.

Я так и сделал.

- ХЗ, вежливо ответил производитель.

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

Тогда я решил рискнуть и купил удлинитель. Вот такой:

Удлинитель антенны роутераУдлинитель антенны роутера

Сначала поэкспериментировал так. Выкрутил одну антенну из роутера совсем, а вторую прикрутил через удлинитель и отнес на максимальное расстояние от роутера. Работает! Также проверил другое гнездо роутера работает! После этого пробурил отверстие. Сверлил на уровне около 4 см над полом, предварительно сняв плинтуса.

Схема 2. Синяя полоса рядом с крестиком показывает место прокладки кабеля.Схема 2. Синяя полоса рядом с крестиком показывает место прокладки кабеля.

Самым сложным в этом процессе было найти бур подходящей длинны. Толщина стены оказалась 50 см! Не то, чтобы было легко ее пробить и попасть куда нужно, но найти нужный инструмент (не покупать же из-за одной дырки!) было сложнее.

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

В зале антенна просто торчит на проводе (он довольно жесткий) в неприметном месте.

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

Кстати упомяну еще один лайф-хак запитать роутер через таймер в розетку. Вот такой:

Таймер за 300 р.Таймер за 300 р.

Зачем?

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

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

В третьих, ежедневное отключение роутера на 7 часов продлевает ему жизнь, а перезагрузка только на пользу.

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

Вся эта история приключилась со мной уже много лет назад и вероятно сейчас есть более изящные решения вопроса, но возможно кому-то подойдет именно такой вариант. От себя могу сказать, что схема отлично обкатана и 100% рабочая. У меня до сих пор все тот же роутер. Также с годами выяснилось (особенно когда ребенок дорос до личного гаджета), что в вопросе таймера п. 2 стал для нас гораздо более актуальным, чем п.1

Подробнее..

Запускаем DOOM на лампочке

14.06.2021 16:14:45 | Автор: admin
image


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

Пришло время для лампочек.

imageВнутри лампочки TRDFRI RGB GU10 (IKEA model: LED1923R5) хакеры из Next-Hack нашли модуль Silicon lab's MGM210L RF module с 108кб оперативки и запустили на нем DOOM. Исследователям-хакерам пришлось попотеть над оптимизацией использования оперативки, потому что оригинальный DOOM требует 4мб, но они смогли.

Модуль имеет только 1 МБ внутренней флэш-памяти, поэтому умельцы добавили внешнюю флэш-память SPI для хранения файла WAD, который можно загрузить с помощью YMODEM. Процессор: 40-MHz Cortex M4.



image

Лампочка в разборе

image

Дисплей: 1.8 TFT 160128 SPI

image

Блок-схема железа

image

Схема токов

image

Блок питания

image

Прототип платы

image

Несущая плата

image

Клавиатура

image

Микроконтроллер, усановленный на несущую плату.

image

Система в сборе.

Фичи проекта:

  • Основан на прекрасном Doomhack's GBA Doom Port с некоторыми дополнениями Kippykip.
  • Поддерживает полную версию Doom Shareware WADS.
  • Полный движок Vanilla Render, включая Z-depth lighting. Однако составные текстуры имеют MIP-карту.
  • Реализовано поведение монстров и распространение звука.
  • Поддержка Sound FX.


Ограничения проекта:

  • Музыка.
  • Воспроизведение демо из-за несовместимости.
  • Полный WAD DOOM Не тестировал.
  • Требуется отладка.
  • Мультиплеер не реализован.
  • Оптимизация производительности.
  • Читы не проверяли, наверно с багами.


Инженеры недавно сделали обновление в репозитории Github и удалили mip-отображение на составных текстурах без потери производительности, поэтому графика будет более детальной, чем то, что показано в демонстрационном видео.

Условия DOOM-challenge:



  • Найдите готовое устройство, не предназначенное для игры в Doom или в другие игры.
  • Выбранное устройство должно иметь микроконтроллер с разумно ограниченной вычислительной мощностью и/или памятью в соответствии с минимальными требованиями DOOM (DOOM работает с приемлемой частотой кадров даже на 486 @ 33MHz [1], оборудованном 4MB RAM). В качестве примера мы должны исключить современные цифровые камеры, которые имеют систему на несколько сотен МГц на кристалле, с несколькими десятками мегабайт оперативной памяти.
  • Мы должны использовать именно тот микроконтроллер, который встроен в выбранное устройство. Замена невозможна. Никакого дополнительного микроконтроллера добавить нельзя. Тем не менее, разгон (например, даже если он ограничен только некоторыми периферийными устройствами или шинами) возможен при условии, что нам не нужны какие-либо методы охлаждения.
  • Для хранения файлов WAD можно добавить дополнительную флеш-память или карту памяти.
  • Можно добавить цветной дисплей, если на выбранном стандартном устройстве его нет. Разрешение должно быть достаточно высоким, чтобы можно было прилично играть в Doom. Например, экран 3216 пикселей слишком мал, но 128x64 может быть достаточно. С другой стороны, слишком большие разрешения, безусловно, потребуют очень мощного микроконтроллера, вопреки правилу 2.
  • Устройство ввода может быть любым, поэтому для этой цели можно добавить дополнительную электронику.
  • При необходимости блок питания можно заменить.
  • Мы хотели, чтобы движок был максимально приближен к исходному (ванильному) условно-бесплатному ПО Doom. Возможность играть в эпизоде 1 на карте 1 условно-бесплатной игры Doom (E1M1) это минимальная цель, даже если мы не скрываем, что мы мечтали иметь возможность сыграть полную условно-бесплатную версию без ограничений на всех картах.
  • К звуку требований нет, но звуковые эффекты были бы действительно плюсом. Если реализовано, то на аудиоподсистему ограничений нет.
  • Мультиплеер не обязателен


Тест на беременность




Принтер Canon Proxima




Осциллограф




Банкомат




DOOM в DOOM




Пианино




Minecraft




Валидатор билетов




Микроволновка


image

iPod Mini




Калькулятор




Apple Watch




MacBook Pro Touch Bar




Kodak DC260 Digital Camera from 1998




На клавиатуре




На билборде




На электронной книге




На самолёте




Porsche 911




Vectrex




Паяльник




PS


Как тебе такое, AlexeyNadezhin?

zhovner, ждём DOOM на FlipperZero.

image
Подробнее..

Перевод Быстрое обнаружение Covid-19 на рентгеновских снимках с помощью Raspberry Pi

14.06.2021 18:13:31 | Автор: admin

Системы обнаружения Covid-19 на рентгеновских снимках выдают быстрые результаты, в частности информацию о том, насколько серьёзно лёгкие поражены вирусом Covid-19. Традиционные системы обнаружения Covid-19 обладают тем недостатком, что для формирования отчётов им требуется довольно длительное время, в то время как инфицированный человек нуждается в немедленной помощи. Кроме того, после каждого использования всех подобных систем обнаружения вируса часть деталей приходится утилизировать, что в некоторых случаях может приводить к их дефициту.К старту курса о машинном и глубоком обучении мы перевели статью о том, как эта проблема решается при помощи Raspberry Pi, кроме того, материал знакомит читателей с онлайн-платформой EDGE Impulse.


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

Что для этого нужно

Решение задачи начнём с подбора компонентов.

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

Предварительные требования

На Raspberry Pi должна быть установлена последняя версия ОС Raspbian. Также необходимо подготовить наборы данных для рентгеновских снимков лёгких, инфицированных и не инфицированных Covid-19. Такие снимки можно получить на сайте kaggle онлайн-ресурсе, где размещены рентгеновские снимки инфицированных пациентов, предоставленные сообществом экспертов и врачей. Аналогичные данные приведены на портале GitHub. Загрузим наборы данных рентгеновских снимков здоровых лёгких и лёгких, инфицированных Covid-19.

Теперь выберем платформу для создания ML-модели и обучим её обнаруживать на рентгеновских снимках инфицированные вирусом лёгкие. Здесь у нас есть разные варианты, например TensorFlow, PyTorch или онлайн-платформы: SensiML, Apache Spark, EDGE Impulse и так далее. Я выбрал EDGE Impulse.

В интерфейсе Edge Impulse переходим в меню создания проекта. Система спросит, как мы намереваемся использовать проект. Поскольку мы будем работать с проектом для создания ML-модели обработки изображений, выберем вариант, связанный с работой с изображениями.

Затем система спросит, как нужно классифицировать изображение (классификация одного или многих объектов). Здесь можно выбрать любой вариант. Я выбрал классификацию одного объекта (рис. 2). Щелчком мыши выберем только что созданный проект. Здесь система предложит указать, как его необходимо использовать. Выберем пункт Connect a development board (Подключение макетной платы). Через эту плату данные будут загружаться в проект (рис. 3).

1. Создание проекта1. Создание проекта2. Выбор типа для классификации2. Выбор типа для классификации3. Подключение макетной платы3. Подключение макетной платы

Установка на Raspberry Pi

Откроем окно терминала и с помощью приведённых ниже команд установим на Raspberry Pi зависимость для EDGE_Impulse:

curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-appsnpm config set user root && sudo npm install edge-impulse-linux -g --unsafe-perm

После установки запускаем Edge_Impulse командой edge-impulse-linux. Нам будет предложено ввести адрес электронной почты и пароль для EDGE Impulse. Вводим требуемые данные и входим в систему (рис. 4).

4. Вход в систему с помощью адреса электронной почты и пароля4. Вход в систему с помощью адреса электронной почты и пароля

Система попросит выбрать проект, к которому должно быть подключено устройство. Указываем название проекта (в моём случае это COVID-19 Detector) (рис. 5).

5. Выбор проекта5. Выбор проекта

Подготовка набора данных

Система выдаст URL-адрес для загрузки набора данных. Есть два варианта загрузки наборов данных рентгеновских снимков: либо через камеру Raspberry Pi (поместив рентгеновские снимки в кадр камеры), либо загрузив файлы фотографий средствами ПК/Raspberry Pi (рис. 6). Я рекомендую второй вариант.

Чтобы вручную загрузить с ПК наборы данных, то есть изображения рентгеновских снимков, выберем эти наборы в качестве тестовых и тренировочных изображений. Выбрав наборы, загрузим их для обучения и установим метки [в оригинале level, крайне вероятна сложная опечатка label, о пороге принятия решений речь идёт далее] для классификации изображений. Здесь я устанавливаю метку Covid-19 infected (Covid-инфицированные лёгкие) и Normal Lungs (Здоровые лёгкие) (рис. 8). Далее загружаем рентгеновские снимки здоровых лёгких и лёгких, инфицированных Covid-19.

6. Получение URL-адреса для создания модели6. Получение URL-адреса для создания модели7. Загрузка набора данных с использованием камеры Raspberry Pi для модели7. Загрузка набора данных с использованием камеры Raspberry Pi для модели8. Загрузка данных из файла изображения8. Загрузка данных из файла изображения

Если вы не успели загрузить изображения в соответствующие категории, с помощью функции Edit (Редактирование) можно позже добавить и/или обозначить их как "Инфицированное лёгкое" или "Здоровое лёгкое". Размечая набор данных, пожалуйста, будьте осторожны. Если пометить рентгеновские снимки здоровых лёгких как Covid-инфицированные, модель будет обучена неправильно, и её точность будет снижена. Перед первоначальной загрузкой наборов данных (с веб-сайта) необходимо создать две отдельные папки: одну для тренировочных, другую для тестовых наборов данных. В обеих папках создадим ещё две папки с названиями Infected lung X-ray (Рентген инфицированных лёгких) и Normal lung X-ray (Рентген здоровых лёгких) соответственно. Загрузим отдельно изображения из обеих папок и после загрузки распределим их по соответствующим категориям (рис. 9).

9. Установка уровня для рентгеновского снимка наборов данных для тренировки модели9. Установка уровня для рентгеновского снимка наборов данных для тренировки модели

Повторим те же шаги, загружая рентгеновские изображения инфицированных и здоровых лёгких для тестовых наборов данных. Опция загрузки изображений для тестовых наборов данных находится рядом с опцией тренировки (рис. 10).

10. Вкладка тренировочных данных10. Вкладка тренировочных данных

Тренируем модель

После загрузки рентгеновских снимков инфицированных и неинфицированных наборов данных модель готова к тренировке. Переходим на вкладку Impulse design, выбираем пункт Create Impulse и жмём кнопку Create Impulse (см. рис. 11). Затем добавляем блок обработки и блок обучения (рис. 12, 13).

11. Создание Impulse11. Создание Impulse12. Выбор блока обработки12. Выбор блока обработки13. Блок обучения.13. Блок обучения.

После добавления блоков обработки и обучения необходимо определить параметры [в оригинале the parameter в единственном числе опечатка]. Для этого нужно получить характеристики рентгеновского снимка и сохранить их (рис. 14, 15). Затем переходим к новой опции тренировки ML-модели. Для этого в экспертном или обычном режиме Keras выбираем тренировку создаваемой ML-модели. В нашем случае выбираем обычный режим. В этом режиме можно задать количество циклов обучения. При увеличении количества циклов обучения точность работы модели увеличится, так как она пройдёт через различные циклы обучения, но при этом также увеличится время, необходимое для обучения ML-модели. Здесь можно задать такие параметры, как порог принятия решений и скорость обучения, значения которых влияют на точность и время работы модели.

15. 3D-визуализация признаков модели15. 3D-визуализация признаков модели16. Генерация параметра16. Генерация параметра17. Настройка и создание Ml-модели17. Настройка и создание Ml-модели

В оригинале надпись к рисунку 15 Feathers graph for ML model., вероятнее всего Features graph for ML model, то есть визуализация пространства признаков модели в трёхмерном пространстве.

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

Теперь натренированная модель готова к тестированию. Протестировать модель мы можем с уже загруженным рентгеновским снимком, на котором модель попытается обнаружить инфекцию Covid-19 в лёгких.

18. Обнаружение инфекции по рентгеновскому снимку во время тестирования18. Обнаружение инфекции по рентгеновскому снимку во время тестирования19. Классификация снимка для проверки точности модели19. Классификация снимка для проверки точности модели

Развёртывание модели

Теперь наша ML-модель готова к развёртыванию. Развернуть созданную ML-модель для обнаружения инфекции вируса Covid-19 на рентгеновском снимке лёгкого можно многими способами и на разном оборудовании. Поскольку мы используем Linux, выбираем Linux. Затем открываем окно терминала и запускаем программу.

edge-impulse-runner-linux

После этого Raspberry Pi начнёт загрузку ML-модели и запустит её. Получаем URL-адрес, по которому можно наблюдать видео с камеры Raspberry Pi в реальном времени. Помещаем рентгеновский снимок лёгкого перед камерой (снимок должен быть хорошо освещён). Модель определяет инфицированное лёгкое и через несколько секунд выдает результаты Covid-теста.

Развёртывание ML-модели обнаружения Covid может быть осуществлено и другими способами. Используя SDK, можно обнаруживать Covid, развёртывая ML-модели на Python. Кроме того, можно загрузить рентгеновский снимок непосредственно в набор тестовых данных, а затем запустить ML-модель в режиме живой классификации она сработает за считанные секунды.

20. Выбор платы для развёртывания20. Выбор платы для развёртывания21. Развёртывание ML-модели в Raspberry Pi21. Развёртывание ML-модели в Raspberry Pi22. Обнаружение инфицированного лёгкого по рентгеновскому изображению22. Обнаружение инфицированного лёгкого по рентгеновскому изображению24. Вывод результатов24. Вывод результатов23. Обнаружение инфекции по рентгеновскому снимку23. Обнаружение инфекции по рентгеновскому снимку24. Здоровые лёгкие идентифицируются как здоровые24. Здоровые лёгкие идентифицируются как здоровые25. Обнаружение вирусной инфекции внутри лёгкого на рентгеновском снимке25. Обнаружение вирусной инфекции внутри лёгкого на рентгеновском снимке

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

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

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

Другие профессии и курсы

ПРОФЕССИИ

КУРС

Подробнее..

Перевод Запускаем DOOM на лампочке

14.06.2021 18:13:31 | Автор: admin
image


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

Пришло время для лампочек.

imageВнутри лампочки TRDFRI RGB GU10 (IKEA model: LED1923R5) хакеры из Next-Hack нашли модуль Silicon lab's MGM210L RF module с 108кб оперативки и запустили на нем DOOM. Исследователям-хакерам пришлось попотеть над оптимизацией использования оперативки, потому что оригинальный DOOM требует 4мб, но они смогли.

Модуль имеет только 1 МБ внутренней флэш-памяти, поэтому умельцы добавили внешнюю флэш-память SPI для хранения файла WAD, который можно загрузить с помощью YMODEM. Процессор у лампочки 40-MHz Cortex M4.



image

Лампочка в разборе

image

Дисплей: 1.8 TFT 160128 SPI

image

Блок-схема железа

image

Схема токов

image

Блок питания

image

Прототип платы

image

Несущая плата

image

Клавиатура

image

Микроконтроллер, усановленный на несущую плату.

image

Система в сборе.

image

Фичи проекта:

  • Основан на прекрасном Doomhack's GBA Doom Port с некоторыми дополнениями Kippykip.
  • Поддерживает полную версию Doom Shareware WADS.
  • Полный движок Vanilla Render, включая Z-depth lighting. Однако составные текстуры имеют MIP-карту.
  • Реализовано поведение монстров и распространение звука.
  • Поддержка Sound FX.


Ограничения проекта:

  • Музыка.
  • Воспроизведение демо из-за несовместимости.
  • Полный WAD DOOM Не тестировал.
  • Требуется отладка.
  • Мультиплеер не реализован.
  • Оптимизация производительности.
  • Читы не проверяли, наверно с багами.


Инженеры недавно сделали обновление в репозитории Github и удалили mip-отображение на составных текстурах без потери производительности, поэтому графика будет более детальной, чем то, что показано в демонстрационном видео.

Условия DOOM-challenge:



  • Найдите готовое устройство, не предназначенное для игры в Doom или в другие игры.
  • Выбранное устройство должно иметь микроконтроллер с разумно ограниченной вычислительной мощностью и/или памятью в соответствии с минимальными требованиями DOOM (DOOM работает с приемлемой частотой кадров даже на 486 @ 33MHz [1], оборудованном 4MB RAM). В качестве примера мы должны исключить современные цифровые камеры, которые имеют систему на несколько сотен МГц на кристалле, с несколькими десятками мегабайт оперативной памяти.
  • Мы должны использовать именно тот микроконтроллер, который встроен в выбранное устройство. Замена невозможна. Никакого дополнительного микроконтроллера добавить нельзя. Тем не менее, разгон (например, даже если он ограничен только некоторыми периферийными устройствами или шинами) возможен при условии, что нам не нужны какие-либо методы охлаждения.
  • Для хранения файлов WAD можно добавить дополнительную флеш-память или карту памяти.
  • Можно добавить цветной дисплей, если на выбранном стандартном устройстве его нет. Разрешение должно быть достаточно высоким, чтобы можно было прилично играть в Doom. Например, экран 3216 пикселей слишком мал, но 128x64 может быть достаточно. С другой стороны, слишком большие разрешения, безусловно, потребуют очень мощного микроконтроллера, вопреки правилу 2.
  • Устройство ввода может быть любым, поэтому для этой цели можно добавить дополнительную электронику.
  • При необходимости блок питания можно заменить.
  • Мы хотели, чтобы движок был максимально приближен к исходному (ванильному) условно-бесплатному ПО Doom. Возможность играть в эпизоде 1 на карте 1 условно-бесплатной игры Doom (E1M1) это минимальная цель, даже если мы не скрываем, что мы мечтали иметь возможность сыграть полную условно-бесплатную версию без ограничений на всех картах.
  • К звуку требований нет, но звуковые эффекты были бы действительно плюсом. Если реализовано, то на аудиоподсистему ограничений нет.
  • Мультиплеер не обязателен


Тест на беременность




Принтер Canon Proxima




Осциллограф




Банкомат




DOOM в DOOM




Пианино




Minecraft




Валидатор билетов




iPod Mini




Калькулятор




Apple Watch




MacBook Pro Touch Bar




Kodak DC260 Digital Camera from 1998




На клавиатуре




На билборде




На электронной книге




На самолёте




Porsche 911




Vectrex




Паяльник




PS


Как тебе такое, AlexeyNadezhin?

zhovner, ждём DOOM на FlipperZero.

image
Подробнее..

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

15.06.2021 00:15:33 | Автор: admin

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

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

Все можно построить из профиля


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


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


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

Нестандартный не означает сложный


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


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

Пример: сложные углы без проблем


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


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

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

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




Небольшая хитрость: замена т-образной гайки, вставки и чего угодно


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

Альтернатива использование обычных гаек вместо Т-образных. Стандартные гайки совместимы не со всеми разновидностями профиля, а лишь с Misumi 3 Series. Компания Misumi предлагает и специализированные гайки, которые стоят около 9 долларов за 100 штук. В то же время обычные M3 стоят примерно 0,88 доллара за 100 штук. Их мы и будем использовать, решив попутно парочку проблем.


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

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


Толщина элемента соответствует ширине сопла 3D-принтера, что позволяет без проблем поместить пластиковое крепление в пазу профиля, экономить пластик и быстро печатать. Излишним будет говорить, что этот элемент одноразовый, вторично его использовать после разбора соединения нельзя.





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

Подробнее..

DIY регистратор молний

15.06.2021 20:16:32 | Автор: admin

Автор: Alex Wulff (из-за глюков хабраредактора не получилось оформить как перевод)

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

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


Датчик может обнаруживать удары молнии на расстоянии до 40 км (25 миль) и определять расстояние до места удара молнии с точностью до 4 км (2,5 мили). Сам датчик довольно надёжен, но может срабатывать неверно, если устройство находится на открытом воздухе. Самодельное устройство может работать не так надёжно, как коммерческий регистратор молний.

Материалы
  • микроконтроллер-жучок (beetle) DFRobot #DFR0282. Это плата Arduino Leonardo очень малых размеров;

  • Gravity: датчик расстояния до молнии DFRobot #SEN0290;

  • зарядное устройство для литиевых аккумуляторов DFRobot #SEN0290;

  • аккумулятор LiPo, 500 мАч Amazon #B00P2XICJG;

  • пьезодинамик 5В, например Amazon #B07GJSP68S;

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

  • монтажный провод (одно- или многожильный).

Инструменты
  • компьютер с бесплатным ПО Arduino IDE.

  • паяльник и припой;

  • пистолет для горячего клея;

  • машинка для зачистки концов провода от изоляции;

  • 3D-принтер (не обязательно).

1. Разработка схемы соединений

Схема устройства проста. Информация с датчика молнии передаётся по линиям SCL и SDA, плюс к этому одно соединение предусмотрено для звукового сигнала. Устройство питается от литий-ионного полимерного аккумулятора (LiPo), поэтому я решил встроить в схему зарядное устройство для такой батареи.

Рисунок AРисунок A

Схема устройства показана на рисунке A. Обратите внимание, что аккумуляторная батарея LiPo соединяется с зарядным устройством через штекерно-гнездовые разъёмы JST и не требует пайки.

2. Сборка схемы

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

Подсоедините жучок к зарядному устройству

Отпаяйте зелёные клеммы от зарядного устройства LiPo. Они бесполезны, но занимают пространство. Соедините положительную (+) и отрицательную (-) клеммы зарядного устройства аккумуляторной батареи LiPo с положительной (+) и отрицательной () клеммами на лицевой части жучка. По этим проводам первичное напряжение батареи LiPo будет подаваться непосредственно на микроконтроллер. Технически жучку требуется 5В, но от напряжения 4В батареи LiPo он всё равно будет работать.

Подключение датчика молнии

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

  • положительную (+) клемму на датчике молнии соедините с положительной (+) клеммой на жучке;

  • отрицательную () клемму на датчике молнии соедините с отрицательной (-) клеммой на жучке;

  • контакт синхронизации (C) на датчике молнии соедините с колодкой SCL на жучке;

  • контакт данных (D) на датчике молнии соедините с колодкой SDA на жучке.

Контакт IRQ на датчике молнии также должен быть соединён с колодкой RX на жучке. Соединение должно подходить к аппаратному прерывателю на жучке; колодка RX (контакт 0) единственный оставшийся контакт, поддерживающий прерывание.

Подключение зуммера

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

Подсоединение переключателя

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

Рисунок БРисунок Б

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

Окончательная компоновка

Рисунок ВРисунок В

Последний шаг избавляемся от беспорядочного скопления проводов и компонентов и приводим устройство в более презентабельный вид (рис. В). Это нужно делать аккуратно, чтобы не переломить провода. Приклейте горячим клеем зарядное устройство LiPo к верхней части батареи LiPo, затем сверху приклейте жучок. И последнее действие: приклейте к самому верху датчик молнии. Зуммер я вывел на сторону, как показано на рисунке В. В результате получилось несколько скреплённых между собой плат с торчащими из них проводами. Выводы переключателя я также оставил свободными, чтобы позже вставить их в корпус, распечатанный на 3D-принтере.

3. Программирование микроконтроллера

Запустите на компьютере Arduino IDE и убедитесь, что в меню ToolsBoard (ИнструментыПлата) выбрано значение Leonardo. Загрузите и установите библиотеку для датчика молнии. Затем скачайте код проекта и загрузите его на жучок. Программа предельно проста и очень легко настраивается.

Обнаружив молнию, устройство сначала подаст несколько звуковых сигналов, чтобы предупредить об ударе молнии поблизости, а затем подаст определённое количество звуковых сигналов, соответствующее расстоянию до молнии в километрах. Если молния находится на расстоянии менее 10 км (6,2 мили), детектор подаст один длинный звуковой сигнал. Если расстояние превышает 10 км (6,2 мили), расстояние будет поделено на 10, округлено, и устройство подаст соответствующее полученному числу количество сигналов. Например, если молния ударит на расстоянии 26 км (16 миль), то сигнала будет три.

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

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

4. Распечатка корпуса на 3D-принтере (не обязательно)

Рисунок ГРисунок ГРисунок ДРисунок ДРисунок ЕРисунок Е

Корпус для устройства разработал я сам. Файлы для 3D-печати можно загрузить здесь. (рис. Г, Д). Верхняя часть корпуса прищёлкивается к нижней, никакого специального оборудования не требуется. Корпус достаточно просторный, чтобы в нём могло поместиться и ваше устройство, если вы будете собирать его по-другому (рис. Д). В любом случае вам ничего не мешает спроектировать аналогичный корпус самому:

  • определите габариты устройства;

  • спроектируйте устройство в программе CAD (мне нравится Fusion 360 студенты могут получить её бесплатно);

  • создайте корпус, перетащив профиль из модели устройства. Допуска в 2 мм будет вполне достаточно.

Обнаружение ударов молнии

Поздравляем, теперь у вас есть работающий регистратор молний! Как проверить, работает ли устройство? Ответ очевиден дождитесь грозы. Не знаю, насколько надёжен датчик, но мой сработал с первого раза.

Заряжать устройство очень просто достаточно подключить microUSB-кабель к зарядному устройству LiPo и дождаться, когда индикатор зарядки загорится зелёным цветом. Во время зарядки устройство должно быть включено, иначе энергия не будет поступать в аккумулятор!

Внесение изменений

Регистратор молнии можно сделать более полезным и удобным в использовании, если внести в программное обеспечение определённые изменения:

  • другие звуковые сигналы: чтобы устройство звучало приятнее, используйте библиотеку звуков Tone.h;

  • спящий режим: микроконтроллер ATmega32u4 (чип, на основе которого работает жучок) поддерживает аппаратные прерывания в спящем режиме. Устройство можно перевести в спящий режим, и любое поступившее от датчика молнии, событие заставит датчик реагировать. Спящий режим может значительно продлить срок службы батареи.

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

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

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

Мониторим парк ИБП. Ч.3, заключительная

16.06.2021 12:16:05 | Автор: admin

Или что пригодится знать и уметь, если замена ИБП после поломки урон профессиональной гордости.

Часть 1
Часть 2
TL;DR

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

Disclaimer
  1. Речь идёт в основном о ИБП мощностью 400-800VA, "линейно-интерактивных", со свинцовыми батареями 12В;

  2. Бесперебойное обеспечение в основном офисных "печатных машинок": ЦП мощностью до 100 Вт и SSD в качестве системных дисков, без дискретных видеокарт;

  3. Централизованный ИБП отсутствует.

Решаемые задачи:

  1. Минимум: иметь хотя бы общее представление о состоянии парка устройств;

  2. Хорошо: менять устройства ДО возникновения сбоя, обеспечивая тем самых их фактический и экономический смысл. Да-да, просто поставить ИБП совершенно недостаточно;

  3. Отлично: иметь наглядные данные что было сделано IT-службой и почему это было необходимо сделать (потратив на это деньги и человекочасы).

Об офисных UPS

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

1. Качество соединения
На основании двухлетнего наблюдения могу с уверенностью сказать, что это беда.
Если не следить за подключениями достаточно внимательно, большинство из бесперебойников поотваливаются в течение полугода. Такое поведение сильно зависит от конкретных условий и меняется от машины к машине. Основные причины потери соединения (насколько мне удалось разобраться):
а) чисто физические. Сюда входят ненадёжные разъёмы (и они случаются чаще, чем хотелось бы), случайные нарушения соединений (уборщица слишком ретива, пользователь дёргает ногами или двигает системник) и, внезапно, качество соединительного кабеля похоже, что ИБП довольно чувствительны к этому параметру, особенно при активном опросе;
б) на втором месте не "глючные драйверы", что удивительно, а электроника самих ИБП. Похоже, бесперебойникам из нижнего ценового сегмента не очень нравится, когда их часто "дёргают".

чуть подробнее

вообще, обмен данным с ИБП идёт постоянно, но всё же не раз в миллисекунду. Драйвер usbhid-ups получает данные раз в 2 секунды (видно в дебаг-режиме, если запускать руками с параметром -D+), что-то похожее, наверняка, и в стандартном драйвере Windows и WMI. Но это только "частичное" обновление, "полное" обновление происходит раз в 30 секунд

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

2. Работа внутренних систем, сенсоров и логики UPS
Во-первых, ИБП от разных производителей обращаются с батареей по-разному. В моей практике хуже всех обращаются с батареями ИБП Powercom, лучше всех IPPON (далее по батарее см. п.3). Отличие не принципиальное, Powercom тоже через пол-года не дохнут, но оно есть и весьма заметно, если анализировать накопленные данные за достаточно длительный период. Здесь переходим к во-вторых: наиболее интересные параметры, которые ИБП сам считает и выдаёт:
а) нагрузка (load)
б) предсказание времени работы от батареи (runtime), вычисляемое на основе нагрузки
в) текущий заряд батареи (charge)

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

К сожалению, есть куда больше параметров, которые анализировать, считать и даже просто получать стоило бы, но это не реализовано.
Простейший пример: просадка напряжения на батарее, когда пропадает питание. Это показательнейший параметр, на основании которого можно куда точнее сделать вывод об убитой батарее. Постоянная память EEPROM есть сейчас где угодно, и ИБП запросто может записывать такие данные самостоятельно. Но ни одного ИБП с таким функционалом мне не попалось.
Другой пример: Powercom'ы после потери питания и разряда батареи до 30 процентов могут "зарядить" 12-вольтовую батарею за 10 минут и утверждать, что всё прекрасно, а Self-test passed.

если вас ничего не смущает

время полного заряда 12 В свинцовой батареи даже в "агрессивном" режиме составит не меньше часа, и батарея после такого долго не живёт

Это прямо натуральный epic fail.
Те же Powercom не умеют в вольтаж батареи вообще, только в проценты. На основании чего там эти проценты внутри считаются покрыто китайской мракой.

Очень важного параметра "температура" (батареи, внутри корпуса, да хоть чего-нибудь) не найти днём с огнём в офисных ИБП, хотя датчик копеечный и вообще встроен в почти все микроконтроллеры. Тут переходим к третьему пункту раздела.

3. Батарея и её состояние
Из того зоопарка, с которым я имел дело, "посредственно" справляется с задачей анализа состояния батареи серверный ИБП IPPON. Потуги остальных иначе как "бессмысленно" назвать не могу. Очень важный параметр батареи кривая разряда просто игнорируется.

немного о кривой разряда

Свинцовые батареи ИБП разряжаются нелинейно. Проще говоря, чем меньше заряда осталось в батарее, тем быстрее она разряжается. Ещё проще: время разряда со 100% до 90% будет в разы больше, чем с 20% до 0%. Но и это ещё не всё. Кривая разряда становится круче в более старой батарее и/или в зависимости от внешних условий (та же температура). В итоге это выглядит так:

Чувствуете подвох? Угадайте, проводит ли ИБП запись скорости последнего разряда, анализ, учитывает ли дату установки батареи?

спойлер

ИБП ваще пофигу, не анализирует, не учитывает. Лучшее, что я видел через три года начинает орать "чота батарея старая".

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

Запись и расчёт параметров реализован в очередном обновлении сервера мониторинга. В частности, теперь видно:

  • просадку заряда батареи непосредственно после потери питания. Если этот показатель низкий, сервер выдаст предупреждение;

  • скорость разряда батареи. Этот параметр требует для расчёта не менее 2 мин наблюдаемого разряда ИБП.

Для корректного учёта этих параметров требуется довольно частый опрос ИБП. Соответствующие изменения внесены в код сервера (см. раздел "NUT и сервер мониторинга"). К сожалению, здесь мы упираемся в ранее озвученный п. "б" ч. 1 текущего раздела при частых обращениях за данными возможны глюки. Более того, в первые секунды после потери питания ИБП данные не отдаёт вообще, а вместо этого передаёт "WAIT". По-хорошему, после потери питания ИБП для целей мониторинга нужно бы опрашивать как можно чаще. На данный момент частота опроса от 10 до 30 секунд, в целом для более-менее приличного анализа этого хватает. Более интенсивные опросы не тестировались достаточно долго, чтобы делать какие-то однозначные выводы.

Краткие итоги раздела:

  • обязательно нужен мониторинг самого факта подключения ИБП к машине;

  • нужно собирать и хранить данные о датах установки батарей;

  • в идеале нужно очень детально мониторить процесс разряда и заряда батарей.

NUT и сервер мониторинга

Изначально NUT был выбран как кроссплатформенное универсальное решение. В целом функции свои выполняет. Без нюансов, впрочем, не обошлось:
а) Не слишком дружелюбная и неочевидная установка на клиентских машинах, под Windows особенно. В частности:

  • иногда отказывается видеть библиотеки;

  • встроенный драйвер не обновлялся давно и половину ИБП не знает. Драйвер надо ставить вручную, и это отдельная песня;

  • на клиентах под Windows служба стартует "невовремя", раньше, чем фактически нужно (похожая история есть при поиске домена на Windows с некоторыми сетевыми адаптерами). Из-за этого приходится городить костыли.

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

В качестве альтернативы я попробовал (и даже написал "адаптер") получать данные из WMI по предложению @firedragon. Суть, в общем, та же. Плюсы: не нужно альтернативных дайверов и библиотек, не нужно костылить некоторые вещи. Минусы: информации сильно меньше, а по сравнению с настроенным клиентом NUT стабильность ровно та же, при этом отсутствует, хотя бы потенциальная, возможность "триггера".

По результатам изысканий решено было оставить NUT в качестве основного решения для сервера. При этом "сильно больше данных" в какой-то момент обернулось базами, раздутыми по 100 Мб на бесперебойник, что повлияло на производительность. В итоге, сервер был перенесён из среды Windows в Linux, и:

  • написан соответствующий скрипт-демон на bash для непрерывного опроса;

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

В саму веб-морду сервера, как уже говорилось, добавлено:

  • отображение заряда батареи сразу после последней потери питания и соответствующий алерт;

  • расчёт времени работы от батареи на основе реальных данных. Некоторым образом это тоже синтетика, т.к. реальная кривая разряда не строится. Однако, отлично себя показала следующая формула: рассчитанное на основе последних реальных данных время / 1+ лет с десятыми.

Итоги, советы, планы

Для тех, кто хочет "сделать всё правильно", исходя из полученного опыта, дам следующие советы:

  1. Тщательно выберите марку и модель ИБП и по возможности используйте только выбранный ИБП во всем офисе;

  2. Запишите серийные номера и/или присвойте каждому ИБП уникальный номер. Запишите дату установки батареи в каждый ИБП. Меняйте батареи раз в два года, и сразу, заранее, закладывайте эти расходы в бюджеты для бизнеса запланированные расходы гораздо удобнее внезапных;

  3. Любым способом следите за тем, чтобы машины, обеспеченные ИБП, имели с ним постоянную связь;

  4. Раз в пол-года обновляйте параметры battery low и battery warning в используемом вами драйвере/решении, прибавляя к ним от 5% до 20% в зависимости от опыта использования вашей модели ИБП, вручную или скриптами;

  5. По возможности проводите ручное тестирование ИБП (отключить от розетки и подождать) раз в квартал-полгода.

Это то, что нужно делать обязательно.

Использование постоянного и подробного мониторинга, в целом, скорее чрезмерно, хотя и может оказаться полезным и наглядным. Заводить для этого отдельный сервер или нет, решать вам. Некоторые параметры можно мониторить в том же Zabbix (и даже посредством WMI), однако лично у меня в целом не очень удачный опыт с Zabbix active parameters; к тому же, сложность реализации некоторых описанных решений внутри Zabbix по сложности приближается, на мой вкус, к сложности реализации представленного сервера мониторинга.

Я удивлён и рад, что довольно много читателей задумалось о мониторинге ИБП после первой статьи, и многие посоветовали довести решение "до энтерпрайза" после второй статьи. Благодарю за отклики и ответы!

Учитывая накопленный опыт, реализация "до энтерпрайза" может быть довольно длительной. Есть проблемы и на клиентской стороне, и в самом NUT; в веб-интерфейсе многое надо выносить в бэкэнд, нет даже банальной авторизации. Можно было бы даже в таком виде запихнуть всё это в контейнер Docker в качестве версии 0.1 alpha, но мой энтузиазм к теме несколько поугас. Если у кого-то энтузиазм найдётся пишите, буду рад поработать вместе!

Рад, если мой опыт вам пригодится. Спасибо всем, кто прочитал!

Подробнее..

Твиттер Илона Маска в телеграме и с переводом на русский

16.06.2021 16:13:28 | Автор: admin

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

Проблема

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

Идея

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

Подводные камни

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

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

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

Технологии

Я решил попробовать самостоятельно и начал гуглить что-то вроде "parsing twitter without API". Нашлось достаточно много решений, сразу скажу, что решениеtwint библиотека с открытым исходным кодом, которая вполне работоспособна и подошла под мою задачу.

Для того, чтобы перевести текст с английского на русский, я сначала было собирался использовать google translate, но понимал, что в нем ограниченное количество бесплатных переводов, решил что попробую использовать единственную известную мне нейросеть для перевода с английского на русскийfairseqот Facebook AI Research. Качество перевода показалось мне вполне приемлемым с точки зрения того, чтобы понять в чем суть твита, хотя оно и не было идеальным.

Все это я обернул в скрипт на языке программирования python и запустил на постоянную работу на своем сервере.

Примеры кода

Чтобы собрать данные из твиттера без использования выделенных девелоперских доступов, логинов, паролей и API, нужно сделать следующее:

Установить библиотеку twint

pip3 install twint

Запустить код формата

twint -u <name_of_twitter_user> -o output.csv --csv --since 2020-01-01 --retweets

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

Из функционала, который есть у библиотеки еще отмечу:

  • Возможность искать твиты пользователя по ключевому слову

twint -u username -s pineapple
  • Возможность находить твиты пользователя с указанием номеров телефонов и почт

twint -u username --email --phone
  • Поиск твитов вокруг определенной локации

twint -g="48.880048,2.385939,1km" -o file.csv --csv
  • Сохранение в Elasticsearch или SQLite

twint -u username -es localhost:9200twint -u username --database tweets.db
  • Сохранение фоловеров, подписок и избранных для пользователя

twint -u username --followerstwint -u username --followingtwint -u username --favorites

Данные сохраняются в csv файл, в котором присутствуют такие поля как (перечислю те, которые использовал сам, так как их много и большинство несут мало информации):

id - идентификатор сообщения

conversation_id - идентификатор беседы

created_at - дата создания сообщения

tweet - текст сообщения

mentions - упоминания пользователей твиттера ( список словарей)

urls - вставленные по правилам твиттера ссылки (например на youtube)

photos - ссылки на картинки

link - ссылка на твит

reply_to - список словарей с пользователямя, ответом на твиты которых является твит

У библиотеки есть также возможность перевода на другой язык, но она у меня совсем не заработала. Собственно по этой причине я искал другую возможность. Нашел я, как упоминал выше, открытую разработку Facebook AI Research - библиотеку fairseq, в которой можно скачать веса нейронки для перевода в частности из английского в русский и наоборот.

pip install hydra-core

Итого необходимо было установить:

pip install torch pip install hydra-core==1.0.0 omegaconf==2.0.1pip install fastBPE regex requests sacremoses subword_nmt 

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

import torch# Compare the results with English-Russian round-trip translation:en2ru = torch.hub.load('pytorch/fairseq', 'transformer.wmt19.en-ru.single_model',                        tokenizer='moses', bpe='fastbpe')ru2en = torch.hub.load('pytorch/fairseq', 'transformer.wmt19.ru-en.single_model',                        tokenizer='moses', bpe='fastbpe')paraphrase = ru2en.translate(  en2ru.translate('PyTorch Hub is an awesome interface!'))assert paraphrase == 'PyTorch is a great interface!'

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

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

Как пользоваться

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

Итого у меня получилсятелеграм-каналпод названием "Твиттер Илона Маска" (подписывайтесь, мне будет приятно, что это нужно кому-то еще , будет дополнительный стимул поддерживать в будущем), в котором можно

1) читать новые и старые посты Илона Маска

2) видеть перевод текста на русский язык

3) перейти по ссылке на исходный пост в твиттере

И все это без регистрации и смс:)

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

Подробнее..

OpenRPNCalc делаем бескомпромиссный калькулятор

18.06.2021 02:21:22 | Автор: admin
Калькулятор как он есть.Калькулятор как он есть.

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

Но зачем?

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

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

Как оказалось, есть небольшая фирма SwissMicros, которая выпускает неплохие копии старых программируемых калькуляторов Hewlett Packard (HP) на основе современных ARM-процессоров и симулятора Free42 с открытым кодом. Но опять же, это не идеал есть некоторые функции (об этом ниже), которые мне пришлось бы программировать, а запускать программы это совсем не то же самое, что нажать на кнопку.

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

Для разнообразия я решил в кои-то веки сделать проект, который не выглядит слишком колхозно, которым реально можно пользоваться, и может быть даже не слишком прячась от коллег по работе. Хотя это и не первый раз, когда я делаю какую-то электронику, до сих пор я в основном возился с DIP-корпусами, макетками и синей изолентой, а тут сам бог велел сделать что-то посовременнее. Соответственно, я получил море новых впечатлений, разбираясь с многими вещами с нуля (программирование для ARM, пайка SMD, разработка в KiCAD и OpenSCAD, 3D-печать). Готовьтесь, сейчас я ими здесь поделюсь. Вдруг кому-то поможет, или кто из более опытных посоветует что-нибудь дельное.

Код, как и вся, с позволения сказать, документация выложены на GitHub. Да, код ужасен. Да, постараюсь исправиться :)

Концепция

Итак, будем делать научный, непрограммируемый, калькулятор, в который при желании можно добавлять новые функции. Как бывший член экипажа лунолёта Кон-Тики, я, конечно, обязан был сделать калькулятор с обратной бесскобочной (она же польская, она же RPN) логикой. Благо, её и программировать легче.Ещё одним преимуществом RPN поделился со мной пользователь с сайта Hackaday: такой калькулятор у вас вряд ли кто попросит попользоваться на время.

Итак, что хотелось мне иметь в идеале в своей машинке:

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

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

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

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

  • Стандартные режимы отображения SCI (с мантиссой и порядком) и ENG (с порядком, кратным трём) и изменяемым количеством значащих цифр мантиссы (3-10). В режиме ENG, к тому же, можно для удобства сделать показ префиксов единиц СИ (m, k, M и т. д.).Диапазона double будет более чем достаточно. SwissMicros делает калькуляторы c quarduple precision (что ещё ждать от швейцарской-то фирмы?), но в нашей немудрёной науке, если в вычислении используется больше шести-семи значащих цифр с вычислением что-то не так.

  • Обратная бесскобочная логика со стеком из 4 элементов (X,Y,Z,T) плюс регистр предыдущего результата (LASTx или X1) как у HP или Б3-34. Есть ещё вариант сделать бесконечный стек, как у старших моделей HP, но пока я ограничился более простым вариантом.

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

Электроника

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

С экраном вопросов нет это будет монохромный ЖКИ дисплей Sharp Memory LCD, как у SwissMicros DM42. Судя по многим отзывам, это практически идеальный дисплей с хорошей контрастностью, очень малой потребляемой мощностью, и управляется по последовательной шине SPI. В нашем случае это будет модуль LS027B7DH01размером 2.7 (размер изображения 60x40 мм) и разрешением 400x240 точек. С таким разрешением можно показывать все 4 регистра стека одновременно, да и для режима вычислений с ошибками это будет полезно.Модуль потребляет всего около 20 мкА от 5В в режиме показываю, но ничего не делаю.

Процессор, недолго думая, я тоже взял из DM42: STM32L476, правда, в корпусе LQFP64 (модификация STM32L476RG). В DM42 стоит тот же процессор в корпусе LQFP100 (100 пинов), но нам не нужны ни внешний Flash, ни SD-карта, так что 64 пина хватит за глаза. Процессор может работать на частоте до 80 МГц, есть 128 кБ оперативки и 1 МБ программного флеша ought to be enough for anybody. Ну и ещё много всяческого добра, которым мы по большей части не будем пользоваться.

С клавиатурой вопросов больше. Многие обозреватели жалуются, что у SwissMicros слишком жёсткая клавиатура, быстро кнопки нажимать неудобно, и вообще ничто не может сравниться с классикой HP. Попробуем найти что-то получше, чем купольные кнопки на DM42. Первые попавшиеся тактовые кнопки с AliExpress мне показались слишком тугими. Порывшись по каталогам, я нашёл самые мягкие и достаточно плоские из тех, которые можно заказать, не особо напрягаясь Panasonic EVQQ2B01W с усилием нажатия 50 г (при том, что обычные кнопки, которые продаются на каждом углу, обычно требуют усилие в 150-200 г).

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

Схема всего девайса элементарная и показана на рисунке выше. Собственно, кроме STM32 в стандартном подключении, клавиатурной матрицы и пары разъемов (один для ЖКИ, другой для программатора) там есть только преобразователь напряжения 3В в 5В для питания ЖКИ на очень экономном чипе TPS61222. STM запитан непосредственно от литиевой батарейки. Не знаю, хорошая ли это идея, или лучше было поставить стабилизированный преобразователь. Кварц для тактирования процессора решил не ставить (можно и встроенным RC генератором обойтись), но на всякий случай поставил часовой кварц.

Кстати, по поводу питания ЖКИ. То, что нарисовано сейчас на схеме, хоть и работает, но не совсем правильно. Как оказалось уже после того, как я развел и заказал плату, преобразователь TPS61222 не полностью отключает выходную цепь от питания при низком уровне сигнала 5V_EN, а только выключает сам преобразователь, оставляя на выходе 3В вместо пяти. Надо внимательнее читать даташиты! Попутно оказалось, что и от трех вольт ЖКИ прекрасно работает, и даже контрастность не страдает. Может быть, в следующей версии платы преобразователь можно просто выкинуть?

Рисовал схему и разводил плату в KiCAD. Почти все элементы там нашлись в стандартной библиотеке, кроме 10-пинового разъёма Molex с шагом 0.5 мм для ЖКИ, его пришлось нарисовать самому по образцу какого-то другого с другим шагом.

С лазерным утюгом я не дружу, поэтому плату заказал на одном из специализированных сайтов (в плате нет никаких тонкостей, так что любой дешёвый PCB-сервис должен с ней справиться). Дисплей Sharp и разная мелочь продаётся на AliExpress, а вот с покупкой процессора STM я, похоже, пал жертвой дефицита чипов. Три китайских продавца меня кинули (причём один сделал вид, что всё выслал, тянул две недели, после чего уверял, что посылку задержала таможня, а сам поднял цену на тот же чип раза в три). К счастью, в один прекрасный момент несколько сотен нужных чипов выбросили на сайте Mouser, из которых я и отхватил несколько штук. На том же Маузере я заказал и кнопки Panasonic, т.к. на Али практически все кнопки noname с непонятно какими характеристиками.

Несмотря на мой изначальный страх, пайка SMD пошла на удивление легко, даже разъём LCD и сам STM32 с ножками с шагом в 0.5 мм паяются без проблем. Оказалось, пора уже было забыть про натуральную сосновую канифоль и перейти на современную бездушную паяльную пасту. Немного больше тренировки потребовала пайка разной мелочи типоразмера 0603 (резисторы, конденсаторы).

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

Прошивка STM32

Как оказалось, найти информацию для того, чтобы начать программирование на STM32 с нуля, не так-то просто, похоже, из-за того, что альтернативных инструментов очень много, они быстро появляются и устаревают. Наверное, в конце концов лучше учиться писать на голом gcc, но для начала я хотел взять какой-нибудь IDE в стиле для чайников с визуальным конфигурированием процессора. В результате я использовал STM32Cube IDE. Я так и не смог добиться, чтобы он работал в Ubuntu, поэтому пришлось ставить ради него целую виртуальную машину с Windows 10.

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

Функции для работы с дисплеем Sharp я писал сам по даташиту, и там всё оказалось очень просто. Система команд дисплея состоит, практически, из 2-х команд. Первая это очистка экрана. Вторая передача массива информации, который состоит из номера строки и 50 байт данных строки.Одна тонкость работы с дисплеем когда он включен, ему нужен постоянный внешний сигнал около 1 Гц для периодического изменения полярности электрического поля на ЖК-матрице. Этот сигнал генерируется по прерыванию от внутреннего таймера STM. При выключенном ЖКИ этот сигнал надо также выключать.

Собственно саму реализацию алгоритма работы калькулятора я сперва отладил на большом компьютере, написав заглушки для функций работы с клавиатурой и дисплеем. STM32L476 поддерживает полную математическую библиотеку gcc, более того, вычисления с плавающей точкой там реализованы в железе, так что всё работает очень быстро. Я понизил частоту работы процессора до 8 МГц, чтобы ограничить максимальный потребляемый ток (который тогда получается около 4 мА при полной нагрузке), при этом никаких видимых задержек при вычислениях не появляется. При меньшей частоте начинает заметно тормозить вывод на экран.

Для прошивки я купил один из китайских клонов программатора/отладчика ST-Link v2, которые продают где угодно за копейки. С ним вышла небольшая проблема: судя по всему, мой экземпляр не умеет делать connect under reset, из-за чего STM в состоянии спячки я программировать не могу. Пришлось предусмотреть в прошивке волшебное сочетание кнопок (Shift+RESET), при котором контроллер не уходит в STOP, а ждёт соединения с программатором. Неприятно, но не смертельно.

Вся прошивка занимает примерно 120 кБ программной памяти. При этом большую часть объёма составляют растровые экранные шрифты (размером от 6x8 до 24x40).

Корпус и клавиатура

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

Промаявшись несколько вечеров с глючным FreeCADом (не покупать же программы Autodesk за бешеные деньги), я понял, что гораздо легче написать программу, которая описывает геометрию детали, чем ползать мышкой по меню, поэтому перешёл на OpenSCAD. Хотя у него есть свои ограничения: например, в отличие от FreeCAD, в нём сложно делать фаски и скругления граней.На OpenSCAD дело пошло гораздо веселее.

Корпус и клавиатура, нарисованные в OpenSCAD.Корпус и клавиатура, нарисованные в OpenSCAD.

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

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

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

Не буду здесь долго описывать сагу про печать корпуса скажу только, что он получился лишь с четвёртой или пятой попытки, при этом пришлось тонко настраивать геометрию моего Ender 3 (перпендикулярность осей X и Y), иначе корпус вело винтом после соединения двух половин. Печатал пластиком PETG.

Надписи на кнопках и на корпусе я напечатал на тонкой матовой клеящейся плёнке для лазерных принтеров (чего только не существует в мире канцелярских товаров!). Кажется, эту идею я нашёл на каком-то форуме любителей самостоятельно делать наклейки для русификации клавиатур (да, такое тоже бывает). Сам PDF-файл с надписями и линиями отреза генерируется питоновским скриптом с использованием библиотеки matplotlib. А что ещё можно использовать для графики с обилием математических символов?Напечатанный текст держится на стикерах намертво, их можно даже мыть. Тот стикер, который на корпусе, за счёт большой площади прилип надёжно. К сожалению, стикеры на кнопках не очень прочно прилипают и неосторожным движением их можно отодрать. Впоследствии, возможно, их лучше будет покрыть сверху лаком, но пока надписи на клавиатуре не устаканились, и так сойдет. Минус такой технологии наклейки будут хорошо видны только на белом корпусе.

Результат

Вот что в результате получилось. Дисплей в режиме отображения ENG с 6 значащими цифрами и активированным режимом вычислений с неопределенностями.Вот что в результате получилось. Дисплей в режиме отображения ENG с 6 значащими цифрами и активированным режимом вычислений с неопределенностями.

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

  • F, G клавиши shift. Пока в основном задействована только F. G нужна только для обратного направления преобразований (), (), а дальше будет использоваться для новых функций, если таковые появятся.

  • Mode изменение режима отображения чисел (FIX, SCI, ENG).

  • Uncr включение/выключение режима вычислений с неопределённостями (UNCERT).

  • Prec переключение количества значащих цифр мантиссы (от 10 до 3 циклически, с F в обратную сторону).

  • Drop, X<>Y, Rot работа со стеком. LASTx вызов результата предыдущей операции.

  • DR переключение измерения углов между градусами и радианами, D<>R то же с преобразованием значения угла в регистре X.

  • RP, PR перевод между декартовыми и полярными координатами.

  • N(x), N(x-y) работают только в режиме неопределённостей, и выполняют, соответственно, вычисление стат. значимости значения в регистре X (значение, деленное на неопредёленность) и значимости разности значений в регистрах X и Y.

  • (), (), p(zxy) те самые специфические функции, которые мало кому нужны: вычисление псевдобыстроты (pseudorapidity), релятивистского гамма-фактора, вычисление импульса в центре масс двухчастичного распада.

  • /-/ обычное изменение знака числа в регистре X, а переключение между вводом значения и ошибки в режиме UNCERT.

Планы на будущее

В принципе, машинка уже сейчас вполне функциональная, но всегда можно что-то улучшить:

  • Есть ещё резервы в плане уменьшения энергопотребления. Сейчас калькулятор расходует около 50 мкА в режиме со включенным дисплеем, и 40 мкА с выключенным. Как я уже говорил, полностью питание с дисплея сейчас не снимается, хотя надо бы это пофиксить. Кроме того, можно улучшить алгоритм опроса клавиатуры: сейчас, когда калькулятор включен и работает дисплей, процессор не засыпает, пока нажатая кнопка не отпущена, и потребляет при этом около 4 мА. Надо бы здесь тоже задействовать внешние прерывания и режим STOP.

  • Функция сканирования клавиатуры понимает только одну нажатую кнопку за раз. Хотелось бы сделать режим two-key rollover, когда регистрируется кнопка, нажатая до того, как отпущена предыдущая, чтобы кнопки надёжнее срабатывали при быстром наборе.

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

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

  • Что хотелось бы из нового функционала. Более удобное отображение значений с неопределённостью, когда есть ненулевой порядок, в виде (10.1)e-10 вместо теперешнего 1e-10 1e-11. Больше регистров памяти (пока только один). Целочисленный режим с булевыми функциями и переводом между двоичной, десятичной и шестнадцатеричной системами. Новые функции по мере надобности (вычисление распределений Пуассона и хи-квадрат пока не сделал, но это дело техники).

По мере работы над проектом, я выкладываю новости в блог Hackaday.io.

P.S. Спасибо @Boomburumза приглашение и советы.

Подробнее..

Электросамокат не только средство передвижения

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.

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

Берем Перегородку-сифон и с помощью миниатюрной газовой горелки либо "турбо" зажикалки, плоскогубцев и ножа, с периодическими прикидками делаем форму похожую на фото

Подставка под рюкзак

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

Вырез

При желании конечно можно сделать поаккуратнее на вид, но по надежности все получилось крепко.

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

Общий вид с доработками, способ крепления рюкзака показан:

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

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

Подробнее..

Торцовочная пила своими руками

20.06.2021 18:15:44 | Автор: admin

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

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


Концепция этого станка

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

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

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

Сразу признаюсь, что идея не нова, и я ее подсмотрел в Интернете, но исполнение немного отличается.

Конструкция

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

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

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

Все элементы конструкции связаны металлическим листом толщиной 10 мм торцы основания и 6 мм подвижная каретка.

Изготовление

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

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

Три детали из листовой стали заказал на лазерной резке, для этого отправил технологам файл в векторном формате для раскроя на станке.

Направляющие с припуском на обработку распилил и отдал токарю.

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

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

Через день забрал детали с покраски и собрал станок как конструктор, довольно приятное занятие.

В качестве чернового стола приобрел лист фанеры толщиной 15 мм.

Цена вопроса

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

Размышления на тему самодельности

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

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

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

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

Каждый выбирает тот вариант, который ему ближе.

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

Что характеризует самоделку? Самостоятельность изготовления и/или применение только ручного инструмента в изготовлении? А может быть что-то еще?

А что думаете Вы на эту тему?

Подробнее..

Категории

Последние комментарии

© 2006-2021, personeltest.ru