В этом году я планировал открыть свой образовательный центр технической направленности (по большому счету кружек робототехники и программирования с продвинутыми программами). К сожалению, идею пока пришлось отложить, но решение одной из проблем я описал в этой статье.
На этапе планирования учебных программ я столкнулся с проблемой выбора контроллера для обучения детей среднего школьного возраста (5-8 класс). Для младших уже существует Wedo, и этот конструктор хорошо себя зарекомендовал. Старшие уже хорошо усваивают Arduino и 3D-моделирование. А для средневозрастных ребят, исходя из своего почти восьмилетнего опыта преподавания робототехники, хотелось бы что-то среднее. Чтобы можно было программировать и блоками (желательно еще сразу видеть код), и напрямую в Arduino IDE. При этом в удобном защищенном корпусе, с минимизированным шансом пораниться или что-то сжечь, и возможностью собирать робота из готовых деталей.
Для этих целей все используют EV3, но мне не нравится программирование только блоками, спорные по качеству датчики, монструозные по размерам итоговые сборки (в основном из-за размера контроллера), ну и, честно говоря, цена. Как вариант с адекватной стоимостью, использовать китайский kazi EV6, но остальные проблемы остаются. Я знаю, что можно программировать на microPython, но это костыль, и все равно детей надо готовить к Arduino.
В этом плане мне понравился образовательный набор от RED (хотя когда я его первый раз пощупал, долго от него плевался). Их контроллер One, по сути, шилд для ардуины с выведенными портами и встроенными драйверами двигателя, в красивом пластиковом корпусе (в первых партиях напечатанном на 3D принтере). Контроллер совместим с лего деталями, и поставляется с немного измененным ресурсным набором 45544 и спорным набором Arduino датчиков, тоже в корпусах. А их среда программирования реализована на принципах scratch, но по сути дублирует ArduBlock.
1/2
Контроллер RED. Распиновка, на мой взгляд, бредовая и немного неудачный корпус.
Однако у этого решения тоже существуют проблемы. Начиная от странной распиновки, заканчивая не самой удачной конструкцией корпуса. Большинство проблем они решили в контроллере X, но зачем-то перевели его с аккумуляторов на батарейки, закрыли возможность программировать из ArduinoIDE и взвинтили ценник.
В общем, решил, чем я хуже? Сделаем свой контроллер!
Первым делом я занялся проектированием платы. При работе с обычной Arduino у ребят чаще всего возникают следующие проблемы: недостаток портов питания (все время приходится изобретать какие-то шины) и большое количество проводных соединений. Поэтому от неё мне нужно было наличие встроенных драйверов для двигателей и адекватной распиновки. Первый вариант схемы на базе Arduino nano я набросал минут за 30. Сильно мудрить не стал, и просто использовал схемы проверенных модулей для Arduino. В качестве драйверов я использовал микросхемы l9110s, которые работают по схеме Н-мост, для стабильных 5в просто стабилизатор L7805, немного резисторов и конденсаторов согласно схемам (пару которых забыл), диодик для защиты от переполюсовки. Также быстро развел печатку, и плата rev-1 готова!
На драйвера задействованы порты 3,9,10,11. Немного нерационально, но это для совместимости с red. Остальные порты постарался вывести максимально удобно, добавив к каждому шину питания.
Получившаяся распиновка (на картинке плата rev-2, но распиновка не изменилась)
Решил попробовать заказать изготовление. JLCPCB, как известно, с Россией сейчас не работает. Но легко нашелся аналогичный производитель, NextPCP. У них аналогичный сервис, цены немного повыше, зато оплата через AliExpress путем покупки нескольких лотов по 1$. Сделал заказ на изготовление 10 плат, и спустя месяц они у меня.
1/2
Запаял минимальное количество деталей для оценки габаритов и занялся проектированием корпуса.
При проектировании корпуса старался победить все проблемы red-а, которые мы (в основном мои коллеги) накопили за время работы с ним. А именно:
Абсолютно дурацкое крепление крышки аккумуляторов 14500 на двух винтах, из за чего ей никто не пользуется, т.к. аккумуляторы надо часто доставать на зарядку.
Неудачно расположенное крепление к lego (меня попросили его поставить пониже, т.к. робот часто просто цеплял пол днищем этого контроллера).
Отсутствие кнопки перезагрузки.
И немного неудобное расположение кнопки питания.
Более-менее сносный вариант корпуса получился почти с третьего раза.
1/5
Первые варианты корпуса
1/3
Крышка батарейного отсека получилась довольно удачной, в виде сдвигающейся шторки. Вышло и надежно, и удобно.
К этому моменту ко мне доехал ресурсный набор и появилась возможность тестировать этот контроллер, чем я и занялся. Допаял схему, на удивление все заработало, и сразу от аккумуляторов. Но при проверке драйверов оказалось, что один мотор нормально не работает. Перебрав несколько микросхем l9110s, которые я заказывал в прошлом году, оказалось, что почти все они бракованные. В итоге заработали сдутые с живых плат драйверов двигателя, чему я очень обрадовался.
Собрал первую телегу
Но счастье было не долгим!
В первый же вечер, играясь этой телегой через bluetooth, я спалил оба драйвера :D.
Оказалось, я просто забыл о конденсаторах между выходами на моторы, из-за чего драйвера и прошибало. Исправил этот момент в схеме. А на текущей железке просто распаял их между контактами.
1/2
Собрал телегу посолиднее, люблю гусеничные модели. Спроектировал сразу корпус для hc-06. Мучил её несколько дней (и до сих пор мучаю), больше проблем с драйверами не выявил.
1/2
Выглядит поинтереснее. Также заметен тот самый добавочный конденсатор по шине +5V
Еще оказалось, что 9-ый порт не может выдавать шим сигнал при задействовании первого таймера для сервопривода. Из-за этого один мотор не работал. Просто поменял в схеме 3 с 9 порты местами.
Последней проблемой, с которой я столкнулся, оказалась перезагрузка Arduino при резкой нагрузке на аккумуляторы. Выяснилось, что конденсатора всего в 0.1мкФ недостаточно по шине 5в (интересно, почему). Поменял его в схеме на обычный 2-х выводной электролит на 100 мкФ, а на текущей плате просто напаял поверх.
На этом найденные проблемы с платой закончились. Я развел плату более грамотно, увеличил размеры smd компонентов (на первой плате замучился их паять), поправил некоторые надписи. И заказал производство второй ревизии платы.
Вторая ревизия платы
Параллельно с этим велась доработка мелких косяков по корпусу и добавление всяких украшательств. И, спустя всего пару тестовых вариантов...
1/2
"Пара тестовых вариантов"
Я получил корпус, который хотел! Корпус (да и весь контроллер) спроектирован так, чтобы свести к мнимому шанс порчи контактов или замыкания. Старался чтобы было понятно, какие контакты за что отвечают, но они ещё дополнительно будут отмечены разными цветами гребенок. Порты моторов специально расположены со смещением, чтобы снизить риск попадания на соседние порты. Корпус имеет встроенный отсек для аккумуляторов формата 14500 и LEGO крепления с 3-х сторон. Кнопка включения расположена выше проводов, её так удобнее нажимать.
1/3
Наклейка не финальная (просто чтобы порты видно было). Кнопки будут белые.
В планах сделать набор на базе этого контроллера с немного соревновательным уклоном, с возможностью собрать робота для езды по линии, для прохождения лабиринта или перетаскивания предметов. Программировать можно в ArduBlock, ArduinoIDE и в любых других средах с поддержкой Arduino nano.
На данный момент ко мне едут платы второй ревизии. А я пока подбираю датчики и делаю для них корпуса. Точно будут пара ИК датчиков, лазерный и пара УЗ дальномеров, Bluetooth, и всякая мелочь типа модуля кнопки, rgb-светодиода и зумера. Есть проблема с заказом относительно больших партий ресурсных наборов и датчиков, с этим пока разбираюсь. Еще сделал группу в ВК про проекту, там публикую процесс разработки.
Если интересен проект, пожалуйста поддержите его. Буду рад подписке на группу :)
Пожелания и предложения тоже очень приветствуются!
Подержите моё пиво... Два года усердно развиваем свой программно-хардварный проект: с нуля разработали и запрограммировали, стали резидентами Сколково и выстроили собственное производство. И что мы постоянно слышим? "Фу, Китай!", "Да я такое за вечер на Arduino соберу!" (wat?), "Украли идею и выдаёте за своё", "Распил бюджетных денег"... тоже подгорает.
Давайте по-порядку:
"Украли идею" – мы никогда не скрывали, что идея не уникальная и взята у канадской компании Activate Games после вирусных видео на пикабу. Только мы сфокусировались конкретно на пиксельном полу собственной разработки и сделали большой упор на IT-составляющую: разработали уникальную систему разработки игр на Lua (пост с околонулевым рейтингом); строим свою, можно сказать, мини CRM для управления локациями; сделали механизм автоматизированной доставки обновлений и мониторинга состояния всех устройств сети и т.д. Но идею цветного пола, конечно, украли, хер поспоришь.
"Разработка говно, я могу лучше" (но мне лень) – да пожалуйста, делайте! Мы будем только рады коллегам по цеху и новым конкурентам! Но за два года появилась только одна команда, кто сами сделали похожий продукт. Снимаю перед ними шляпу, ребята достойные инженеры. Остальные просто пытаются перепродавать Китай, т.к китайцы быстро прочухали фишку и просто заваливают рынок своим оборудованием... только вот софт у них говно и игр почти нет.
"Производство в Китае, значит не ваше" – таковы реалии, что в РФ подобное производство делать просто нерентабельно, невозможно тягаться с Китаем. Но кто-нибудь вообще представляет, как сложно организовать закупку и производство десятка комплектующих, сборку конечного изделия и всю логистику внутри чужой страны? Производство печатных плат, датчиков, кабелей, литьё нескольких видов собственных корпусов и т.д. А после этого пройти сертификацию и официальную таможню РФ? Да, мы возим свой продукт в белую, слабо? Вот и не*уй. Тут же, собственно, по мнению обывателя, и идёт "распил" бюджетных денег в виде субсидий Сколково на таможенные пошлины.
А начинали с абсолютного нуля в пыльном гараже, выпиливая и шлифуя первые пиксели из дерева (пост). И также никто не видит сотни бессонных ночей отладки (ТГ пост) и ночные обновления софта, чтобы утром люди пришли играть на чуть более качественный продукт. Прямо сейчас как раз не сплю, потому что выкатываю важное обновление.
"Зарабатываете миллионы на хайповой теме" – из-за того, что мы открыто публикуем все финансы в телеграм канале (график прошлого года), у людей складывается впечатление, что мы неплохо зарабатываем. Но по факту, мы практически всё реинвестируем обратно в проект и наращиваем команду. За два года мы ещё ДАЖЕ НЕ ВЕРНУЛИ свои вложения (а вложили на старте порядка 7 млн личных средств). У меня, как и у партнёра, есть обычная работа, которая позволяет кормить семью. А бизнес это так, для души. Ни о каких яхтах речи не идёт. Месяц назад вот впервые выбрались вместе на неделю в Териберку на кайтах покататься. Успех ящитаю.
В заключение желаю всем разработчикам искренне "болеть" своим делом и не останавливаться, открыто делиться своими наработками и проще реагировать на хейт. Нас мало, но мы в тельняшках! В нашей стране очень большой инженерный потенциал, но, к сожалению, ботаном всегда было быть не круто и это планомерно подавлялось окружением с детства, но ситуация с современными айтишниками сильно меняет текущие устои, что не может не радовать!
Я сам вышел из таких "ботанов": в школе увлекался программированием, после института устроился обычным инженером на завод, позже ушел в айти за деньгами. Сейчас развиваю свой проект с абсолютного нуля, о котором сам же лично рассказываю в телеграм канале, в том числе со всеми финансовыми подробностями становления бизнеса.
Кому интересно, тг канал @pixel_quest, имею право. По возможности стараюсь писать про техничку и детали разработки, но не всегда хватает времени и действительно интересного материала, становится всё больше и больше рутины, а откликов читателей не так много.
Программное обеспечение Easy HMI, предназначенное для создания пользовательских интерфейсов (HMI), получило значительное обновление. Разработчик адаптировал ПО, расширив его возможности: теперь пользователи могут не только работать с готовыми дисплеями линейки AT2432S028-R, AT3248S035-C, ESP32-2432S028R, но и самостоятельно собирать HMI-устройства, комбинируя доступные платы ESP32 и различные TFT-дисплеи.
Гибкость выбора компонентов
Ключевым нововведением стала поддержка широкого спектра TFT-дисплеев с интерфейсом SPI. В ходе разработки были успешно протестированы модели диагональю от 1.8 до 2.8 дюймов с разными драйверами (ST7789V, ST7789VW, ST7735S, ILI9341) и разрешениями (128x160, 240x320, 320x240). Теоретически, поддерживаются практически любые SPI TFT-экраны размером от 0.9 до 4 дюймов, включая варианты с сенсорными панелями (например, на чипе XPT2046).
Упрощенная настройка и прошивка
Поскольку разные дисплеи имеют свои особенности (цветовые схемы, ориентация, зеркальное отображение), в программе Easy HMI появились расширенные настройки драйверов. Это позволяет точно сконфигурировать ПО под конкретное оборудование.
Процесс загрузки прошивки на плату ESP32 также был усовершенствован. Теперь это можно сделать прямо из интерфейса приложения Easy HMI (версии 0.1.1 TFT и выше): достаточно выбрать COM-порт подключенной платы, указать файл прошивки (.bin) и нажать кнопку "Загрузить". Важно использовать плату на чипе ESP32 (без суффиксов S2, S3, C3 и т.д.) и убедиться, что COM-порт не занят другими программами. Предусмотрены как бесплатная прошивка (для создания информационных дисплеев), так и платная (для проектов с сенсорным управлением).
Подключение и использование
В статье приводится базовая схема подключения TFT-дисплея к ESP32. Собранное устройство можно использовать как полноценный HMI-дисплей, управляя им с внешнего микроконтроллера через UART2, либо задействовать экранные кнопки для управления выводами GPIO самой ESP32 (например, GPIO 4, 23, 18).
Для создания проектов можно использовать существующие уроки по Easy HMI, AT HMI или визуальную среду программирования ArduBlock. Важно отметить, что прошивка Easy HMI не блокирует плату: пользователи в любой момент могут загрузить свой собственный код, написанный в Arduino IDE, а затем при необходимости вернуться к Easy HMI, повторно прошив устройство.
Российский компьютер Antex Gate, разработанный энтузиастами и использующий модуль Raspberry Pi CM4, теперь совместим с новым Raspberry Pi Compute Module 5 (CM5).
AntexGate – это компьютер, выпускаемый в России на базе Raspberry Pi CM4 CM3 уже несколько лет.
Интерфейсы: Gigabit Ethernet, USB 2.0, HDMI, PCIe Gen 2 x1
Теперь, по предзаказу у разработчиков Antex Gate, можно приобрести компьютер с установленным Raspberry Pi CM5. Это значительно расширяет возможности устройства.
Краткие характеристики Raspberry Pi Compute Module 5 (CM5)
Процессор: Broadcom BCM2712 (4 ядра Cortex-A76, ARM v8.2-A, 2.4 ГГц)
Оперативная память (RAM): 4 ГБ, 8 ГБ или 16 ГБ LPDDR4X-4267
Хранилище: 16 ГБ, 32 ГБ, 64 ГБ
Основные интерфейсы:
PCIe Gen 2 x1 (совместимость с CM4)
2× USB 3.0 (вместо USB 2.0 на CM4)
2× HDMI 2.0 (4K@60, вместо одного на CM4)
2× MIPI CSI/DSI (камеры/дисплеи)
Gigabit Ethernet
Wi-Fi 6 (802.11ax) и Bluetooth 5.0 (в версиях с беспроводными модулями)
Единственным ограничением совместимости между платой AntexGate и Raspberry Pi CM5 является невозможность использования внутреннего Watchdog таймера. Все остальные интерфейсы и разъемы полностью совместимы.
Благодаря этому, на базе компьютера Antex Gate теперь можно создавать рабочие места для решения широкого спектра задач, включая системы автоматизации, обработку и распознавание изображений, а также другие ресурсоемкие приложения, доступные благодаря возможностям Raspberry Pi CM5. По данным Jeff Geerling, CM5 в 2-3 раза быстрее CM4.
Микроконтроллер ESP32 благодаря своим возможностям Wi-Fi давно стал любимцем разработчиков проектов Интернета вещей (IoT). Одной из ключевых задач в таких проектах является синхронизация времени. Устройство должно уметь определять дату и время с высокой точностью, чтобы использовать временные метки или планировать задачи. С этим успешно справляется протокол сетевого времени (NTP), который доступен для Wi-Fi-устройств, включая ESP32.
Что такое NTP, и зачем он нужен?
Протокол сетевого времени (NTP, Network Time Protocol) — это инструмент для синхронизации часов между устройствами в сети, который обеспечивает точность до миллисекунд. С помощью NTP ваш ESP32 и другие устройства могут согласовать время с глобальными серверами, к примеру, pool.ntp.org. Этот сервер доступен всем пользователям, а любое устройство, выступающее клиентом, может получать от него текущее время.
Как это работает?
ESP32 запрашивает сервер на предмет времени, отправляя запрос NTP. Сервер возвращает ответ, содержащий точную дату и время. Затем микроконтроллер определяет локальное время, используя заданные часовой пояс и при необходимости смещение на летнее время. Весь процесс занимает считаные миллисекунды.
Настройка NTP-клиента с использованием Arduino IDE.
Для успешной работы ESP32 потребуется сначала настроить среду разработки Arduino IDE. В руководстве на сайте Arduino-tex.ru подробно объясняется процесс установки настроек для ESP32. После подготовки вы сможете использовать встроенные стандартные библиотеки ESP32, такие как time.h и WiFi.h, чтобы отправить запрос к NTP-серверу и получить точное время.
Помимо этого, важно задать следующие параметры:
NTP-сервер: обычно используется pool.ntp.org, но доступны и региональные серверы, например, ru.pool.ntp.org.
Смещение времени от GMT: например, для Москвы (UTC+3) нужно указать 10800 секунд.
Учет летнего времени: если в вашем регионе используется переход на летнее время, добавьте 3600 секунд (1 час), или оставьте 0, если летнее время не применяется.
Пример кода.
Чтобы проверить работу NTP-клиента, достаточно загрузить специальный скетч на ESP32. В статье вы найдете полный программный код, который содержит описание всех настроек, подключение к Wi-Fi, запрос времени с NTP-сервера, а также его вывод в Монитор последовательного порта.
Ключевые функции:
WiFi.begin(): подключение к сети Wi-Fi.
configTime(): установка конфигурации для NTP (сервер, смещение GMT, учет летнего времени).
getLocalTime(): получение синхронизированного локального времени.
Важные моменты.
Стабильность интернета: ESP32 получает время с сервера только при наличии активного подключения к Wi-Fi.
Настройки часового пояса: для уверенности в правильности локального времени всегда проверяйте значение смещения GMT для вашего региона и актуальные правила перехода на летнее время.
Энергопотребление: если вам не нужно поддерживать постоянное интернет-соединение, его можно отключить после синхронизации времени, что уменьшит расход энергии устройства.
Преимущества использования NTP.
Этот метод прост и универсален, поскольку не требует дополнительных аппаратных модулей, таких как часы реального времени (RTC). Он идеально подходит для проектов, которые имеют постоянное соединение с интернетом и в которых допустимо периодически обновлять время.
Ограничения.
Если ваш проект должен предоставлять точное время в условиях отсутствия интернета, использование NTP может быть неудобно. Для автономной работы рекомендуются внешние часы реального времени (RTC) — например, модуль DS3231.