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

Разработка под arduino

Мультисенсорный беспроводной датчик с E-Ink дисплеем

08.04.2021 12:19:54 | Автор: admin
Приветствую всех читателей Хабра и особенно читателей раздела DIY или Сделай сам! В сегодняшней статье я расскажу о своем очередном DIY проекте из серии устройств с дисплеями на электронных чернилах(e-ink). Устройство о котором пойдет речь это беспроводной мультисенсорный датчик с e-paper дисплеем 2.13 дюймов. На датчик можно установить сенсор температуры и влажности SHT21, HTU21D, SI7021, сенсор температуры влажности и давления BME280, сенсор атмосферного давления BMP280, сенсор освещенности MAX44009. Датчик работает от одной батарейки CR2450. Но ничего не мешает напаять на датчик держатель под батарейки CR2430 или CR2477.




Проект датчика с e-ink дисплеем размером 2.13 дюймов начинался достаточно давно. Первый прототип был сделан более года назад. Та первая версия работала на двух батарейках cr2450, имела стабилизированное питание. Со временем проект изменялся и оптимизировался, уменьшались размеры, менялись радио модули и сенсоры.


Плата окончательной версии датчика имеет размеры 72 mm * 31 mm, толщина текстолита 1.2mm. Размеры датчика в корпусе 76mm * 35mm * 12mm.
Устройство работает на микроконтроллере nRF52840, используется радио модуль MS88SF3 от компании MINEW. Модуль не имеет боковых падов для пайки, они расположены снизу радио модуля. Эта особенность немного напрягала, но глаза боятся, а руки делают. В итоге модуль достаточно просто напаивается феном (плату устройства, на которую устанавливался радио модуль я грел снизу).


Устройство имеет две модификации платы. В модификации А на датчике установлен сенсор BME280, светодиод, в модификации B добавлен датчик освещенности, датчики температуры и влажности SHT21, HTU21D, SI7021, добавлена возможность установки сенсора BMP280, добавлена защита от переполюсовки на транзисторе.




В модификации B место под пайку сенсоров BME280 и BMP280 сделал универсальным, BMP280 отлично устанавливается на место BME280. Это изменение я сделал уже в крайней ревизии второй версии датчика. Причиной стало резкое удорожание сенсоров BME (в среднем на 70% на последние два месяца). Теперь появилась возможность заменить функционал BME280 установив на плату BMP280 + SHT21 (серия BMP пока не поднимается в цене). Если кому-то известна причина такого роста цен на сенсоры BME, расскажите об этом в комментариях.


Корпус датчика был напечатан на FDM 3D принтере. После печати корпус дополнительно шлифовался и полировался. Для светодиода в модификации А и сенсора освещенности в модификации B в верхней части корпуса на внутренней стороне имеются углубления для последующего сверления отверстий. Просверленные отверстия я заливал полимерной смолой для SLA принтера.


Программа датчика написана под опенсорс проект MySensors. Датчик выводит на дисплей данные с сенсоров, заряд батарейки, уровень сигнала, прогноз изменения погоды на ближайшие часы. Рядом с данными с сенсоров так же выводится стрелками направление изменения значений. Было несколько вариантов дизайна интерфейса, варианты 2 и 3 доступны на моем гитхаб.






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

При работе в радиосети датчик передает данные:
  • Температура,
  • Влажность,
  • Атмосферное давление,
  • Уровень освещенности,
  • Прогноз погоды,
  • Уровень сигнала,
  • Уровень заряда батарейки,
  • Причина перезагрузки


Если сеть работает в метрической системе, то данные о температуре отправляются и выводятся на экран в Цельсиях, а данные об атмосферном давлении в миллиметрах ртутного столба(только при компиляции RU версии), иначе температура выводится в Фарингейтах, а атмосферное давление в Паскалях.

Перед компиляцией программы необходимо внести изменения в конфигурационный файл aConfig.h.
Какая языковая версия будет скомпелированна(RU или ENG):
#define LANG_RU

Вывод дебага в сериал:
#define MY_DEBUG

Мощность радиопередатчика:
#define MY_NRF5_ESB_PA_LEVEL (0x8UL)

Скорость передачи данных:
#define MY_NRF5_ESB_MODE (NRF5_1MBPS)


Потребление устройства в режиме сна 5 мкА, в режиме чтения сенсоров и обновления экрана 2-3 мА. В режиме передачи данных 8 мА, в режиме прослушивания 5мА. Время обновления экрана 300мс, время передачи одного сообщения с данными сенсоров 10мс, время передачи сообщения о заряде батареи с ожиданием эхо 100-300мс. Срок работы на одной батарейке CR2450 год и более(с конфигурацией опроса сенсоров раз в минуту и отправкой данных при изменении, опросе напряжения батарейки один раз в 6 часов и обязательной отправкой без сравнения).

Видео с демонстрацией работы датчика:

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


Фото датчика:















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

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

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

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

А тем кто ищет достаточно взрослые решения для домашней автоматизации приглашаю в телеграм-чат Open Thread. (что такое Thread?)

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

Подробнее..

SOHO UPS в маленьком корпусе и своими руками. Менее чем за1500 руб

10.05.2021 12:10:00 | Автор: admin

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

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

А что если сделать такой источник бесперебойного питания, который можно поставить прямо рядом с защищаемым устройством лёгкое, компактное, недорогое?

Почему я об этом задумался?


Я живу в частном доме и моя работа на 100% зависит от доступности интернета.
Но так уж получилось, что в нашем районе Ленинградской области ситуация с энергоснабжением обстоит очень печально. Достаточно частыеотключении при резком изменении погоды,изношенные высоковольтные линии идущие к нам и прочее.Соответственно при аварии на электросетях падает вся сетевая инфраструктура и пока всё поднимется, восстановятся все маршруты (OSPF)пройдет минимум 2-3 минуты. Также стоит вспомнить об опасности таких отключений для самого оборудования. На запуск и ввод резервного источника питания (генератор) необходимо примерно 5-10 минут.

В данной ситуации UPS не роскошь он необходим как воздух.

Сетевая инфраструктура у меня построена на оборудовании MikroTik, оно простое но его достаточно много:
  • 951Ui-2HnD пограничный маршрутизатор в который приходит интернет от Cambium (радио-мост до БС МТС), также он защищает сеть и на нем поднят VPN-сервер для удаленного доступа.
  • hEX PoE выполняет роль маршрутизатора локальной сети и контроллера CAPsMAN.
  • CSS106-5G-1S в серверном шкафу
  • 3 штуки hAP Lite Wi-Fi точкидоступа для бесшовного роуминга. Их много, они раскиданы по всей территории и все на маленькой мощности. Используются только для мобильных устройств и умного дома.
  • OmtiTik5ac PoE и SXTsq Lite5 радиолинк до второго дома
  • BaseBox2 уличная точка доступа.

Питать всё этоот одного классического UPS не реально оборудование раскидано по территории. Во вторых при моих условиях АКБ внутри классического бесперебойника умирает примерно за 1.5 года, а стоимость новой батареи достаточно высока.

Постановка задачи


Я периодическидумал как решить данную задачуи принял решение сделать свой ИБП обладающий характеристиками:
  • Прост в разработке, желательно на готовых модулях
  • Недорого, чтобы можно было поставить возле каждого роутера Регулируемое выходное напряжение можно запитать не только оборудование с 12/24В роутеры / коммутаторы, но и, например, Intel NUC (у него 19В)
  • Размер корпуса не больше чем уhEX PoEдля сборки в виде модуля ИБП+Роутер

При детальном рассмотрении задачи и всего зоопарка оборудования я понял, что hAP Lite это слабое звено во всей цепочке. Во первых ему нужно 5В (всем остальным от 12 до 48), во вторых у него micro-usb разъем питания и нет PoE-in. Поэтому данные устройства были выведены изсписка защищаемых и при отключении ЭЭ они падают как и раньше.

В процессе раздумий над схемой я понял, что лучше использовать в качестве базового напряжения АКБ 12В, а дальше, по необходимости менять преобразователи на повышающий или понижающий. Это сделает UPSуниверсальным и позволит питать устройства в диапазоне от 1 до 48В, также снизит стоимость устройства за счет снижения количества АКБ до 3х.

Подбор компонентов


Для сборки нужны детали:
Цены указываю при покупке на территории РФ. Если брать у наших соседей, то стоимость будет ниже примерно на 60%, а т.к плата все равно будет ехать из-за бугра, то и детали можно смело брать там.
  1. Модуль заряда аккумуляторов 3S, 10A 1 шт. (180 руб)
  2. Повышающий (понижающий) DC-DC преобразователь XL6009 1 шт. (120 руб)
  3. Батарейный отсек 1х18650 на плату 3 шт. (150 руб)
  4. Гнездо питания на плату 5.5х2.1 (от 2 до 4 штук)
  5. Вольтметр 0.28" 0-100В (опционально)
  6. Диод Шотки SS34, 3А 3 шт.
  7. Резистор SMD 1206, 200R 1 шт
  8. Резистор SMD 1206, 1K 1 шт
  9. Стабилитрон 3.3В,BZX55C3V3 2 шт.
  10. Светодиод SMD 1206 2 шт.

Итого: 450 руб.
Изготовление печатной платы на jlcpcb с доставкой в РФ 750 руб. за 5 штук. (150 руб/шт)

3 аккумулятора размера 18650. Средняя стоимость 300 руб.

Итого общаястоимость за одно устройство: 1500 руб.

Обратите внимание, на АКБ нельзя экономить! Брать не явный Китай и желательно высокотоковый!
Нам не нужны повторения историй, коих и так увы очень много последнее время по всем федеральным каналам. АКБне обязательно должен быть с защитой, ввиду того, что плата заряда аккумулятора, используемая нами уже имеет защиту от чрезмерного заряда/разряда.

Тест взрывоопасности АКБ 18650
Сразу привожу наглядный тест на безопасность именно АКБ 18650. Вариант пробития гвоздем не рассматриваем ввиду нереальности https://www.youtube.com/watch?v=tOsxiLKyKwQ

Принцип работы


Принципиальная схема данного устройства очень простая


Итак унас есть один входной разъем питания (Vin), и три выходных (Vout). XP1 это стандартная гребенка PLS с шагом 2.54, к которойподключается кнопка включения питания, а также можно поставить джампер (как в моем случае), если планируется все время держать устройство во включенном состоянии.
Также на плате есть два светодиода, показывающие наличие напряжение во входной сети (Vin) и напряжения на выходе устройства (Vout), подключенные через стабилитрон (D1, D2) на 3В и резисторы (на нижней стороне платы)R2 220 Ом и R1 1кОм соответственно.
U6 это контакты для подключения модуля вольтметра, который отображает напряжение на выходе устройства.

Верхняя сторона платы

На нижней стороне платыу нас размещен контроллер заряда (U2) и три диода Шоттки (U3, U4, U5).

Нижняя сторона платы

Основной принцип работы схемы и переключения с основного на резервное питание зависит от трех диодов Шоттки U3, U4, U5.
Ниже представлена нагляднаясхема направления и какие узлы в каких ситуациях находятся под напряжением.


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

Розовым цветом показана ситуация, когда у нас присутствует напряжение во входной сети (Vin). В этом случае диоды U3 и U4 пропускают напряжение в направлении контроллера заряда (U2) и DC/DC-преобразователя (U1). При этом напряжение из АКБ и контроллера заряда (голубой маршрут) не поступает в розовую сеть через диоды U4 и U5.

U5 работает таким образом, что пока входное напряжение присутствует, на его катоде будет +, он будет в закрытом состоянии и не выпуститнапряжение из АКБ в направлении Vout, а также не пропустит напряжение из входной сети. Если же, напряжениена входе пропало U5тут же перейдет в свое рабочее состояние и пропуститнапряжение с АКБ в сторону DC/DC-преобразователя (U1) зеленый маршрут. Однако чтобы исключить петлю когда напряжение из АКБ попадает на вход модуля заряда, а также может утекать в источник питания на входе, мы используем диод U3 и пока на его катоде будет +, он будет закрыт.

Платы, полученные от jlcpcb как всегда отличные, здесь на самом деле придраться не к чему настоящее промышленное производство за очень гуманную плату. Срок изготовления 3-4 дня, срок доставки до Ленинградской области в районе 20 дней.


Распаиваем, проверяем


Печатаем корпус, собираем устройство и вот что у нас получилось




Проверка устройства под нагрузкой


Теперь, когда устройство собрано и мы знаем как оно работает, нам нужно запомнить, что мы можем от него питать. Самое главное это помнить какие токи потребления может обеспечить данное устройство. В схеме я использую преобразователь на 3А. Ток разряда АКБ 18650, как правило, равен двух-кратной величине ёмкости (если не рассматриваем высокотоковые). Таким образом при использовании аккумулятором емкостью 2000 mA, они способны отдавать ток до 4А.
Однако стоит помнить, что если мы на DC/DC-преобразователе увеличили выходное напряжение вдвое, например питаем оборудование от 24В током 1А, тоток до преобразователя также увеличитсявдвое и АКБ будут отдавать заряд током 2А.

Соответсвенно лучшезапомнитьтакую закономерность:
  • 12В 3А
  • 24В 1.5А
  • 48В 0.75А

Проводим нагрузочный тест и определяем время автономной работы
В UPS установлены АКБ GoPower на 2000 мА. Выходное напряжение 12В.К UPS подключено 3 устройства hEX PoE к которому, в свою очередь, через PoE-out подключены CSS106-5G-1S и951Ui-2HnD. Трафик в сети, на момент отключения входного питания продолжает бегать.

Итого суммарное потребление всех устройств составило порядка 0.55-0.65А (менялось в процессе измерений).CSS106-5G-1S 185мА,951Ui-2HnD 280мА плюс собственное потребление hEX. До отключения данная сборкапроработала 2 часа 15 минут, при этом остаточное напряжение на трех аккумуляторах составило 6.5В. Сильнее разрядить не получилось, сработала защита от глубокого разряда на модуле 3S. Температура аккумуляторов не изменилась, что говорит о несущественной нагрузке в процессе разряда.

Вывод


Таким образом я получил небольшое устройство, способное эффективно питать несколько роутеров при наличии PoE-out, ав случае отсутствия возможность разместить UPS непосредственно возле устройства и при этом при минимальных затратах.

Надеюсь данная статья будет полезна и вам!

Материалы из статьи
Макет схемы, печатной платы в формате DipTrace, а корпус в STL для печати на 3D-принтере

Подробнее..

Плавка металлов за 9 минут в микроволновке и другие интересные штуки обзор ТОП7 самоделок еще одна

07.06.2021 14:15:24 | Автор: admin

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

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

