Платы, лампы, провода — это всё любовь моя!
Если вы всегда мечтали создавать собственные гаджеты, но не умеете паять платы, обратите внимание на Arduino. Это универсальная платформа для разработки электронных устройств любой сложности. На её основе можно собрать робота, клавиатуру, умный чайник или радиоуправляемую машинку.
В этой статье рассказываем про Arduino: что это такое, для чего нужно и как его программировать. А ещё объясняем, какую плату выбрать новичку, и даём ссылки на полезные материалы.
Что такое Arduino
- аппаратную часть — плату с микроконтроллером, например Arduino Uno;
- программную часть — бесплатную среду разработки Arduino IDE и встроенные библиотеки, которые упрощают работу с оборудованием.
Arduino Uno — одна из самых популярных плат в линейке
Изображение: Arduino
Главная фишка Arduino — доступность и простота входа. Для начала работы достаточно самой платы, USB-кабеля и компьютера. Благодаря множеству готовых библиотек и простому языку программирования даже новичок может за вечер собрать рабочее устройство — например, колёсного робота.
Вот примеры других устройств, собранных на Arduino:
Умная кормушка
Изображение: Arduino_Genuino / Project Hub
Игровой автомат с матричным дисплеем
Изображение: mircemk / Project Hub
Робокот
Кадр: PetoiCamp / YouTube
Домашняя автоматизированная ферма
Фото: londonium2021 / Project Hub
История Arduino: интриги и скандалы
В начале 2000-х компании Telecom Italia и Olivetti открыли в итальянском городе Ивреа курсы по дизайну взаимодействия. Студентов учили проектировать устройства с удобными интерфейсами, опираясь на поведение пользователей.
На курсах студенты работали с платформой BASIC Stamp. Код приходилось писать на PBASIC — диалекте языка программирования BASIC, что было довольно сложно для людей, которые по складу ума больше дизайнеры, чем программисты.
BASIC Stamp, установленная в отладочную плату
Фото: Marcin1988 / Wikimedia Commons
Выпускник курса Эрнандо Барраган решил изменить ситуацию: в 2004 году он разработал альтернативную платформу Wiring — плату с прошивкой и поддержку программирования на упрощённом C++. Разработка гаджетов стала проще и быстрее.
Важно, что Wiring и последовавшая за ним Arduino распространялись с открытым исходным кодом. Это позволило сообществу адаптировать и развивать проект, а также стало основой для десятков совместимых платформ.
Плата Wiring
Фото: Hernando Barragán
Это мы форкаем
Платы Wiring за короткий период стали очень популярны на курсе, но оставались дорогими — около 60 долларов за плату. Тогда научный руководитель Баррагана Массимо Банци сделал форк проекта: использовал более дешёвый микроконтроллер ATmega8, но оставил программную часть Wiring. Так появился прототип Arduino, сначала называвшийся Wiring Lite.
Прототип платы Arduino под названием Wiring Lite
Фото: Hernando Barragán
Название Arduino команда выбрала в честь местного бара, где собирались студенты и преподаватели. Сам бар был назван в честь короля Италии Ардуина Иврейского.
В 2008 году Банци зарегистрировал в США компанию Arduino LLC, которой принадлежали права на бренд. Платы производились сторонними фабриками по лицензии.
Важно, что Wiring и последовавшая за ним Arduino распространялись с открытым исходным кодом. Это позволило сообществу адаптировать и развивать проект, а также стало основой для десятков совместимых платформ.
Торговая война: Arduino против Arduino
Когда популярность Arduino начала расти, команде понадобилось открывать юрлица в других странах. Но при попытке зарегистрировать компанию в Италии выяснилось, что бренд Arduino там уже оформлен — на Джанлуку Мартино, одного из сооснователей проекта и владельца завода, производившего платы. Оказалось, что он тайно регистрировал компании с названием Arduino SRL в разных странах.
Суть конфликта была в том, что руководство Arduino LLC выбрало бесфабричную модель производства: при таком подходе инженеры проектируют платы и инструменты, а изготовление может взять на себя любая фабрика. Мартино же боялся, что его завод не сможет конкурировать с китайскими производителями, и хотел сохранить производство на собственном заводе.
Это привело к тому, что Arduino LLC могла продавать свои платы только в США, а Arduino SRL — в остальных странах. Торговая война продолжалась до 1 октября 2016 года. Тогда на конференции World Maker Faire Массимо Банци и Федерико Мусто, гендиректор Arduino SRL, объявили о слиянии компаний в одно юрлицо — Arduino AG.
Массимо Банци и Федерико Мусто сообщают о слиянии двух Arduino в третью
Фото: Arduino Team
Arduino сегодня
Сейчас Arduino выпускает платы и готовые наборы для энтузиастов, университетов и школ программирования. Также у компании есть линейка промышленных контроллеров, которые используют для автоматизации складов и заводов. Один из главных принципов Arduino — разрабатывать недорогие платы, чтобы создание умных устройств было доступным увлечением.
Анатомия платы
Рассмотрим, какие пины, интерфейсы и кнопки есть на плате Arduino. Мы покажем всё на примере третьего поколения Uno. Более детально устройство платы можно изучить в официальной документации.
Основные элементы платы Arduino Uno
Фото: Skillbox Media
На фотографии выше:
- Кнопка перезагрузки (1) — кнопка для перезапуска загруженного кода, если, например, плата перестала корректно реагировать на команды.
- Цифровые пины (2) — универсальные пины, которые могут генерировать и считывать сигналы. К ним можно подключать датчики, моторы, кнопки и другие элементы управления.
- Коннектор USB-B (3) — порт, с помощью которого плату можно подключить к компьютеру и прошить.
- Контроллер ATmega328P (4) — «мозг» Arduino Uno, который выполняет все вычисления и операции. Можно сказать, что он здесь вместо процессора и памяти — как центральный блок у обычного компьютера, только компактнее и проще.
- Коннектор питания (5) — порт для подключения платы к аккумулятору или розетки.
- Пины питания (6) — пины, с помощью которых можно запитать датчики, моторы и другие элементы, подключённые к Uno.
- Аналоговые пины (7) — пины, которые могут только считывать сигналы. Подходят для подключения датчиков.
Каждый цифровой и аналоговый пин имеет свои ограничения по току и напряжению, поэтому перед подключением внешних устройств стоит свериться с технической документацией.
Платы Arduino могут различаться по количеству пинов, форм-фактору и мощности. Ниже расскажем, какие модели бывают и как выбрать подходящую.
Какую плату Arduino выбрать
В интернет-магазине компании доступно несколько десятков плат для разработки роботов, умных устройств, компактных гаджетов и промышленного оборудования. В таком разнообразии легко запутаться, поэтому давайте разберём особенности самых популярных решений Arduino, чтобы вы знали, что точно стоит купить в личную мастерскую.
Uno: идеальна для новичков
Плата Arduino Uno R3.
Изображение: Arduino Docs
Arduino Uno — одна из самых популярных и универсальных плат. На ней достаточно портов для подключения большого количества датчиков, моторов, сервоприводов и контроллеров. Если хотите начать изучать программирование для Arduino, смело покупайте Uno. Этой платы хватит как для учебных экспериментов, так и для полноценных проектов.
Nano: для компактных проектов
Плата Arduino Nano
Изображение: Arduino Docs
Arduino Nano — компактная версия Uno. У неё меньше портов и меньше памяти, зато она без проблем поместится в корпусе практически любого устройства. Ещё один плюс платы в том, что её можно разместить на макетной плате.
Mega: больше портов и памяти
Плата Arduino Mega.
Изображение: Arduino Docs
Arduino Mega — плата с большим количеством пинов, более мощным микроконтроллером и увеличенным объёмом памяти. Она отлично подходит для сложных проектов, в которых нужно много датчиков и ресурсоёмких вычислений, например для шагающих роботов с парой десятков сервоприводов. Плата дорогая, поэтому нет смысла брать её для обучения. На первых порах хватит возможностей Uno.
Micro: со встроенным USB-контроллером
Плата Arduino Micro
Изображение: Arduino Docs
Arduino Micro — компактная плата с поддержкой режима работы HID (human interface device — устройство человеческого интерфейса). Это значит, что на базе Micro можно собрать собственную клавиатуру, мышку, руль для симулятора гонок или контроллер для игровой консоли.
Платы для профессионалов
Arduino разрабатывает платы не только для обучения и хобби-проектов. У компании есть профессиональная линейка Arduino Pro для промышленных устройств. Их используют для автоматизации процессов на заводах и складах. Устройства с приставкой Pro обычно выпускают в чёрном цвете, а обычные — в синем.
В линейку Arduino Pro входят следующие семейства:
Плата Arduino Portenta H7
Изображение: Arduino Docs
Плата Arduino Nicla Vision
Изображение: Arduino Docs
Плата Arduino Opta
Изображение: Arduino Docs
Аналоги
На маркетплейсах можно встретить множество плат, которые очень похожи на Arduino, но называются по-другому. Нет, это не подделки, а вполне легальные и рабочие устройства.
Практически все платы компании и прошивки выпускаются под открытой лицензией Creative Commons Attribution ShareAlike. Это значит, что любой желающий может создавать собственные платы Arduino — в помощь разработчикам компания публикует на официальном сайте схемы, чертежи и документацию. А ещё в компании не против того, чтобы крупные производители запускали серийное производство аналогов. Главное условие: не использовать название Arduino, его производные и логотип. Все эти атрибуты защищены авторским правом.
Официальная схема платы Arduino Uno
Изображение: Arduino Docs
Например, российская компания «Амперка» выпускает платы Iskra — это аналоги Arduino с небольшими доработками, которые изготовлены по официальным чертежам. Arduino не против таких решений на рынке.
Iskra Uno — аналог Arduino Uno от компании «Амперка»
Кадр: AmperkaRu / YouTube
При этом важно учитывать, что не все производители добросовестно соблюдают лицензии и соглашения. На маркетплейсах можно найти множество плат Arduino, цены на которые значительно ниже, чем на официальном сайте. Скорее всего, это подделки китайских компаний, которые решили использовать логотип Arduino, несмотря на запрет. Они часто изготовлены из некачественных материалов или с нарушением технологии производства, поэтому быстро приходят в негодность.
Вот список проверенных аналогов Arduino помимо платформы Iskra от «Амперки»:
Если вы увидели «оригинальную» плату с большой скидкой, то сперва проверьте, не пытаются ли вам продать подделку. Для этого можно использовать официальное руководство от команды Arduino.
Оригинальная плата Arduino Uno (слева) и подделка (справа)
Изображение: Arduino
В проектах лучше использовать оригинальные платы или аналоги компаний, которые дорожат своей репутацией. Платы китайских «ноунеймов» практически всегда оказываются некачественными, но стоят в 5–10 раз меньше. С другой стороны, если ваша цель — просто попробовать себя в разработке на Arduino, то можно сэкономить.
Какое ещё железо нужно ардуинщику
Одной платы не хватит для того, чтобы создавать интересные проекты. Плата — это мозг, которому нужны другие органы. Давайте рассмотрим список инструментов и устройств, без которых нельзя обойтись.
Модули, датчики и сенсоры
К платам Arduino можно подключать сторонние модули, датчики и сенсоры. Например, если вы хотите собрать метеостанцию, то надо будет докупить термометр, барометр и анемометр. А для робота нужна будет камера, дальномер и моторы.
Россыпь различных модулей и датчиков
Фото: Skillbox Media
Сенсоры и модули подбирают под конкретное устройство на этапе проектирования. Не стоит сразу покупать всё, что только можно подключить к плате, — формируя набор дополнительных устройств, отталкивайтесь от задачи. Со временем у вас и так накопится большая коллекция электронных полезностей.
Макетная плата
Модули и датчики можно подключать сразу к плате, но это не всегда удобно. Например, сенсор может перекрывать собой соседние пины. Для решения этой проблемы используют макетные платы — универсальные пластины для быстрого монтажа компонентов и создания прототипов.
Для экспериментов удобнее использовать макетные платы без пайки — их ещё называют бредбордами (от англ. breadboard). На этой плате контакты разведены так, чтобы к ней можно было подключить несколько модулей.
Макетная плата
Фото: Skillbox Media
Если захотите собрать собственный модуль, можно использовать макетную плату с пайкой. Она представляет собой обычную печатную плату со свободными пинами, на которой можно смонтировать любые электронные компоненты.
Соединительные провода
Модули и сенсоры надо чем-то соединять между собой на макетной плате и подключать к Arduino. Для этого используют кабели типа Dupont трёх видов: «папа — папа», «мама — мама» и «мама — папа».
Сверху вниз: «папа — папа», «мама — мама» и «мама — папа»
Фото: Skillbox Media
Интересный факт: Dupont — это не официальное название коннектора. В начале XXI века китайские производители начали осваивать массовое производство соединительных кабелей и для изоляции использовали материалы американской химической компании DuPont. В итоге название прижилось на бытовом уровне, и сейчас любые коннекторы с шагом 2,54 мм называют кабелями Dupont.
Шилды
С шилдами Arduino превращается в сэндвич, но зато нет торчащих во все стороны проводов
Фото: Skillbox Media
Как правило, связка из нескольких модулей может заменить собой шилд, но такая конструкция будет не очень аккуратной и компактной. Платы расширения чаще используют в образовательных целях — например, на курсах по разработке для Arduino. Простой способ крепления шилдов позволяет ученикам сосредоточиться на коде.
Инструменты
Для монтажа электронных компонентов и сборки финального устройства могут понадобиться дополнительные инструменты:
- Паяльник. После экспериментов на бредборде электрическую схему проекта можно перенести на печатную макетную плату. Для этого понадобится паяльник, припой, канифоль и флюс.
- «Третья рука». Во время пайки не всегда удобно одновременно держать раскалённый паяльник, припой, плату и элемент, который вы собираетесь припаять. На помощь в таких случаях приходит «третья рука» — штатив, который позволяет закрепить все необходимые элементы и работать с ними.
«Третья рука» с двумя зажимами и лупой
Фото: Dro Kulix / Wikimedia Commons
- Набор пинцетов. Электронные компоненты могут быть очень мелкими, и брать их руками не всегда удобно. Лучше использовать пинцеты, чтобы случайно ничего не сломать.
IDE для Arduino
Программировать Arduino можно в любом редакторе кода, но удобнее делать это в специальных средах. В них есть инструменты, благодаря которым разработка становится быстрее и проще. Давайте рассмотрим популярные IDE и редакторы кода для Arduino.
Arduino IDE
Интерфейс Arduino IDE
Скриншот: Arduino IDE / Skillbox Media
Важно отметить, что есть две версии официальной среды разработки: обновлённая Arduino IDE 2 и устаревшая Arduino IDE Legacy. Обе работают, но во второй доступны не все современные функции — например, нет поддержки автоматического завершения кода и синхронизации файлов с облачным хранилищем.
Arduino Cloud
Облачный редактор в Arduino Cloud
Скриншот: Arduino Cloud / Skillbox Media
Arduino Cloud работает даже в мобильном браузере
Скриншот: Arduino Cloud / Skillbox Media
Platform IO
Platform IO в редакторе Visual Studio Code
Скриншот: Visual Studio Code / Skillbox Media
Плагин бесплатный и доступен для всех популярных IDE и редакторов кода. Есть даже версия для Vim, которая запускается в терминале.
Platform IO в терминале
Скриншот: Platform IO
Как программировать Arduino
Код для Arduino пишут на языке программирования Arduino C — это сочетание C++ и фреймворка Wiring. Файлы с кодом разработчики называют скетчами (от англ. sketch — набросок).
В этой статье мы рассмотрим только основы программирования Arduino. Если вы хотите стать гуру разработки, то предлагаем добавить в закладки наш ультимативный гайд по C++ в пяти частях:
Структура скетча
Программы для Arduino пишут по шаблону, который выглядит так:
#include <Example.h> void setup() { } void loop() { }
В нём:
- #include <Example.h> — директива для подключения сторонних библиотек или связывания нескольких файлов одного проекта.
- void setup() — функция, в которой инициализируют пины платы и указывают режимы их работы.
- void loop() — цикл с основным кодом программы. В нём разработчики описывают логику прошивки и используют пины, которые инициализировали в функции setup().
Функции setup и loop — обязательная часть каждого скетча. Без них компилятор не сможет собрать проект.
Переменные
В Arduino C, как и в любом другом языке программирования, есть переменные. В них можно хранить данные с датчиков, промежуточные вычисления или параметры пинов. Чаще всего разработчики используют следующие типы переменных:
- int — целые числа в диапазоне от −32768 до 32767.
- long — целые числа в диапазоне от −2147483648 до 2147483647.
- float — числа с плавающей точкой, в которых можно хранить значения с точностью до семи знаков после запятой.
- byte — отдельные символы из ASCII-таблицы.
- String() — строки из нескольких символов.
- bool — логические значения true или false.
Примеры:
int number = 2025; long bignumber = 2147483647; float pi = 3.141592; char byte = ‘A’; String mystr = String(“Hello World”); bool mybool = true;
Математические операторы
В языке Arduino C есть все привычные математические операторы. С их помощью можно вычислять значения и присваивать результаты переменным:
Оператор | Описание | Пример |
---|---|---|
= | Присваивание значения переменной | a = 256 |
+ | Сложение | 100 + 83 |
– | Вычитание | 45 – 2 |
* | Умножение | 5 * 12 |
/ | Целочисленное деление | 100 / 10 |
% | Остаток от деления | 43% 4 |
Для сравнения значений используют операторы сравнения. Они возвращают true (истина) или false (ложь):
Оператор | Описание | Пример |
---|---|---|
== | Равно | a == b |
!= | Не равно | a != b |
< | Меньше | a < b |
> | Больше | a > b |
<= | Меньше или равно | a <= b |
>= | Больше или равно | a >= b |
Условные операторы и циклы
Для управления потоками программы в Arduino C предусмотрены условные операторы и циклы:
- if-else — оператор «если», с помощью которого можно реализовать несколько сценариев и запускать их в зависимости от условий. Если условие оператора if соблюдается, то система выполняет его. В остальных случаях выполнится условие else if.
if (sensor > 800) { // выполняется, если значение > 800 digitalWrite(LED_BUILTIN, HIGH); } else if (sensor > 400) { // если 400 < значение ≤ 800 analogWrite(LED_BUILTIN, 128); } else { // в других случаях digitalWrite(LED_BUILTIN, LOW); }
- for — цикл для повторного выполнения одного и того же действия. Например, с его помощью можно пройтись по массиву светодиодов и поморгать каждым.
for (int i = 0; i < 10; i++) { // выполнится 10 раз, i от 0 до 9 digitalWrite(LED_BUILTIN, (i % 2 == 0) ? HIGH : LOW); delay(200); }
- while — цикл, который выполняется до тех пор, пока его условие истинно.
int count = 0; while (count < 5) { // выполняется, пока count < 5 Serial.println(count); count++; delay(300); }
- do-while — цикл, который сначала выполняет действие, а потом проверяет условие завершения.
int val; do { val = analogRead(A1); Serial.println(val); delay(500); } while (val < 500); // цикл обязательно выполнится хотя бы один раз
Функции
Для удобства программы можно разделять на функции — блоки кода, которые выполняют определённое действие, возвращают результат и доступны в любом месте программы. Представьте, что вы собираете лазерный прибор для измерения расстояния. Датчик передаёт значения в метрах, но на экран надо ещё выводить километры и футы. Операции перевода значений можно вынести в отдельную функцию и вызывать в любом месте кода.
В общем виде функции в Arduino выглядят следующим образом:
тип_возвращаемого_значения имя_функции (аргументы) { // тело_функции return возвращаемое_значение; }
В ней:
- тип_возвращаемого_значения — тип данных, который функций возвращает в результате работы;
- имя_функции — название, с помощью которого функцию можно будет вызывать;
- аргументы — переменные, которые функция получает на вход;
- тело_функции — основной код функции.
- return возвращаемое_значение — значение, которое функция вернёт после работы.
Для примера напишем функцию, которая принимает два числа, вычисляет их сумму и выводит в терминал сообщение о том, чётная ли сумма или нет:
void printSumParity(int a, int b) { int sum = a + b; if (sum % 2 == 0) { Serial.println(“Чётная сумма”); } else { Serial.println(“Нечётная сумма”); } }
Как загрузить прошивку на плату
Перед тем как начать писать код, давайте разберёмся, как этот код загрузить на плату:
- Шаг 1. Подключите плату к компьютеру с помощью USB-кабеля.
- Шаг 2. В Arduino IDE откройте выпадающий список Select board и выберите в нём вашу плату.
Скриншот: Arduino IDE / Skillbox Media
- Шаг 3. Нажмите на кнопку со стрелкой, которая расположена слева от выпадающего списка.
Скриншот: Arduino IDE / Skillbox Media
- Шаг 4. Если всё прошло успешно, то в терминале появится сообщение «Done uploading» и сведения о том, сколько памяти занял скетч.
Скриншот: Arduino IDE / Skillbox Media
Мигаем светодиодом: первый проект на Arduino
Многие разработчики в качестве своей первой программы пишут код, который выводит на экран фразу «Hello, world!». У микроконтроллеров нет экранов, поэтому выводить приветствие некуда. При этом в сообществе разработчиков есть аналог «Hello, world!» — программа Blink, которая мигает одним из светодиодов на плате.
С помощью такой простой программы можно проверить сразу три вещи. Если светодиод мигает:
- плата точно работает, а электронные компоненты не повреждены;
- компилятор правильно настроен и собирает код под нужную платформу;
- компьютер без ошибок загружает прошивку на плату.
Давайте напишем код программы Blink и загрузим его на Arduino, чтобы убедиться, что всё работает:
Собираем устройство
Для сборки нам понадобится:
- любая плата Arduino (у нас Uno R3);
- светодиод;
- резистор номиналом 220 Ом;
- провода типа «папа — папа»;
- макетная плата.
Все компоненты соединяем следующим образом:
Схема подключения светодиода к Arduino Uno
Инфографика: Skillbox Media
Должна получиться похожая конструкция:
Фото: Skillbox Media
Пишем код
Код для мигания светодиодом выглядит так:
void setup() { // Инициализируем пины pinMode(13, OUTPUT); } // Функция loop бесконечно выполняется по кругу void loop() { digitalWrite(13, HIGH); // Включаем светодиод delay(1000); // Ждём одну секунду digitalWrite(13, LOW); // Выключаем светодиод delay(1000); // Ждём одну секунду }
В коде выше мы используем три функции, не считая setup () и loop (), без которых компилятор не сможет собрать скетч:
- pinMode(pin, mode) — функция для настройки режима работы цифрового пина. На вход она принимает два аргумента: pin и mode. В первом надо указать номер пина, во втором — режим работы. Мы выбрали пин под номером 13 и сделали его выходным (OUTPUT).
- digitalWrite(pin, value) — функция для подачи напряжения на пин, указанный в аргументе pin. Во втором аргументе надо выбрать значение, которое подаётся на пин: HIGH или LOW.
- delay() — с помощью этой функции можно на время приостановить выполнение кода. Для этого в скобках надо указать длительность паузы в миллисекундах. Забавный факт: максимальное значение — 4 294 967 295 мс, что составляет 49 дней, но на практике никто не ставит паузу больше нескольких секунд 🙂
Запускаем код
Если всё сделали правильно, то при подключении питания к плате должен мигать наш светодиод:
Фото: Skillbox Media
Усложняем проект: добавляем управление
Теперь усложним проект: сделаем так, чтобы светодиод горел постоянно, а с помощью кнопки его можно было бы выключать.
Собираем устройство
Схема устройства выглядит следующим образом:
Инфографика: Skillbox Media
Должно получиться такое устройство:
Фото: Skillbox Media
Пишем код
Код проекта выглядит так:
void setup() { // Инициализируем пины pinMode(13, OUTPUT); pinMode(9,INPUT); } // Функция loop бесконечно выполняется по кругу void loop() { // включаем светодиод при нажатой кнопке if(digitalRead(9) == HIGH) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } }
Запускаем код
Если всё сделали правильно, то с помощью кнопки можно будет управлять светодиодом:
Фото: Skillbox Media
Что делать дальше
Если вы собрали проекты из этой статьи и теперь хотите попробовать что-нибудь посложнее, то обратите внимание на наше руководство по созданию робота. В нём мы показываем, как сконструировать и запрограммировать управляемую мини-платформу.
Также на базе Arduino есть множество проектов с открытым кодом, которые вы можете повторить:
Дополнительные материалы
Мы подготовили список видеороликов, курсов и книг, с помощью которых вы можете глубже изучить программирование Arduino:
Дизайн взаимодействия (interaction design) — дисциплина, в рамках которой изучают интерфейсы управления устройствами и системами.
Сервопривод — умный двигатель, который с высокой точностью проворачивает вал по команде.
Макетная плата — универсальная пластина для быстрого монтажа электронных компонентов и создания прототипов.
microPLC — формат компактных программируемых логических контроллеров с креплением для DIN-рейки. Такие контроллеры обычно устанавливают в электрических щитках.