Личные проекты – это важный элемент любой технической профессии. Они дают какую-то нить идентичности, столь востребованную в наше время – вот ты уже не следуешь вслепую по линейному конвейеру жизни, а выходишь за рамки, создаешь что-то новое, попутно расширяя свой технический кругозор и повышая квалификацию. Ну, или переводишь большую часть дохода и/или времени на очередную попытку, потому что «в этот раз точно получится, ну столько же сил вложено, куда отступать».  В этой статье я бы хотел рассказать о своем проекте, который стал причудливой амальгамацией этих двух парадигм. Одним чудным летним вечером, обладая знаниями электроники на уровне детского электронного конструктора, я решил, что надо сделать хороший такой «железный» проект – с какой-то социальной значимостью, идеей, потенциалом, и вот этим всем. Что-то, что со временем, сможет пробить барьер между «самоделкой» и «изобретением», заодно придав мотивацию изучить технологии, необходимые для этого. После продолжительного мозгового штурма, из всех идей была выбрана одна – пожалуй, наименее абсурдная и приближенная к реальности. Вкратце – была взята уже существующая концепция ультразвукового детектора препятствий, который ставится на ручку трости, и была совмещена с гироскопически-стабилизируемым механизмом на двух сервомоторах. Даже тогда, когда я еще не знал умных слов навроде «твердотельные решения» и «устойчивость мехатронной системы», начинали закрадываться сомнения, насколько это решение было поспешным. Но, насколько эти сомнения были верны – чуть позже.                                                   Первая версия была сделана на Arduino Uno – как демонстрационный стенд, который должен был обозначить все основные трудности, которые придется преодолевать в серьезных прототипах. С этим он справился на отлично – выдвинув целую кучу тезисов: Ориентироваться по чему-то кроме как по сигналам а-ля парктроник весьма сложно. Сложную информацию приходится дольше воспринимать, и как следствие, чаще врезаться.  Продолжая пункт 1, датчик должен быть строго однонаправленным. Направляя его в стороны в коридоре, можно настрадаться от ложных предупреждений. Оказывается, рост людей бывает разный. Место закрепления прибора тоже может различаться. Как следствие, расстояние до земли тоже растет и уменьшается! Всегда сигналить в ухо нельзя – теряется восприятие окружения, которое особенно важно в городской обстановке, например, чтобы вовремя среагировать на дорогу. Вес отладочного макета, даже без корпуса, просто огромен – и большую часть занимает аккумулятор, который должен держать заряд для постоянной работы двигателей. Стабилизация, так как она была сделана на тестовом макете, была смехотворно некомпетентной. Как оказалось, высчитывать угол наклона чисто при помощи арктангенсов векторов в акселерометре было не самой лучшей идеей, учитывая импульсы при ходьбе. По первому, второму и четвертому тезису решение нашлось быстро – было принято, что для сигнализации превышения уровня поверхности будут использоваться короткие и частые сигналы, а для участков сниженной высоты – длинные и редкие, в остальное время же прибор будет молчать. С третьим пунктом тоже все просто – при запуске достаточно «поглядеть» вниз, оценив расстояние до земли, и на основе него уже считать расстояние до препятствия. Пятый тезис определил дальнейший курс развития на применение контроллеров низкого энергопотребления (тоже заведомо ложный в данном контексте, т.к. если электромеханика работает постоянно, выигрыш от низкопотребляющей логики уловить сложно). Шестой тезис заставил меня вникнуть в такую концепцию, как фильтр Калмана и MEMS-датчики, совмещающие различные измерительные приборы. И вроде как, оно даже работало. Порой не успевало корректировать положение, весило как кирпич, иногда сгорало от нагромождения проводов…, и я решил улучшить сей прибор современными технологиями, нацелившись на свою печатную плату и микроконтроллер низкого энергопотребления, в идеале что-то из ассортимента STM32 (т.к. из современных МК, как я понял, они были задокументированы лучше всего). Я думал, это будет просто. Я очень сильно ошибался. Два месяца я изучал "Искусство схемотехники" Хоровица и Хилла, "Освоение STM32" Кармина Н. , по одной простой причине – я не знал абсолютно ничего, а мои знания физики заканчивались на законе Ома. Обе эти книги могу очень сильно порекомендовать, так как они, конечно, не заменили мне опыта пары сгоревших плат и неработающих программ, но они дали основательную базу, позволившую мне отследить эти ошибки и понять, что нужно изменить для их исправления. Но эта итерация, впрочем, смогла вместиться в относительно адекватные размеры (практически в два раза меньше, чем предыдущая версия), продемонстрировать приемлемую прочность, да и вес у нее был заметно меньше. Осталось лишь применить бритву Оккама – как оказалось, нет никакого смысла в аудиоусилителе при передаче простейшего писка, а кнопка включения/выключения может быть спокойно заменена таймером низкого потребления, проверяющим, сдвинулось ли устройство с места или нет, и переводящим конструкцию в режим энергосбережения. Было проведено множество тестов, и я четко понял несколько моментов. Во-первых, тонкие дорожки в проекте, задействующем до 1.5А – крайне неудачная затея. При сильных поворотах сервомотора, падения напряжения возникают такие, что маска платы начинает отклеиваться от нагрева. Но еще худшим решением было поставить линейный преобразователь с ~6-8 вольт аккумулятора в 5в моторов – ЛДО буквально кипел и дымился при подключении сервомоторов. Пришло время все переделать на импульсном понижающем преобразователе, и с нормальной топологией платы… …но у меня кончились деньги. Это было ожидаемо, учитывая кризис микроконтроллеров и стоимость прототипирования печатных плат – но едва ли это означало паузу в работе над проектом. Прочтя в процессе “PIC-микроконтроллеры” Сида Катцена, я загорелся идеей сделать новую итерацию на минимальном железе, и максимально оптимизировать ее, применяя ассемблер. Это несло даже некоторую выгоду проекту – убирая лишнюю цепь 3.3в, можно было заметно срезать на инфраструктуре питания. В голове – AtMega328p, начнем.  Оказалось, делать плату таким образом – худшее, что можно было придумать. Даже травление лазерно-утюжной «технологией» было более разумной затеей. Перемычки отлетали, припой протекал, а макетная плата начинала напоминать поле битвы после даже небольшой смены конфигурации. И конечно, замыкания – они повсюду. Плата, впрочем, действительно получилась крайне компактной, другое дело, что она едва ли работала. Любая хоть сколько-то сложная передача пропадала в какофонии помех, порожденных нагромождением паразитных емкостей и индуктивностей – что приводило к совершенно непредсказуемой работе платы. Был поднят вопрос о травлении сей конструкции своими руками, но… Пришла стипендия, и вместе с ней пришло время делать новую нормальную версию устройства. Но зачем останавливаться на одной проблеме питания? Я решил составить блок-схему устройства по всем канонам мехатроники, и обнаружил, что я полагаюсь на избыточную обратную связь – сервомоторы применяют энкодер, чтобы определить, попали ли они в нужный угол, диктуемый им гироскопом. Было бы логично убрать лишнее звено, сделав прямую связь – двигатели корректируют положение с уменьшающейся скоростью до тех пор, пока не придут близко к приемлемому значению угла наклона. Я предположил, что при должном быстродействии, это поможет полностью устранить проблему автоколебаний сервомотора при ходьбе, понизить лишнее энергопотребление, и многократно увеличить точность устройства. Для предсказуемого вращения были взяты шаговые двигатели (потребовавшие свои микросхемы-драйверы). Помимо этого, был вынесен определенный урок касательно подключения проводов к плате – даже если они не подразумевают включение-выключение пользователем, во имя износостойкости их лучше подключать через клеммы или разъемы. Эта плата, на мой взгляд до сих пор, была одной из лучших, что я делал. Явных ошибок разводки там не было, да и собрана она была плюс-минус прилично (спасибо фену и паяльной пасте). Но… по какой-то причине, микроконтроллер сгорел. То ли это было статическое электричество (от которого я тщательно заземлялся браслетом, подключенным к батарее), то ли температура фена (который опять же, работал на минимальном нагреве и отводился мгновенно, как паста заблестит) – неизвестно. Одно было понятно точно – в феврале произошли события, навсегда изменившие рынок микроэлектроники в России, и на получение микроконтроллеров STM32, тем более по адекватным ценам, можно было уже не надеяться. Я довольно долго думал, что про микроконтроллеры вообще можно забыть, но произошло кое-что необычное. Я увидел мощные, сложные, и крайне плохо задокументированные МК серии ATSAM (как я понял - попытка Atmel запрыгнуть в уходящий поезд разработки 32-битных контроллеров), по совершенно смешной цене в 300 рублей. Естественно, они и легли в основу следующей итерации сего устройства – даже несмотря на экспоненциальный рост сложности разводки. Но… во-первых, из-за цен на прототипирование в России, плата явно не попадет ко мне на стол, а во-вторых, этот проект, внезапно, выиграл мне грант. Не буду подробно акцентироваться, я специально выждал с этой статьей, чтобы она не несла отпечаток горделиво-трепетного превознесения этого момента, но да – теперь, этот проект можно развить еще дальше. На текущий момент я думаю переделать плату под многослойную топологию, сделать ее максимально компактной и помехозащищенной, и реализовать устройство на рынке именно в таком формате. Другое дело, зачем оно вообще? Концепция механической стабилизации, зашитая глубоко в идее устройства – худшее, до чего я мог додуматься. В Сколково сделали «Робин», полагающийся на твердотельные датчики и машинное зрение – он намного эффективнее обнаруживает препятствия. Я не имею никаких иллюзий по поводу востребованности своего проекта, и потому, эту статью априори нельзя рассматривать как его рекламу. Но все же, я надеюсь она поможет кому-то в создании своего пет-проекта в схемотехнике, в избегании моих ошибок как в постановке задачи, так и в ее исполнении.  Middle-разработчик встраиваемого ПО