Автор статьи также является многолетним владельцем микроволновой печи, впрочем, как и достаточно большое число людей в России (рискнем сделать такое смелое предположение).

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

На написание такой статьи автора подтолкнуло то, что его микроволновая печь стала подавать явственные признаки, что конец её близок. В нашем случае, это заключается не в выходе из строя электронной части, а скорее в физическом износе самой камеры нагрева: износилось лакокрасочное покрытие, ввиду чего, есть риск получить пищу, с кусочками краски в её составе (Ммм вкуснотишша! Всё, как мы любим! Sarcasm mode: off).

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

Итак начнем!


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

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

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

Судя по анализу этого блогера, показанное в рассматриваемом ролике не совсем соответствует реальности :-).

Но автор статьи решил пойти дальше, так как не планировал поджаривать соседей микроволновой пушкой.

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

Кстати если интересно, можно ознакомиться с устройством типичного трансформатора микроволновки:

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

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

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

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


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

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


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

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

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

Работа печей для плавления базируется на 2 различающихся способах:

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

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

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

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

image

image

image

Для получения настоящего культурного удовольствия и изучения того, что в мире делается по этому направлению, рекомендуется поиск по сайту www.pinterest.com, по ключевым словам: microwave melting glass, microwave fusing glass, microwave fusing.

Если вы всерьез заинтересовались этим занятием, то на известном сайте имеются наборы начинающего.

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

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

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

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

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

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

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

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

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

Если например, рассмотренная выше технология по плавлению в микроволновке занимает по времени в среднем (от закладки до расплава) около 8-9 минут, то способ плавления металлов с использованием муфельной плавильной печи только для разогрева печи требует не менее 30-40 минут, с соответствующими энергозатратами. И это мы ещё не учитываем тот момент, что печь должна быть доставлена с Aliexpress, и она в своём комплекте содержит тигель с достаточно малым сроком наработки на отказ.

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

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

Или же в этих видео:


Единственной проблемой при таком подходе, на взгляд автора, является то, что при литье по выплавляемой модели, требуется предварительно выплавить данную модель из подготовленных для литья форм. Даже если мы используем для предварительной 3D печати легкоплавкий пластик PLA, его удаление из готовой формы может стать определенной проблемой. А именно, потребуется достаточно высокая температура, чтобы выплавить его или даже выжечь из такой формы.

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

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

Однако сама вероятность создания металлических изделий с использованием 3D принтера и имеющейся в наличии микроволновки, является весьма примечательной и достойной внимательного рассмотрения!

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

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

Примечание. Температура плавления силикатного стекла составляет в райне 425 600C. Выше температуры плавления стекло становится жидкостью. Температура плавления металла, например, бронзы составляет в районе 950C.
Таким образом, зная температуру плавления металла, который вы используете и снимая показания температуры с помощью термопары (например), возможно плавить только стекло и не доводить до плавления металл. И стекло заполнит все нужные места в металле, а сам металл не повредится!


Бонус


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

Кроме того, в её составе были использованы следующие компоненты: плата Arduino Pro Mini, аккумулятор на 12 вольт, твердотельное реле, емкостной датчик, подключенный к рукоятке и сканер отпечатка пальца. Всё это было помещено в компактный корпус в форме молота (Мьёльнир-а), принадлежащего Богу грома Тору (согласно Вселенной Марвел).

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

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

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

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

Также, в настоящее время возможно упростить конструкцию молота, если взять вместо платы Arduino pro mini плату esp32: она содержит сенсорные пины, к которым можно подключить металлические площадки на рукоятке молота (предусмотрительно размещенные ранее). И вести обработку события отпустить молот исключительно логическим путём (если площадка 1 удерживается и по площадке 2 в этот момент два раза постучали пальцем то отпустить молот и т.д.). В таком случае, самоделка будет еще привлекательней, так как пропадет существенный демаскирующий признак сканер отпечатка пальца.
Как можно видеть из всего этого длинного рассказа, микроволновка, это не только средство для приготовления и разогрева пищи, но и неисчерпаемый кладезь компонентов, которые позволят вам создать свои экспериментальные и даже вполне полезные вещи.

Для некоторых из этих неординарных применений, даже не требуется каких-либо её переделок!

Что же касается самого автора рассказа, то в списке его предпочтений, так сказать, личного хит-парада, первое место прочно занимает методика плавки металла в микроволновке.

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

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

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


Подробнее..

Миниатюрный датчик качества воздуха на батарейке с 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?)

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


Подробнее..

MIDI браслет для управления синтезаторами (в основном для органично звучащего вибрато)

15.04.2021 00:12:17 | Автор: admin

Для нетерпеливых - ссылка на видео с демонстрацией и полным контентом поста в конце

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

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

Не удивительно, что на рынке полно устройств, которые преобразовывают это усилие в язык музыки. Первый это Roli Seaboard, мультиполифоническая MIDI-клавиатура которая позволяет сопоставлять жесты со звуковыми параметрами. Другая схожая интерпретация этой идеи это Хакен Континуум. Оба эти варианта поставляются с премиальным ценником, и по моему мнению - заслужено.

Следующий пример чуть мене комплексный. Genki Waves, насколько я понимаю, состоит в основном из кольца, которое может управлять программным обеспечением. Но сайт позволяет приобрести модуль eurorack и midi-адаптер 5din, что делает этот сетап вполне универсальным.

Другой вариант, если существует необходимость управлять железными синтезаторами Enhancia Neova ring. Полный комплект состоит из кольца, станции с современными 3,5 - мм MIDI входом и выходом и программного обеспечения для точной интерпретации жестов.

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

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

План состоит в использовании двух плат esp32. Один-как наручный сервер, собирающий данные с акселерометра и преобразующий их в сообщения об изменении высоты тона и модуляции. Я привяжу тангаж к бендам и крен к модуляции. Кроме того, поскольку на борту модуля MPU6050 есть встроенный гироскоп, для бендов я также буду собирать информацию о горизонтальном смещении, поскольку оно также отображает это интуитивное движение. Три потенциометра будут контролировать чувствительность каждой оси к соответствующему параметру. Литиевая батарея будет поддерживать беспроводную работу устройства с помощью модуля управления зарядкой. Этот конкретный модуль поддерживает все средства защиты и не имеет никаких ограничений по минимальному току, что, наконец, отправило платы на базе tp4056 для меня в отставку. В таком случае у меня будет возможность подключить свой компьютер к наручному блоку для управления программными синтезаторами с, я надеюсь, низкой задержкой. Для управления любыми железными блоками я также построю стационарный хаб, который сможет конвертировать беспроводные BLEMIDI сообщения в аппаратные MIDI сообщения для взаимодействия с аппаратными синтезаторами. Для этого хаба я выбрал контроллер с OLED-экраном и с помощью поворотного энкодера смогу переназначить бенды и модуляцию как любую другую MIDI CC команду для управления громкостью, панорамированием, позиции уэйвтейбла и всем тем, что конкретный синтезатор сможет изменить на лету. Я не могу собрать простую сквозную схему, она неизбежно повредит данные, это должна быть полноценная смешивающая схема. Я также добавлю 2 CV-выхода для взаимодействия с модульным и полумодульным оборудованием.

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

Со стороны станции я припаял аппаратные MIDI входы и выходы и операционные усилители для усиления сигналов от ЦАПОВ до уровней CV, идущих на выходы 3,5 мм. Входящие BT-сообщения могут быть реорганизованы как любое MIDI СС-сообщение идущее через любой канал чтобы управлять несколькими синтезаторами одновременно, или переключаться между ними.

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

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

После отключения всех остальных беспроводных соединений на моем компьютере, включая Wi-Fi, задержка сократилась, и проблема отключения стала менее частой. Это привело меня к выводу, что слабым звеном в этой цепочке являются беспроводные возможности моего компьютера. Поскольку мой конкретный аудиоинтерфейс не имеет MIDI-портов, я схватил Arduino Due и быстренько собрал USB-MIDI-интерфейс, чтобы иметь возможность сопряжать устройство со станцией, подключать станцию к интерфейсу миди-кабелем, подключать интерфейс к ПК и получать MIDI-сообщения таким образом. И проблема отваливания от блютуз исчезла.

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

Поскольку прямое BT подключение к моему компьютеру немного медленное, и я все равно скован использованием MIDI-USB интерфейса, вместо того чтобы читать значения, преобразовывать их в BT midi и отправлять медленные BT MIDI сообщения для отправки обычных MIDI, я решил полностью лишить сообщения универсального протокола и отправлять необработанные значения и преобразовывать их на принимающем конце в MIDI, уменьшая количество шагов и объем отправляемых данных. Для этого я использовал протокол ESPNOW, который без каких-либо махинаций с рукопожатиями при наличии только mac-адреса может отправлять только 3 байта данных на устройство, которое ожидает только 3 байта данных. Я удалил все куски кода с подтверждением передачи, чтобы уменьшить задержку. И все заработало безупречно.

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

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

В основном энергопотребление. Текущая установка убивает относительно жирную батарейку через полчаса. Именно по этой причине на всех кадрах был шнур, это не связь, это просто для питания. И проблема даже не в емкости, а в возможностях токоотдачи этой батареи примерно на 3,5 В она просто перестает быть способной питать прожорливый BT/WIFI чип. Это заставляет меня поменять аппаратное обеспечение и перепроектировать все с нуля.

Поскольку лучшая прошивка с точки зрения задержки использовала прямую передачу пакетов, не будучи завернутой в очень специфический протокол, я решил использовать модули nrf24l01+, которые очень похожи в этом отношении. Это означает, что я могу соединить этот модуль с DUE, которая раньше был просто MIDI USB интерфейсом, и использовать его в качестве хаба, который и делает все - прием данных, аппаратное midi, USB midi, CV-напряжение, реорганизацию сообщений и т. Д.

В качестве передатчика у меня было 2 варианта Pro Micro и STM32 blue pill. Второй вариант не только менее энергозатратен, но и имеет гораздо большее разрешение на входах АЦП, что позволит избежать потенциальных резких рывков при изменении уровня эффекта. Не говоря уже о том, насколько большими вычислительными способностями он обладает.

Таким образом, сетап меняется от сложного чтения данных об ускорении, обертывания этих данных в протокол BLE MIDI, отправки BLE MIDI, преобразования в MIDI и преобразования из MIDI в USB MIDI к гораздо более простому чтения данных об ускорении, отправки этих необработанных данных, а затем простого преобразования их в USB MIDI. И как всем известно, простое решение это надежное решение.

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

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

Так что в конце дня у меня было 3 версии одного и того же устройства. BT версия полезна в том случае, когда требуется только подключение к ПК. Будучи по своей сути BT сервером при переключении между ПК и хабом, я должен вручную прерывать соединение и каждый раз устанавливать новое. Поэтому, поскольку я не использую свой компьютер в качестве центра управления железными синтами (не то, чтобы мой аудиоинтерфейс это поддерживает) мне не хочется продолжать реализацию конкретно этой версии. Однако существует открытый проект умных часов, в которые встроен акселерометр. Сенсорный экран должен быть способен вместить в себя все меню, переключать каналы, номера CC сообщений и чувствительность и позволять хранить множество пресетов. Будучи проектом на базе ESP32, перенос проекта не должен вызвать много проблем, если когда-нибудь я заполучу его в свои руки. Я чувствую себя обязанным подчеркнуть, что я протестировал более одного модуля ESP32, и задержка колеблется от юзабельной до невыносимой, и я понятия не имею, как будет вести себя этот конкретный блок. Задержка также коррелировала с энергопотреблением более медленный модуль был способен жить от батареи гораздо дольше, разряжая ее должным образом.

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

Тем более, что текущая рабочая версия, основанная на DUE и STM32, обеспечивает наилучший баланс между задержкой (она в принципе существует только в контексте версии ESPNOW) и простотой. Энергопотребление очень низкое и я не смог разрядить батарею во время тестирования. Станция поддерживает как USB, так и аппаратный MIDI одновременно, без необходимости ручного подключения, мне просто нужно щелкнуть переключатель и подать питание. Эту версию все еще можно сделать намного меньше, но в данный момент это не принципиально. Что можно поменять, так это железо. Либо поставить более мощную версию NRF24 в хаб, либо перенести весь проект на LORA.

Cсылка на видео (с демонстрацией игры)

Код

Подробнее..

Котовий брызгатрон или боевая турель против кота _

25.04.2021 20:19:15 | Автор: admin

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

Предыстория: у меня есть пожилая мать, которая живет в другом городе. И лечит свои недуги с помощью алоэ. Метод хорошо помогает - и она постоянно сажает новые ростки, взамен потраченных. У нее проживают 2 представителя хвостатой фауны: Кузя и Марек (кот и кошечка). Почему кошечка стала вдруг "Мареком" - долгая история. Вкратце обозначим причину как "потому что так сложились звезды". То бишь, сделаем допущение, что Cat cat = new Cat ("Марек");

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

Однако, они относятся как то так:

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

Была рассмотрена дажа масса инженерных подходов. Но они не годятся по причине: дороговизны и сложности. Или закрытия флоры от лучей солнца.

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

  • ардуино нано;

  • инфракрасные датчики движения (хорошая, кстати, штука - угол зрения до 100 градусов, дальность видения 2-3 метра);

  • мосфет транзистор.

Ну, дальше уже и так понятно - поэтому на этом всё. Расходимся...

Ладно, ладно - шутеечка... Продолжаем...

Для незнающих (что очень вряд ли, на Хабре, но тем не менее) поясню:

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

  • датчики движения - видят перемещения тепловых объектов,

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

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

Но, электроника без корпуса - ничто. Моделируем в 3d и печатаем корпус:

Начинаем сборку с самого низа: пропускаем телефонные провода (да, да взял именно их - ибо дешево и длинные) в корпус и фиксируем болтиками (под них предварительно были заложены каналы, в которых потом вручную, метчиком - нарезана резьба м3х0,5):

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

Присоединяем мосфет к питанию. Стараемся соединять аккуратно, с использованием термоусадки - иначе коты заругают ^_^

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

...устанавливаем "мосх" - то бишь ардуино нано:

Монтируем на место крышку. И теперь НИКТО не в курсе-как оно устроено (LOL):

Загружаем программу и усиленно машем руками перед датчиками. Ишь ты! Работат!

Наступает главный момент: ради чего это всё: мы создаем зону запрета доступа для кота. А именно, согласно вики:

"Одним из самых популярных терминов в критериях оценок является понятие anti-access/area-denial или сокращенно A2/AD, которым обозначается территория, где вооруженные силы не смогут действовать в полной мере из-за того, что их войска оказываются в уязвимом положении для средств поражения армии".

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

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

В качестве бака для воды был взят бачок от "копейки" (ВАЗ 2101).

