Почему не Arduino

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

  1. Неудобный конструктив и большой физический объём набора из нескольких плат (базовая плата Ардуино + шилды). Базовая плата Ардуино включает в себя микроконтроллер Atmel с обвязкой и переходник USB-UART, который используется для прошивки и связи с компьютером. Больше ничего. Предполагается, что к плате всё необходимое подключается при помощи шилдов (shields, так называются платы расширения). Шилды либо надеваются сверху (получается бутерброд), либо подключаются проводками. Крепёжные отверстия на базовой плате есть, хотя и неудобные, а на шилдах - как повезёт. Поэтому всё нужно закреплять как-нибудь. Из-за всего вышеперечисленного конструктив нашего устройства сильно зависит от размера и формы этого набора. Базовая плата имеет немаленькие габариты, а если добавить шилды, то объём электроники (именно трёхмерный объём) возрастает вдвое или больше. При этом бОльшая часть пространства не используется, потому что между платами ещё огромное расстояние для разъёмов.
  2. Ненадежность подключения. Большое количество разъёмов сильно снижает надежность. Проводки и контакты на плате — это дешёвые штыревые разъемы без фиксации: они плохо противостоят вибрации, поэтому их нужно закреплять термоклеем. В итоге всё опутано проводами, провода отваливаются непонятно где, всё перестает работать. Шилды тоже на разъемах, контактов — несколько десятков. Всё это изрядно снижает надежность. А у нас ролевики, они носят это на себе, бегают, роняют, падают в грязь, сверху льется дождь… Большая зона риска.
  3. Функционал. В Ардуино используются разные микроконтроллеры ATmega: 48, 328, 2560. Все они восьмибитные, объём ОЗУ от 1 до 8 кБайт. Из периферии есть по одной шине SPI и i2c, а также 1 или 4 UART. Рабочая частота 16МГц. Это весьма скудный набор по сравнению с STM32. Рассмотрим на примере замков. Замки содержат управление лазерами и светодиодами, проигрывание звука, работу с MicroSD-картой, на которой хранятся звуковые файлы и коды доступа. Есть шилды, на которых распаян звук и MicroSD-карта: по сути плеер, который играет нужный файл по команде в виде единички на ноге. Неудобство в том, что нет доступа к файловой системе, там нельзя хранить конфигурацию. У китайцев даже есть специальная микросхема, на которую можно записать звук, дальше ты даёшь единички на её ноги, и она этот звук воспроизводит. Стоит очень дешево, но минус в том, что у такого решения гибкость ещё хуже. Мы на MicroSD, например, храним код замка, и можно для игры легко поменять его или сопутствующие звуки. На STM32 легко читать и писать файлы с карты, причём не по SPI, а по SDIO. В случае Arduino это непросто. Играть через неё звук с MicroSD можно, но довольно сложно. В целом, если мы будем набивать замок шилдами для покрытия его функциональности, из-за необходимости стыковать всё это по разъёмам, мы можем не влезть даже в существующий корпус, несмотря на то, что он довольно большой.
    P.S.  32хбитные Arduino существуют, но редки, дороги и объёмны.
    P.P.S. Существуют «Arduino» на базе ESP. Они исполнятся в форм-факторе Ардуино, шьются через ArduinoIDE и совместимы со всеми шилдами. Части описанных минусов они лишены.
  4. Проблемы с массовостью и специальным функционалом. Когда делаешь одно-единственное устройство, можно внимательно и аккуратно соединить все проводки и закрепить их термоклеем или вообще запаять. Но когда нужно сделать десять устройств — начинаются проблемы. Проводомотание порождает риски с надежностью при тиражировании. Наши любимые медальоны — яркий пример того, что нельзя сделать на Ардуино. Можно взять шилд с пищалкой, шилд с радио, шилд со светодиодом, шилд с вибромотором (просто так вибромотор подключить к Ардуино нельзя, он потребляет столько тока, сколько микроконтроллер выдать не в состоянии), припаять проводки к кнопочкам. Еще есть микрофлешка, но это вообще отдельная история, ее мы пропустим. В общем, когда мы соберем этот суповой набор, получится чудовищная конструкция, опутанная проводами, у которой все плохо и с габаритами, и с надежностью. А у нас их 100… 
  5. Возможности STM32 гораздо богаче Ардуины: много периферии, много памяти. Самый хилый контроллер, который мы используем, имеет 4 кБайта ОЗУ, самый жирный — 512 кБайт встроенной SRAM + 32МегаБайта внешней SDRAM. У STM выше частота (до 216МГц), есть блок DMA, есть шины для звука (I2S), SD карты (SDIO) и экрана (RGB / MIPI), а ещё есть блок для вычислений с плавающей точкой. Каждый раз, когда мы брались за проект на основе микроконтроллеров Atmel, стоял вопрос — возможно ли в принципе решить поставленную задачу на этом железе. Когда мы перешли на STM32 — вопрос сменился: теперь мы выбираем, каким именно способом мы будем решать задачу. Мы используем RTOS, которая позволяет обеспечивать вытесняющую многозадачность — на Ардуино это было бы затруднительно. Посмотрим на световой меч. Для него, в частности, нужно управлять несколькими сотнями адресных светодиодов. В случае Ардуино это возможно, если процессор занимается только этим и больше ничем — поскольку нужно выдерживать строгие тайминги. Можно, конечно, плавно зажечь светодиоды, а потом подать сигнал звуковому шилду — но про развесистые световые эффекты придётся забыть. В случае с STM32 этой проблемы не стоит в принципе. 
  6. Цифровая обработка сигнала. У нас могут использоваться сложные для микроконтроллеров алгоритмы, это и извлечение корней, и перемножение чисел с плавающей точкой. STM32 c сопроцессором для работы с числами с плавающей точкой с этим легко справляется, а на Ардуине это будет очень медленно. То есть, нечто подобное сделать можно, но это требует крайне тщательного учета ресурсов. Например, как-то нужно было делать стенд для Бауманки, реализовать цифровые фильтры. Для того, чтобы уложиться в тайминги, пришлось писать код на ассемблере. Весь код был на С, а этот блок — на ассемблере. А в случае STM32 можно просто писать код на C++, перемножая числа с плавающей точкой.
  7. Частота. Максимальная частота АТмеги — 20 МГц, хотя в Ардуино используется только 16. Самый слабый используемый нами STM32 может работать на 32МГц, самый быстрый — на 216. Бывают и более быстрые. АТмегу, говорят, можно разогнать до 25 МГц, но мы не рассматриваем эти варианты, так как нам нужна одинаковая и стабильная работа на десятках устройств.
  8. Энергопотребление. АТмега потребляет единицы миллиампер даже на небольшой частоте. STM32 в силу более тонкого техпроцесса, несмотря на то, чтоб он 32-битный, а не 8-битный, на такой же частоте потребляет один миллиампер или меньше.
  9. Антенны. Мы делаем антенны для нашего радио с антенной на плате — можно их назвать микрополосковыми. У нас были такие проекты на АТмеге времен Второй Эпохи (2010 год, кинжалы, передатчики орков) — там и АТмега, и радиомикросхема были установлены на одной плате, которую мы разработали. Если же мы хотим использовать Ардуино — то делаем свой шилд и подключаем его; но зачем, если мы всё равно разрабатываем свою плату? Проще сразу поставить на неё всё необходимое.
  10. Прошивка. Чтобы залить прошивку в Ардуино, нужно использовать ее UART. Для этого нужно сначала прошить в микроконтроллер бутлоадер (на покупном Ардуино он уже прошит). В STM32 бутлоадер есть с фабрики (хотя мы им не пользуемся — не нужно).
  11. Отладка (построчное выполнение команд). Для отладки в случае АТмега нужно использовать JTAG: то есть, плату с JTAG, программатор с JTAG и среду разработки, которая это может. Среда разработки Ардуино отладку  не позволяет в принципе. В случае STM32 используется двухпроводный интерфейс SWD, по которому и прошивка заливается, и отладка осуществляется. 
  12. Цена. Конкретно Arduino, особенно Nano, продается на алиэкспрессе довольно дёшево. Но каждый шилд довольно дорог, тем более с MicroSD и звуком (шилд для MicroSD в «ЧИП и ДИП» стоит около двух тысяч, хотя вероятно на али есть что-то дешёвое). Это становится проблемой уже на минимальных сериях, например, 10 замков. Есть шилды с NFC-чипом, для них есть драйверы для Ардуино, но как только мы говорим про массовую покупку этих шилдов, это получается недешево (сходу вижу за 1000 р).

