Дописал документацию к своей железке. Хотел бы показать чего получилось
Метеостанция Волна 2BW42
Если вкратце про сам проект - метеостанция рассчитана на интеграцию в систему умного дома - данные о внешнем датчике устройство получает через Home Assistant или Domoticz, и так же может отправлять свои данные по MQTT (в HA девайс подхватывается через Auto Discovery, в Domoticz через виртуальные датчики)
Прошивка совместима с ESP8266 и ESP32 (Arduino Framework, C++, PlatformIO); внутренний датчик температуры \ влажности BME280. Прошивка работает с дисплеями на электронных чернилах 4.2' и 1.54' дюйма (таблицы совместимости с теми производителями с которыми тестил можно найти на сайте с документацией). Сами E-Ink дисплеи своеобразны в работе и значительно медленней отрисовывают всю область экрана в сравнении с обычными жк, но не требуют постоянного питания для отображения картинки и для автономного девайса подходят хорошо, позволяя очень существенно экономить расход батареи. В живую картинка на таком экране читается приятно, как с обычного листа бумаги.
В режиме работы от аккума устройство просыпается раз минуту для обновления области часов на экране и раз в 10 минут для полного обновления (датчики температуры и другая статистика), WiFi-соединение (синхронизация данных по внешнему датчику, отправка своих данных по MQTT) раз в час в целях экономии заряда; аккума 18650 2000 мА*ч хватает на ~несколько месяцев. Все таймауты при желании можно перенастроить.
Оформление интерфейса изначально делал под дисплеи 4.2' (400х300), с котиком-индикатором который меняется от погодных условий \ времени.
интерфейс по умолчанию
Некоторые зарисовки иконок которые делал для проекта, часть задействованы для индикатора :
В актуальных обновлениях прошивки добавлен конструктор интерфейсов без строгой привязки к разрешению экрана и необходимости лезть непосредственно в код \ перепрошивки чтобы можно было залить свою картинку в качестве фона и расположить "виджеты" просто через веб-интерфейс устройства.
Пример настройки кастомного оформления (фоновая картинка может быть и на весь экран) :
редактор интерфейсов
интерфейс для мелких дисплеев 1.54'
Еще некоторые фотографии с процесса сборки под разные варианты корпуса
Основание корпуса-подставки
вариант полностью закрытого корпуса (чуть промахнулся с размерами, в исходниках модельки 3д принта уже поправил)
Опционально в прошивке реализована возможность вывода картинок c 4 цветном режиме (2-bit). Если сам e-ink экран поддерживает такой режим работы, то можно загрузить картинку фона в таком режиме.
Пример отрисовки фона в градациях серого :
Тестовый "толстый" корпус с доступом к внутренностям. Использовался экран с двойным слоем чернил (красный \ черный), к сожалению они значительно медленней в плане отрисовки
Такой проект получился. Более детально по каждому аспекту, касательно сборки, скорости отрисовки, совместимости с конкретными модулями экранов, процессу прошивки и первичной настройки, примерам моделек корпусов и т.п. постарался подробно описать на сайте проекта.
Проект полностью открытый, можно использовать как для коммерческих так и для личных целей. Если вдруг есть идеи с какими открытыми сервисами погоды можно было бы еще добавить интеграцию (например если кому то захочется использовать вне системы "умного дома"), можно так же написать или мб еще есть какие идеи; поизучаю апишки, мб что-нибудь выберу для дальнейших доработок.
Один уже готов к приключениям, а второй всё ещё в процессе сборки.
Давайте знакомиться!
Меня зовут Артём, и я занимаюсь созданием или адаптацией различных технологичных (и не очень) устройств. Это моя первая статья, и я долго шёл к её написанию, преодолевая неуверенность. Желание поделиться опытом и, возможно, помочь кому-то в реализации своих проектов оказалось сильнее сомнений. Итак, вот моя история.
Как всё началось
Однажды я наткнулся на ролик от @AlexGyver на YouTube, где он создавал интернет-радио в виде головы Бендера. В тот момент меня застала моя девушка, которой так понравилась идея, что она попросила сделать нечто подобное для её старшего брата.
Мне эта затея тоже показалась интересной, и я сразу приступил к работе. Мы решили, что устройство будет Bluetooth-колонкой: слушать музыку с телефона, на мой взгляд, гораздо удобнее, чем через интернет-радио. Тем более, модуль ESP32, использованный в проекте, уже поддерживал Bluetooth. Оставалось лишь немного доработать прошивку.
Я подумал, что кто-то мог уже решить эту задачу. Как говорил Исаак Ньютон: "Если я видел дальше других, то потому, что стоял на плечах гигантов" И действительно, я нашёл готовое решение, которое смог адаптировать под свои задачи. Однако это было лишь начало: впереди меня ждала долгая, но увлекательная работа.
Этап первый. Печать корпуса
Первым шагом стало создание корпуса головы Бендера. Для этого я использовал свой проверенный 3D-принтер Ender 3 Pro, модернизированный экструдером Creality Sprite Pro и датчиком автоуровня Creality CR Touch.
Перед началом печати я быстро прикинул, какие компоненты буду использовать, как организую питание и насколько сильно придётся модифицировать корпус. Решение запитать устройство через USB Type-C оказалось удачным: корпус не пришлось дорабатывать, так как удалось найти разъёмы, которые идеально подошли к готовым отверстиям.
Для подготовки моделей я использовал PrusaSlicer, хотя в последнее время присматриваюсь к OrcaSlicer. Главное — не забыть про поддержки: однажды я это упустил, и деталь получилась далёкой от задуманного.
Для печати я выбрал недорогой серый PLA-пластик от HI-Tech-Plast. Несмотря на противоречивые отзывы, материал полностью справился с задачей. В других проектах я также использовал филамент этой фирмы и лишь однажды столкнулся с проблемой — пластик оказался перепутанным, из-за чего пришлось начинать печать заново.
Настройки печати:
• Высота слоя: 0,28 мм.
• Температура сопла: 210°C.
Печать всех деталей, включая антенны, визор и подставки, заняла около 20 часов.
Постобработка
После печати начался этап постобработки, включавший:
1. Удаление поддержек.
2. Шлифовку наждачной бумагой для устранения неровностей.
3. Финальную обработку для придания поверхности гладкости и блеска.
С обработкой дихлорэтаном нужно быть очень осторожным: вещество токсично, поэтому работать следует в хорошо проветриваемом помещении, используя респиратор с фильтром марки В1 и полипропиленовые перчатки.
Я наношу дихлорэтан кисточкой или обрабатываю поверхность пропитанной тряпочкой. Иногда использую метод "дихлорэтановой бани" для равномерной обработки сложных деталей.
Корпус был полностью готов. Теперь можно переходить к подбору электронных компонентов и созданию печатной платы.
Этап второй. Подбор и заказ компонентов
Вот список всех компонентов и их примерная стоимость на конец 2024 года, включая печать корпуса:
Компонент ---------- | Количество | ---------- Стоимость (руб.)
Display Control Module----------| 5 | ---------- 685
LED Matrix (white)---------- | 2 | ---------- 753
LED Matrix (yellow)----------| 3 | ---------- 646
Type-C разъём ---------- | 1 | ---------- 32
Печать корпуса ---------- | — | ---------- 623
Итоговая стоимость: 4384 руб.
Подбор компонентов
Сложно найти — легко потерять: матрицы для глаз и рта, которые определяют характер проекта.
Самой сложной задачей оказалось найти подходящие матрицы для глаз и рта. Мне хотелось использовать матрицы с квадратными светодиодами и общим катодом, чтобы Бендер выглядел максимально аутентично.
На подбор матриц я потратил больше времени, чем ожидал. Оказалось, что такие компоненты редкость, а их стоимость существенно выше стандартных красных матриц с платами контроллерами. Например, две белые матрицы обошлись в 753 рубля, а пять красных с контроллерами — всего 685 рублей. Однако я решил не экономить, ведь итоговый результат того стоил.
С остальными компонентами проблем не возникло. Их список был представлен на странице проекта AlexGyver, что значительно облегчило поиск.
Ключевые моменты выбора:
• ESP32 с USB Type-C стал идеальным решением благодаря удобству подключения к компьютеру для прошивки. Кабели с microUSB у меня постоянно теряются, а Type-C давно стал стандартом.
• AIYIMA 40MM (динамики) — отличный выбор для проекта. Их компактный размер идеально вписался в конструкцию корпуса, а качество звука оказалось выше моих ожиданий.
Компоненты я искал на популярном китайском маркетплейсе, учитывая соотношение цены, времени и стоимости доставки. Когда я собирал первого Бендера, мне удалось найти динамики всего за 400 рублей. Всего я собрал три такие колонки, но, к сожалению, выгодную цену больше найти не удалось.
Планирование следующего этапа
Я давно решил отказаться от навесного монтажа и горячего клея, так как работа с печатными платами удобнее, аккуратнее и быстрее.
Для разработки электрических схем и печатных плат я использую KiCad. Это открытое и удобное программное обеспечение, которое идеально подошло для моих задач. Основной операционной системой у меня является Ubuntu, и KiCad прекрасно работает в этой среде.
Пока все компоненты едут из Китая, самое время переключиться на проектирование печатной платы. Это важный этап, который позволит собрать все элементы воедино и создать надёжное устройство.
Этап третий. Проектирование печатной платы
На распутьи ста дорог: поиск оптимальной компоновки для печатной платы.
Итак, начался этап проектирования печатной платы. Работа оказалась непростой: с самого начала я столкнулся с проблемой отсутствия готовых посадочных мест для модулей. Готовых решений я не нашёл, поэтому пришлось создавать их вручную. Это создавало некоторые трудности, особенно для модуля PCM5102. У него боковые ножки не совпадают с шагом сетки 2,54 мм, а точных размеров модуля в интернете не оказалось — были только габариты самой платы. В итоге мне пришлось несколько раз распечатывать разводку платы на бумаге и подгонять её вручную, проверяя, как компоненты ложатся на свои места.
Для изготовления печатной платы в домашних условиях я использовал фоторезист (негативный пленочный) и односторонний фольгированный стеклотекстолит. Процесс выглядел следующим образом:
1. Подготовка текстолита.
Сначала я разрезал текстолит до нужных размеров, сделав надпилы острым ножом и аккуратно обломив заготовку по линиям надреза. Затем поверхность протиралась спиртом, чтобы удалить грязь и жир.
2. Нанесение фоторезиста.
На чистую поверхность текстолита я наносил фоторезист, после чего прокатывал плату через ламинатор для плотного приклеивания.
3. Засветка ультрафиолетом.
На подготовленную плату с фоторезистом я накладывал заранее распечатанный на прозрачной пленке негативный шаблон платы. Для засветки использовал самодельную ультрафиолетовую лампу, собранную из светодиодов и управляемую микроконтроллером ATTiny13A. Засветка занимала около 200 секунд при расстоянии 10 см между лампой и платой.
4. Проявка.
После засветки плата погружалась в раствор кальцинированной соды. Для этого я разводил пол чайной ложки соды на 500 мл воды. Точное количество соды не критично — главное, чтобы фоторезист начал проявляться.
5. Травление.
Травление проводилось в растворе хлорного железа (200–300 г на 1 литр воды). На травление обычно уходит 40–60 минут, в зависимости от температуры раствора и толщины слоя меди.
6. Удаление фоторезиста.
После травления я смывал остатки фоторезиста ацетоном, оставляя чистые дорожки меди.
После всех этих этапов плата была готова для пайки компонентов и последующей сборки устройства.
Этап четвёртый. Тестирование компонентов в полусобранном виде
Обычно тестирование компонентов проводится до производства печатной платы и корпуса, чтобы избежать лишних затрат на переделку. Однако в этом проекте я был уверен, что все компоненты совместимы и не собирался вносить изменения. Оставалось лишь убедиться, что всё работает так, как задумано: устройство воспроизводит музыку с телефона и синхронно двигает глазами в такт.
Конечно, когда я собрал все на макетной плате, прошил микроконтроллер и включил питание, ничего не заработало. Основные проблемы оказались связаны с матрицами. Они создавали сильные помехи, были чувствительны к питанию и наводкам на провода. В результате матрицы начинали «жить своей жизнью»: произвольно включаться и выключаться.
Я думаю, многие, кто пытался собрать Бендера, сталкивались с подобными трудностями. Вот шаги, которые помогли мне справиться с этим:
1. Хорошая пайка контактов.
Все соединения должны быть надёжными, без «холодной пайки».
2. Минимизация длины проводов.
Длина проводов, соединяющих матрицы с платой управления, должна быть минимальной. У меня это расстояние составило всего 4–5 см. На этапе тестирования длина проводов была больше, что приводило к сбоям в работе.
3. Устранение шумов.
Для подавления шумов в цепи питания звукового тракта я добавил два конденсатора по 3300 µF на 6,3 В:
◦ Первый конденсатор установил на плату управления, куда подключалось питание.
◦ Второй напаял на контакты питания второй матрицы рта.
Эти конденсаторы полностью устранили шипение в звуке.
Конденсаторы были подобраны экспериментальным путем и у вас они могут отличатся.
Кроме того, я разделил питание следующим образом:
• ESP32 питалась через встроенный стабилизатор.
• PCM5102 подключил отдельно через стабилизатор AM1117-3.3.
Честно говоря, сейчас я уже не помню, зачем решил разделить питание, а в документации этот момент не зафиксировал.
Ещё одна проблема была связана с PCM5102: его режимы работы настраиваются с помощью джамперов, которые иногда приходят не распаянными. Первый модуль, который я использовал, был готов к работе, но во втором случае я не проверил джамперы заранее. В результате пришлось разбирать собранную плату и паять джамперы вручную.
Теперь немного о прошивке.
Я использовал прошивку от BendeRadioBt, не внося в неё изменений. Компиляцию проводил в среде Arduino IDE версии 2.1.1. Единственное уточнение: для успешной компиляции нужно установить версию платформы в Boards Manager не выше ESP32 by Espressif 2.0.17. Это связано с особенностями библиотеки btAudio.
На этом этапе серьёзных проблем больше не возникло. Всё заработало как задумано, и я с нетерпением приступил к следующему этапу.
Этап V. Империя наносит ответный удар: сборка
Оно начало собираться
Первым делом нужно установить Rotary Encoder Module. Провода к этому модулю я сделал чуть длиннее, чтобы они выходили за пределы корпуса головы.
Затем приступаем к установке динамиков. Их нужно аккуратно приклеить на посадочные места клеем Момент Кристалл и дополнительно слегка зафиксировать термоклеем. На этом этапе важно проявлять осторожность, чтобы клей не попал в неподходящие места.
Основная плата с компонентами была установлена вертикально в специально напечатанный держатель, который я закрепил термоклеем. Сам держатель платы приклеил к держателю матриц рта с помощью суперклея. Да, я мог бы уменьшить размер платы и разместить её горизонтально прямо на держателе матриц, но так получилось, что я изначально выбрал вертикальное расположение.
Особое внимание следует уделить верхним уголкам платы — их нужно срезать. После этого плата идеально становится на место, а разъём ESP32 оказывается на уровне глаз. Это удобное решение: через визор, убрав глаза, можно обновлять прошивку или регулировать уровень звука на PAM8403. Для дополнительной фиксации все элементы закрепляются двумя болтами.
На следующем этапе я установил разъём питания USB Type-C на корпус. В завершение приклеил заглушку внизу головы Бендера с помощью клея Момент Кристалл. Это крепление достаточно надёжное, но при необходимости позволяет снять заглушку.
Заключение
Колонка получилась не только функциональной, но и стильной. Она стала прекрасным подарком, и после первого экземпляра я сделал ещё несколько штук. Благодаря необычному дизайну и качественному звучанию колонка отлично смотрится в интерьере и вызывает интерес.
Этот проект оказался для меня невероятно увлекательным. Хочу выразить огромную благодарность AlexGyver за возможность создать подобное устройство, а также автору прошивки для Bluetooth. Благодаря его работе мне удалось сэкономить несколько дней.
На этом моя история о колонке-голове Бендера завершена, но у меня в запасе ещё много интересных проектов, которыми я хотел бы поделиться. Спасибо всем, кто дочитал до конца!
Осторожно: эта статья точно будет интересной, ведь в ней мы смоделируем, спроектируем и запрограммируем своё видение N-Gage 2! Я очень старался сделать статью интересной даже для тех читателей, кто не разбирается в теме 3D-печати и программирования микроконтроллеров :)
Я очень люблю ретро-игры и игровые консоли. Иногда я люблю позалипать в какую-нибудь классику с NES, Sega Mega Drive или, например, PSP. Однако особое место в моём сердечке занимает игровой телефон Nokia N-Gage, который, к сожалению, не получил продолжения, как и его более современный собрат — Sony Ericsson Xperia Play. Недавно я пересматривал свою коллекцию девайсов и обнаружил на полочке Galaxy S4 Mini. И тут я подумал: а что если...
❯ Предисловие
Думаю многие мои давние читатели заметили, что примерно четверть статей в моем блоге так или иначе касается вопроса игр и портативного гейминга. За почти три года существования блога, мы с вами успели не только поностальгировать и потыкать игровые гаджеты, но и отремонтировать часть из них, узнать как разрабатывались и работали «под капотом» игры и даже попытались спроектировать свою собственную игровую консоль!
Почти два года назад в моей голове уже возникала идея сделать «портативку» из полурабочего гаджета. В то время я хотел рассказать читателям о том, что многие старые девайсы можно использовать в качестве одноплатных компьютеров и HMI-панелей благодаря наличию пятачков с шиной UART на плате, с которой можно легко взаимодействовать в Android-приложениях! В качестве реального примера использования я взял планшет с нерабочим тачскрином, подключил через UART геймпад, разработанный на базе RP2040 и написал программу, которая читает UART и инжектит состояние кнопок напрямую в драйвер ввода:
Именно для того чтобы закончить этот проект я приобрел себе Ender3 V2
С тех пор прошло много времени, в моей коллекции появились некоторые серийные игровые-смартфоны и даже прототипы никогда не выходивших устройств. Однако по своей натуре я прожженный гик, у меня постоянно чешутся руки что-то запрограммировать и собрать самому.
Недавно я осматривал свою коллекцию гаджетов и на полочке с смартфонами Samsung обнаружил легендарный Galaxy S4 Mini, который мне когда-то дарил один из читателей. У смартфона отсутствовала задняя крышка, средняя часть корпуса была немного ободрана, однако несмотря на почтенный возраст в 12 лет, смартфон продолжал нормально работать и даже AMOLED-матрица у него ничуть не выгорела!
И тут в моей голове что-то щёлкнуло: я вспомнил что S4 Mini — смартфон с довольно неплохим железом для эмуляторов и очень крутым даже по современным меркам AMOLED дисплеем. На моей памяти, в мире не выходило ни одного серийного игрового телефона в монолитном корпусе с OLED-матрицей, а тут ещё рядом лежал оригинальный N-Gage, который я недавно купил в утиле и восстановил после воды. Я взвесил все за и против, прикинул схему и конструктив будущего устройства и принялся мастерить...
Всё начинается с кубика...
Перед тем как начать работу, нам необходимо определится с тем что нам нужно будет сделать для реализации такого гаджета на практике:
В первую очередь, нам необходимо продумать как геймпад будет общаться с нашим устройством. За исключением моего хака с UART'ом, у нас есть два варианта: первый — микроконтроллер выполняет роль USB-HID устройства (прикидываясь клавиатурой) и подключается к OTG-хосту гаджета. Среди плюсов этого подхода можно выделить низкую задержку, однако минусов гораздо больше. Например, далеко не все старые устройства поддерживают OTG и могут быть проблемы с реализацией одновременной работы USB-хоста и зарядки (зависит от реализации OTG в каждом конкретном устройстве). А второй вариант — это Bluetooth-HID, который работает почти с любыми Android устройствами, однако потребляет чуть больше энергии и может иметь небольшой инпут-лаг.
После расследования выяснилось, что у S4 Mini OTG нет, а значит остается лишь один вариант — Bluetooth. Среди дешевых микроконтроллеров с BT выделяется лишь ESP32, который стоит буквально три пачки доширака. Его мы с вами и выберем.
Далее нам необходимо придумать внешний вид устройства. Изначально мне хотелось, чтобы гаджет по форм-фактору и эргономике напоминал оригинальный N-Gage. Но поскольку мне не хотелось делать слишком длинную «колбасу» и бюджета по свободному пространству в корпусе откровенно не хватало, пришлось пойти на некоторые ухищрения — например, расположить блок кнопок вертикально.
Теперь самое сложное — смоделировать более-менее адекватный корпус и подогнать детали так, чтобы их хоть как-то можно было состыковать и закрепить. Я в 3D-печати новичок, а в вопросах проектирования корпусов — вообще неотесанный селюк, поэтому мне оставалось лишь смоделировать в блендере выпуклый меш, импортировать в TinkerCad и затем CSG'шками вырезать в нём дырки отверстия.
И самое легкое — написать прошивку для микроконтроллера и спаять всё вместе, дабы наши кнопочки не просто прикольно щелкали, но и на практике работали в системе!
Звучит как приключение на 5 минут. Но вот как на практике? Давайте посмотрим!
❯ Моделируем корпус
В первую очередь я сел моделировать корпус устройства и прикидывать его размеры. В TinkerCad'е CSG'шками сделать корпус по референсу проблематично (по крайней мере для меня), поэтому я решил смоделировать основу в блендере. Я взял рендеры N-Gage с фронтальной части, установил камеру в ортографическую проекцию и принялся повторять контур корпуса оригинального телефона. После этого я создал грани на одной половинке корпуса, продублировал все вершины и отзеркалил их с другой стороны. Таким образом, корпус получился одинаковым (кривым) с обеих сторон.
Далее я убрал лишние рёбра посередине и вытянул корпус по оси Z с помощью инструмента Extrude. Теперь это напоминает поделку семикласника на уроке обращения с рубанком:
Внимательные читатели могли заметить косяк, который из-за затенения я не замечал вплоть до первой печати
Дальше я использовал инструмент Inset faces, дабы создать новые грани на плоскости и вытянуть из них фронтальную часть корпуса. Таким образом, мы получаем ровные и мягкие стенки, которые затем можно смягчить ещё больше с помощью модификатора Bevel:
Однако сейчас геометрия нашего корпуса полая, внутри неё ничего нет. Чтобы добавить внутренние стенки, мы воспользуемся модификатором Boolean (CSG) в блендере: дублируем геометрию нашего корпуса, немного уменьшаем её по оси X и Y (чем меньше дубль, тем толще будут стенки), и затем сдвигаем немного вниз, а затем на основном объекте корпуса добавляем модификатор Boolean, устанавливаем режим Difference, ставим дубль в качестве второго объекта и жмём Apply. Теперь у нашего корпуса внутри отнюдь не пустота!
Далее экспортируем модель в STL, импортируем её в TinkerCad и берём линейку в зубы. Пора замерять габариты нашего устройства и размер дисплея.
Поскольку S4 Mini уж очень скругленный, я аппроксимировал его размеры до прямоугольника (ни слово про мыло!). Над этим прямоугольником я расположил прямоугольник размером с дисплей, который и вырежет нам пространство для этого самого дисплея:
На этом подготовка болванки корпуса закончена, переходим к реализации геймпада.
❯ Геймпад
Изначально я решил распаять все кнопки геймпада на двух макетных платах — первая с «стрелками» будет установлена слева, вторая с кнопками действий — справа. Поскольку место в корпусе сильно ограничено, текстолит я решил распилить: для этого я сделал насечки канцелярским ножом и затем руками отломал ненужные части.
В качестве кнопок я решил использовать обычные DIP-микрики, поскольку в моем городе не было ни плоских SMD-кнопок, ни тем более мягких мембранных. А ещё они прикольно щёлкают. Я, как пользователь механической клавиатуры, гарантирую это!
Ошметки текстолита можно счистить надфилем или просто подровнять канцелярским ножом
Для реализации обработки кнопок есть несколько подходов:
«В лоб»: самый простой и самый подходящий для геймпадов. На один входной GPIO микроконтроллера вешается подтягивающий резистор и кнопка, которая коммутирует массу. Главный плюс такого подхода — возможность зажимать сколько угодно кнопок одновременно, а если ножек на микроконтроллере не хватает, то всегда можно использовать сдвиговый регистр!
На резисторах: требует наличия ADC в микроконтроллере. Принцип работы заключается в том, что на выходе каждой кнопки установлен резистор определенного номинала. В прошивке микроконтроллера опытным путем задается диапазон значений ADC, который соответствует нажатой кнопке. Такой подход иногда используется в планшетах для обработки кнопок по типу включения, громкости и т.п.
Матричный: используется в клавиатурах, в том числе и в телефонах. Позволяет реализовать 16-кнопочную клавиатуру всего с 8-ю сигнальными линиями, однако с таким подходом нельзя нажимать сразу несколько кнопок кнопок в одной «линии» одновременно. Этим и страдали некоторые китайские игровые консоли, на которых нельзя было одновременно зажать вверх и влево или A и B!
Поскольку у нас всего 10 кнопок, мы выберем первый подход. Для этого мы подведем общую массу к нашей макетке, от которой пустим перемычки (дорожки) к каждой кнопке, а с другой стороны подпаяем провода, которые пойдут на входы в наш микроконтроллер.
После этого я наконец-то напечатал первую примерочную болванку, в которой всё помещалось идеально! Время от раздумий до первой болванки — ~5-6 часов:
❯ Стыкуем корпус
Если с моделированием корпуса у меня проблем не возникло, то стыковка деталей — вопрос совершенно другой, особенно для человека без опыта проектирования корпусов. В какой-то момент времени я даже впал в депрессию и сломал парочку болванок, хотя планировал их оставить в коллекции на память. Что-ж, будет памятью о моей вспыльчивости:
Сначала я решил сделать толкатели кнопок. Для «стрелок» я решил сделать классическую крестовину в духе GBA, а кнопки действий решил сделать цилиндрическими. Здесь в целом ничего сложного: подгоняем размеры толкателей к размерам кнопок, делаем у них небольшую выемку снизу, которая будет «шляпкой» для самих кнопок, а также добавляем «юбку» по бокам как ограничитель, дабы они не выпадали из корпуса:
А она ей как раз!
С крестовиной всё чуточку сложнее: сначала я сделал монолитную в стиле GameBoy, однако из-за того что расстояние между кнопками относительно маленькое, при нажатии на стрелку иногда нажималась и вторая кнопка. Поэтому я решил её разделить на несколько частей, оставив характерный рельеф посередине для лучшей тактильности. Я печатал много разных вариантов: подгонял зазоры для уменьшения люфта и добавлял тактильные выемки, однако остановился на классическом варианте. Далее встал вопрос как закрепить плату с геймпадом с обратной части корпуса. Я долго думал и прикидывал варианты: хотел и саморезы вкручивать, и гайки вплавлять, но потом придумал что самым лучшим и надежным решением будут салазки приклеенные на дихлорэтан, которые при желании можно снять не ломая корпус, но которые будут хорошо выдерживать постоянное усилие со стороны игрока!
Мне кажется что это невероятный говнокод и костыль от мира инженеров. Напишите своё мнение на этот счёт в комментариях.
Когда зазоры были подогнаны, я принялся моделировать заднюю крышку. Дабы она не выбивалась из общего стиля, я сделал её из фронтальной части корпуса: продублировал, отменил все CSG-операции характерные для основного корпуса и обрезал стенки одним большим кубиком.
Нарезаем модель в слайсере и печатаем! Как по мне, получилось очень даже стильно. Да, кто-то скажет, мол, видно, что это колхоз, не Industrial-grade, но как по мне для самоделки вполне на уровне!
На этом разработка корпуса наконец-то закончена!
❯ Пишем прошивку
Теперь, когда корпус нашего устройства готов и элементы в нём более-менее стыкуются, можно перейти к написанию прошивки. Как я уже говорил ранее, в качестве микроконтроллера я решил выбрать ESP32 благодаря копеечной цене и наличию неплохого BT-стека:
В качестве основы я взял официальный сэмпл BT HID-устройства с гитхаба Espressif. Собрав прошивку и протестировав что всё работает нормально, я принялся адаптировать её под свои задачи. Сначала я написал код для опроса кнопок: устанавливаем GPIO в режим входа с подтяжкой к высокому уровню, затем по запросу итерируемся по массиву с GPIO и заносим состояние кнопок в отдельный массив:
void input_initialize_hw() { for(int i = 0; i < INPUT_KEYS_COUNT; i++) { gpio_reset_pin(input_gpio_mapping[i]); gpio_set_direction(input_gpio_mapping[i], GPIO_MODE_INPUT); gpio_set_pull_mode(input_gpio_mapping[i], GPIO_PULLUP_ONLY); } }
void input_update_key_state() { for(int i = 0; i < INPUT_KEYS_COUNT; i++) input_key_states[i] = !gpio_get_level(input_gpio_mapping[i]); // TODO: Implement timestamp-based debouncing }
У любых механических кнопок есть особенность, которая называется дребезг. Случается она в момент когда мы отпускаем кнопку, но при этом размыкатель ещё не полностью поднялся в крайнее верхнее положение. Бороться с этим можно по разному, самый простой способ — программный, когда мы обновляем состояние кнопки только когда прошло определенное время (измеряемое в миллисекундах) с момента прошлого апдейта.
Все HID-устройства описываются специальным дескриптором, однако формат пакетов с репортами о состоянии устройства у них очень сильно отличается: мышки передают ускорение по осям X и Y, а также состояние кнопок, клавиатуры передают до 8-нажатых клавиш одновременно (наследие PS/2), а у геймпадов целый ворох стандартов (DirectInput, XInput... чего только нет. Кстати именно поэтому внешние геймпады обычно имеют несколько режимов). Алгоритм отправки репортов очень прост: 60 раз в секунду проверяем состояние кнопок, если какие-то нажаты — заполняем буфер с нажатыми клавишами и затем отправляем репорт хост-устройству.
Мы уже почти дошли до финала, осталось лишь чуть-чуть доработать прошивку смартфона! Для этого, его сначала необходимо рутировать: ставим CWM через Odin и устанавливаем SuperSU!
Поскольку кнопку включения я не предусмотрел в корпусе, было решено реализовать автостарт устройства от зарядки — прямо как на айфоне! Большинство смартфонов при отображении анимации зарядки на самом деле загружают ядро Linux и запускают специальную программу. Если эту программу подменить на перезагрузку в обычный режим — мы получим автостарт устройства!
На смартфонах Samsung за это отвечает бинарник /system/bin/lpm или же /system/bin/playlpm. Изначально я хотел сделать жёсткую ссылку на программу reboot, которая не работала пока не были запущены какие-то Samsung'овские службы. Затем я узнал что есть возможность напрямую направить ядру запрос о перезагрузке устройства с помощью sysrq.
Далее был написан простенький скрипт:
#!/system/bin/sh echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger
Который тоже не работал. И я понял что lpm нужно подменять другой самопальной программой. Так была написана и собрана с помощью NDK вот такая мелкая утилита, с которой уже всё заработало:
int main(int argc, char** argv) { system("echo 1 > /proc/sys/kernel/sysrq"); system("echo b > /proc/sysrq-trigger"); }
Далее необходимо было решить вопрос с виртуальными кнопками: поскольку в корпусе консоли виден только дисплей смартфона без кнопки Home, нам нужен был способ как-то управлять системой. Для этого было достаточно лишь пропатчить build.prop и добавить qemu.hw.mainkeys=0. В S4 Mini программные кнопки работают немного кривовато (только в портретной ориентации - т.е в нашем случае в режиме смартфона), но в целом пойдет. Я ещё немного поигрался в build.prop ради фана и добавил упоминания N-Gage :)
❯ Аппаратные доработки
Далее необходимо было решить вопрос с зарядкой. Как я уже говорил выше, было решено использовать Type-C. Я заказал разъём на плате, разобрал смартфон и кинул перемычки с цепи питания и сигнальных линий на разъем.
У Samsung'ов в те годы были не совсем стандартные разъемы с кучей пластика и к VBus'у аккуратно подпаяться немного проблематично
Теперь нужно решить задачу запитывания микроконтроллера. ESP32 в режиме BLE кушает целые 130мА (что очень много, телефоны нулевых кушали меньше с учетом параллельно работающего GSM-тракта!) в режиме активной передачи данных. Поскольку на самой плате с ESP32 используется LDO AMS1117 с высоким dropout-напряжением в 1.2В, для использования с обычным литий-ионным аккумулятором необходимо было использовать ULDO с дропаутом в ~0.3В...
...но зачем, если контроллер питания смартфона — буквально и есть многоканальный DC-DC преобразователь, который выдаёт сразу несколько различных напряжений:
0.8В-1.2В - VCore, это шина питания ядер процессора. Именно на ней работает вся или почти вся внутренняя логика системы на кристалле.
1.2V-1.8V VRef - обычно это референсное напряжение для работы процессора с внешней логикой. Впрочем, с таким напряжением может быть и одна из шин питания для каких-то модулей (например камеры), это зависит от платформы.
3.3V - Ну, здесь всё очевидно. 3.3В — одно из самых распространенных напряжений в микроэлектронике и может использоваться в широком спектре модулей. Например оно может использоваться для запитки модуля камеры, различных датчиков, контроллера тачскрина, усилителя и т.п. Именно эта шина питания в идеале нам и нужна.
Однако 3v3 уровни могут быть и логическими. Крайне не рекомендую вешать нагрузку аж в целых 130мАч на какую-нибудь цифровую линию, есть неиллюзорный риск спалить процессор или контролер питания. Лучше всего брать эту шину питания с здоровых decoupling-конденсаторов, однако имейте ввиду что шина может быть нагружена другими устройствами и вы со своей нагрузкой в сотню миллиампер можете увести КП в защиту!
В случае с S4 Mini у меня был сервис-мануал с схемой, где я принялся искать нужное напряжение. Изначально у меня была возможность взять 3.3В с питания eMMC, однако по ходу изучения схемы я заметил ещё одну подходящую шину питания — 3P0 (т.е 3В ровно), которая питает Wi-Fi, ИК-порт и тачскрин.
Я решил заглянуть в даташит на микроконтроллер и убедился, что он умеет работать в том числе и при 3В на входе, однако это пороговое напряжение при котором может работать чип. Если питание нестабильное и проседает, то МК либо зависнет, либо упадет в ресет. Однако я был уверен что на выходе DC-DC с КП смартфона точно должно быть всё нормальным. Я быстренько вывел перемычку и запитал МК буквально «в воздухе», проверил что всё работает стабильно, а затем припаял несколько жилок с LVDS-кабеля и закрепил УФ-маской.
Ну что ж, пришло время собрать всё воедино! Не без помощи дихлоэретана салазки были установлены, платы геймпада вставлены, все питания припаяны, а резьба в задней крышке была нарезана.
На МК ничего не слиплось — просто на момент фотографии мне всё ещё не пришёл флюкс-офф)
И вот, наконец-то моё детище собрано! Давайте же посмотрим что я там насобирал!
❯ Тестируем
Одним из основных критериев будущего игрового смартфона была конечно-же возможность сохранить функционал телефона. Иными словами, мне очень хотелось чтобы девайс повторял концепцию N-Gage и действительно в себе совмещал возможность звонить и удобно играть в игры!
В целом, я считаю что у меня это вполне получилось. Помимо функций самой звонилки, Android 4.4 всё ещё вполне может порадовать владельца базовым серфингом сети (большинство сайтов не откроется... ну нам и опеннета хватит!) и мессенджерами - здесь пока ещё работают и Telegram, и ВК в лице в Kate Mobile. Однако есть определенный нюанс... я взял GT-I9190 - т.е односимочную 3G-версию S4 Mini. А как известно, 3G в России уже практически не используется, поэтому вне Wi-Fi придется ограничится EDGE :)
Вчера я сделал анонс статьи на Пикабу и несколько читателей задали резонный вопрос: это же буквально смартфон 2013 года, он же, на первый взгляд, ничего не умеет в современных реалиях. Однако спешу вас заверить что под капотом всё не так уж и плохо! 400'ого Snapdragon'а хватает для большинства мобильных игр тех лет, не говоря уже об эмуляторах. При этом в отличии от старших 600'ых снапов (тогда 800'ый ещё не вышел), он не слишком сильно греется и более лоялен к и без того не самому объёмному аккумулятору!
Однако про опыт использования смартфонов прошлых лет в современных реалиях я уже не раз рассказывал в других своих статьях, поэтому предлагаю перейти к тесту игр. И начнем мы с вами с эмулятора NES.
Когда запускаешь любимый Super Mario Bros на офигенной AMOLED-матрице, то сразу понимаешь что весь проект был затеян точно не зря. После отключения линейного фильтра и растягивания картинки на весь экран, то диву даешься какие тут сочные цвета - не как на ЭЛТ-телевизоре, но тоже очень годно! Эмулятор работает очень шустро!
Ещё раз ноапомню что справа не рамка, а забагованные софт-кнопки. А вот сверху - рукопопие :)
Давайте же перейдем к чему-то ещё более пестрому и "графонистому" - а именно к Sega Mega Drive с оригинальным Соником! Здесь игра точно также летает, звук не хрипит, а картинка выглядят максимально приятной. Когда-то AMOLED-матрицы Samsung ругали за PenTile и немного не естественную цветовую схему... но в эмуляторах она как-будто какой-то шарм придает.
Далее предлагаю опробовать DOS'овскую классику - Wolfenstein 3D. Помимо "вольфа", я хотел добавить в тесты также и Quake... но порты попались кривые и не запускались. Очевидно что игра, которая шла даже на 286'ом, будет отлично летать на S4 Mini:
Ну и нативные игрушки здесь тоже работают неплохо. В какие-нибудь аркады типа Angry Brids, Fruit Ninja или Asphalt можно поиграть с большим удовольствием!
❯ Заключение
Вот такой незамысловатый и полезный девайс у нас с вами сегодня получился. Вы можете собрать такой и сами, схему, код прошивки и исходные файлы моделей я выкладываю на своём Github. Корпус можно "пощупать" в TinkerCad.
Сама разработка заняла всего 7 дней, большая часть времени ушла на подгонку деталей. Да, эту неделю я определенно точно почти не спал и даже один раз попсиховал. Однако все время разработки мне было дико весело и интересно. Ну, а что ещё пареньку в 23 года то нужно, кроме как писать код, копаться в девайсах и ТАЗах!?
Жду ваше мнение о моей самоделке в комментариях! А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет, подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я публикую бэкстейджи статей, иногда полезные посты ну и немножечко щитпоста! Если вам интересны мои видео той же тематики — предлагаю подписаться на мой YouTube-канал.
Как вам статья?
Как вам девайс?
Важно
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т.п, о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!
Всем привет. Расскажу о своем опыте внедрения на дачном участке устройств умного дома. Для людей, не дружащих с паяльником и компьютером, такой путь покажется сложным, но для меня он превратился в своего рода хобби.
Началось все с того, что я зачем-то заказал 2 умных реле на Aliexpress. Типа вот таких:
Эти реле привязываются через приложение к облачному серверу и позволяют управлять через телефон включением и отключением нагрузки. Так же можно создавать сценарии на включение/отключение по времени. Я отложил их в дальний ящик и благополучно про них забыл, пока не наткнулся на просторах интернета на прошивки Tasmota для таких реле. Вкратце расскажу о начинке: Наряду с известными всем микроконтроллерами Arduino есть такие контроллеры как ESP8266, ESP32 и им подобные.
Они недорогие, производительные и их легко купить. К ним можно подключать кнопки, датчики, реле и прочее. И эти же контроллеры устанавливают во многие умные устройства, включая реле которые я купил. Это я понял вскрыв корпус реле и осмотрев плату.
Теперь о программной части: на данные контроллеры устанавливаются разные прошивки. Можно установить microPython, можно программировать на них с помощью среды разработки для Arduino. А можно устанавливать готовые прошивки, которые сильно упрощают работу с устройством. В эти прошивки уже встроен Web интерфейс, работа с беспроводными сетями и многое другое. Одна из них это Tasmota и есть несколько довольно простых способов прошить ее на ESP. Готовые модули ESP уже имеют разъем MicroUSB, для голых плат придется приобрести программатор.
С готовыми устройствами типа реле чуть сложнее. Придется вскрывать устройство и искать контакты для подключения программатора, но для многих устройств уже уже инструкции в интернете с распиновкой и подсказками.
Следующие фото взял из интернета, но у меня было точно так же.
Так выглядит внутрянка реле:
Синяя перпендикулярная плата как раз та, на которой ESP8266.
Это она же с обратной стороны:
В правой нижней части видно контакты нашей целевой платы
К этим контактам нужно подпаять провода, которые в последствии подключатся в программатор
Питание 220В на плату подавать не нужно. Контроллер возьмет питание от программатора. Только будьте внимательны, сам контроллер ESP питается от 3,3В. А на программаторе может быть выход только 5В. Тогда нужно будет обеспечить 3,3В от другого источника. Подробно здесь этот вопрос описывать не буду.
После смены прошивки и подключения к Wi-Fi прошивальщик сам отправит нас по нужному ip-адресу и мы окажемся на главной странице нашего устройства
Таким образом мы ушли от облачных серверов, что с одной стороны не дает нам быстро и легко управлять устройством отовсюду где есть интернет. С другой стороны теперь наше устройство никуда не завязано и мы можем делать с ним все что захотим.
Управлять включением/отключением реле из WEB интерфейса и в домашней сети мы теперь можем. Передо мной встали несколько вопросов:
Как заставить устройства общаться между собой.
Управление устройством через приложение, получать от него обратную связь.
Сделать автоматизацию, управление по сценариям и событиям в целом.
Удаленное управление из интернета.
Побродив по интернету понял что нужно идти в сторону протокола MQTT. Это протокол передачи данных между устройствами с помощью коротких сообщений.
Если коротко, то каждое устройство может рассылать и получать определенные топики вида /статус/устройство/№реле "состояние" или команда/устройство/№реле "действие". Для того чтобы устройства могли общаться между собой им нужен сервер. Слать сообщения напрямую они не могут. Применимо к MQTT сервер называется Брокер
Но брокер сам по себе не управляет устройствами, а лишь является связующим звеном, хранит и передает сообщения. На что поставить брокер? Так как для него не требуется больших вычислительных способностей я решил установить его прямо на роутер. Так как роутер всегда включен и к нему же подключаются беспроводные устройства. Если есть какое-то устройство которое будет работать 24/7 и управлять умным домом, можно воспользоваться им.
У меня уже имелся простенький роутер с 4G модемом. ZBT1626
Прочитав инструкцию на 4pda установил на нее кастомную прошивку OpenWRT. И затем установил на него брокер Mosquitto. В настройках Tasmota вводим ip-адрес mqtt брокера и теперь наши устройства могут общаться меджу собой. В следующих постах расскажу подробнее о настройке MQTT, из чего делал сервер умного дома и какие устройства уже есть в работе
Привет читатели и подписчики! Продолжаю рубрику "Не нравится - сделай сам". На этот раз разговор пойдет о бризере Ballu.
Картинка из интернетов
Началось с того, что купив себе жил.площадь, в ней моему взору открылись сквозные отверстия в стенах комнат рядом с окнами, на которых был установлен простой приточный вентиляционный клапан. Забавная штука, подумал я, и решил их заменить на бризеры. Пошёл гулить в яндекс с вопросом, а какие они вообще бывают и с чем их кушать. Одним из критерием была возможность интеграции в умный дом, в идеале в HomeAssistant, т.к. я строю свой умный дом именно на нём. Выбора не то чтобы много, но среди всех, как мне показалось выделяется Tion, Ballu и Royal. И тут я прифигел от стоимости. Просто сама возможность WiFi подключения прибавляла в стоимости почти х2. Сложив стоимость установки бризеров в каждую комнату выходит очень даже жирно (4 комнаты). Простой попсовый бризер с wifi выходит под 30к денег. Пойдем поищем подешевле. Есть Ballu OneAir 100, который можно найти где-то за 20к денег. А если без WiFi, то имеется Ballu OneAir 80, который можно найти за 12к денег и обслуживаемая им площадь вполне достаточна для задачи.
Внешний вид.
Вот за такую стоимость уже жаба не сильно бухтит. Стал искать информацию про него. Оказалось что это вообще клон бризер Xiaomi BioFamily N80, который само собой с WiFi и MiHome. Но эти Xiomi уже не продают, а там где их еще можно найти - цена кусается. Ладно, в голове стала складываться картинка, что в нашЪ OneAir 80 можно вполне засунуть "мозгов", потратив не фиг много времени и финансов, и выйдет дешевле чем брать "готовое", да и ещё на своей прошивке без левых "облаков". Звучит как план! Надо попробовать.
Заказал для пробы данный девайс. Посмотрел как разбирать и собственно разобрал. Внутри нас ожидает довольно примитивная плата управления.
За качество фото не пинать.
Примитивно до боли в глазах. DC-DC преобразователь 24В- 5В; PIC микроконтроллер, к которому подключен: Пин для ШИМ управления турбиной; Мосфет подающий питание на турбину; Пин включающий нагрев ТЕНа, тоже умеющий в ШИМ; Сенсоры открытия дверцы и шторки, самый простой замкнут-разомкнут; Активный Биззер; светодиоды индикации и тач-сенсоры.
Ну это всё элементарно. Буквально за пару вечеров за парой бутылочек.... эм ..кофе накидал свою схемку с управлением через ESP32, развел плату в требуемые габариты максимально сохранив номиналы, обозначения и даже положения элементов на плате (по приколу), и заказал.
Ваще изи
Платы пришлось делать 2.5 мм в толщину, что бы модуль ESP-wroom-32e можно было монтировать крышкой "вниз", и крышка скрывалась в толще платы, иначе для ESP места просто на плате нет, казалось бы плата большая, а места нет - везде что-то да мешает.
Дождался платы, собрал-спаял. воткнул.
Штат не штат
Единственное пришлось "подушечки" сенсоров переклеить. Но это мелочи.
Встает как к себе домой, ну в принципе ничего удивительного.
Как к себе домой
Все подходит хорошо. Все штатные проводки на местах, Крышечка закрывается. И получается полностью подменная плата.
Прошивку я решил писать на ESPHome, т.к. с другими лень возиться, да и незачем. Если вдруг кому нужен её исходник - посмотреть на нее можно на ГитХабе. Заодно там же найдете полезные ссылочки, если заинтересует.
Итого имеем: 12к бризер, примерно 3к плата, тоесть за 15к денег имеем "умный" бризер, который без каклих-либо костылей интегрируется в умный дом HomeAssistant. Вот и выбираем, 15к или 25к за готовый? Конечно, есть один минус - нет автоматической заслонки, только ручная. Колхозить серву на нее я не стал.
Написав о всём этом в чатике, оказалось, что желающих провернуть со своим OneAir 80 не то чтобы мало, их есть. Есть спрос, сделаю и предложение. первая партия таких плат ушла буквально за час О_о, пришлось заказывать еще партию плат. Вот такое вот кино.
Речь в посте пойдет об устройстве LilyGO T-Embed CC1101 с небольшими доработками.
Дисклеймер: все описанные ниже действия, тесты и атаки проводились только на собственных устройствах или с согласия владельцев тестируемых устройств и сетей, nrf24 jammer использовался только в экранированном помещении, исключительно в рамках тестирования помехоустойчивости личной колонки.
Использование данного функционала в иных целях может преследоваться по закону!
Ну что, мамин хакер, заинтересовался?) Или тебя просто достали колонки с плохой музыкой в общественных местах? Поехали!
ВАЖНО: в посте именно версия CC1101, обычная версия не имеет радиомодулей!
Железо: на борту имеем микроконтроллер ESP32, 2,4ГГц Wi-Fi модуль, Bluetooth, NFC, SUB-GHZ радиомодуль CC1101, ИК приемопередатчик
Прошивка: Bruce 1.9.1. Отключаем на T-embed аккумулятор, идем на https://bruce.computer/flasher, зажав центральную кнопку на девайсе подключаем его к ПК и прошиваемся прямо из браузера за пару минут. Удобно, однако.
Прошивка поддерживает также работу с модулем NRF24, о нем позже. Потребуются навыки небольшого колхоза с паяльником или внешний переходник.
WiFi 2,4ГГц: стандартный набор для тестирования безопасности сетей и разумности сотрудников, к ним подключенных:
Deauther ("глушилка" WiFi): отправка на роутер пакетов деаутентификации, выбивающих все устройства из сети без возможности подключиться обратно, пока идет атака. Можно одновременно с атакой расшарить сеть с таким с таким же названием и открывающимся окном с просьбой ввести пароль от роутера для его перезагрузки, получая на T-Embed введенные юзером данные. Если роутер раздает 2,4ГГц и 5ГГц сети, вышибет только сеть 2,4ГГц. 5ГГц WiFi модуля тут, увы, нет.
Deauth flood: то же самое, но атака сразу на все доступные роутеры.
Beacon: спам названий WiFi сетей.
Bluetooth: тупые хулиганские fast pair атаки на доступные устройства. Вызывает раздражение пользователей, не более.
IR: чтение/сохранение и передача заранее сохраненных/загруженных из интернета ИК сигналов (совместим с файлами от Flipper), выключатель всех телеков одним нажатием.
SUB-GHZ: самое интересное. Захват радиосигналов в достаточно широком диапазоне, их сохранение и ретрансляция, а также воспроизведение файлов сигналов для Flipper (формат .SUB).
Тут начинается веселье и тест на защиту от тупого перехвата всех своих устройств. Итого, копированию и воспроизведению сигнала поддались: дверной звонок, сигнализация от мотоцикла (вот тут я реально расстроился), шлагбаум со статическим кодом (ожидаемо, имеем в итоге один пульт для всех). Файлу с большой базой кодов (перебор брутфорсом) спустя 5 минут сдался шлагбаум со скользящим кодом в гаражах. В целом, функционал позволяет скопировать и эмулировать любой простой радио пульт. А большая база .SUB файлов в интернете дает возможность этот пульт даже не искать. Да, даже от вибратора :)
Для большей дальности модуль можно дооснастить внешней антенной.
RFID: простой функционал чтения/записи/стирания меток. Эмуляцию пока не завезли, но обещают.
NRF24: еще одно интересное применение.
Важно: использование глушилок может быть незаконным!
Это модуль связи 2,4ГГц (на этой частоте работает WiFi, Bluetooth и не только), в котором возможно использование режима Jammer, т.е. глушилки сигналов.
Необходимо припаять его к плате по схеме, чтобы компактно разместить внутри устройства. Покупайте модуль с U.FL разъемом для внешней антенны.
Если вам нужен только функционал WiFi, NRF24 и SUB-GHZ, возможно проще и дешевле купить M5STICK или Cardputer вместе с готовой платой с этими модулями. Однако, такая конструкция будет хрупкой из-за внешней голой платы - потребуется колхозить какую-то изоляцию для нее.
Припаиваем к выводам ESP32 и модуля CC1101
Паяем
Спиливаем ребра жесткости на задней крышке, сверлим отверстие под вывод внешней антенны, втыкаем u.fl – sma пигтеил и собираем все обрано.
Зубочистка в комплекте - для возможности нажать кнопку Reset на плате, не выковыривая аккумулятор.
Включаем колонку и пробуем
Поворачивая «крутилку» на девайсе, можно менять режимы, на блютуз колонки лучше всего влияют режимы WiFi, BLE и RC. Колонка заикается, а то и вовсе глохнет.
Дальность с качественной антенной, например от Baltic Signal – в пределах 10 метров.
При подключении дополнительного антенного усилителя, как на картинке ниже, дальность прилично возрастает.
JS Interpreter: запуск произвольных скриптов на девайсе. На случай, если захотите быстро допилить свой функционал.
BAD USB: притворяется клавиатурой, вводит заранее прописанный скрипт.
Заключение
Аналогичные девайсы можно собрать на основе других устройств, таких как M5 Cardputer, M5StickC2, “cheap yellow display” и т.д. Полный список совместимых с прошивкой плат есть на сайте Bruce.
Я никого ни к чему не призываю и напоминаю о незаконности некоторых атак и тестов, если они производятся без разрешения на чужом оборудовании.
Ценник на все это безобразие – порядка 5000 рублей. На Озон Глобал было дешевле, чем на Али, на момент моего заказа. Ссылок не дам, не реклама.
Привет, уважаемые пользователи Пикабу! Здравствуйте, любители таких тем как DIY ( 'do it yourself' - сделай сам), IoT ('Internet of things' - интернет вещей) и так далее.
Пару лет назад я обзавелся новым хобби, точнее, воскресил старое - микроэлектроника и
радиотехника. Что и как из этого получилось я опишу далее, а пока вот фото для затравки.
Сейчас, конечно, с паяльником сидеть гораздо приятней и проще чем 20+ лет назад. Все радиодетали в доступности, интернет просто кишит различной информацией, необходимой для того, чтобы начать что-то изучать на эту тему. Кроме того, стали доступны всякие вещи для создания конструкций, корпусов. Я уже молчу об огромном количестве готовых наборов для начинающих, которые могут заинтересовать этой увлекательной и полезной темой подрастающее поколение. Интерес к робототехнике также подогревается и тем, что она тесно связана с программированием, что как никогда актуально. Начинать обучение программированию, когда имеешь дело не с абстрактными данными а с чем-то, что можно пощупать, запустить или отправить в плавание - на мой взгляд хорошая идея. Это была минутка агитации и если вам стало интересно, какие вещи, например, можно сделать в наше время домашних условиях своими руками, пожалуйста, продолжайте чтение.
Прежде чем продолжить, хочу сказать, что не считаю, что тема легкая и что это для всех, ведь каждый человек уникальный со своими особенностями. Ведь нужно обладать определенными качествами и образованием, чтобы делать определенные вещи. Но есть один важный момент: никогда не поздно чему-то учиться, и при правильном подходе, если какая-то тема стала вам интересна можно чего-то в ней добиться. Не каждый станет музыкантом, но если музыка нравится, можно для начала хотя бы научиться в ней разбираться.
В марте 2021 года я начал проявлять интерес к Arduino. До этого я всегда считал это чем-то недостижимо сложным, чем-то на грани физического и цифрового миров. Я программист и имею небольшие навыки в радиотехнике, чтобы, собрать, например усилитель ШИМ-сигнала, или подружить 3.3v логику с пятивольтовой, или сделать гирлянду на елку, или свет для своих перцев, которые выращиваю дома. То есть имею базовые представления о работе полупроводников и имею навыки обращения с паяльником. Радиотехнику я забросил давно, но еще раз скажу, что за 20 с лишним лет многое изменилось, стало значительно легче и доступней, поэтому вернуться в этот удивительный мир транзисторов, резисторов, конденсаторов, микросхем и катушек мне было не сложно. Arduino, как я писал, мне казалось сложным, поэтому для начала мне пришлось купить стартовый набор, как например вот этот:
И.... сделать конечно, же "мигалку". Моему восторгу от наблюдения за мигающим светодиодом не было предела и меня затянуло, ведь до этого частоту мигания на К155ЛА3 в юности я мог регулировать только конденсатором и резистором, а теперь я мог сделать это программно, и это казалось нереально крутым. Часть того, что из этого вышла, я и опишу далее.
Чтобы не потерять интерес к новой теме мне надо было поставить перед собой цель. Что-то, что я мог бы использовать с пользой или для игры. Что-то, что сочетало бы в себе сразу несколько технологий и подходов. Вероятно я где-то увидел, какие прикольные танки делает народ и тоже решил сделать нечто подобное. В интернете много статей и роликов на тему создания подобных вещей. Кто-то использует Arduino, кто-то другие платформы вроде Raspberry Pi (и подобных Orange/Banana/Rock). Кто-то использует и то и другое и можно без хлеба. Все зависит от цели. Моя изначальная цель была создание танка, которым можно было бы управлять по BLE с айфона или андроида, используя свое приложение. Под управлением я понимал движение вперед, назад, в стороны и разворот. Для гусеничного хода это регулируется скоростью и направлением вращения моторов, расположенным по сторонам. В этот момент я наконец-то узнал что такое ШИМ и как его применять. И для меня вдруг стало понятно, почему почти вся эта техника с приводами на заводах так пищит :). Кроме того, требовалось как-то взаимодействовать по Bluetooth, но тут особой проблемы не было, поскольку по работе я работал с iBeacon и имел какие-то представления о том, что и как делать. Танк должен был быть автономным, ведь глупо было бы в наше время управлять чем-то по воздуху, если это что-то ограничено длиной провода до источника питания :). Поэтому также пришлось изучить и правила работы со сборками Li-Ion батарей.
Итоговая сборка первой версии танка, над которой я работал пару недель состояла из:
- Три Li-Ion аккумулятора, собранные в батарею 3S с платой BMS для защиты и балансировки заряда.
- Один драйвер мотора на L298N
- Одна Arduino UNO из стартового набора
- Bluetooth модуль HM-10 (поскольку он был для меня доступен и умел в BLE, что для меня было критичным)
- Шасси танка с AliExpress. Там 2 мотора, гусеничные полотна, шестерни и крепеж для соединения конструкции. Классная вещь!
- Индикатор уровня заряда Li-Ion 3S батареи.
К сожалению, чтобы найти фотки той версии танка надо перерыть сотни гигабайт неупорядоченных картинок, но зато у меня сохранилось видео, где я сконцентрировал все свои умопомрачительные навыки в видеомонтаже (осторожно, ирония).
Управлял я этим делом пользуясь акселерометром, держа телефон как геймпад в руке и наклоняя его в сторону, куда танку надо было повернуть. Было прикольно. Пришлось решить несколько интересных задач, вроде принудительного останова механизма при потере сигнала, продумать легкий протокол данных для отправки команд и как-то попытаться синхронизовать поток этих самих данных в условиях отправки нескольких десятков команд в секунду (я стремился к максимальной отзывчивости).
Программа (или скетч, как говорят ардуинщики) потребовала воскресить навыки написания на C/C++, и я даже собрал некое подобие библиотеки для того, чтобы быть ближе к плюсам. Назвал ее эту штуку BoardKit, положил к себе в Bitbucket и никому не показывал, потому что чувствовал, что ходу этой теме не будет. Итоговая программа в .ino файле выглядела примерно вот так (заранее прошу прощения за выкладывание кода в скринах из VS Code, но там нет ничего, что было бы неудержимо хотелось скопировать :) )
Ах, да, изначально я отрицал такие IDE как VS Code и писал в Xcode, а компилил и заливал через Arduino IDE, что добавило мне определенных сложностей, но помогло хотя бы работать в более-менее нормальном (а главное привычном) IDE, но на таких извращениях мы не будем заострять слишком много внимания.
MasterScheme тут - это модель платы. Она должна была описывать составляющие ее компоненты и логику взаимодействия между ними. Ашник соответствующего класса выглядел примерно вот так:
При чем тут Habanero? Я люблю острые перцы и решил, что интересные модули буду называть именем сорта перцев. Просто ради прикола и какого-то порядка в именовании. Саму логику (*.cpp) я прикладывать не буду, потому что пост и так обещает быть довольно большим, но если тема станет интересна аудитории, то я запилю отдельный пост, приложив исходники на гитхабе не обещая что они соберутся, так как я больше их не использую, и потому что изврат с Xcode, помните? :) Хотя что-то подсмотреть в них наверное можно.
Так или иначе, мой танк поехал. Правда ездил он наверное пару дней, потому что окрыленный своим успехом я начал исследовать другие, связанные с робототехникой моменты, такие как серво-приводы, датчики приближения, датчики расстояния и многое другое. Я аугментировал танк пока было время, даже как-то приделывал к нему управляемую руку - хваталку и в конце концов переложил его на Arduino Mega, чтобы можно было независимо использовать ШИМ для моторов и сервоприводов. Обвесил ультразвуковыми датчиками расстояния и попытался научить его объезжать препятствия, но потом в итоге, вдоволь наигравшись поставил его на полку до лучших времен. Вот такой он был на тот момент.
Где-то год я в свободное время активно занимался Raspberry/Orange/Rock PI, Full-Stack разработкой собственной системы умного дома в квартире в симбиозе с HomeKit и управлением полива и мониторингом погоды на дачном участке с видео-наблюдением. Сейчас у меня довольно внушительная система, которую я постараюсь описать отдельным постом, если это будет кому-то интересно. Если коротко, то это бекенд на основном хосте под Docker на Raspberry Pi, который по MQTT управляет переферийными устройствами на ESP32-WROOM (например включение света в спальне), пишет в MongoDB, расположенную на RockPI 4 статистику по температуре и влажности в комнатах и на улице, а также по количеству людей в комнате. Распознает людей система на том же хосте Raspberry Pi при помощи Intel Neural Stick 2 и OpenVINO. Почти всем этим делом можно управлять с веба под тем же докером. Веб доступен в локальной сети. Бек на Express, фронт на React. И все это дело скрепляется несчетным количеством bash-скриптов. Тема, в общем-то тоже очень интересная, хотелось бы, чтобы читателям стало интересно и про это почитать :)
Вернемся к главной теме: роботанку. C завершением дачного сезона я решил его воскресить, но уже с учетом технологий, которые я освоил за тот год, пока он пылился на полке. Во первых, я окончательно ушел от Arduino, и от Esp8266, коих за год имел неосторожность накупить на алике за дешево по акциям приличное количество. ESP32 значительно лучше и современней. Прошивки для ESP32 я делаю на основе Mongoose OS - великолепная вещь, которая позволяет во первых, писать на MJS, что мне было приятней, чем C или MicroPython, а также уже имеет в себе интерфейсы для работы с множеством IoT штук на более-менее высоком уровне, чтобы не тратить время на то, что я назвал BoardKit'ом :). Также я решил встроить танк в свой умный дом, пожертвовав тем самым отзывчивостью. А именно управлять им, как я управляю светом в какой-либо комнате: какой-то клиент шлет HTTP запрос с неким параметром на бекенд, он по MQTT отправляет сообщение с обновленным конфигом в брокер (кстати, Mosquitto наызвается), тот рассылает по устройствам, которые подписаны на нужный топик, устройство получает обновленный конфиг и переходит в новый стейт. Опять же, если будет интерес, я обязательно опишу более детально и пошарю исходники. Схема довольно громоздкая, но универсальная, стабильная и расширяемая. Также у меня давно скучала одна плата ESP32-CAM и я решил всунуть в танк и ее, чтобы видеть куда тот едет (используя подсветку, если темно), управляя без необходимости его видеть. Плюс надо было уйти от необходимости установки мобильного приложения в сторону возможности управления с веба, тем более опыт создания WEB-приложений накопился довольно значительный. А еще надо было поработать над аварийной остановкой механизма в случае упора в препятствие или переворота. Ну и еще я хотел видеть уровень заряда батареи в вольтах а не в полосочках, как было раньше. Также я пробрел дешевый лазерный модуль и решил его тоже использовать для 'пиу-пиу бластера' для котиков. Вот двое из трех:
По мере создания переферийных устройств для умного дома я насобачился делать всякие коробочки из вспененного ПВХ на любой вкус и цвет. У меня есть 2 листа: черный и белый, толщиной 3 мм. Клею я их клеем Cosmofen SL-660. Записывайте лайфхак: клей белый и чтобы склеивать черный лист ПВХ так, чтобы не было белых полос на месте склейки я добавляю порошок для лазерного принтера прямо в клей, который выдавливаю порционно в шприц, а уже из шприца выдавливаю когда мне нужно. Эти нехитрые манипуляции позволяют создавать коробочки почти любой сложности на приличном уровне. Вот например я делал 'умный' диммер на 2 канала в довольно простом, но аккуратном корпусе:
Поэтому, вдохновившись Cybertruck'ом от Tesla (шутка, конечно) я запили в итоге это.
Моторами, вспышкой для камеры, лазером и сбором данных с ИК-датчиков препятствий и коммуникацией с остальной частью умного дома занимается прошивка для ESP32-WROOM DevKitC. Вот такая:
Потоковый сервер с камеры - на ESP32-CAM. Вот такая:
Исходник прошивки для нее прям один-в-один с примеров, которые предлагает Arduino IDE для AI Thinker. Единственное что я сделал - это исправил качество видео по умолчанию и добавил дополнительные попытки подключения к вайфаю, если тот не может подключиться в течение некоторого времени. Я не уверен, что это работает, потому что подебажить не хватило времени, но вроде хуже не стало :D
Остальная начинка, это все те же 3 Li-Ion батареи, BMS, L298N, датчик тока INA219, парочка полевиков для мощного светодиода вспышки и включения ESP-CAM и 3 ИК-датчика препятствий: спереди, сзади и снизу, чтобы остановить моторы при перевороте или подъеме.
Часть WEB-страницы для управления танком в итоге выглядит вот так:
В центре - кнопка останова. Стрелочки - думаю понятно. Каждое нажатие на стрелочку добавляет или отнимает X% мощности на нужной гусенице. В верхнем левом углу - включение лазерной указки, в верхнем правом - переключение между обычным и 'спортивным' режимом
По сути, спортивный режим - это просто бОльшие значения X на которые мы изменяем мощность двигателей при каждом нажатии на кнопку управления. Предназначен для езды в зале, где места много и не требуется точность прохождения 'узких' участков. Если нужна точность, тогда включаем обычный режим и на самой низкой мощности черепашьим ходом ювелирно заворачиваем куда надо.
Конечно, над внешним видом еще можно поработать. Убрать сопли клея со стыков, сгладить углы. Вид сзади.
На ИК датчики надеть колпачки - экраны (если кто знает как они называются, скажите, пожалуйста 🙏 ), что должно исключить ряд моментов, когда датчик не срабатывает когда нужно.
Короче, нет предела совершенству, но в таком виде его уже не стыдно показать обществу :)
Бесспорным и сильным недостатком этого девайса является его жесткая привязка к моей домашней сети. Но при желании можно и от этого избавиться. Пока меня это не беспокоит. Серийное производство я налаживать не собираюсь и делаю чисто для себя в качестве хобби и самообучения в свободное от работы время.
Прошу прощения за большое количество текста, ошибки и мизерную часть технической информации, но, повторюсь - если будет заинтересованность, я обязательно опишу на более детальном уровне ту или иную часть системы, о которой вел речь. Кроме того, если будут какие-то вопросы в комментариях, то я по мере сил и знаний постараюсь ответить. А напоследок еще немного видео с моментами управления танком.
Дорогие друзья, для чего я сделал этот пост? Тема кажется мне интересной и я уверен, что многим тоже зайдет. Кроме того, у меня накопился некоторый опыт в вопросах DiY, IoT и при необходимости если будут какие-то вопросы, я могу попробовать ответить, или подсказать… Поскольку знаю, каково это искать решение какой-то дурацкой проблемы на форумах 10-ти летней давности на условном китайском языке. Кроме того, лично мне очень понравилась та связка технологий, которую я использую в своём умном доме, возможно она поможет кому-нибудь решить какие-то технические вопросы. Ну и конечно же, послушать дельные советы ребят, которым есть что сказать и направить на путь истинный.
Недавно захотелось сделать что-нибудь необычное и решил сделать часы в стиле Fallout. Функции смарт часов:
• Пульсометр (с оксиметром и измерением температуры тела)
• Wi-Fi, BLE.
• 1,3-дюймовый IPS-дисплей
• 3 сенсорных кнопки
• 370 мАч Li-Po
• Собственная стилистика Fallout
• Я нарисовал интерфейс, на котором отображал основные элементы, такие как: время, температура тела, время заряда аккумулятора. Еще рисовал различные анимации и переходы между меню. Я постарался сделать интерфейс максимально приятным и интересным.
• На данный момент часы в спящем режиме потребляют 1mA. На одной зарядке часы могут работать от 7 до 12 дней. Я также планирую заменить свой линейный преобразователь, чтобы снизить потребление тока.
• Смоделировал простой футляр и распечатал его на 3D-принтере. В будущем планирую добавить в него элементы декора.
• В будущем планирую добавить еще меню, анимацию, GPS с отображением на карте, а также добавить конвертер USB-TTL.
На видео вы можете увидеть демонстрацию того, как работают часы. Хочу узнать ваше мнение о часах. Может, что-то надо переделать, добавить или убрать? Жду ваших комментариев, хорошего вам всем дня :)