P.S. Ноги - мои. Отличные - правда? LOL.

А вот так, выглядит эта штука при свете дня:

Далее, эта система будет втыкаться в землю под алоэ и "контролировать окрестности". Эдакое "антикотовое ПВО".

На днях система уедет "благодарной аудитории". Надеюсь, они оценят...

Продемонстрировать в работе пока не могу - т.к. под рукой нет котов.

Но буду вести наблюдение и дам знать, "когда-что".

Теперь ряд примечаний:

  1. Если будете строить нечто подобное - мосфет надо брать "с логическим уровнем"- то есть, чтобы он открывался от 3-5 вольт;

  2. Как выяснилось, датчики категорически не приемлют светлые оттенки пластика (просто постоянно стоят во "включенном" состоянии). Пришлось перепечатать нижнюю часть корпуса - черным ABS - пластиком. С ним всё работает хорошо:

А теперь, самое главное - если кому понадобится, делюсь файлами.

Скетч для Arduino IDE:

int sensor1 = 2 ;// пин инфракрасного сенсора 1int sensor2 = 3; // пин инфракрасного сенсора 2int mosfet = 10; // пин силового мосфета, который включает насосboolean isSensorStarted = false; // сработал ли хоть какой то датчикboolean isMotorStarted = false; // запущен ли в данный момент двигательboolean catStatusMessage = false; // вывод сообщения о текущем статусе котаboolean isFirstMessage = true; // вывод первого сообщенияboolean firstStart = true; //пауза только при первом старте системы (даёт возможность загрузиться)volatile uint32_t startTime = 0; //время в миллисекундах, когда стартовал двигательvolatile uint32_t workingTime = 3000; //время в миллисекундах, которое будет работать двигательvoid setup (){  Serial.begin(9600);  pinMode (sensor1, INPUT) ; // пин датчика работает как вход  pinMode (sensor2, INPUT) ; // пин датчика работает как вход  pinMode (mosfet, OUTPUT) ;// пин мосфета работает как выход  attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);  attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);}void loop (){  while (isSensorStarted)  {      if (firstStart) //пауза при первом старте системы, после включения питания - даёт системе загрузиться и датчикам-прийти в состояние LOW        {          detachInterrupt(sensor1);          detachInterrupt(sensor2);          while ( (digitalRead(sensor1)==HIGH) || (digitalRead(sensor2)==HIGH) )          {            //ничего не делаем-ждем, пока не появится сигнал LOW          }          firstStart = false;          isSensorStarted  = false;          Serial.println ("Стартуем");          isFirstMessage = false;                     attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);          attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);          break;                              }         if (catStatusMessage)     {        Serial.println ("Агонь па кату!!! :-)");         catStatusMessage = false;          }     detachInterrupt(sensor1);     detachInterrupt(sensor2);        digitalWrite(mosfet, HIGH);     startTime = millis(); //записали время старта двигателя         isMotorStarted = true;     Serial.println ("Двигатель запущен!");              while (isSensorStarted)     {        if (isMotorStarted)        {          if (millis()-startTime >= workingTime)          {             isMotorStarted=false;            digitalWrite(mosfet, LOW);            Serial.println ("Двигатель остановлен!");          }                  }            if ( (digitalRead(sensor1)==LOW) && (digitalRead(sensor2)==LOW) )         {           attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);           attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);            isSensorStarted = false;         }     }  } if (!isFirstMessage) {    if (!catStatusMessage)       {         Serial.println ("Кота что то нету...:-(");         catStatusMessage = true;             }   }     }void sensor_impulse () {  if (!isSensorStarted)  {     isSensorStarted = true;  }}

Скачать файлы для 3d печати можно по этой ссылке.

На этом всё - доклад закончил.

Подробнее..

Ненормативная схемотехника ATmega8 кто сказал, что выше головы не прыгнешь?

30.04.2021 12:16:20 | Автор: admin
Вот уж несколько лет, как я увлёкся микроконтроллерами, а именно семейством AVR. Ещё на этапе освоения Ардуино (в этот момент часть аудитории поплевались и ушли читать другие статьи) я пытался выдавить из неё больше, чем задумано. Меня всегда больше интересовали нестандартные решения обычных задач. Сейчас я знаю об AVR намного больше, чем ещё пару лет назад, и всё больше убеждаюсь, что знаю очень мало.

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

Но это не наш метод. Я с самого начала хотел именно ATmega8, как самую доступную и самую дешёвую (в том числе в дип-корпусе). Всё то же самое можно и на ATmega48, но её попробуй ещё найди, разве что у Вас в ящике стола валяется их много с незапамятных времён.
Посмотрим на картинку, известную всем, кто недавно интересуется AVR.

Глядя на неё, легко посчитать, что мы можем задействовать на часовой индикатор 20 ножек, ещё на двух у нас будет кварц (куда от него денешься, внутреннее тактирование не прокатит, нам ведь от часов нужна точность какая-никакая). Ну и сброс. На четыре семисегментных индикатора нужно 28 ног, ну даже 27, ведь десятки часов можно отображать цифрами 1 и 2, а ноль не отображать. Ещё когда идея только зарождалась, я это количество сократил до 22 ножек, ведь для отображения десятков часов можно обойтись цифрой 1, и оба её сегмента зажигать от одной ноги контроллера. Но как ни крути, пары ног мне всё же не хватало, даже при том что я давно знал о возможности использования как ввода-вывода ножки Reset, но так ещё ни разу и не попробовал (если не считать ATtiny13, её не так жалко было), ведь параллельного программатора у меня нет, а любая отладка это минимум несколько итераций прошивки, вряд ли всё идеально выйдет с первого раза. Так и лежал этот замысел в закромах мозга, и ждал своего времени, пока как-то мне не пришла в голову ещё одна интересная идея.
Посмотрел я однажды на светодиодную ленту (120 светодиодов на метр) и понял, что можно легко и просто сделать электронные часы любого размера с её использованием. Просто нарезаем сегменты желаемой длины и наклеиваем их на подходящее основание, для больших размеров сегмент может складываться из двух и более лент по ширине. В моём случае отрезаем сегменты по шесть светиков, таким образом длина сегмента составляет 50 мм, высота цифры 100, для моей задумки офисных часов вполне достаточно.

Но вот незадача, напряжение питания ленты 12 вольт, а AVR хочет не больше 5 вольт (люди утверждают, что и 8 вольт выдерживают, но я проверять пока не буду, да и не поможет). То есть нужно ставить 22 ключа для включения всех сегментов. Если применить драйвер ULN2003, хватит (почти) трёх штук, это копейки, но, как я писал выше, это не наш метод, хотя этот вариант можно приберечь для часов побольше. Ну никак это не вписывается в концепцию голая Атмега.
И вот тут-то начинается самое интересное. Напряжение питания ленты 12 вольт, первые признаки жизни белые светодиоды (три штуки последовательно) начинают подавать при более чем 7.5 вольт, и, что очень важно, до этого напряжения ток через ленту практически равен нулю (можете проверить). На ножке контроллера, работающей в режиме выхода, может быть уровень 0 вольт или 5 вольт (третий вариант рассмотрим позже), и если подключить сегмент анодом к +12 вольт, а катодом к выходу контроллера, напряжение на сегменте будет равняться соответственно 12 вольт (светит) или 7 вольт (не светит). Даже если бы через погасший сегмент протекал мизерный ток, он ушёл бы к плюсу питания контроллера через защитный диод, которые в AVR гораздо более выносливые, чем нас пугали в обучающих статьях. Третий вариант ножка в режиме входа, напряжение на сегменте 7 вольт благодаря защитному диоду, стало быть сегмент не светит. Конечно, как только я обдумал всё это в теории, сразу же проверил на практике, залив в контроллер простой блинк для одной из ног.

А так как сейчас в силу некоторых обстоятельств мои возможности для экспериментов слегка ограничены, напряжение питания для сегмента случайно оказалось более 18 вольт, и сегмент гас не полностью, так что я успел разочаровано подумать, что подпалил выход. Когда уменьшил напряжение (на тот момент даже нечем было померить), всё стало на свои места, так что, благодаря нелепой случайности, теперь я точно знаю, что для схемы не смертельно небольшое повышение напряжения выше 12 вольт. С напряжением определились, а что с током? На моей ленте (и скорей всего на вашей тоже) стоят резисторы по 150 ом, ток через сегмент не более 20 мА, только сегмент в данном случае это три светика, а каждый сегмент моих часов состоят из двух сегментов ленты, так что 40 мА. Вроде даже вписываемся в даташит, но на 20 выходов это уже 800 мА, что намного выше дозволенных 200 мА на корпус. Ток через ленту очень зависит от напряжения на ней, и нелинейно падает даже при небольшом снижении, что является большим минусом при обычном использовании ленты, и плюсом в данном случае, ведь реальное напряжение на сегментах равно 12 вольт минус падение на ключе (около 0.6 вольт), а ещё при желании можно снизить напряжение питания, понизив тем самым яркость часов. Так что страшные 800 мА несложно снизить раза в два. В любом случае, я был уверен, что это не станет проблемой, да и приобретённый опыт ценнее, чем возможность потери одной Атмеги. Вот так просто ATmega8 коммутирует индикатор с напряжением в два с лишним раза выше, чем её собственное напряжение питания. Именно это я имел ввиду в заголовке статьи. Хотя способ совсем не нов, по такому же принципу работает советская микросхема К155ИД1 высоковольтный дешифратор управления газоразрядными индикаторами, где сравнительно низковольтные выходы (до 60 вольт) коммутировали индикаторы с напряжением зажигания 150 вольт и выше.

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

Аноды к +5 вольт через один на всех резистор, для отладки прошивки этого за глаза. Первоначально я остановился на варианте использования в качестве двух недостающих ног пинов подключения кварца (итого 22 выхода), а тактировать контроллер от внешнего генератора минутных импульсов через (внимание!)

вход сброса. Это ещё один занимательный лайфхак, который описан здесь Как сохранять переменные arduino, при reset
Можете попробовать залить в Ардуино простой код и посмотреть результат работы в Мониторе порта, периодически сбрасывая её кнопкой или с клавиатуры:
пробник
#define NO_INIT __attribute__((section(".noinit")))void setup() {    static unsigned NO_INIT nonInitCounter;    nonInitCounter=nonInitCounter+2048;    Serial.begin(9600);    Serial.print("Setup counter: ");    Serial.println(nonInitCounter);}void loop(){}

