Привет, уважаемые пользователи Пикабу! Здравствуйте, любители таких тем как 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-ти летней давности на условном китайском языке. Кроме того, лично мне очень понравилась та связка технологий, которую я использую в своём умном доме, возможно она поможет кому-нибудь решить какие-то технические вопросы. Ну и конечно же, послушать дельные советы ребят, которым есть что сказать и направить на путь истинный.
Спасибо за внимание, будьте здоровы!