Итог
Ардуино может быть неплохим инструментом быстрого прототипирования, но у нас нет таких потребностей.
Есть сложные проекты, которые на Ардуино не сделать никак. Например, воспроизведение видео в сфере для игр по Звёздным Войнам. Тут всё ясно.
Есть проекты средней сложности, которые на STM32 можно сделать легко, а на Ардуино — если тщательно считать каждый такт процессора и писать куски кода на ассемблере. То есть можно, но сложно и долго, а у нас туго со временем.
Есть простые проекты, которые одинаково легко сделать и на STM32, и на Ардуино. Тут вступают вопросы про цену, энергопотребление и габариты. И Ардуино проигрывает почти всегда, за единичными исключениями, когда оно на равных. Но в этих условиях — когда мы всё можем сделать на STM32 быстро, компактно, недорого — нет никакого резона поддерживать две платформы.

Search

Tags
3d печать klnfc led nfc starwars uart usb wifi антураж артефакт без корпуса браслет в корпусе ведьмак взлом вибро видео волшебство время все проекты гарри поттер грибы дверь дерево детектор для дома дорожка древа жезлы жесты замок заряжается звездные войны звук значки игроку игротехника ик как в сеттинге камни кинжал китайцы код колбы косплей кристаллы лазер лайтсабер люстра мастеру медальон механика музыкальный движок на батарейках носимое обзор образование освещение от аккумулятора от сети отзывы отладка перчатка пилюли портрет проводная связь промышленное пульт радиация радио речь решения роботы свет светлячок светодиоды станок статьи стационарное стимпанк телефон терминал толкин удобные приборы универсальное устройства игрока фантастика флейта фоллаут девайс цветы часы чуять друг друга экран