Не буду приводить свой код, дабы не подвергаться критике лишний раз (я не самый лучший
программист), но если в двух словах, можно создать глобальную переменную, которая сохраняется при перезагрузке контроллера. Раз в минуту под воздействием внешнего импульса сброса Атмега перезагружается, и начинает заново отрабатывать прошивку: считывает переменную, преобразует её в показания часов и минут, выводит на индикатор, увеличивает переменную на одну минуту. Дальше опять сброс, и всё по-новой. Пришлось порыться в интернете и опробовать два вида программного сброса, ведь внешнего генератора у меня пока не было, а жмакать сброс всё время вручную не сильно удобно.
пример функции
void softReset() {  //программный сброс //http://kazus.ru/forums/showthread.php?t=13540&page=3#  asm volatile ("rjmp 0x0000");//Sketch uses 2412 bytes  //программный сброс //https://www.cyberforum.ru/post11307314.html  //((void(*)(void))0)();//Sketch uses 2416 bytes}

Что интересно, эта переменная может сохраняться даже после отключения питания (не всегда). И это не EEPROM, если кто подумал. По мере отладки я пришёл к использованию нескольких таких переменных.
Кто-то скажет: какой внешний генератор, а как же концепция голой Атмеги? На момент опытов я был уверен, что в качестве генератора выступит некая козявка размером с рисинку и ценой в пару копеек. Но когда всё заработало в теории и пришло время с козявкой определиться, меня ждал облом. Единственное, что меня могло бы устроить, это старая добрая К176ИЕ12, кто бы мог подумать! На дворе двадцать первый век, а в природе нет простого доступного аппаратного генератора минутных импульсов.
Не беда, подумал я. Можно и раз в секунду. Немного переписал код, проверил работу, отлично. Но опять же, для внешнего генератора я нашёл только DS1307 (и её аналоги). Да, стоит копейки, для обвязки достаточно кварца (и ещё несколько необязательных элементов). Вот только чтобы она генерировала секундные импульсы, ей нужно подать команду по шине I2C. Чем подать? И какую? (Теперь я уже знаю, но на тот момент не было с чем пробовать). Короче, не подходит. Ладно, последняя надежда. Некоторые западные часы 90-х тактировались частотой сети 50 гц. Возможно, сейчас у нас частота стабильней, чем была 30 лет назад. Попробовал сымитировать работает. Если бы воплотил в жизнь, было бы оригинально контроллер, перезагружающийся 100 раз в секунду. Но я пока отмёл этот вариант и стал искать другие.
Итак, я мог использовать 22 выхода (что мне достаточно) и пин сброса в качестве входа. Но не срослось Вернёмся к варианту с кварцем. Минус две ноги на кварц получаем 20, даже если ножку сброса сделать портом ввода-вывода, получим 21, всё равно не хватает одного, хоть ты тресни! Но недавно я нашёл способ, о котором задумывался ещё два года назад, что-то не получилось тогда. У нас есть пин AREF для опорного напряжения, относительно которого происходят аналоговые измерения. И на этот пин мы можем программно подать напряжение питания в качестве опорного или встроенное опорное напряжение 2.56 (для ATmega8). Проверил, измерил, действительно можно получить на ножке AREF напряжение 0 вольт, 2.56 вольт, или 5 вольт.
превращаем AREF в ещё один выход
// превращаем AREF в ещё один выходvoid setup() {}void loop() {  ADMUX = 7 + 64; // уровень 1 (5 вольт) // 7-номер аналогового входа//почему 7 аналоговый вход? А потому что физически у Атмеги входы от 0 до 5,//и назначение аналоговым входом входа 7 не помешает работе остальных в качестве выходов  delay(3000);  ADMUX = 7 + 64 + 128; // уровень 2.56 вольт // 7-номер аналогового входа  delay(3000);  ADMUX = 7; // уровень 0  delay(3000);}

Нюанс: это если замерять относительно общего провода. Если мерить относительно +5 вольт, во всех трёх случаях получаем ноль. То есть нагрузку можно подключить между AREF и общим. Экспериментально установил, что можно получить ток до 20 мА при 2.56 вольт на ноге и до 40 мА при 5 вольт на ноге, этого вполне достаточно, чтоб зажечь светодиод, к примеру. Вот он, заветный двадцать второй выход! Конечно, напрямую управлять двенадцативольтовым сегментом не получится, нужен транзистор. Под руку попался легендарный КТ315, сколько лет я к нему не прикасался, как по мне, это одно из лучших произведений советской электроники, наряду с микрухой К155ЛА3. Когда-то я КТ315 и КТ361 даже в качестве ключей импульсного трансформатора питания применял, при напряжении порядка 60 вольт, и неоднократно. Здесь же нагрузка для него плёвая, и я принципиально даже резистор в базу не поставлю (20 мА вполне себе допустимый ток базы).
Ну что ж, думал я, 22 выхода есть, отлажу код с 21 выходом, а 22-й на ножке сброса оставлю напоследок, когда всё остальное уже заработало. Ещё ведь и кнопки установки времени нужно куда-то приткнуть, а ног не осталось вовсе. Если б Атмега была в SMD-корпусе, можно было бы воспользоваться входами А6 и А7, выходами они всё равно не умеют. Но у меня корпус DIP, так что такой роскоши позволить себе не могу. Зато ведь можно выходы сделать входами, правда, в это время придётся погасить индикацию, но для опроса кнопок достаточно нескольких миллисекунд, никто и не заметит (как я ошибался!). Значит, перевожу ножки кнопок в режим входов, подтягиваем программно к питанию, и ждём пару миллисекунд. Если в это время какая-то из кнопок замкнута на минус, ждём ещё 20 миллисекунд, убеждаемся, что кнопка всё ещё нажата, и производим соответствующее действие в программе. Кнопки: минуты плюс, минуты минус, часы плюс, коррекция плюс. Коррекция подстройка значения секунд раз в сутки в зависимости от суточного ухода показаний. Всё заработало почти с первого раза. Нюанс: при замкнутой кнопке сегмент, подключенный к той же ножке, оказывается включён, такой вот побочный эффект, что поделать. Поэтому кнопки изменения минут подключаю к выводам контроллера, которые управляют сегментами единиц часов, а кнопки изменения часов подключаю к выводам контроллера, которые управляют сегментами единиц минут. Выставляя минуты, совсем не обращаешь внимания, что с показаниями часов что-то не так, и наоборот.
Ну вот всё и получилось в макете с семисегментными индикаторами. Но параллельно я пытался накопать информации по поводу применения ноги сброса в качестве порта ввода-вывода. А там всё довольно туманно и неопределённо. Основное, что об этом пишут: 1 выход с открытым коллектором (не точно), 2 выход чрезвычайно слаботочный (тоже не наверняка). Даже если использовать внешний транзистор, нужно точно знать, открытый коллектор (сток) или нет, ведь тогда состояние выхода нужно инвертировать. А перепрошить я уже не смогу. В общем, опять двадцать пять! Вернее, двадцать один. Двадцать один гарантированный выход вместо 22. Опять одного не хватает. Опять я мечусь в поисках решения.
Возвращаюсь к AREF. Я могу получить три разных уровня на нём. Значит можно зажечь один сегмент, или два одновременно, или ни одного. Я обратился к своей же прошлой публикации (как давно это было!):Ненормативная схемотехника: семисегментный индикатор на ATtiny13
Чтобы попробовать использовать решение с совместным включением двух сегментов. Перебирая возможные пары сегментов, и осознавая, что подобное усложнение портит всю картину, я внезапно додумался, что для цифры десятков минут поле поиска значительно сужается цифра ведь может быть только от 0 до 5. И тут пришло озарение:

во всех этих цифрах сегменты А и D или вместе светятся, или вместе погашены! Не нужно никаких трёх состояний, достаточно просто соединить сегменты А и D вместе и подключить к одному выходу. И теперь 21 выхода хватит всем. Довожу код, проверяю на макетке с семисегментным индикатором, бинго!
Всё, пора делать финальный вариант. Нарезаю светодиодную ленту, наклеиваю сегменты на подходящее основание, которым оказался кусок пластиковой вагонки (примерно 150х350 для цифр высотой 100). К каждому сегменту нужно подвести +12 вольт и проводник от соответствующего выхода контроллера.

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

Сегменты цифр разведены по контроллеру именно в таком порядке для упрощения кода.
Первая цифра (единица, напоминаю) состоит из цельного куска ленты длиной 10 см. Подключаю 5 вольт питания контроллера и 12 вольт питания индикации, включаю. Вот он, торжественный момент, всё красиво светится, часики работают. Кстати, на КДПВ в начале статьи в качестве светофильтра на индикаторах лежит лист обычной бумаги для принтера, яркости хватает с избытком.
Мне не очень нравится американская система отображения времени, когда часы дважды в сутки считают до двенадцати. Я применил свою: с нуля часов до 19, и затем 8, 9, 10, 11. А с учётом того, что часы офисные, в 8 вечера их редко кто увидит.

В такие моменты ощущаешь некоторое разочарование, что прям вот так сразу заработало, даже как-то неинтересно. Поначалу я упорно не хотел замечать некое мерцание индикаторов, пока мне на него не указали коллеги. В макете этого мерцания не было видно совсем, а тут прям бросается в глаза. Выше я писал, что при опросе кнопок после перевода ножек в режим ввода сделана пауза в пару миллисекунд, без этой паузы остаточный потенциал на ножке воспринимался как нажатие. Так вот тих двух миллисекунд, в течение которых индикаторы потушены, оказалось достаточно для мерцания индикации. И это при том, что опрос происходит два раза в секунду. То есть глаз замечает двухмиллисекундную паузу дважды в секунду, чего я никак не ожидал. Было подозрение, что вследствие переходных процессов контроллер каждый раз перепроверяет, действительно ли нажаты кнопки (а это по 20 мсек на каждую). Я внёс некоторые изменения в код, временно отключив все лишние функции, но подозрения не подтвердились. В результате помогли следующие изменения: для опроса кнопок перевожу те выходы, которые задействованы под кнопки, в высокий уровень, тем самым погасив соответствующие сегменты, только после этого перевожу те же ножки в режим входа. Таким образом от паузы в 2 мсек можно избавиться совсем, но я оставил на всякий случай 300 микросекунд, проблема исчезла полностью.
Что мы имеем в итоге? Ножка сброса контроллера работает по прямому назначению и используется только при заливке прошивки, ножки кварца подключены к кварцу, как и положено. Двадцать ног работают как порты ввода-вывода, и нога AREF управляет ключевым транзистором, как раз на него и навешена цифра десятков часов (1). Ещё четыре ножки питания, никто не отлынивает, все ноги задействованы. По поводу кварца: я всерьёз рассматривал вариант применения часового кварцевого резонатора на 32768 Гц (считал его более точным), но отказался от идеи, побороздив интернет. Оказывается, запустить Атмегу с часовым кварцем не так-то просто и нет никаких гарантий работоспособности, а плюсов от применения не особо. Экономичность нас не интересует в данном случае, основное потребление индикация. С точностью тоже всё неопределённо. А суточный уход вполне компенсируется программно. Зато большим плюсом является простота подключения, кварц на 8 или 16 МГц без проблем работает даже без конденсаторов. В результате вся схема состоит (если не считать индикаторы и питание) из Атмеги, кварцевого резонатора, и транзистора, припаянных прямо к панельке. Питание контроллера обеспечивается малогабаритным стабилизатором из серии 7805, ток через него мизерный, но на всякий случай я припаял его теплоотводом к кусочку оцинковки примерно 30х30 мм. В целом же часы питаются от внешнего блока питания на 12 вольт, который, по сути, дороже всех комплектующих. Фактический ток потребления часов 560 мА при показаниях часов 18-08 (это максимальное количество сегментов, которые можно засветить одновременно), получается около 28 мА на сегмент. Это при напряжении питания часов 11.7 вольт, ещё 0.3 вольта падает на диоде, включенном для защиты от неправильного подключения и чтоб немного снизить напряжение и ток соответственно. Падение на выходных ключах Атмеги около 0.56 вольт. Все токовые режимы превышены, но Атмега справляется, честь и хвала творцам! Запаса яркости избыточно, напряжение питания можно ещё снижать. Если тактировать Атмегу от внутреннего генератора, то можно ножки кварца отдать индикатору, а время считывать по I2C с DS1307. Опять же будут заняты все ноги, но зато питание часов можно будет отключать хоть на неделю, а время продолжит тикать. Хотя точность DS1307 совсем не радует, и по моему опыту, и по отзывам в интернете. Зато на ней есть дополнительный выход с открытым коллектором, которому можно дать команду мигать с частотой 1 Гц, и навесить на него разделительную точку. В моих часах разделительных точек пока нет, можно разрезать ту же ленту на отдельные светодиоды и подключить постоянно к напряжению питания. Мигать не будет, но я думаю над этим. Может, кто подскажет, как выжать ещё каплю из Атмеги?
И, напоследок, код для тех, кто захочет повторить. Компилировал и прошивал в ArduinoIDE. Я не программер, так что примите как есть, если кто предложит лучше, с удовольствием выложу.
Особо чувствительным не смотреть
Я предупреждал
bool Flag;uint8_t TimS;uint16_t TimH = 12; // время при включении 12-34uint16_t TimH_;uint16_t TimM = 34;uint16_t TimH0;uint16_t TimH1;uint16_t TimM0;uint16_t TimM1;uint16_t TimKorr = 7; // коррекия по умолчанию 7 - это 0 секунд, если 0 - это -28 сек, если 14 - это +28 сек// массив для цифрint semisegm_[10] = {B01011111, B00000110, B01101011, B01100111, B00110110, B01110101, B01111101, B00000111, B01111111, B01110111};void setup() {                                                         //  PORTB = 0;  PORTC = 0;  PORTD = 0;  // инициализация Timer1  cli();  // отключить глобальные прерывания  TCCR1A = 0;   // установить регистр в 0  TCCR1B = 0;   // установить регистр в 0  // Таймер переполняeтся каждые 65535 отсчетов при коэффициенте деления 1024 или за 4,194с  OCR1A = 62499; // установка регистра совпадения (4 секунд)  TCCR1B |= (1 << WGM12);  // включить CTC режим > сброс таймера по совпадению  TCCR1B |= (1 << CS10);   // Установить биты CS10 CS12 на коэффициент деления 1024  TCCR1B |= (1 << CS12);  TIMSK |= (1 << OCIE1A);  // для ATMEGA8  sei(); // включить глобальные прерывания}   void loop() {  if (TimM > 59) {    TimM = 0;    TimH++;    Flag = 0;  }  if (TimH > 23)TimH = 0;  if (TimM < 0) {    TimM = 59;  }  if (TimH == 0) {    if (TimM == 0) {      if (TimS == 7) {        if (Flag == 0) {          TimS = TimKorr;          Flag = 1;        }      }    }  }  TimH_ = TimH;  if (TimH > 19)TimH_ = TimH - 12;  TimH0 = TimH_ / 10;  TimH1 = TimH_ % 10;  TimM0 = TimM / 10;  TimM1 = TimM % 10;  Led(TimH0, TimH1, TimM0, TimM1);  Key();}// функция индикацииvoid Led(uint16_t TimH0, uint16_t TimH1, uint16_t TimM0, uint16_t TimM1) {  DDRB = semisegm_[TimM1];  DDRC = semisegm_[TimM0];  DDRD = semisegm_[TimH1];  bitWrite(DDRD, 7, bitRead(semisegm_[TimM1], 6));  ADMUX = 199 * TimH0; // уровень 2.56 на AREF  PORTB = 0;  PORTC = 0;  PORTD = 0;  delay(500); // полсекунды просто отображаем время}// функция опроса кнопокvoid Key() {  bitWrite(PORTB, 2, 1);  bitWrite(PORTD, 2, 1);  bitWrite(PORTD, 1, 1);  bitWrite(PORTD, 0, 1);  bitWrite(DDRB, 2, 0);  bitWrite(DDRD, 2, 0);  bitWrite(DDRD, 1, 0);  bitWrite(DDRD, 0, 0);  delayMicroseconds(300);   if (bit_is_clear(PINB, 2)) {      delay(20);    if (bit_is_clear(PINB, 2)) {      TimH++;    }  }  if (bit_is_clear(PIND, 1)) {    delay(20);    if (bit_is_clear(PIND, 1)) {      TimM++;    }  }  if (bit_is_clear(PIND, 0)) {    delay(20);    if (bit_is_clear(PIND, 0)) {      TimM--;    }  }  if (bit_is_clear(PIND, 2)) {    delay(20);    if (bit_is_clear(PIND, 2)) {      TimKorr++;      if (TimKorr > 14)TimKorr = 0;      Led(0, 8, TimKorr / 10, TimKorr % 10);      delay(500);    }  }}ISR(TIMER1_COMPA_vect) // Выполняем 1 раз в 4 секунды.{  TimS++;  if (TimS > 14) {    TimM++;    TimS = 0;  }}


Подробнее..

Использование бюджетных JTAG-отладчиков в PlatformIO

09.05.2021 16:23:04 | Автор: admin

В этом туториале я хотел бы рассказать о том, как использовать ультрабюджетные JTAG-отладчики CJMCU FT232H и RV-Debugger-Lite в PlatformIO для прошивки и отладки устройств на платформах ESP32 и GD32. Полноценной инструкции на просторах интернета я не нашел, и в процессе настройки столкнулся со многими проблемами, поэтому этот туториал появляется здесь для вашего удобства. Оговорюсь сразу, что настройка прописана для Linux, но для Windows принципиальной разницы нет за исключением танцев с Zadig.

CJMCU FT232H + ESR32 Rev1 aka ESP32Dev

Имеется в виду вот этот дебаггер на основе чипа FT232H:

И вот эта плата на основе ESP-WROOM-32:

Настройки platformio.ini:

[env:esp32dev]platform = espressif32framework = arduinoboard = esp32devmonitor_speed = 115200upload_speed = 921600debug_tool = minimoduleupload_protocol = minimodule

Здесь у нас CJMCU FT232H за 700 рублей будет прикидываться отладчиком FT2232H MINI MODULE за 4500. Для этого необходимо внести следующие изменения в файл (закомментированные мной строки начинаются с ##):

/home/<username>/.platformio/packages/tool-openocd-esp32/share/openocd/scripts/interface/ftdi/minimodule.cfg

## FTDI MiniModule## http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf#interface ftdi##ftdi_device_desc "FT2232H MiniModule"##ftdi_vid_pid 0x0403 0x6010ftdi_vid_pid 0x0403 0x6014# Every pin set as high impedance except TCK, TDI, TDO and TMSftdi_layout_init 0x0008 0x000b# nSRST defined on pin CN2-13 of the MiniModule (pin ADBUS5 [AD5] on the FT2232H chip)# This choice is arbitrary. Use other GPIO pin if desired.##ftdi_layout_signal nSRST -data 0x0020 -oe 0x0020## added# interface 1 is the uartftdi_channel 0reset_config none

Немаловажно закомментировать описание отладчика minimodule"ftdi_device_desc", иначеCJMCU FT232H не получит прав доступа. В том же файле мы меняем пару VID/PID, и ее же прописываем в:

/etc/udev/rules.d/99-platformio-udev.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6014",GROUP="plugdev", MODE="0666"

чтобы отладчик определялся.

Подключение следующее:

Функция JTAG

CJMCU FT232H

ESP32Dev

TDO

AD2

GPIO15

TDI

AD1

GPIO12

TCK

AD0

GPIO13

TMS

AD3

GPIO14

+3.3V

3V3

GND

GND

CJMCU FT232H + Sipeed Longan Nano

Имеется в виду вот такая вот плата на основе чипа GD32VF103CBT6:

Настройки platformio.ini:

[env:sipeed-longan-nano]platform = gd32vframework = gd32vf103-sdkboard = sipeed-longan-nanomonitor_speed = 115200debug_tool = um232hupload_protocol = um232h

Здесь у нас CJMCU FT232H будет прикидываться отладчиком UM232H за 2000 рублей. Для этого необходимо внести следующие изменения в файл:

/home/<username>/.platformio/packages/tool-openocd-gd32v/share/openocd/scripts/interface/ftdi/um232h.cfg

## FTDI UM232H as a JTAG interface## http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#UM232H## This should also work with a UM232H-B, but that has not been tested.# Note that UM232H and UM232H-B are 3.3V only.#interface ftdi#ftdi_device_desc "UM232H"ftdi_vid_pid 0x0403 0x6014##ftdi_layout_init 0xfff8 0xfffb##ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100##ftdi_layout_signal nSRST -data 0x0200 -oe 0x0200# interface 1 is the uartftdi_channel 0# just TCK TDI TDO TMS, no resetftdi_layout_init 0x0008 0x000b#ftdi_layout_init 0x0c08 0x0f1breset_config none

Здесь у нас чип совпадает, поэтому только закомментируем ftdi_device_desc, и не забываем внести описанные ранее изменения в 99-platformio-udev.rules.

Возможно вам придется поставить недостающую библиотеку libhidapi-hidraw0:

sudo apt-get install -y libhidapi-hidraw0

Подключение следующее:

Функция JTAG

CJMCU FT232H

Sipeed Longan Nano

TDO

AD2

JTDO

TDI

AD1

JTDI

TCK

AD0

JTCK

TMS

AD3

JTMS

+3.3V

3V3

GND

GND

RV-Debugger-Lite + Sipeed Longan Nano

И напоследок я хочу описать, как использовать ультрабюджетный отладчик RV-Debugger-Lite за 200 рублей.

Настройки platformio.ini:

[env:sipeed-longan-nano]platform = gd32vframework = gd32vf103-sdkboard = sipeed-longan-nanomonitor_speed = 115200debug_tool = sipeed-rv-debuggerupload_protocol = sipeed-rv-debugger

Здесь мы будем прикидываться его старшим братом Sipeed RV-Debugger. Сейчас его в продаже нет, но, если мне не изменяет память, он стоил в пределах 1000 рублей. Для этого мы редактируем файл:

/home/<username>/.platformio/packages/tool-openocd-gd32v/share/openocd/scripts/interface/ftdi/sipeed-rv-debugger.cfg

interface ftdi##ftdi_device_desc "Dual RS232"ftdi_vid_pid 0x0403 0x6010#autoexit true#interface cmsis-daptransport select jtagftdi_layout_init 0x0008 0x001bftdi_layout_signal nSRST -oe 0x0020 -data 0x0020

Здесь мы только комментируем ftdi_device_desc, так как чип почти совпадает: у RV-Debugger FT2232D, а у RV-Debugger-Lite определяется как FT2232C, хотя на самом деле он CH552T. Пара VID/PID у них совпадает.

Подключение следующее:

Функция JTAG

RV-Debugger-Lite

Sipeed Longan Nano

TDO

TDO

JTDO

TDI

TDI

JTDI

TCK

TCK

JTCK

TMS

TMS

JTMS

3V3

3V3

GND

GND

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

Литература

PIO (platformio) JTAG FT232H ESP32

Бюджетный отладчик к ESP-32 и его настройка

Debugging Longan Nano

Подробнее..

Перевод Arduino Nano RP2040 Connect обзор ардуинки с WiFi и BLE на борту

08.06.2021 02:17:27 | Автор: admin

В середине мая мы писали о появлении новой платы от Arduino, которая получила название Arduino Nano RP2040 Connect. Ее основа чип RP2040 от Raspberry. В знакомую компоновку Nano весьма аккуратно интегрирован модуль связи Wi-Fi Nina W102 uBlox, который обеспечивает работу 2,4 ГГц Wi-Fi, Bluetooth с низким энергопотреблением, плюс есть гироскоп (IMU), способный обнаруживать движения и жесты, и микрофон.

Нужна ли вашему проекту такая плата? Как всегда, это зависит от потребностей и бюджета. Если нужны только светодиоды и базовая функциональность без беспроводной связи, хватит возможностей Raspberry Pi Pico. Если проект имеет отношение к IoT, да еще нужен веб-интерфейс, то Arduino Nano RP2040 Connect как раз то, что нужно. Правда, с оговорками, о которых поговорим ниже.

Характеристики платы


Плата


Nano RP2040 Connect


SKU: ABX00053


Микроконтроллер


Raspberry Pi RP2040


USB коннектор


Micro USB A


Пины


Встроенный LED


13


Цифровые I/O пины


20


Аналоговые Input-пины


8


Аналоговые Output-пины


0


PWM pins


20


External interrupts


20


Беспроводная связь


Bluetooth


Nina W102 uBlox module


Wi-Fi


Nina W102 uBlox module


Безопасность


ATECC608A-MAHDA-T Crypto IC


Communication


UART


Да


I2C


Да


SPI


Да


Питание


Circuit operating voltage


3.3V


Board Power Supply (USB/VIN)


5V/5-21V


Поддержка батарей


N/A


Коннектор для батареи


N/A


DC Current per I/O pin


4 мA


Частота


Процессор


133 МГц


RTC


N/A


Память


AT25SF128A-MHB-T


16MB Flash IC


Nina W102 uBlox module


448 КБ ROM, 520 КБ SRAM, 16 МБ Flash


Размеры


Масса


6 г


Ширина


43.18 мм


Длина


17.78 мм



Дизайн и использование Arduino Nano RP2040 Connect



Что касается дизайна, то он базируется на Arduino Nano, включая Nano 33 IoT и Nano Every. У всех этих плат аналогичная распиновка, так что при необходимости более старые и менее функциональные системы можно заменять на Arduino Nano RP2040 Connect. Плату можно распаивать на другой плате.

Из 22 GPIO-пинов 20 можно использовать для ШИМ. У платы 8 аналоговых входов. Что касается I2C пинов, то это A4 и A5. Доступ к встроенному гироскопу реализуется как раз через l2C шину.

К сожалению, вместо USB-С, который постепенно становится стандартом, система оснащена micro-USB. Эта плата одна из самых дорогих в модельном ряду систем с чипом RP2040, поэтому производители могли бы и оснастить ее USB-C без удорожания. Но, как видим, не оснастили.


Наиболее заметной возможностью Arduino Nano RP2040 Connect является беспроводная связь, о чем уже говорилось выше. Ее наличие обеспечивается чипом Nina W102 с 802.11 b/g/n 2.4 ГГц Wi-Fi и Bluetooth 4.2. Антенна расположена с противоположной стороны от USB-порта. Чип бесплатной связи собой мощный микроконтроллер с 520 КБ SRAM и двухъядерным 240 МГц 32-битным процессором Xtensa LX6. На этой плате он отвечает лишь за связь.

Поскольку это Arduino, то выбор IDE прост это Arduino IDE. Недавнее обновление, добавившее поддержку чипа RP2040, делает работу простой и приятной. Мы протестировали Arduino Nano RP2040 Connect с Arduino 1.8.15 и 2.0 beta 7 IDE и все заработало без проблем. Тест, конечно, проводился с модулем связи. Для получения доступа к WiFi понадобилось установить библиотеку WiFiNINA, а затем создать файл с данными доступа. Для теста запустили Simple Web Server WiFi, и он без проблем заработал. Правда, для управления платой через интерфейс нужно было изменить вывод GPIO, используемый по умолчанию, с 9 на LED_BUILTIN.

Детали подключения должны были появиться во встроенном мониторе последовательного интерфейса (Serial monitor). К сожалению, поначалу с этим возникла проблема постоянно появлялась ошибка с сообщением о том, что порт занят. Единственный способ решить проблему в этом случае закрыть Arduino IDE и использовать иное решение. В итоге мы разобрались: оказалось, что проблема связана с нашей операционной системой Ubuntu 18.04, пришлось удалить modemmanager, чтобы увидеть последовательные данные порта.

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


Возникали и другие проблемы, включая работу с сервисом Arduino IoT Cloud, причем мы пытались изучать официальную документацию по плате, но она была далеко неполной. Это огромный недостаток, поскольку IoT Cloud новый сервис, позволяющий создавать различные проекты интернета вещей, контролируя их через веб-интерфейс. Вероятно, разработчики постараются исправить недостатки, но пока порекомендуем использовать обычные IDE.


Вероятно, вы рассчитываете на возможность работы с другими языками программирования, раз уж это плата на основе RP2040? Все верно. Можно работать с CircuitPython и MicroPython, правда, потребуется создать собственные библиотеки для микрофона, гироскопа и WiFi. Проблема в разной распиновки. Так, контакт, который используется в IDE Arduino для вывода это, скажем D2. В RP2040 это уже GPIO25. Другой пример встроенный светодиод D13, который при работе с MicroPython оказался GPIO 6.

С CircuitPython все оказалось гораздо проще. Благодаря большому количество библиотек и в особенности библиотеке ESP32SPI нам удалось вывести Arduino Nano RP2040 Connect в онлайн и добиться получения данных от удаленного API.

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

Юзкейсы для Arduino Nano RP2040 Connect


Наиболее очевидное применение платы IoT-проекты. При помощи IoT Cloud есть возможность оперативно создавать приложения с графическим интерфейсом для снятия данных с удаленного устройства. Так, можно создать метеостанцию с помощью Arduino Nano RP2040 Connect и передавать данные в реальном времени в облако. А уже доступ к облаку можно получить с любого устройства, подключенного к Интернету.

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

Но и без IoT Cloud кейсов достаточно много. Даже с традиционной IDE и новыми библиотеками для HTTP, MQTT и Bluetooth без проблем можно работать с телеуправляемыми роботами, IoT-устройствами и т.п.

В сухом остатке


Здесь главное, вероятно цена, которая составляет 22 евро. Если нужен WiFi и чип RP2040, значит, Arduino Nano RP2040 Connect вполне подходит. Стоит учитывать, что это, в целом, неплохая плата, но она дороже любого другого решения на основе того же чипа, включая Raspberry Pi Pico и Pimoroni Pico Wireless. Существенный недостаток недоработанная документация, которая не соответствует стандартам Arduino.

Если бы не этот фактор, то плату можно было бы рекомендовать в качестве универсального решения. Есть и альтернатива Seeed RP2040, у которой тоже есть WiFi, и которая, как ожидается, будет в два раза дешевле Arduino Nano RP2040 Connect.

Подробнее..

Перетягивание диода или устраиваем соревнование между CANNY 3 TINY PRO и Arduino

08.06.2021 02:17:27 | Автор: admin
Arduino vs CANNY перетягивание диодаArduino vs CANNY перетягивание диода

В предыдущей статье, посвящённой моим попыткам погрузится в увлекательный мир программирования микроконтроллеров, я грозился сделать обзор на "обновку". К сожалению, мне сейчас не хватает навыков и времени чтобы сделать, что-то достойное полноценного обзора. Однако, я всё-таки решил подготовить забавы ради, короткую статью на тему игрушечного соревнования CANNY 3 TINY PRO и неоригинальной Arduino Nano. Соревноваться контроллеры будут в своеобразном аналоге перетягивания каната, на роль которого был выбран двухцветный светодиод марки BL-L2519EGW.

Итак в сегодняшнем материале мы подключим оба контроллера к светодиоду и будем подавать случайный сигнал на его выводы. Правила простые кто большее напряжение подаст у того и кристалл в светодиоде загорится ярче. Попутно мы воспользуемся ЦАП на контроллере CANNY и доработаем стандартный ГСЧ с помощью составного функционального блока.

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

Оглавление:

  1. Введение

  2. Схема

  3. Программа

  4. Заключение

Введение

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

Для того, чтобы повторить "дуэль века" вам потребуется:

  1. Двухцветный светодиод - я использовал BL-L2519EGW, но марка не особо критична.

  2. Контроллер CANNY 3 TINY PRO именно у этого контроллера есть ЦАП, к тому же он самый доступный по цене в линейке контроллеров CANNY.

  3. Совместимый с Arduino контроллер - я использовал неоригинальную Nano, но можно было и UNO.

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

  5. Соединительные провода и макетная плата.

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

Предвосхищая некоторую критику, сразу скажу, что само собой раз контролеры Кэнни стоят в "Дакаровских" Камазах, наверное и CANNY 3 TINY PRO явно предназначен для чего-то большего, чем просто моргать светодиодом. Собственно Arduino Nano тоже может намного больше. Просто я ничего сложнее в этот раз собрать не смог, а поделится впечатлением хотелось.

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

Другие статьи цикла

Схема

Схема соединенийСхема соединений

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

Первым делом объединим "Землю" у двух контроллеров соединив выводы "GND".

Затем, от каждого из контроллеров "подведем" к светодиоду выводы от канала ЦАП.
У Arduino - "D5", у CANNY - "C2" (это единственный выход с ЦАП).
В нашем случае светодиод имеет два вывода и работает он примерно так: если на левой ноге напряжение больше, чем на правой то загорается красный кристалл. Чем больше разница потенциалов, тем ярче он загорится. И наоборот, если на правой ноге напряжение больше, чем на левой, то загорится зеленый. При примерном равенстве потенциалов светодиод вообще не будет светится.

Мы будем "перетягивать канат" 2.5 секунды, нам важно, чтобы контроллеры подали сигнал более-менее синхронно. Для этого (а также для нашей тренировки) контроллеры подадут друг другу сигналы. Выход "D7" Arduino подаст логическую единицу на вход "C6" CANNY. В свою очередь, CANNY с выхода "C4" подаст логическую единицу на вход "D3" Arduino. В программе каждого из контроллеров предусмотрим проверку наличия сигнала, при успешном прохождении которой подается напряжение на светодиод.

Для того, чтобы узнать какое напряжение подали оба контроллера, мы с помощью АЦП CANNY померим напряжение поданное Arduino. Для этого подсоединим выход "C10" CANNY к резистору.

Кстати лично я очень рад что у Canny 3 TINY PRO для того, чтобы включить режим АЦП канала не нужно паять перемычку, как в случае с обычным CANNY 3 TINY.

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

Фото схемыФото схемы

Я правда использовал специальные резисторы из набора, но в остальном схема как на картинке.

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

Перейдем к программной части.

Программа

Обе программы можно скачать с GitHub.

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

/*Synhronized Randomize DAC.See more http://personeltest.ru/aways/habr.com/ru/post/561148/*/int ADC_pin = 5;int input_pin = 3;int output_pin = 7;int synch_signa = 0;int v_min = 10;int v_max = 2550;int synch_signal = 0;float rand_voltage = 0;// the setup function runs once when you press reset or power the boardvoid setup() {  pinMode(ADC_pin, OUTPUT);  pinMode(output_pin, OUTPUT);  digitalWrite(output_pin,HIGH);  pinMode(input_pin, INPUT);  Serial.begin(9600);}// the loop function runs over and over again forevervoid loop() {synch_signal = digitalRead(input_pin);      // read signal from another deviceif (synch_signal) { rand_voltage=random(v_min, v_max) / 10; analogWrite(ADC_pin, rand_voltage); Serial.println(rand_voltage);  delay(2500);   // wait for seconds}else{ delay(500);   // wait for seconds}                }

Программа для контроллера CANNY:

Функциональная диаграммаФункциональная диаграмма
  • При включении контроллер устанавливает на выходе "С4" логическую "1" для синхронизации с Arduino.

  • Канал "C10" в режиме АЦП измеряет напряжение от Arduinio и с помощью функции MAP переводит его в удобный для чтения вид.

  • ШИМ-генератор в сочетании с детектором переднего фронта раз в 2.5 секунды дают сигнал для записи случайного значения в канал "C2".

    • Значение при этом запишется, только если на входе "С6" есть логическая "1" от Arduino.

    • Значение напряжения для подачи на светодиод генерируется случайным образом. Поскольку у CANNY нет встроенного блока для сброса ГСЦ, "случайность" сигнала обеспечивается, сложением "истории" сигналов, поступивших от Arduino.

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

  • Значения напряжений на выводах светодиода от обоих контроллеров передается в виртуальный COM-порт ПК. Данный порт мы можем мониторить в любой программе, например в Hterm, но я для простоты решил использовать Arduino IDE.

    • Чтобы не "заморачиваться" с лишними символами, напряжение контроллеров выводится без точки, например, "c=45" значит, что напряжение на выводе ЦАП CANNY = 4.5В, соответственно "a=27" значит, что на ЦАП выводе Arduino = 2.7В.

Рассмотрим составной блок "Random (min...max)":

Составной блокСоставной блок

В данном блоге мы используем встроенный ГСЧ и функцию MAP для того чтобы выводить не просто числа от 0 до 65000, а в нужном нам диапазоне. Данный блок можно использовать, как библиотечный элемент и повторно использовать в других схемах. Более подробно о том, как работать с составными функциональными блоками, я писал в этой статье.

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

Заключение

Если вы все собрали верно, то получится примерно такой результат:

Различные варианты поданного на СИД напряженияРазличные варианты поданного на СИД напряжения

Слева направо:

  1. У контроллеров ничья, напряжение примерно равно.

  2. CANNY немножко выигрывает.

  3. CANNY ощутимо выигрывает.

  4. Arduino ощутимо выигрывает.

Пример вывода данных из монитора COM-порта (несвязанный с картинкой выше):

Монитор COM-портаМонитор COM-порта

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

Ну и еще под конец хочу сказать, что чертовски любопытно иногда погрузится в другую парадигму программирования. Я получил удовольствие, когда своими руками из функциональных блоков собрал простенький аналог функции "Random". Сейчас подумываю сделать еще несколько "библиотечных" элементов реализующих распространенные функции, которых порой не хватает среди готовых блоков CANNY и набросать об этом статью.

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

Подробнее..

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 (чип, на основе которого работает жучок) поддерживает аппаратные прерывания в спящем режиме. Устройство можно перевести в спящий режим, и любое поступившее от датчика молнии, событие заставит датчик реагировать. Спящий режим может значительно продлить срок службы батареи.

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

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

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

Recovery mode Светодиодный куб

09.04.2021 10:09:31 | Автор: admin

Электронное устройство, которое применяется в декоративных инсталляциях. Светодиодные кубы бываю размерами 3x3x3, 4x4x4, 5x5x5 и т.д. Изменяя скорость загорания и затухания светодиодов в кубе, мы создаём различные визуальные эффекты: бегущие огни, эквалайзер, 3d световая инсталляция.

Материал:

- плата для пайки или беспаечная плата

Инструменты:

- инструмент для снятия изоляции

- линейка или штангельциркуль

- паяльная станция

Электрокомпоненты

- arduino

- 64 светодиода

- соединительные провода

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

На рис. Представлена одна из сторон куба. Все четыре стороны соединяются по выводам плюсовой ножки светодиода в каждом ряду. В результате для всех ножек с полюсом + ,будет четыре вывода. В результате с помощью этих выводом можно управлять рядами светодиодов. Ножки с полюсом - соединяются между собой по вертикальным рядам куба. В результате мы получим 16 выводов, которые можно запитать на GND arduino.

Сборка модели.

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

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

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

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

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

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

Так необходимо проделать для трёх сторон. С каждой стороны должно быть не больше четырёх вертикальных рядов.

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

После этого, припаяем четвёртую сторону куба.

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

Минусы подключим к GND, а плюсы к пинам 8, 9, 10, 11 arduino. И напишем простую программу.которая поочередно посылает сигналы на ряды данного куба.

Процесс управления, а точнее, усложнения управления, можно воспользоваться сдвиговым регистром 74HС595. Данная микросхема способна управлять восемью светодиодами, т.е. может посылать сигналы на восемь выводов и при этом сама занимает три вывода на arduino. Если все шестнадцать выводов GND светодиодов подключить к двум регистрам, совместно с питанием плюсовых выводом, то можно регулировать свечение конкретного светодиода в кубе.

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

Пример программы по управлению светодиодами. Подключим 16 минусовых выводов на два регистра.
Четыре плюсовых вывода куба подключим к пинам 2,3, 4 и 5

Загрузим на плату программу, которая вызовет эффект бегущих огней в кубе.

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

Пример работы

Подробнее..

Recovery mode Подключение светодиодной матрицы 8x8 к arduino

17.04.2021 08:11:53 | Автор: admin

Для рассмотрения подключения использовалась матрица TC15-11.

Описание конструкции:

Контакты, помеченные как R - плюсовые, а контакты, помеченные как C - минусовые.
Для управления светодиодной матрицей данные контакты подключим к двум сдвиговым регистрам 74HC595.
Применил их так как они были под рукой (было бы что то другое под рукой применил бы это).
Схема регистра:

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

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

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

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

Подробнее..

Recovery mode Проект электронного мультитула QUARK

19.04.2021 06:22:01 | Автор: admin

Еще в 2018 наткнулся на довольно известный в своих кругах проект Пультоскоп. Если кратко, то это крайне примитивный осциллограф, построенный на arduino 328 серии. Учитывая его простоту, я его повторил за несколько часов на макетке и тут меня понесло... Но обо всем по порядку.

Итак. Повторенное устройство оказалось настолько нужным и удобным, что сама-собой возникла идея дополнить его базовыми функциями мультиметра, в том числе измеритель емкости конденсаторов и индуктивности катушек. В результате я начал работу над созданием идеального "под себя" устройства. Эмпирически прикинув функционал, который так или иначе задействую при проектировании своих устройств, я исключил ненужные мне функции и определил обязательные. В первую очередь, исходил из того, что в большинстве своем я не использую напряжения свыше 24 вольт и токи свыше 3 ампер. Обычно это низковольтное оборудование, IoT, ESP32, arduino и схожие по идеологии устройства. Соответственно и при измерении сопротивлений, емкостей и индуктивностей важна не столько точность, сколько понимание номинала и, желательно, автоматическое определение цветовой и кодовой маркировки. Обычно измерение этих параметров требуется при проектировании питающих схем устройств. Обязательна хотя бы минимальная проверка наличия данных на порту UART, а в идеале и их чтение. Здесь же я стал размышлять над формфактором устройства.

Собственно список того, к чему я пришел в итоге:

  • Вольтметр с точностью измерения не выше 0.01 вольта. Обычно достаточно даже десятых долей. При этом, обязательно необходимо отображение значений логических уровней для CMOS1.8, TTL и CMOS5.0 вольт.

  • Амперметр до 3 ампер с возможностью отображать график изменения значений.

  • Измерение номиналов пассивных элементов. Одна из наиболее необходимых для меня вещей, оказалась возможность на лету отображать цветовую и SMD маркировку деталей. То же самое при измерении индуктивности и емкости, за исключением цветовой маркировки. Разумеется автовыбор диапазонов.

  • Осциллограф обязателен. Как правило используется для измерения ШИМ сигналов, при проектировании питающих частей схем и при работе с данными для АЦП/ЦАП. Частоты как правило не выше 100кГц. Желательно что бы устройство само определяло триггер и настраивало масштаб графика.

  • UART логгер с автоопределением скорости.

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

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

Звучит слишком идеально, но это хотя бы обозначенная цель.

ПРОЕКТИРОВАНИЕ

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

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

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

Одна из последних тестовых версий плат, собранных на коленке:

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

А это уже первый заводской прототип:

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

Игла немного подпружинена и не дает поцарапать медь или лак на плате.

Косяков было не так много, все довольно легко смог исправить кинув "сполю", но пришлось отложить проектирование из-за нехватки времени. Собственно это позитивно сказалось на проекте, поскольку удалось много поработать с ESP32, на него я и перевел устройство. Попутно заменил старый, 0,96 дюймовый дисплей с разрешением 80x160, на 1,14 дюймовую матрицу 135*240 пикселей.

Должен сказать, что я не сторонник сенсорных кнопок, и в первой версии устройства у меня были физически нажимаемые 3 кнопки, но пришлось себе изменить. Шутки ради собрал прототип с 3-х контактным сенсорным интерфейсом и воткнул его в отпечатанный на 3D принтере корпус. Оказалось, что проще и быстрее не искать пальцем нужную кнопку, а банальными свайпами переходить в нужный режим. Сразу возник соблазн использовать встроенные в ESP32 пины емкостного сенсора, однако их чувствительности оказалось недостаточно для работы в корпусе. Потому пришлось перейти на использование букашек от ttp223. Из-за катастрофической нехватки пинов, три сенсора я подключил через резистивный делитель на один аналоговый вход. Еще один пришлось вешать на отдельный пин для реализации выхода из сна по прерыванию. С аналоговым входом, на котором висят 3 сенсора возникла неожиданная проблема. Оказалось, что при включении режима bluetooth или WiFi , некоторые пины не могут читать аналоговые данные. На практике, при подключении к смартфону, устройство просто переставало реагировать на сенсоры. И все бы ничего если бы я хотя бы мог переразвести, но функции были раскиданы по пинам с учетом их специфики, и получалось, что любой пин к которому можно подключить сенсоры, оказывался именно тем, который не мог работать при включении радиомодуля. Но интернеты, таки помогли.

Немного пораскинув мозгами, пришел к выводу, что вместо ACS712, лучше использовать INA219. Во-первых управление по I2С, во-вторых возможность измерять напряжение до 26 вольт. При измерении сопротивления, обычно используют коммутируемые резистивные делители для разных диапазонов, эта же функция необходима при измерении ёмкости конденсаторов. Вариант использовать ограниченное число пинов для коммутации резисторов такой себе, вместо этого я поставил цифровой потенциометр на 100К AD5245. Таких в устройстве два. Второй регулирует чувствительность ОУ на входе. Второй щуп перенес в разъем для зарядки TYPE-C и несколько видоизменил корпус.

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

Ниже небольшой видеообзор:

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

На сегодняшний день, у меня написан основной базис ПО. Пришлось повозиться с корпусом, зато смог максимально удешевить стоимость пресс-формы. Для понимания порядка цен, стоимость матрицы $5600, ресурс 300к отливок. Стоимость 1 отливки, включая заглушку на дисплей и подсветку рабочей зоны $1,53. Размеры ~120x22мм. Корпус цельнолитой из ABS с SoftTouch покрытием.

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

Подробнее..

Recovery mode Дисплей 1602 подключение к arduino

02.05.2021 10:10:12 | Автор: admin

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

Дисплеи под ардуиноДисплеи под ардуино

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

Рассмотрим процесс подключения дисплея 1602. У него шестнадцать выводов. Рассмотрим вариант подключения по четырёх битному параллельному интерфейсу.

Таблица обозначения подключений

Вывод

Обозначение

Пин на arduino

1

GND

GND

2

Vcc

5V

3

Vo

GND

4

RS

12

5

R/W

GND

6

E

10

7

DB0

8

DB1

9

DB2

10

DB3

11

DB4

5

12

DB5

4

13

DB6

3

14

DB7

2

15

Vcc

5V

16

GND

GND

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

Для теста возьмём пример из библиотеки LiquidCrystal.h - Hello World.

Подадим питание на arduino и загрузим программу.

Ниже представлен видеообзор подключения дисплея.

Лучшие схемы создаются во fritzing.

Подробнее..

Перевод Управление робототехникой в реальном времени с помощью языка Lean

09.05.2021 18:11:45 | Автор: admin

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


Главная цель Lean4 сделать Lean хорошим языком программирования, а не просто помощником по доказательствам. Синтаксис был переработан во многих отношениях, чтобы облегчить написание более широкого спектра программ. Был написан оптимизирующий компилятор, генерирующий эффективный код на языке C. Он обладает новой высокопроизводительной технологией управления памятью, помогающей избежать проблемных пауз во время работы, которые часто сопровождают такие инструменты (например сбор мусора), и при необходимости легко интегрируется с существующим кодом C/C++. В настоящее время Lean в значительной степени самодостаточный язык, который написан на самом языке Lean.

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

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

Мы начали с покупки двухколёсного робота за 90 долларов и стали проводить эксперименты с языком Lean. Мы проверили сгенерированный код на языке C и библиотеку времени выполнения и обнаружили, что код вполне переносим. К сожалению, предварительный выпуск библиотеки времени выполнения Lean содержит зависимости (например от библиотеки libgmp), и она слишком велика для контроллера робота на базе Arduino. К счастью, сгенерированный код легко запускается на компьютере Rasberry Pi.

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

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

fig:fig:

Затем мы транслировали код управления с языка C на язык Lean с помощью ручного, но довольно простого процесса. Версия Lean 4 в конечном счёте создаёт функциональные определения и обладает точностью, модульностью и композиционными преимуществами функционального программирования. Однако она имеет многофункциональный исходный язык, который позволяет использовать циклы for, мутабельные локальные переменные и структурированные операторы управления потоком, такие как break и continue. Внутри Lean4 использует сложный процесс анализа для автоматической и прозрачной реструктуризации кода в функциональное определение. Это снизило уровень усилий, необходимых для портирования с языка C на язык Lean.

Написанный нами код Lean доступен широкой публике на Github. Основная функция пошагового управления BalanceCar.update выполняется каждые 5мс. Для оценки ориентации робота по показаниям гироскопа и акселерометра (6 DoF IMU) используется фильтр Калмана. Контроллер PD принимает состояние ориентации в качестве входных данных и определяет скорость двигателя, таким образом замыкая контур управления.

После завершения портирования мы написали некоторый код на языке C, чтобы подключить код управления на языке Lean к последовательным API-интерфейсам Bluetooth, и опробовали его. Первоначальные результаты были занимательными, но не совсем правильными:

Это немного разочаровало, но такое случается в реальном программировании. Мы провели несколько тестов, внесли некоторые изменения, чтобы уменьшить задержку Bluetooth, и исправили в Lean-коде попутно обнаруженную ошибку. В итоге мы успешно создали работающего робота:

Как отмечалось ранее, это был всего лишь небольшой эксперимент для тестирования языка Lean в контроллере реального времени и работы, необходимой для ручного переноса кода с языка C на язык Lean. Мы ещё не проверили правильность контроллера (пока), но, когда у нас будет немного больше времени, мы планируем поработать над этим и интегрировать контроллеры на языке Lean в экосистему ROS, чтобы и другие люди могли опробовать его. У нас также есть более крупный проект, в котором языки Haskell и Lean, а также SMT-решатель используются совместно, чтобы создать проверенный декомпилятор от 64-разрядной версии с архитектурой x86 до LLVM. В будущем у нас будет больше информации об этом.

Вся работа, которую мы проделали для этого проекта, находится в открытом доступе, чтобы её могли попробовать выполнить те, кто в этом заинтересован. Мы намеренно использовали относительно недорогого робота, чтобы люди могли легко опробовать код. Так можно опробовать Lean лично или показать студентам, что вы можете писать реальные программы на этих языках. Если у вас есть какие-либо вопросы о проекте, вы можете пообщаться с нами на канале Lean Real-time Systems (Системы реального времени на языке Lean) сервиса Zulip.

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

Мы уже писали о том, как ML и компьютерное зрение используют на обогатительных фабриках, и если вы хотите научить роботов или машины видеть мир, принимать решения и действовать по ситуации, обратите внимание на наш курс "Machine Learning и Deep Learning" партнером которого является компания Nvidia.

Также можете взглянуть на профессию C++ разработчик, на котором можно прокачаться или освоить С++ с нуля. Приходите будет сложно, но интересно!

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

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

Приручение nRF пульта для ПК с потерянным приемником

10.05.2021 16:07:24 | Автор: admin

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

В далекой-далекой галактике...

Для начала, расскажу зачем мне вообще понадобился такой пульт. Будет много и длинно, кому это неинтересно, может сразу перейти к следующей главе. Дело, в том, что я все еще отношусь к той устаревшей модели людей, которые привыкли видеть компьютер центром всего мультимедиа в доме (как это было в середине 2000х) и хоть, теперь для каждой задачи уже давно есть свой гаджет, мне все равно так привычнее и удобнее. Поэтому фильмы я смотрю исключительно через ПК. У меня довольно древний 42' ЖК телевизор подключенный по HDMI, который я не вижу смысла менять на что-то новее. Если мне нужен большой экран - для этого у меня есть проектор и экран с диагональю в 2 метра (так же по HDMI к ПК). Но я уже давно на нем ничего не смотрел, он для чего-то такого эффектного, красивого, вроде Аватара, но что-то за последние пару лет я ничего такого интересного для себя не находил. А простые сериальчики можно глазеть и на экране поменьше, к чему эти огромные головы крупным планом? И вот, уже, наверное, лет 10 назад, попался мне первый пульт для ПК, шел он в комплекте к одной из материнок от ASUSа.

Он был маленький простой и удобный, и я тут же заценил, что больше не надо подрываться и нажимать кнопки на клавиатуре, чтобы поставить на паузу, прибавить громкость, увеличить скорость или мотнуть. Сейчас можно, конечно, использовать для этого Bluetooth клавиатуру или мышку, но я по прежнему вижу это менее удобным, чем использовать пульт. Клавиатура здоровая, на ней куча ненужных кнопок, ей не место на диване. Мышь надо по чему-то возить и еще высматривать там на экране курсор, а это бывает трудновато, когда курсор-то на экране, только вот на другом. А пульт просто взял в руку и нажал нужную кнопку, к которой уже привык и которую найдешь наощупь. Да можно еще поднять DLNA и использовать SmartTV, но там надо думать схавает ли телек этот формат, настраивать транскодинг, если нет (а транскодинг вообще зло, зачем так мучать видео). Поэтому, я очень долго использовал этот пульт (точнее не этот, это запасной, а тот который я использовал, уже слишком истерся и выглядит неприглядно, да, я не из тех людей, которые держат пульты в целлофане, в целлофане ощущения не те). И всем этот пульт был вроде хорош, но со временем мне стало не хватать на нем кнопок. И тогда я заказал с Али вот такой:

Его я использовал вместе с программой EventGhost для Windows, которая позволяет назначать на разные кнопки разные действия и поддерживает некоторые пульты, включая этот. Но вот был один недостаток - для того, чтобы этот пульт нормально работал внутри EventGhost и не делал больше ничего лишнего, для него нужно было поставить специальный драйвер, а драйвер этот был не подписан. Как известно Майкрософт это любит не очень и хоть и оставляет такую возможность, но приходится немного поплясать с бубном, перезагружаясь в тестовый режим, где этот драйвер надо ставить. При этом, во время крупных обновлений 10ки он зачастую слетал и приходилось проделывать это снова. Этот пульт служил мне еще несколько лет, но в какой-то момент, после очередного слета драйвера, мне это надоело и я решил попробовать что-то еще. Тогда я заказал с Али вот такое чудо:

Он уже работает на 2.4Ghz и не требует прицеливания, что конечно большой плюс, а вот минусом было то, что для него не было уже какого-то специального драйвера, который позволил бы мне назначить на каждую его кнопку именно те комбинации клавиш, которые мне нужны. Т.е. я конечно мог назначить на кнопку "домой" какое-то действие в EventGhost и оно выполнялось, но помимо этого кнопка "домой" срабатывала еще и как кнопка "домой" и открывала мне браузер с домашней страницей. Я даже нашел какую-то программу, которая позволяла мне заблокировать прямое назначение некоторых кнопок, на которые у меня были назначены макросы в EventGhost и это улучшило картину. Но я все еще не мог назначить действие на кнопки с цифрами, иначе они выполнялись, когда я нажимал эти цифры на обычной клавиатуре, и заблокировать я их не мог по той же причине. Позже я нашел древнюю программу HidMacros которая могла вешать действия на клавиши с какого-то конкретного устройства, и она даже работала под 10кой, но че-то программ стало слишком много для такой простой задачи и я снова стал бояться, что с очередным обновлением что-то из этого отвалится. К этому времени я как раз увлекся Arduino и понял, что могу сделать, чтобы любой ИК пульт работал у меня, как пульт для ПК. Я снова вернулся к предыдущему пульту, но теперь он передавал сигнал в ИК-приемник Arduino, а тот в свою очередь отдавал команду в EventGhost через ком порт. Единственное, что после 2.4Ghz пульта, использовать снова ИК, которым надо хоть не много, но прицеливаться было шагом назад, но я смирился. И все шло себе тихо-мирно, но вдруг, внезапно, мне достались эти красавцы:

Посмотрев на них и на их набор кнопок, я понял, что хочу чтобы хоть один из этих ребят работал на меня. Я вставил батарейки и радостно начал нажимать кнопки, но на ИК приемник ничего не приходило. И вот тут я понял - они не ИК, они такие же, как и VONTAR на картинке выше, работают на 2.4Ghz и без приемника с ними делать нечего, а приемников от них то у меня и нет. Можно было, конечно, заказать такой же пульт с приемником на Али, но я уже предвидел какие проблемы меня ждут: я снова не смогу нормально назначать действия на кнопки, они будут эмулировать те клавиши которые в них зашиты и только их. Снова надо как-то хитро блокировать прямое назначение этих клавиш, снова все не просто Plug и не просто Play, опять какие-то трудности. А я не люблю, когда трудности. Я люблю когда ахренительно-невероятно-пипец, какие трудности. Поэтому я заказал для Ардуино модуль nRF24L01+ и раз уж нам подарили с барского плеча столько выходных на майские, а погода как-то не все дни обещает быть хорошей, я решил потратить часть этого времени, чтобы хакнуть протокол пультов!

Этап принюхивания

Итак, мой модуль nRF24L01+ пришел, я достал одну из Ардуино нано и был готов перехватывать пакеты!

Это не моя картинка, но подключал я по этой схеме на те же пины с поправкой на их другое расположение в наноЭто не моя картинка, но подключал я по этой схеме на те же пины с поправкой на их другое расположение в нано

Ну вот теперь я точно был готов к перехвату пакетов, но вот пакеты оказались не готовы быть перехваченными. Это было первое разочарование. Вообще модуль nRF24L01+ я брал наугад, типа тут 2.4Ghz, там 2.4Ghz, ну... давайте... работайте вместе как нибудь! Ну пожалуйста! Но, как выяснилось, протоколов этих очень много, те же модули WiFi работают на этих частотах, но пакеты от пульта получать в большинстве своем не могут. И если пульт шлет свои пакеты не по тому протоколу, по которому работает nRF24L01+, то тоже ничего не выйдет. Я понадеялся на удачу и для начала стал искать канал, на котором должны идти данные. Для этого я скачал какой-то нагугленный скетч в интернете, который смотрит на каких каналах есть сигналы. Как оказалось сигналы есть много на каких, но нажатия кнопок на пульте никак на них не влияет. Сигналов больше не становиться ни на одной из частот, а они хаотично появляются на разных частотах, не зависимо от того, нажимаю я что-то на пульте или нет. У nRF24L01+ есть 3 скорости 250Kbit, 1Mbit и 2Mbit. Ни на одной из них и ни на одном из каналов, я пульта не нашел, сколько бы не давил не его кнопки. "Ну что ж", сказал я себе, значит не судьба, и лег спать. Но на утро интерес снова проснулся, и я решил разобрать один пульт и посмотреть, что там все-таки за чип. К моей радости пульт, хоть и собран без единого винтика, но разобрался очень легко:

И что же я вижу на плате?

Именно! Там чип nRF24LE1G, внутри которого сидит nRF24L01. Значит все верно, и протокол тот. Но почему же, я не могу понять на какой частоте он работает? Пульт точно рабочий (когда я нажимаю кнопку, на нем моргает лампочка. А раз лампочка моргает - значит и пульт работает. И не говорите, мне что это не обязательно так!). Я потратил на это еще пару часов, но никаких результатов не добился и тогда я понял:

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

И я стал смотреть код и понял в чем причина. Модуль не умеет одновременно случать все частоты, поэтому код написан так, чтобы модуль постоянно переключался с одной частоты на другую слушая каждую по 128мкс. Но частот много, и получается, что те сигналы, которые генерит пульт, не успевают попадать под сканирование или попадают, но в очень малом объеме, не отличимом от общего шума. В результате я переписал скетч, чтобы частоты переключались вручную ('w' в COM порт - следующая, 's' - предыдущая), и о чудо! Уже на первом же канале, я увидел изменения при нажатии кнопок пульта. На втором канале, сигналов при нажатии стало еще больше, на 3м еще, а к 7му все прекратилось. Значит золотая середина - это канал номер 3, по нему и идут данные. Сканер, который получился в итоге выложил сюда:

https://github.com/CodeName33/NRFRemote/blob/main/NRF24Scanner.ino

Итак, пол дела сделано (я так думал), пульт работает по нужному протоколу и частота найдена, осталось только получать данные и использовать их! Как все просто в ожидании. Теперь реальность. Все не так! Как оказалось, nRF24L01 это не вай-фай и в нем нельзя сказать "получай все". Он требует задания скорости, канала и адреса, и без этого ничего получать не будет. Канал я уже знаю, осталось две переменные, скорость и адрес, и если первое можно подобрать (их всего три), то на подбор второго (адрес от 3х до 5 байт) уйдут всего лишь, миллиарды лет. Как хорошо, что они у меня, есть, погнали! (нет). Путем гугления выяснилось, что модуль можно немного обмануть. Адрес может быть от 3х до 5байт, но если передать ему, что длина адреса 2 байта, а само значение 0x55 или 0xAA, то можно таким образом получать все! В одном из случаев данные будут сдвинуты на 1 бит (в зависимости от того, как они передаются передатчиком). Ну что ж, начнем с адреса 0x55 и скорости в 2Mbit и к моему удивлению, это сработало с первого раза, я тут же стал получать кучу пакетов, а зажав кнопку на пульте, я заметил, что среди этих пакетов стали появляться пакеты с однотипным началом:

Естественно, я тут же поставил фильтр по этим 4 первым байтам и о чудо! Пакеты начали появляться, только при нажатии кнопок с пульта:

Успех был так близко, осталось только запомнить какие данные идут от каких кнопок и все решено, но вот тут возникла проблема. При нажатии на одну и ту же кнопку, каждый раз приходили разные данные, точнее если отсеять мусор в конце, я заметил 2 варианта и по началу я решил, что добавлю их оба, но позже, уже начав добавлять коды всех кнопок, я понял, что вариантов уже не 2, а 4. И добавлять на каждую кнопку все 4 варианта кодов было не круто. Да и вообще, не круто распознавать кнопку по данным сырого пакета, надо этот пакет хотя бы расшифровать. Возможно я в нем найду неизменные данные, по которым гораздо проще смогу определять, какая кнопка был нажата. И если формат самой секции данных в пакете знает только производитель пульта (HP), то формат пакета nRF24L01 секретом не является, вот он:

По этой схеме я и стал пытаться разобрать данные:

И все бы тут хорошо и адрес постоянный и доп адрес (5й байт адреса) меняется в зависимости от группы нажатой кнопки, но вот размер данных, я честно пытался взять его из чисел 13, 12, 159 и 130 извлекая 6 бит. Но выходил полный бред, 12 и 13 давали число 3, что явно слишком мало, а 159 - это 39, что явно нарушает все правила протокола, допускающего не более 32 байт данных. Притом, что данные внутри пакета дальше шли даже вроде и не плохо. Чертов Packet Control Header занимает именно 9 бит, и это значит, что все байты дальше надо сдвигать на 1 бит, что я и делал. И вроде все похоже. Но не совсем. Все равно на одну и ту же кнопку, я получал разные данные, странные данные, хотя часть из них выглядела очень правдоподобно. Но времени было уже около 3х ночи, и еще через 3 часа первые петухи начнут петь о том, какой я лошара, и мне нечего будет им ответить. Совсем нечего. На этом я плюнул, и лег спать. Утро вечера мудренее, я уже не раз в этом убеждался и решил, поверить этой пословице снова.

Этап вязки

Мое утро настало позже, чем я ожидал, но все таки подкинуло еще пару идей, я снова начал изучать эти цифры, пытаться крутить биты туда-сюда, понять что я упустил, но все подтверждало то, что у меня все было правильно, а картина все равно не сходилась. Я потратил еще пару часов и результат был нулевой. Черт, что же не так? Я же вроде не дурак? У меня даже справка есть! Мне её выдавали, когда я права менял. С тех пор не должно было ничего сильно измениться. Я еще раз понажимал две соседние кнопки на пульте и кажется начал кое-что понимать. Одна кнопка давала что-то типа последовательности 247 0 где-то в середине данных, другая 246 128 на тех же позициях. 247 и 246 это наверное коды кнопок, они рядом, логично, что соседние кнопки имеют отличие на кода единицу. Но вот следующий байт это 0 в одном случае и 128 в другом. Но ведь 0 это 00000000 по битам, а 128 это 10000000. Такое ощущения что эта единица заехала сюда зря, она из предыдущего байта. Но я точно все правильно смещаю, на 1 бит, как и должно быть, без смещения было еще хуже, было вообще 01000000, что равно 64... Стоп! Все если и правда все смещено еще на 1 бит! Ведь именно этим и отличаются адреса 0x55 и 0xAA которые используются для "хакерского" приема всех пакетов.

Флешбэк:

Адрес может быть от 3х до 5байт, но если передать ему, что длина адреса 2 байта, а само значение 0x55 или 0xAA, то можно таким образом получать все! В одном из случаев данные будут сдвинуты на 1 бит (в зависимости от того, как они передаются передатчиком)

Я определенно дурак, я ведь уже пробовал менять 0x55 на 0xAA до этого, но в этом случае у меня вообще переставали приходить мои пакеты... А они так и должны были сделать! Все сдвинулось на 1 бит, и адрес тоже, а я продолжаю фильтровать пакеты по первым байтам 65, 223, 152, 111, а они тоже меняются! Я отменил фильтр и снова нашел адрес пульта в море сигналов, он и правда стал другим:

И наконец-таки, поле с размером данных стало адекватным, теперь пакеты можно расшифровать:

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

Я научился понимать, какие коды соответствуют нажатию клавиши, а какие тому, что все клавиши в группе отпущены. Это важно, для того, чтобы можно было делать авто-повтор нажатия для некоторых клавиш при их зажатии на пульте (перемотка, например или громкость), а для некоторых не делать (Play/Pause, например). В EventGhost все настраивается очень просто, для начала добавляется плагин ком-порта:

Дальше все что приходит из этого ком-порта можно видеть в логе программы:

И назначать макросы на эти события:

Итоговый результат скетча здесь:

https://github.com/CodeName33/NRFRemote/blob/main/NRF24Remote.ino

CRC, я все же решил не проверять, т.к. при включении его проверки (вариант с 1 байтом CRC) почему-то отсеивается довольно приличная часть пакетов, которая на самом деле имеет вполне себе валидные данные внутри. Может быть что-то еще можно подкрутить, но пока сойдет и так. Еще у пульта выявился еще один неприятный момент: Часть его кнопок работает довольно странно (крестовина и цифры). После нажатия одной из этих кнопок, пульт довольно долго шлет еще какие-то команды и ту команду, которую я посчитал за "кнопка больше не нажата", он может присылать с задержкой до 1 сек. Это очень много и можно поставить крест на быстрой навигации стрелочками (она стала медленная). Вероятно это как-то связано с особенностями его работы, может быть приемник ему, что-то должен отвечать, а может я что-то неверно понял, но на данный момент мне не удалось это победить. Возможно, еще поковыряю.

В будущем хочу отказаться от EventGhost и перевести проект на Arduino Pro Micro, которая умеет прикидываться USB клавиатурой и сразу отправлять нужные нажатия клавиш, работая без посредников. В этом случае пульт сможет работать не только в разных ОС, без доп. программ, но и с телевизорами и Андроид устройствами. Но пока все так, как есть. Спасибо за внимание!

Подробнее..

Кикбрик фитнес-трекер для ударных видов спорта

17.05.2021 16:18:04 | Автор: admin

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

Деритесь в Подольске, заказывайте производство в Шеньжене!

Видео на английском

Сколько проходит времени между твоим желанием ударить и самим ударом? Сколько ударов ты максимум можешь совершить за 1 минуту? Как долго ты сможешь держать темп один маваши в секунду? То, что нельзя измерить, нельзя улучшить!

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

История

Ранее я писал о том как появилась идея http://personeltest.ru/aways/habr.com/ru/post/397107/

Как с помощью сообщества удалось ее улучшить http://personeltest.ru/aways/habr.com/ru/post/397191/

Какие конкуренты есть у Кикбрика http://personeltest.ru/aways/habr.com/ru/post/398441/

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

Условно можно сказать, что начал разработку 1 сентября 2016г. Так выглядел первый прототип, собранный за 20 минут.

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

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

Следующая степень миниатюризации

Мы сделали проект в EasyEda и заказали прозводство и smd монтаж в jlcpcb. Идея была в том, что в центре всего приложение. Приложение это некая экосистема, где тренеры могут размещать свои видеоуроки по отработке определенных ударов и к ним программу тренировок с кикбрик. Гаджет в данном случае использовался для передачи сырых данных об ускорении и углах в приложение. Сама плата на TI CC2640 c BTLE.

Мы общими усилиями собрали приложение и устройство. Корпус напечатали.

Видео демонстрация для Хабиба. Мои первые слова на аварском.

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

Были два элемента, которые нас не устраивали в самой плате, мы договорились с производителем о смене гироскопа на MPU6050 и смене ножек подключения. За изменение крепления с меня попросили еще $1200, это решил делать сам.

Прошивку и дизайн я разрабатывал сам. Использовал для графики LVGL.

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

Заказ опытной партии в 100шт в Шеньжень

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

После изготовления PCB и автоматизированного SMD можнтажа идет этап монтажа навесных элементов.

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

Загрузка тестового скрипта для проверки всей периферии.

Готовая плата с элементами размещается в корпус.

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

Процесс зарядки и финального тестирования.

В конце процесса упаковка в индивидуальные боксы и упаковка боксов в общую коробку.

Первая партия в 100шт.

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

Устройство опробовали в секциях каратэ, бокса, кикбоксинга, муай тай, рукопашного боя, мма и тхэквондо. Гаджет отлично подходит для самостоятельной работы с мешком, мотивирует работать дольше и эффективнее. Профессионалы оценили тренировку скорости реакции и темпа. Начинающие и любители получают мотивацию работать с мешком дольше. Особенно в восторге от гаджета дети и подростки. Зарядки хватает на 3-4 тренировки. Есть аналоги датчики под бинты, которые стоят от 300$. Они не тренируют реакцию и темп. Не все используют бинты. Существуют умные груши, которые обладают меньшим функционалом, но стоят более 1200 долларов. Их неудобно заряжать, брать с собой в зал или домой.

Проблема сохранения результатов

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

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

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

Экономика

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

100 устройств с кастомизацией - 320.000 руб.

Доставка и таможенное оформление - 45.000 руб.

Печать и литье в силикон креплений - 5.000 руб.

Карабин, стрейч-лента - 2.000 руб.

Печать этикеток - 2.000 руб.

Затраты 3740 руб./устройство.

Если добавить к себестоимости планируемую прибыль в 1160 руб. - получаем стоимость устройства в 4.900 руб. Почему 1160? Чтобы получилась красивая цифра и именно столько стоят 2 похода в зал мне. Т.е., покупая, гаджет каждый еще и меня мотивировать будет.

Если Вы хотите принять участие в проекте, есть идея или хотите для себя приобрести гаджет, пишите мне в WhatsApp или Telegram+79267031561.

Продвижение

Продемонстрировал гаджет на мероприятии "Инновации в спортивной индустрии" на Красном Октября .

Я вступил в Московский инновационный кластер. Сейчас подал заявку на пилотирование с сетью клубов "Ударник".

Подал заявку на участие в ежегодном конкурсе инновационных проектов премии Мэра Новатор Москвы. Результаты ожидаем 25.05.2021

Вариантов продвижения я вижу несколько:

  • продажа через свой сайт, реклама у тематических блогеров

  • партнерство с известным спортсменом

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

  • выход на кикстартер

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

Есть ли у Вас идеи? Какие тренировки можно было бы ещё делать? Как продавать? Как позиционировать? Может есть знакомые, которые имеют опыт краудфандинга?

Подробнее..

Recovery mode Очередной Wi-Fi Jammer на Очередной ESP8266

17.05.2021 18:06:47 | Автор: admin

Предупреждение ( некий АХТУНГ, так сказать)

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

Вступление

Я в свои практически 20 лет (на момент написания статьи - через 3 дня) уже как года 4 слежу за всякими интересностями на Ардуино и околоАрдуинных платах для разработки. Сначала купил Нанку, с которой не понимал, что делать, потом поступил на разработку ПО и начал понимать, шо да как. От этого мой интерес увеличился настолько, что это стало моим хобби. Да, я не силён в программировании до сих пор, так как я банально прогуливал пары, но зато у меня есть база, так сказать основа, с помощью которой я снова вхожу в программирование через визуализирование этого во всяких поделках на Ардуино и им подобных. Мне не нравилось программирование из-за того, что результат ты увидишь далеко не сразу, а с помощью микроконтроллеров этапы готовности можно посмотреть прямо на глазах, да и потрогать, пощелкать, попереключать.

Перейдем к железу

По железу все банально и просто: Китайский клон Wemos D1 Mini на базе ESP8266, I2C дисплейчик 128х64 и две кнопки, которые я вырвал с китайской магнитолы. В оригинале их 3, но у меня не влазило в корпус, поэтому решил оставить только кнопку "ок" и "вниз", так как если долистать меню до конца, то указатель начнет с самого начала. Да, больше времени уходит на листание менюшек, но зато компактнее .

Прошивка

Прошивку можно скачать по ссылочке ( ТЦ )

Так же там имеется подробная инструкция для таких, как я XD

Я не буду заостряться на подробностях настроек до прошивки, в конфиге все банально ясно. Есть два вида файлов: .bin, который шьется NodeMCU Flasher и исходный код со скетчем ардуино. Я использовал скетч, что бы настроить подключение дисплея, переназначить кнопки и изменить названия.

Корпус

Изначально я раскурочил старый 3G модем от МТС (который сейчас в Украине Vodafone), вырезал отверстия под дисплей и кнопки. Ровно после финальной сборки я понял, что выглядит не очень: кривые вырезы, лишние размеры для дисплея, болтающиеся кнопки, корпус плохо закрывался, питание подключалось путем разгибания нижней части корпуса. Короче, не комильфо. Надо думать что-то новое.

Новый корпус и формфактор.

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

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

Возможности

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

  • Сканирование сетей и устройств ( если они подключены к сетям) с последующим просмотром количества отправляемых пакетов, MAC-Адреса и мощность сигнала.

  • Атака путем деаутентификации как полностью всей сети, так и конкретного устройства по MAC-адресу

  • Режим "Бекон", который создает до 80 точек доступа, названия которых можно скопировать с существующих сетей, записать свои или создать с помощью встроенного генератора.

  • Режим "Probe" с которым я так и не разобрался, да и фиг с ним )

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

Выводы

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

P.S. Чуть позже запишу видео, как сие чудо техники работает на примере своей точки доступа и ноутбука

Подробнее..

Проект электронного мультитула QUARK. Часть 2

11.06.2021 16:11:37 | Автор: admin

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

QUARKQUARK


Для начала напомню, что собой представляет устройство. QUARK это электронный мультиинструмент, в первую очередь, ориентированный под разработку микроконтроллерных устройств, Arduino, ESP32, STM32, IoT, домашняя автоматизация и тому подобные девайсы.

Че определяется такая ориентированность? Во-первых, набором функций. И если первая часть стандартна для типичного мультиметра:

Вольтметр

Амперметр

Измерение сопротивления

Измерение емкости

Измерение индуктивности

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

ВольтметерВольтметер

Точно так же мгновенное потребление тока, при разработке IoT, параметр в себе. Гораздо удобнее проследить изменение в динамике при различных режимах работы устройства:

АмперметерАмперметер

Калькулятор цветовой и СМД маркировки компонентов вещь полезная и нужная, но, согласитесь, так удобнее:

СопротивлениеСопротивление

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

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

ОсциллографОсциллограф

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

Теперь пару слов о схемотехнике. Вся система построена на ESP32 со всеми вытекающими из нее ништяками (bluetooth, Wi_fi). Для измерения напряжения и тока я использовал готовый чип INA219. Подключается по I2C шине, имеет малый размер и вполне достойные, для моих задач, параметры. Сопротивление измеряю стандартным делителем напряжения, но в качестве известного сопротивления использую цифровой потенциометр AD5245, что освобождает пины контроллера, а учитывая тот факт, что AD5245 управляется по I2C, так и вообще нет нужды в дополнительных пинах. Тем же способом измеряю емкость конденсаторов по известному методу заряда до 63.2%. На больших емкостях AD5245, подключенное к питанию имеет низкое сопротивление, а при низких, заряд идет через 1 мегаомный резистор. Таким образом, минимальная измеряемая емкость определяется пикофарадами.
Индуктивность меряю резонансным методом при известной ёмкости по срабатыванию компаратора.
Тракт осциллографа реализован на Rail-to-Rail ОУ AD8541, усиление сигнала регулируется вторым AD5245. Соответственно, сигналы как с высоким, так и с низким размахом амплитуды, поступают на вход АЦП в максимальном разрешении. Для оцифровки использую аппаратный I2S, складываю весь буфер в DMA и вывожу на LCD и, при необходимости, отсылаю по bluetooth.

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


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

Во-первых, универсальный прикручиваемый щуп:

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

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

Подробнее..

Категории

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

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru