PID (ПИД) без математики: как просто понять P, I и D

PID-регулятор — частая проблема для начинающих в робототехнике: математика отпугивает. Но саму идею понять можно без формул. В этой статье я объясню P, I и D простыми словами и с визуализацией

Учимся программировать микроконтроллеры

PID-регулятор — частая проблема для начинающих в робототехнике: математика отпугивает. Но саму идею понять можно без формул. В этой статье я объясню P, I и D простыми словами и с визуализацией

Оригинал этой статьи НЕ загружается с веб-сервера, работающего на одноразовом вейпе. Если вы хотите увидеть сам сервер, то это можно сделать здесь. В остальном контент идентичен.
Предыстория
Уже пару лет я собираю коллекцию одноразовых вейпов, полученных от друзей и членов семьи. Поначалу я только извлекал аккумуляторы для «будущих» проектов (это точно не синдром Плюшкина), но в последнее время одноразовые вейпы стали гораздо более продвинутыми. Не хотел бы я быть юристом, которому придётся доказывать, что устройство с разъёмом USB C и перезаряжаемым аккумулятором можно классифицировать, как «одноразовое». К счастью, в ближайшее время я не планирую подаваться в юриспруденцию.
В прошлом году я разбирал одну из этих технологичных сосок для взрослых и заметил нечто любопытное: вместо обычной чёрной капли, которой заливают ASIC (Application Specific Integrated Circuit), я увидел небольшую интегральную схему с маркировкой «PUYA». Не буду винить читателей, если это название не вызвало у вас того же восторга, что и у меня — большинство людей никогда его не слышало. Эта компания больше всего знаменита своими флэш-чипами, но впервые я узнал о них из поста Джея Карлсона о самом дешёвом флэш-микроконтроллере. Это довольно мощные крошечные микроконтроллеры ARM Cortex-M0+.
За последний год у меня скопилось довольно много таких одноразок с PY32; это были разные модели вейпов одного производителя. Я не буду бесплатно рекламировать табачный бренд, но выражу благодарность проектировщику за маркировку на отладочных контактах!

Наверняка многие читатели слышали о самой дешевой консоли на маркетплейсах — «Sup». На первый взгляд, это устройство — чудо чудное: цветной дисплей приличного разрешения, целых 500 игр в комплекте, аккумулятор и даже дополнительный геймпад, и всё это за какие-то 400 рублей в розницу.
Обычный человек просто подумает мол «очередной масс-маркет по типу Тетриса» и пройдет мимо. Однако моя гиковская душа очень хотела узнать, в чём же заключается тайна самой дешевой консоли на Озоне и я решил заглянуть «под капот»… Поверьте, внутри гораздо интереснее, чем кажется на первый взгляд!

КДПВ
Обычно сервер ассоциируется с чем-то дорогим и недоступным обычному человеку. Даже на вторичном рынке они пока еще стоят весьма существенно (если не рассматривать совсем уж допотопные экземпляры). Однако, есть и такие, которые можно приобрести весьма недорого.
Это так называемые блейд-серверы. Блейд-сервер (от англ. blade — лезвие) – концепция использования нескольких компактных серверов в одной общей корзине (шасси). Некоторые узлы сервера (такие как блоки питания, охлаждение, сетевые адаптеры, управление) вынесены за пределы сервера и сделаны общими для всех. Благодаря этому исключается излишнее дублирование и, соответственно, уменьшаются габариты и общее энергопотребление всей сборки. Увеличивается плотность вычислительной мощности на единицу объема серверной стойки. Из-за того, что единичный блейд-сервер бесполезен без корзины, а в корзине избыточен, они не пользуются спросом на вторичном рынке, а потому стоят весьма недорого.

(Дисклеймер: Заголовок — намеренная провокация. Но если ваша рука уже потянулась к клавиатуре, чтобы написать гневный комментарий о деградации инженерной школы — добро пожаловать под кат. Там мы разберемся, почему синяя платка из Италии победила академический снобизм и создала армию инженеров).
Представьте мир до середины нулевых. Вы — школьник, студент или просто энтузиаст, и вы хотите собрать простенького робота. Ваши действия?
Сначала нужно купить микроконтроллер (PIC или AVR). Затем найти программатор ($50–100) или паять LPT-«костыль» на коленке, рискуя сжечь порт материнской платы. Потом открыть даташит на 300 страниц на английском, чтобы понять, в какой регистр нужно «плюнуть» битом, чтобы просто зажечь светодиод. И, наконец, написать код на Ассемблере или голом Си, где ошибка в одной запятой превращает устройство в кирпич.

Были ещё и другие электронные игры, но именно «Ну, погоди!» считается классикой.
Игре посвящено много ностальгических статей и видео. На различных торговых площадках можно купить её в различном состоянии от убитого до «с хранения» и даже новодел.
Лет 10 назад и я купил её в идеальном состоянии, поигрался, вспомнил детство и положил в ящик. Но несколько месяцев назад с разочарованием увидел, что «потекла» нижняя часть экрана.
Можно было или отремонтировать, или купить другой экземпляр игры, но я сначала попробовал узнать, как её отремонтировать, а потом решил воссоздать игру на современных компонентах.
Я не был одинок в своём желании воссоздать игру, этой теме посвящено также немало статей, но в них обычно создавали симуляторы, а не эмуляторы игры. Симулятор у меня ассоциируется с фразой: «Я художник, я так вижу», эмулятор — это более точное воспроизведение устройства.
Формат статьи не позволяет выразить все те ощущения, которые я испытал при путешествии от зарождения идеи до реально работающей игры, практически ничем не отличающейся от оригинала. Много из того, что я узнал в этом путешествии, не поместилось в статью или поместилось в очень сжатом виде.
Эмулятор максимально приближен к оригиналу, если не считать экран (он не сегментный, как в оригинале) и корпус (я пока реализовал на беспаечной макетной плате).
Если вам интересно, как за несколько вечеров воссоздать у себя эмулятор «Ну, погоди!» на современном микроконтроллере или просто поностальгировать, добро пожаловать под кат.

Помните статью про самую дешёвую консоль с Ozon — Sup GameBox? Тогда я рассказал вам о том, что у этого чуда инженерной мысли находится «под капотом» и почему эта консоль не так проста, как кажется на первый взгляд.
После статьи я решил написать письмо производителю процессора этой консоли. И что самое интересно — мне ответили! Даже Спустя 40 лет после релиза оригинальной NES, тайваньская компания V.R.T продолжает развивать архитектуру оригинальной NES. Мне больше ничего не оставалось, кроме как включить фен, достать программатор и хакнуть этот девайс...

Осторожно: статья написана максимально простым языком. Так что если вы гик, но не умеете программировать — вам всё равно будет интересно!
Недавно я наткнулся на DIY-игровую консоль за 1.500 рублей — Waveshare GamePi13. Когда гаджет приехал ко мне, я запустил примеры игр от производителя... и оторопел от 5 FPS в Pong — это ж как плохо нужно код писать!
Не желая мириться с этим, я открыл схему устройства, даташит на RP2040 и принялся писать свой собственный BIOS. Если вам интересно узнать, как работают DIY-консоли «изнутри», можно ли запускать внешние программы на микроконтроллерах из RAM, как реализованы различные подсистемы BIOS, а в конце даже написать «Змейку» - добро пожаловать под кат!

Уже не первый десяток лет газоразрядные цифровые индикаторы переживают свой ренессанс. Одни собирают часы и метеостанции на широко распространённых ИН-12, другие уходят в тему с головой и пытаются наладить своё производство ламп немыслимых доселе форм и размеров.
Большинство конструкций на газоразрядниках, которые мне попадались в категории «для начинающих», использовали давно снятые с производства микросхемы по типу К155ИД1 или SN74141. Также многие встреченные схемы экономили на оных, используя один дешифратор для всех ламп сразу, коммутируя аноды через оптопары.
Поставить же две ИН-12, валявшихся в ящике уже десяток лет, хотелось в свой проект CD-плеера — отображать номер трека или радиостанции. Поэтому хотелось иметь такой же модуль, как и любой другой дисплей — не сильно крупнее геометрически, чем сами лампы, подключающийся по какой-нибудь стандартной шине и не требующий от процессора никаких заморочек с обновлением динамической индикации и всего такого, да и на производящихся по сей день компонентах до кучи.
Кто же знал, чем это всё для меня обернётся!

Всем привет и наступающими! Захотелось тут сделать пару гаджетов для друзей в их умные дома. И что-то вдруг подумалось - а что они все скучные такие? Давайте же сегодня сделаем датчик в таком форм-факторе, в котором точно не купишь в магазине, будет отличный подарок на Новый Год или Рождество. Ну и ещё чтобы подарить было не стыдно.


Студенты обожают ChatGPT. В идеале, они хотят закоротить профессора и чатгопоту напрямую, то есть посылать задачу от профессора гопоте, пересылать ответ профессору, возражения слать гопоте назад итд - пока не получится решения. Лучше всего это делать скриптом, чтобы студент вообще не был вовлечен в решение задачи и занимался своими студенческими делами, пока чатгопота и профессор разговаривают.
Как же обломать крылья этой мечте? Запрещать чатгпт бессмысленно, но как сделать так, чтобы с чатгпт стало сильно труднее чем без него? Чтобы студенты пинали его и так и сяк, но решения бы не получалось, а вот у студентов, которые решили сесть и подумать сами - решение бы получалось?

Приветствую, Хабр!
Перед Новым годом для поднятия настроения до праздничного, захотелось сделать что-то необычное и новое. Все мы украшаем елку, ставим на вершину звезду, вешаем на ветки игрушки и ждем Деда Мороза. Женя, 41 годик.

Родители малышей постоянно фотографируют их проделки. Дети копируют наше поведение как обезьяны, поэтому наш младший тоже вскоре захотел щёлкать затвором. Обычно мы делаем снимки на телефон, но давать его будет не очень хорошей идеей: дети иногда роняют вещи. Что ещё хуже, иногда в телефоне включаются какие-то странные будильники и меняются настройки. Чтобы такого не происходило, я решил специально для младшего ребёнка купить камеру.
Очевидно, дети в таком возрасте не могут пользоваться всеми функциями зеркальных или даже компактных камер. К счастью, в мире много детей с интересом к фотографии, поэтому есть и рынок для дешёвых (в буквальном смысле) камер: в них не так много функций и наворотов, крепкий пластмассовый корпус, а низкая цена не позволяет расстроиться из-за поломки. Я поискал такую камеру на Taobao и остановился на той, которая показалась мне достаточно простой. Я не надеялся, что фотографии будут качественными, но хотя бы разрешение должно оказаться приемлемым.
Для включения камеры достаточно было нажать на кнопку. Однако дальше всё становилось сложнее: как и во многих китайских устройствах, производитель стремился запихнуть в камеру кучу функций, поэтому после загрузки открывалось меню, где одной из опций был режим камеры. Если бы у камеры был сенсорный экран, как у наших телефонов, то это не вызвало бы проблемы, но перемещаться по меню нужно было при помощи курсорных клавиш, а это оказалось слишком сложно для трёхлетки, живущего в нашем современном мире.
Поэтому я задумался: наверняка ведь есть способ пропустить меню и сразу перейти в режим камеры? Должно быть, внутри камеры находится какой-нибудь процессор ARM, и я не думаю, что разработчики заморочились с защитой кода. Достаточно считать его через JTAG, загрузить в Ghidra, найти нужный бит, изменить его, снова записать код во флэш-память, и всё.

Четыре сгоревших STM32, три блока питания, 90 ампер, синяя сосиска, 16 бубенчиков и электродиффузия — в этой части кормим подсветку для трёх теликов, пишем с нуля протокол адресных светодиодных лент WS2812b и обматываемся коаксиальными проводами.

Осторожно: помните ли вы, как в вашем телефоне Siemens, Motorola и Sony поселились маленькие программы — «эльфы»? В рамках этой статьи мы во всех деталях исследуем прошивку бюджетного кнопочника, разберемся в её архитектуре, хакнем и напишем загрузчик тех самых эльфов с MicroSD-флэшки. При этом я постараюсь объяснить всё максимально простым и доступным языком!
Недавно я познакомился с легендой форума allsiemens.ru — Ilya_ZX, который известен своим огромным вкладом в тему реверса и моддинга телефонов на платформе E-Gold и S-Gold. Илья поведал мне интересную историю о том, как в начале нулевых, будучи студентом, поспорил с одногруппником, сможет ли он добавить «змейку» в свой Siemens A60. И спор он этот выиграл, путем бессонных ночей ковыряния прошивки в IDA Pro! Я подумал — «а чем я хуже?». Взял в руки кнопочный телефон на платформе Spreadtrum, сдампил прошивку и загрузил в дизассемблер...
Если вам интересен подробный процесс реверса различных модулей прошивки, как они взаимодействуют между собой, как я написал программу для применения патчей к фуллфлэшу и, собственно, бинлоадер с первой программой — жду вас под катом!

В этой серии статей я расскажу, как строил кастомную 500-ваттную подсветку вокруг трёх теликов, какие у неё особенности и как я огибал геометрию экранов с использованием, в том числе, 3D печати из алюминия.

Часть I: Основы
«В теории теория и практика одинаковы. На практике это не так». — авторство приписывается разными специалистам по computer science
Загадка
Два часа утра. Я смотрю на совершенно нелогичные данные профилирования.
В процессе работы над загрузчиком для SoC RISC-V у нас возникла проблема с производительностью. Загрузчик должен был искать конфигурации устройств в таблице: примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации. Всё просто.
Мой коллега реализовал эту систему с помощью хэш-таблицы. «Поиск за O(1), — сказал он уверенно, — лучше уже некуда».
Но загрузчик работал медленно. Недопустимо медленно. Время загрузки должно было находиться в пределах 100 мс, но превышало это значение на три порядка.
Я попробовал использовать очевидную оптимизацию: заменить хэш-таблицу двоичным поиском по отсортированному массиву. Двоичный поиск занимает O(log n), что теоретически хуже, чем O(1). Так написано в учебниках. Мой преподаватель алгоритмов был бы разочарован.
Но в результате загрузчик оказался на 40% быстрее.
Как O(log n) смогло победить O(1)? Что происходит?

Близятся Новый год и Рождество, а значит, ёлки и всё связанное с ними: гирлянды, украшения и, разумеется, игрушки. Праздник слишком уж весёлый, и я решил, что ему не хватает мрачной игры, поэтому напечатал маленькую ёлочную игрушку в виде модели IBM PC, засунул в неё самый маленький ЖК-дисплей, который смог найти, добавил туда процессор и логику, а также аккумулятор. Это устройство может висеть на ёлке и показывать демонстрационный режим Doom со звуком и музыкой. Но и это ещё не всё: если подключить ней любую BLE-клавиатуру или джойстик, то можно будет самому убивать миллиметровых зомби, какодемонов и импов.

Я питаю двоякие чувства к метеостанциям. Терпеть не могу многочисленные Arduino-проекты с мелким экраном, зато люблю что-то эдакое. Например в коридоре уже пять лет как висит метеоиндикатор на базе блинкерного табло для автобуса, что случайно попалось на просторах авито. Так вышло и на этот раз, и в моем распоряжении оказался аэродромный индикатор погоды Комплексной Радиотехнической Аэродромной Метеорологической Станции.