
Arduino & Pi
Да будет онлайн битва роботов на Arduino
Я построил для вас роботов, а вам остаётся только запрограммировать их. Паяльник покупать не нужно, L298N из Китая ждать тоже: Uno, драйвер моторов, дальномер и датчики линии уже собраны и работают прямо в браузере. И это не мультяшная анимация. Робот там честно падает, буксует и вылетает с ринга по законам физики.
Что за Rotor
Rotor это виртуальный колёсный робот. Его подключение я сделал один в один как у популярного набора:
Arduino Uno
драйвер моторов L298N
ультразвуковой дальномер HC-SR04
датчики линии TCRT5000
То есть скетч, который вы отладили в симуляторе, можно залить в настоящего робота из такого набора. На схеме у Uno задействованы выводы GND, A4, A5, D5, D7, D8, D6, D9, D10, D11, D12, A0, A1, A2, D2, D3. Всего 16 соединений.
Важный момент: скетч не говорит роботу "встань вот в такую позу" или "проедь два метра". Он делает ровно то же, что и на реальном железе: выставляет уровни на выводах драйвера L298N и читает датчики. А куда робот в итоге поедет, решает физический движок.
Правила соревнований по мини-сумо
Правила мини-сумо простые: два робота на круглом ринге, кто вытолкнул соперника или не съехал сам, тот и молодец. По правилам робот должен помещаться в 10 × 10 см и весить не больше 500 г, а после старта по команде стоит 5 секунд. Rotor этим габаритам соответствует.
В моём примере вместо соперника коробка. Ринг 77 см, чёрный с белой каёмкой.
Алгоритм у робота такой:
Крутится на месте и меряет расстояние дальномером.
Если что-то ближе 60 см, это цель, и он едет вперёд на полной мощности.
Датчики линии замечают белую каёмку раньше, чем колёса доедут до края. Тогда робот сдаёт назад и разворачивается внутрь ринга.
Коробка, которую довезли до края, падает с помоста. Победа.
В симуляторе я поставил задержку перед стартом 1 секунду, чтобы не скучать. Если хочется как на соревнованиях, ставите START_MS = 5000.
Весь скетч занимает 75 строк. Свои функции в нём: motor(), drive(), distanceCm() и onEdge(). Дополнительных библиотек не нужно, хватает штатного ядра Arduino AVR.
Как смотреть
Нажимаете «Запустить», и после сборки открывается окно робота. Есть режим «Вид сверху»: плоский план с разметкой, следом робота, лучом дальномера и стрелками моторов. Обвод датчика линии становится красным, когда он стоит на чёрном. В строке состояния видно напряжение на моторах в процентах и показания датчиков.
Проект можно форкнуть, поменять код и запустить заново, ничего не ломая.
Почему это не анимация: физика под капотом
Самое интересное тут движок. Робот это трёхмерная модель с массами, шарнирами и трением, а считает её Rapier 3D (версия 0.21), физический движок с открытым кодом, собранный в WebAssembly.
Что стоит знать:
Детерминизм. Я взял сборку deterministic: одни и те же входные данные дают одинаковый результат до последнего бита на любом компьютере и в любом браузере. Если робот упал, падение можно повторить и разобрать по кадрам. Случайных чисел и шума нет.
Плата и физика идут в ногу. Прошивка исполняется 2 мс модельного времени, затем физика делает один шаг мира тоже на 2 мс, и так по кругу. Это 500 шагов в секунду. Время модельное: millis() и micros() в скетче считают время прошивки, а не часы компьютера. Слабый компьютер покажет движение медленнее, но результат будет тем же.
Один код в трёх местах. Тот же код считает робота в браузере (в фоновом потоке), в node (тесты) и на сервере (проверка уроков). Поэтому задание, пройденное в браузере, засчитывается и сервером.
Единицы СИ. Метры, килограммы, секунды, ньютон-метры, тяжесть 9,81 м/с². Оси мира: Y вверх, Z вперёд, X влево.
Точный решатель. 20 итераций на шаг и допуск проникновения 0,3 мм. С допуском по умолчанию (5 мм) стопа шагающего робота проседала краем в пол и опрокидывалась, так что мне пришлось повозиться.
Трение сухое, по Кулону. Пол и подошвы имеют коэффициент 1,0, остальные звенья робота 0,6, а предметы вроде кубика и мяча 0,8 с упругостью 0,1. Коробка в сумо как раз такой предмет: она сталкивается со всем, в том числе с самим роботом.
Весит движок около 4 МБ и грузится только на страницах, где в схеме есть робот.
Честно об упрощениях
Сразу скажу, где модель идеальна:
у моторов нет люфта, нагрева, падения напряжения и просадки батареи;
звенья абсолютно твёрдые и не гнутся;
колёса и подошвы жёсткие, резина не сминается;
у датчиков нет шума и смещения нуля.
Так что симулятор отлично учит логике: поиск цели, реакция на край, развороты. А вот настоящую мощность моторов и сцепление колёс с реальным рингом всё равно придётся подбирать руками.
Что попробовать
Поставить START_MS = 5000, как на настоящих соревнованиях.
Искать цель, вращаясь то в одну, то в другую сторону. Найдётся ли коробка быстрее?
Переключиться на площадку «Ринг сумо» без коробки и проехать по рингу минуту, ни разу не съехав.
Заменить delay() на счёт по millis(), чтобы loop() освободился для параллельных задач.
Добавить Serial.println() в интересных местах: монитор порта здесь служит отладчиком.
Робот построен, ринг готов. Ваш ход: пишите свой алгоритм и устраивайте битву.
Ссылки
Устройство и подключение робота: https://pinport.ru/robot/car
Как устроена физика: https://pinport.ru/robot/physics
Пример «Rotor выталкивает коробку с ринга»: https://pinport.ru/p/ex-robot-car-sumo
Все мои роботы на Arduino: https://pinport.ru/gallery/robots
Аналог промышленного контроллера Schneider Electric на российском микроконтроллере АМУР MIK32
В прошлом году я начал публиковать первые тесты своего компилятора WIA32 и среды разработки 3o|||sheet на различных микроконтроллерах и FPGA (STM32, CH32, Altera Cyclone 4). Был и российский АМУР MIK32.
На одном известном ресурсе, по поводу подобных МК были возражения типа - 16 КБ ОЗУ, что из этого можно сделать в современном мире?
Рантайм (регистровая ВМ) моей разработки выполняющая байткод на стороне железа, требует всего 5 КБ RAM, поэтому в подобный МК как АМУР MIK32 с 16 КБ влезает достаточно много(в сотни LD\FBD блоков, или несколько сотен ST строк ) программы причем с изолированным выполнением. То есть, речь идет не о зависшей задаче, это - самый легкий сценарий ,так как планировщик все равно задачи меняет. Речь об устойчивости к тотальному краху данных.
Таким образом 3o|||sheet является первой(?) средой где АМУР MIK32 успел побывать полноценным промышленным контроллером хоть и в тестовом режиме, а не игровой консолью, умным домом или мигалкой светодиода.
ПЛК на АМУР MIK32 как аналог Schneider Zelio Logic
Своему софт-процессору и набору команд дал название - WIA32 (переводится как - широкий непосредственный адрес) который и отображается на графике синим. Тут данные по скорости выполнения программ лестничных диаграмм или функциональных блоков (ST - не тестирую, так как в документации брендов ПЛК нет данных производительности алгоритмов на ST чтоб сравнивать).
Не путать тест с бенчмарками, производительностью машинных инструкций и программ написанных на СИ.
Если б я делал ПЛК на АМУР MIK32 то получил бы аналог программного реле Schneider Zelio Logic. Это с точки зрения производительности, хотя в данный момент моя ВМ - трансформируется, и не оптимизирована под конкретную архитектуру. Я не производитель ПЛК и не занимаюсь глубокими оптимизациями своей ВМ под отдельный чип для максимума.
Но в отличии от среды Schneider , у меня более продвинутые функции, так как мой компилятор WIA32 поддерживает:
Сложные данные (структуры в структурах, многомерные массивы и прочее).
Такой вид данных поддерживается моим компилятором:
Гибкость. Использование сложных структур и многомерных массивов данных в программе Промышленного Контроллера.
Сложные структуры любого уровня можно использовать в лестницах и блоках.
Менеджер адресов который точно расставляет данные\инструкции в памяти, расставляет адреса и не промахнется ни на один байт среди миллиарда - отдельный шедевр мысли.
Так как у нас свой компилятор и собственный софт процессор - есть возможность безопасно добавлять структуры данных и менять код на лету не перезагружая ПЛК вообще. Добавлять новые программы которые тут же заработают как в смартфоне установленное только что приложение с маркета.
Schneider , китайские, российские и многие другие страны создающие ПЛК (те которые на собственной среде, а не на Codesys) не поддерживают работу с многомерными массивами, вытесняющими задачами, заменой кода на лету и другими возможностями для которых нужен собственный компилятор. Практика перевода языков МЭК 61131-3 (IEC 61131-3) в язык СИ а потом прошивка в ПЛК обычным компилятором, как это делают в Beremiz и 95% разработчиков ПЛК - дает легкий и быстрый эффект в разработке, но такие ПЛК очень деревянные/неповоротливые, и подвержены трудно уловимым ошибкам с тяжелой (или невозможной) отладкой.
Сама среда, графический движок от Schneider - сильно уступает моим наработкам тоже. У Schneider можно создавать “строки” из 5 элементов и одной катушки, в то время как мой движок (без каких либо фреймворков - рисует примитивами) - может отображать любые разветвленные ветки и связи любой сложности, создавать собственные блоки любых размеров с любым количеством переменных и структур и описывать их программно.
Программируемые Машинные Контроллеры.
Промышленный процессор на базе микроконтроллеров с 4-6 КБ ОЗУ как MIK32 Амур или STM32G030 можно использовать не только как ПЛК, но и - Конструктор кастомного пульта - рабочее место оператора.
То есть не пульт с вылитым корпусом на фабрике, или корпуса в которых надо что то сверлить или отвертками крутить . Имеет смысл - дизайн модулей с разным набором кнопок, ползунков и т.д с использованием настройки экосистемы и среды для ПЛК.
Когда процессор от ПЛК может стать процессором пульта и обратно, подключая нужные наборы кнопок, джойстиков или модулей ввода/вывода.
Но идея не только в дизайне, но и подходе к надежности. В чем лично моя идея это - разработка самого надежного отказоустойчивого пульта в промышленности, работающий по принципу Zero Protocol.
Обычно в АСУ ТП между модулями идет общение по CAN и подобных протоколах. Я разработал гибрид с конфигурацией на подобии идеи конфигурации FPGA:
Шина,например CAN/RS485 - тоже есть, для конфигурации,и низкоприоритетных задач.
Шина Zero Protocol - прямые линии- провода(в зависимости от количества входов у процессора CPU).
Визуально это выглядит вот так:
Подключение к процессору - модулей с кнопками (на подобии модулей ввода вывода)
с нужными комбинациями энкодеров, кнопок , ползунков и т.п. С двумя шинами: протокольная (CAN\RS485) и прямая Zero Protocol.
Преимущества дизайна:
Единая среда разработки программ для ПЛК и пультов с автоматической детекцией подключаемых, типов кнопок/ползунков/энкодеров,в единый дизайн.
Кнопки можно покупать конечно отдельно и подключать их к ПЛК, но это годится только для закрытых шкафов. Для пульта внутри машины/или управлять светом на дискотеке со сцены - не практично и не красиво. Я не просто инженер, по второму диплому (и со стажем) - преподаватель живописи и графики. Дизайн - неотъемлемая часть моего мышления, нахожу это - красивым.
Преимущества технические:
Реакция на нажатие кнопки, энкодера и т.д - нулевая задержка. Прямой провод, никакого зависания коллизий линии и прочее.
Подтверждение (прошел сигнал/не прошел) - как второстепенная информация. Если подтверждение придет через 0.5 -1 секунд - неважно, главное реакция на нажатие оператором - сработает 100% без зависаний.
Если оператор видит машины или механизмы своими глазами - все подтверждения по проводам - избыточны.
Если оператор не видит глазами - происходящее (задвижка какая нибудь), то задержка подтверждения в 0.5 - 1 секунду роли никакой не сыграет для реакции человека, зато может сыграть для критического сигнала (например кнопки STOP) 0.5 сек - это много, и есть смысл убрать протоколы замедляющие сигнал идущий в -> сторону машин и механизмов.
Мы имеем программируемые модули кнопок, с автоматическим отображением переменных в среде, при том сохраняя всю скорость реакции как у прямого примитивного железа.
Таким образом у нас машинный контроллер имеет три приоритета на реакции:
1) Высокий приоритет, например кнопка STOP и подобное, работает в обход процессора (к процессору подключен но только для регистрации времени события например или для сообщений в SCADA).
2) Средний приоритет - так же работает без протокола, по прямому проводу, но есть задержка в размер цикла (программируемая реакция, может быть добавлен алгоритм обработчик).
Это как будто бы вы подключили просто кнопку/рубильник к входу обычного ПЛК как упоминалось ранее, но естественно эта кнопка не отобразится в обычных ПЛК и средах, все нужно прописывать руками. В нашей Среде она - отобразится автоматически (тип, название) по протокольной шине.
3) Самый низкий приоритет - те кнопки и элементы которые полностью на линии CAN/TCP и др., там время реакции большое:
Сигнал должен пройти все рукопожатия, контрольные суммы, побороть коллизии + быть обработан в цикле ПЛК.
Как раз на этом уровне и работают всякие модули в ПЛК мировых вендоров, И они это называют - надежным модулем. В моем представлении это считается самым медленным и ненадежным в сравнении с Zero Protocol.
Перефразируя коротко мою идею - это так: обеспечить прохождение сигнала в ту сторону (до машины) без помех и риска, а обратно (от машины) - как у всех, через шину с протоколом типа CAN/RS485.
Я больше склоняюсь к RS485 (и с ним экспериментирую ) так как такой модуль кнопок можно обеспечить на совсем примитивных и дешевых микроконтроллерах с UART и 1-2 кб ОЗУ и получить надежность превышающую дорогие пульты называющие себя - отказоустойчивыми.
Вот такой был тест MIK32 AMUR и мое масштабное видение применения слабого железа к своим наработкам.
Пишите критические мысли в комментарии или на почту zoshytlogic@gmail.com
Спасибо вам!
Хочу сказать спасибо за такое количество активности и советов. Вижу многим не понравилось отсутствие сертификата, но прошу понять что я в этом деле новичок и решил создать сайт со всем в одном месте потому что для меня это было проблемой. И конечно комментарии про функционал были, но я буду пробовать улучшать сайт.
И раз вы проявили так много активности то вот соц сети:
ТТ - @arduinfo
ТГК - @arduinfo_off
И конечно ссылочка на сайт http://arduinfo.ru (второй раз повторюсь пока без сертификата, если можете помочь то помогите)
Автополив с Пикабу: собрал в симуляторе три версии, от Nano до ESP32 с веб-админкой и MQTT
На днях в ленте попался пост Azatey.n про автоматический полив со схемой и скетчем. Схема понравилась: два насоса, фитолампа, меню на энкодере. Всё по делу, ничего лишнего.
И я подумал: а что если собрать это в моём симуляторе PinPort и заодно прокачать проект?
Сразу про честность:
Схему я подсмотрел у автора. Это его идея, ему спасибо.
Код мой, новый. Из поста я его не брал, писал с нуля.
Три версии одного проекта
Одну и ту же теплицу я сделал в трёх вариантах, от простого к навороченному:
Автополив и фитолампа на Arduino Nano: классика, меню на энкодере, экран, часы.
Автополив и фитолампа на ESP32 с веб-админкой: то же самое, плюс страничка, с которой всё настраивается.
Автополив и фитолампа на ESP32: веб-админка и MQTT: то же самое, плюс связь с брокером, чтобы данные летали в облако.
Как и у автора, меню управляется энкодером. В новых версиях к нему добавились веб-интерфейс и MQTT.
Что в схеме
ESP32 в роли мозга.
Три реле на 10 А: два для насосов, одно для лампы.
Цепь 12 В: блок питания, два тумблера и два насоса по 6 Вт.
Цепь 230 В: ввод, автомат, выключатель и сама фитолампа.
Датчик температуры и влажности, часы, экран и энкодер KY-040.
В реальной жизни 230 В в теплице штука опасная. В симуляторе можно спокойно набивать шишки: перепутал провод, увидел, что не работает, поправил. Дым из монитора не идёт.
Веб-админка
Самое приятное в версии с ESP32 поднимает свою страничку, где видно:
время, температуру и влажность;
статус MQTT («на связи», брокер MQTT);
состояние фитолампы: горит или нет, по какому расписанию;
обратный отсчёт до следующего полива каждого насоса;
кнопки «Полить сейчас».
А ещё там настраивается всё расписание: во сколько включать и выключать лампу, сколько секунд качать, раз в сколько дней поливать, в каком часу. Нажал «Сохранить», и пошло.
Сейчас, например, лампа работает с 7:00 до 21:00. Насос P1 качает 100 секунд раз в 3 дня в 20:00, а P2 качает 60 секунд раз в 2 дня в 8:00. Всё это меняется в два клика, без перепрошивки.
Что пришлось доработать в самом симуляторе
Чтобы такое вообще собрать, пришлось научить PinPort гибридным схемам. Раньше были отдельно лаборатории с контроллерами, отдельно с 12 В и 230 В. Теперь в одной схеме могут жить плата, цепь на 12 В и цепь на 230 В, и всё это связано реле.
Так что проект получился не только про автополив, но и хорошим тестом для самого симулятора. Ну и заодно ещё раз убедился, что вайбкодинг работает: код писали вместе с нейросетью, а я гонял и ругался.
Попробовать самому
Все три проекта открываются без регистрации, гостем: заходите по ссылкам выше, жмите «Старт» и смотрите, как оно работает. Можно подсмотреть, как соединены детали, и заглянуть в код.
Свои схемы собирать пока могут только зарегистрированные, а регистрация закрыта. Если хочется собрать что-то своё, напишите в личку или в комментарии, и я дам доступ в личный кабинет.
Расскажите, что бы вы автоматизировали в первую очередь. Огурцы, рассаду, аквариум? И как всегда: помидоры принимаются, желательно спелые. 🍅
Проект: pinport.ru
Не Wokwi, но тоже мигает: мой симулятор Arduino и ESP32 в браузере
Давайте сразу по-честному: это пост про мой проект. Смотрю, соседи по Пикабу пиарят свои поделки, и я такой: а чем я хуже? Так что вот, закидывайте помидорами, только желательно спелыми и по делу.
Да, это вайбкодинг, я не скрываю!
Сразу признаюсь: проект сделан вайбкодингом. Я придумывал, что и как должно работать, объяснял это нейросети, она писала код, а я тестировал, ругался и просил переделать. Получилось что-то среднее между программированием и режиссурой.
Идея и решения мои, а код делала нейросеть. Судить, что вышло, вам.
Пять лабораторий в одной вкладке
Что хотите собрать, то и открываете:
ESP32: Wi-Fi, датчики, дисплеи, код.
Arduino: Uno, Nano, Mega.
12 В: реле, лампы, моторы, автоэлектрика.
230 В: щиток, автоматы, УЗО, кабель, нагрев.
Электроника: транзисторы, RC-цепи, осциллограф.
Что внутри
Схемы мышкой. Детали таскаешь на холст, выводы соединяешь проводами. Схема хранится обычным текстом, её можно скопировать, положить в git или скинуть коллеге.
Настоящий код. Прошивка собирается настоящим arduino-cli, а работает в браузере. Пишешь на C++, жмёшь «Старт», и оно едет.
Осциллограф и логический анализатор. Двухканальный осциллограф с курсорами и логический анализатор, чтобы смотреть сигналы во времени.
Ток, напряжение, мощность в каждой ветке. Перегрузка и короткое замыкание считаются честно, а не по табличке.
Тепловая карта. Видно, какой кабель греется и где вот-вот запахнет. Виртуальный дым из монитора, правда, не пахнет.
Wi-Fi без интернета. ESP32 умеет веб-сервер и HTTP-запросы прямо в симуляторе.
Ошибки на русском. Ошибки компилятора переведены, а разбор схемы находит перепутанные SDA и SCL ещё до запуска.
Галерея: 367 готовых примеров
Любой проект можно открыть, запустить и сделать своей копией. У каждого есть разбор: что на схеме, какие библиотеки нужны и что делает код. Примеры разложены по платам и темам: ESP32, Arduino, 12 В, 230 В, электроника. Есть и всякая экзотика, вроде фильтров на одних данных или разбора трёх фаз в офисном щитке.
Уроки и калькуляторы
Для тех, кто начинает с нуля, есть уроки с проверкой прямо в модели: 38 уроков и 73 задачи. Не получилось, и проверка скажет, что именно не сходится. Есть подсказки и баллы, как в игре, только про электронику.
Курсы такие:
ESP32 с нуля
Arduino с нуля
Автоэлектрика 12 В
Электрика в квартире
Основы электроники
От схемы к устройству
Ещё есть калькуляторы: резистор для светодиода, закон Ома, делитель напряжения, цветовая маркировка резисторов, сечение кабеля, автомат по мощности, падение напряжения на 12 В. Любой результат можно открыть готовой схемой и посмотреть на приборах, врёт калькулятор или нет.
А чем отличается от Wokwi?
Честно: Wokwi зрелый и мощный проект, и я не пытаюсь его «убить». Просто у PinPort другой набор фишек:
Русский интерфейс и русскоязычные материалы.
Цепи на 220 В. Насколько я знаю, в Wokwi такого нет, а мне хотелось безопасно потренироваться и с сетевым напряжением.
Живые схемы в блоге. Статья и симуляция в одном месте, без копирования проекта к себе.
Если вы уже пользуетесь Wokwi, зайдите и сравните. Мне будет очень интересно услышать, чего не хватает.
А еще можно записывать gif к любому своему проекту и показывать друзьям.
Кому пригодится
Новичкам, которые хотят понять Arduino и ESP32 до покупки набора.
Студентам, у которых лабораторная завтра, а стенд занят.
Тем, кто хочет проверить код «на коленке» перед сборкой железа.
Всем, кто любит ковыряться в схемах ради удовольствия.
Как попробовать
Прямо сейчас регистрация временно отключена: зайдите на сайт как гость и запускайте любые проекты из галереи. Можно смотреть, как работают схемы, жать «Старт» и подглядывать, как всё собрано.
Свои схемы могут собирать только зарегистрированные пользователи, а регистрация закрыта: проект молодой, и я хочу спокойно его дорабатывать без наплыва народа. Но если хочется собрать что-то своё, напишите мне в личку или в комментариях, и я выдам доступ в личный кабинет.
А ещё скажите, чего не хватает: каких датчиков, модулей и плат добавить в первую очередь? Читаю всё.
Проект: pinport.ru
P.S.
И да, не все еще работает. Знаю, чиним.
Сделал сайт про Arduino для тех, кто только начинает — без рекламы и воды
Начинал с Arduino год назад и столкнулся с проблемой: информация
разбросана, половина статей устарела, а калькуляторы либо платные,
либо неудобные.
Решил собрать всё в одном месте:
— 12 проектов с пошаговыми схемами и кодом. От «мигающего светодиода»
до дисплея и датчиков.
— Калькулятор резисторов (цветовая маркировка) — считает сразу,
без кнопок.
— Закон Ома, LED-калькулятор, делитель напряжения, время работы
от батареи.
— Основы: какие пины за что отвечают, что такое ШИМ, как загрузить скетч.
Никакой рекламы, регистрации и «подпишись на курс». Просто сайт.
Если найдёте ошибки — пишите, поправлю.
Подключение
Как можно подключить четыре датчика цвета TCS3472 к DUO
по i2c. Подскажите пожалуйста .














