Возникла идея скрестить пульт от VR шлема и детский метательный планер.
Детский метательный планер с VR пультом
Чтобы не вышло слишком длинно сделаю несколько отдельных статей для каждого этапа эксперимента.
Концепция и выбор запчастей
Всё должно быть легально, легко переноситься и управляться одной рукой.
Буду использовать то что есть в наличии дома либо максимально доступные и дешёвые комплектующие с Авито и Алика.
Тушка
Выбрал обычный планер из EPP, это доступно и конструкция легко воспроизводима.
Метательный планер на Авито
Немаловажно ещё то, что прохожим внешний вид самолёта знаком по витринам Союзпечати и вопросов у них не должно возникать. Остановился на размахе крыльев 48см. Есть еще 36см и 85см. Маленький будет хуже летать, а большой с обвесом уже не влезет в 150г.
Электроника
С давних пор валяется кучка запчастей от вертолётика Pilotage Стрекоза Мини.
Вертолет Пилотаж Стрекоза Мини (Avito)
Аппаратура была переделана под использование с симулятором FPV Freerider, а вот две сервы ждали своего часа.
Сервопривод вертолета
Сервы с маркировкой PL0609-02D, 4 грамовые, на 20 зубьев, разъем JST 1.25мм, питаются напрямую от 1S аккума.
Аккумулятор буду использовать 6 грамовый от Mobula6 на 250mAh.
Приемник
Приемником будет выступать плата с ESP32. Если пульт будет с BLE, то подойдёт любая плата: ESP32S, ESP32H, ESP32C и обычная. Если пульт с Bluetooth, то заработает только обычная ESP32.
Lolin32 Lite на обычной ESP32
Одна из самых легких плат на ESP32 - Lolin32 lite. На ней есть запаяный разъем под аккумулятор, но если решите подключать батарейку от тинивупа с таким же разъемом проверяйте полярность.
Пульт
У меня нашелся самый простой восьмикнопочный с аналоговым джойстиком, именно этот с Bluetooth, но вроде как бывают в таком же корпусе с BLE.
VR контроллер
Полноценный AETR из него не достанешь, но для начала пойдет. Можно например джойстиком влево-вправо отклонять элероны, вверх-вниз - руль высоты, а двумя передними кнопками прощелкивать заданные значения газа.
Прошивка
Проект (пока) несложный, поэтому код буду писать для Arduino в какой-нибудь простой бесплатной иишке, например DeepSeek. Рабочий вариант получается быстро и с первого раза. Код буду выкладывать на Github, там же лежат файлы stl от качалок и кабанчиков.
На этом первая часть закончена. Выбор основных компонентов закрыт, осталось собрать это в кучу и заставить работать. Следующая часть будет про подключение VR контроллера к ESP32. Если появятся вопросы по текущему этапу — напишу дополнение к этой части.
Симптомы: · Потеря связи с реальностью · Везде мерещатся кубы с белыми глазами · Заходя даже в туалет на тебя смотрит Кубобот
Назначено лечение: Переключиться на другой проект
Пациент: В ответ на лечение пациент спаял еще одного кубобота
═══════════════════════
🤖 Всем лимонов! 🍋🍋🍋
После долгого пути проект обрел свое, так скажем, лицо. Форма устоялась, функционал стал ясен. Всё ещё есть шероховатости, которые устраняются, но тем не менее, уже есть объект и этот объект мне нравится.
Сегодня я бы хотел больше поведать именно о техничке того, как сейчас выглядит проект кубобот01.
Корпус состоит из 3 частей: тело, задняя крышка и лицо. Лицо у всех черное. А корпуса бывают разные. В итоге после сборки кубобот остается неразборным.
В своей основе каждый кубобот это миниатюрная плата ESP32-C3. чрезвычайно миниатюрная, но достаточно мощная чтобы выдержать напор моих амбиций.
Тот самый момент, когда в погоне за терабайтами памяти на ПК сидишь, смотришь на микросхемку и думаешь: "этих 4Мб мне просто за глаза"
Мои навыки в пайке растут пропорционально развитию проекта. Если первый прототип еле умещался в кубический корпус, то сейчас там и деталей больше и еще место остается. И наконец то я начал паять не эзернетом, найденным на помойке, а нормальными монтажными проводами.
Все компоненты максимально базовые для базированного ардуинщика, упакованые в кубик со стороной 33мм.
Но я не стою на месте. Например, DHT11 с прошлого поста был заменен на D18b20, потом на DHT22, а потом на BMP280. С остальными компонентами тоже происходят изменения как в наименованиях, так и в расположении. например, кнопка переехала на крышу, вместо левой стороны. Неизменным остается только ESP32C3 и, пожалуй, OLED дисплей. Хотя и он меняется в цветах.
В программной части так же без особых откровений.
Кубобот начинался с простейшей идеи чтобы что-то моргало рядом. И код состоял из 10-20 строчек, не считая #include и #define
Кстати, программирую в Arduino IDE просто потому что привык еще со времен проекта для своей машины, в котором использовался Arduino Nano. переучиваться на ESP-IDF не вижу практического смысла
ну вот, например. Из последнего. Нужно показывать уровень заряда аккумулятора. Если просто кинуть литиевый аккум на ногу МК он сгорит и придется покупать новый. Собираем делитель напряжения из того что валяется под ногами, методом научного тыка подбираем коэфициенты для формулы, подставляем в код и вуаля - кубобот уже реагирует на зарядку.
Почему 3200 не спрашивайте - не знаю. Просто подобрал мультиметром.
И вот на таких функциях строится вся логика кубобота.
Цикл loop содержит в себе только названия функций и соблюдает их очередность. И никаких delay(). Эта функция просто вешает МК и рушится магия происходящего. Ладно, delay() один все таки есть. на 2 секунды. Он при включении чтобы пользователь мог прочитать один из случайных советов
корпус один из первых, но фраза остается до сих пор
void loop() { readLDR(A0, 500); //поменяй на 500 и пин на А0 для кубика. для ЕСП32 1000 и 34 пин //readTempdDHT(); readTempBMP(); //readTempdDallas(); ReadVoltage(); static uint32_t warntmr; if (batteryLevel < 20) //раз в 30сек выводим пустую батарейку если заряда мало { if (millis() - warntmr >= 30000) { warntmr = millis(); // сброс таймера display.clearDisplay(); display.drawBitmap(0,0, battery_empty,128,64, 1); display.display(); delay(2000); } }
ButtonListener(); Gyro();
if (StateFlag) { StateMonitor(); } else { if (!DizzyAnim) FallAside(); DizzyGate(); if (DizzyAnim && !FallFlag) Dizzy(); if (BatteryEmote) showBat(); if(!BatteryEmote && !DizzyAnim && !FallFlag) RandAnim(); if(!BatteryEmote && !RandAnimFlag && !DizzyAnim && !FallFlag) roboEyes.update(); } }
В конце есть монструозная конструкция с булевыми переменными. Можно упростить, но как говорил тот самый: Можно, а зачем? Памяти не ест, отрабатывает хорошо. Если есть советы - буду рад прочитать их в комментариях
Что еще можно сказать? Я почти доволен тем что получилось, и уже постепенно планирую Кубобота02. Он будет огромным, куб со стороной целых 66мм! Монструозный!
А пока я хотел бы сказать спасибо тем, кто уже поддержал проект, купив кубоботов.
1/2
Благодаря им я не забрасываю, а постоянно развиваю и совершенствую как программную, так и аппаратную часть. Как минимум, паяю уже нормальными проводами и не паяльником из фикс прайса.
На этом, пожалуй, стоит остановится.
Спасибо, что дочитали до конца! Буду рад Вашему мнению в комментариях!
Чтобы красиво завершить пост - вот вам фотография попувермы!
Прошло уже 7 лет, как я делал это устройство. Пришло время показать его тут))
Можно сказать, что с этой идеи лампы и начался мой путь в электронике.
Еще в доковидное время я очень много фотографировал, и был в творческом поиске новых световых решений, чтобы создавать какие-то уникальные и классные кадры.
Но начнем с теории.
Что такое фризлайт.
Если коротко, то фризлайт - это искусство рисования светом в пространстве.
Основная идея - съемка на камеру при длинной выдержке. Чем дольше выдержка - тем больше времени матрица фотоаппарата принимает поступающий свет.
Чем дольше источник света в кадре на одном месте, тем он ярче. Если он движется во время съемки - получается какой-либо световой рисунок.
Например, при съемке салютов это очень заметно.
Либо вот съемка ночного города, фары машин оставляют следы в кадре.
Кроме этого, можно создавать световые рисунки своими руками, например, цветными фонариками. Конечно, если фонарик не такой яркий как окружение, линия света не будет так заметна.
Но чтобы нарисовать большие и сложные картины вручную одним или несколькими фонариками потребуется очень много времени и сноровки. А в фотошопе реалистично такое вообще не нарисовать.
И кстати, современные нейросети, тоже врядли нарисуют что-то адекватное, что будет ощущаться как фризлайт. Так как это очень не популярный вид съемки, получается обучающих данных совсем мало и скорее всего будет какая-то ерунда.
Итого чтобы создавать фризлайт потребуется:
Источник света
Фотоаппарат
Штатив или другая подставка для камеры чтобы избежать дрожания
Баланс яркости внешнего освещения и источника света
Если загуглить фризлайт, то будут, например, вот такие картинки:
То есть обычно берется точечный или "длинный" источник света и им в кадре "рисуют" какие-либо формы.
Думаю можно представить сколько времени и дублей занимает один такой удачный кадр. Плюс сильно ограничивает однотонность источников света.
С чего началась моя лампа
Думаю все знают DIY-блогера Alex Gyver. И как-то смотря ютуб, мне попался его канал. И я наткнулся на видео "Рисую светом. Голограмма своими руками".
Это как раз была основа моей будущей лампы.
Собрав всё по инструкции на проводках, у меня всё даже заработало. Но это выглядело ужасно))
Сразу же это было переделано в чуть чуть улучшенный вид и управление переделано на ИК - пульт.
Спустя некоторое время, научился делать печатные платы "на коленке". Спустя кучу итераций, получилось как минимум избавиться от кучи проводов в лампе, но платы всё равно выглядели ужасно.
Научившись проектировать платы, сделал уже что-то нормальное и заказал в Китае. Да, всё на "базовых" модулях, но явно лучше чем было))
Вот так выглядели мои платы из 2019 года. Кроме этой лампы я проектировал и другие источники света, о них может потом расскажу.
Немного о самой лампе
Постараюсь объяснить как работает лампа. Её основа это адресные светодиоды, которые могут переключать свой цвет отдельно от других в линии.
Получается берем картинку шириной в количество пикселей в лампе, и через эти светодиоды включаем построчно с задержкой. Как старые лучевые телевизоры, но надо двигать своими руками "изображение".
Вот так наглядно это выглядит, если включить специальный эффект "повторения предыдущего кадра" в Premiere Pro.
Кстати, саму лампу я обернул черной пленкой, сделав окошко для экрана.
Нижняя часть лампы откручивалась. Внутри был картридер, тумблер включения и разъем зарядки.
Было очень много настроек и режимов, которые я написал поверх кода чтения картинки от Alex Gyver. Приходилось бороться с Ардуино, которому очень не хватало мощностей на всё))
Было вот такое минималистичное меню
Фоток внутренностей лампы в сборе, к сожалению, не осталось, зато сохранилось итоговые фото с фризлайтом.
Фотки. Много фоток.
Думаю, стоит начать с того, что мою лампу для съемок брал Лампас Покрас. Помните такого?
И забавный момент, лампа как раз подглючивала, и тем самым получился интересный глитч эффект.
А вот моими первыми кадрами были "зарисовки" с Марио. Выбрал картинки, чтобы дополнить городские пейзажи.
На всякий случай повторю, что здесь нет фотошопа =))
Причем именно с этой версией лампы у меня было не так много съемок, так как хотелось больше удобства в работе, какой нибудь экранчик и всё такое. И еще тогда я переключился на проектирование второй версии лампы.
Но вот еще откопал кадры
Можно заметить, что лица девушек в кадрах хорошо освещены. Это я подсвечивал вспышкой в конце кадра. То есть допустим была выдержка 15 сек, я пробегал с лампой, а потом в конце вспышка высвечивала человека.
Жаль не снимал видео, как съемка фризлайта выглядит со стороны. В темноте стоит модель, какой-то чувак машет лампой и в конце яркая вспышка)))
Бонус от нейросетей.
В процессе написания, мне всё таки было очень интересно, смогут ли современные нейросети нарисовать что-то адекватное и похожее на настоящий фризлайт, или будет прям сильно заметно, что это нейрослоп))
Конечно, я не запаривался с промтами, чтобы получить идеальный результат, но вот такое получилось с помощью chatGPT.
Присылайте в комменты свои варианты "фризлайта" от нейросетей =))
Надеюсь, вы узнали что-то новое для себя о мире фотографии =)
Симптомы: · 3D-принтер перестал понимать, когда у него выходной · слово «финальная версия» потеряло смысл · девушка на пвз угощает чаем как родного
Назначено лечение: Закончить хотя бы один прототип.
Пациент: Начал переделывать предыдущий.
═══════════════════════
🤖 Всем лимонов! 🍋🍋🍋 После первой части многие спрашивали, где же сам робот. Один из комментариев вообще был прекрасен:
«А части-то зачем? Хоть прототип покажи.»
Ну что ж... сами напросились. 😄
Сегодня будет то, что обычно остаётся за кадром. Те самые фотографии, которые сначала хочется удалить, а спустя время понимаешь — именно с них всё и началось.
Если сейчас Кубобот выглядит примерно вот так...
Кубобот01 Аккумуляторный
...то первые прототипы были вовсе без корпуса. А первые корпуса были похожи на нечто странное и бесформенное (у самого первого было сплошное лицо с вырезом больше экрана). ____________________________________________ После первой эйфории наступил момент, когда идею пришлось превратить во что-то, что можно взять в руки.
В голове всё выглядело предельно просто. Маленький корпус, экран, плата... Ну что тут может пойти не так?
Как выяснилось позже — примерно всё.
Определившись с наполнением кубобота, и кое как написав код который просто моргает глазками, я сел моделировать корпус. Выбрал для себя минимальный размер под OLED 0.96" дисплей - 31мм по внешним стенкам. До этого мне казалось, что куб — одна из самых простых геометрических фигур. Оказалось, это мнение существует ровно до тех пор, пока не пытаешься запихнуть внутрь экран, плату, разъём USB, датчики, провода и при этом сделать так, чтобы крышка ещё и закрывалась.
Первый напечатанный вариант выглядел... оптимистично. На экране компьютера он казался аккуратным и современным. В руках же напоминал что-то среднее между корпусом сигнализации и экспериментом начинающего моделиста.
Но зато он был настоящий.
И это ощущение сложно описать. То, что ещё неделю назад существовало только в голове, вдруг оказалось у тебя на ладони. Начиная многие проекты, которые не уходили дальше бредборда, держать маленький кубик, который моргает было поистине победой.
Пусть кривоватое.
Пусть с щелями и неровной печатью.
Зато своё. Это действительно греет мне душу по сей день. ___________________________________ Дальше началась самая настоящая война за миллиметры.
Каждый новый корпус был почти идеальным. Почти.
То экран выпирал на миллиметр так что не прилегала лицевая пластина. То плата неожиданно упиралась в стенку. То USB-разъём оказывался настолько глубоко, что подключить кабель можно было разве что пинцетом.
Самое смешное, что после каждой такой доработки внутренний инженер уверенно говорил:
— Ну вот теперь точно всё.
Через пару часов начиналась печать следующей «финальной версии».
три первых корпуса. самый нижний с fuzzy skin
В какой-то момент рабочий стол перестал быть рабочим столом и превратился в археологические раскопки электроники. Тут лежит дисплей, там какие-то винтики, рядом катушка пластика, а где-то под этим всем, если очень повезёт, можно было найти компьютерную мышку. Уже позже выделил под свои изыскания отдельный стол.
Когда корпус наконец перестал разваливаться от одного взгляда, настало время оживить робота.
Я собрал навесным монтажом все внутренности и впервые подал напряжение.
Казалось бы, два светящихся прямоугольника. Что в них особенного?
Но кубобот уже смотрел на меня, как будто осознавая себя в этом мире. С немым вопросом почему он голый и висит на крокодиле для пайки
Именно тогда впервые поймал себя на мысли, что делаю уже не просто электронное устройство.
Я делаю маленького друга.
Затем уже ценой больших усилий смог укомплектовать это всё в небольшой кубик со стороной в 31мм. Не самое лучшее расположение компонентов, но на то он и прототип чтобы быть невзрачным, но рабочим.
Потом были эксперименты с цветами корпусов.
Честно говоря, я не знаю зачем вообще это делал, не имея готового продукта. Просто взял у сына мотки его PLA пластика для 3д ручки и напечатал несколько тестовых корпусов.
Зато стало ясно, что Кубобот совсем по-разному воспринимается в разных цветах. Один выглядит как серьёзный гаджет, другой — как игрушка, третий вообще словно просится кому-нибудь в подарок.
Знаете, что меня удивило больше всего?
Я был уверен, что основная сложность окажется в электронике. Или в программировании.
Но больше всего времени неожиданно съел именно корпус.
Снаружи кажется, будто это просто маленький пластиковый кубик.
А внутри каждый миллиметр приходится буквально отвоёвывать. Внешне корпуса не отличались ничем. Зато внутри постоянно были изменения в расположении элементов для расположения платы и прочей требухи.
Именно тогда я понял простую вещь: самые незаметные детали обычно требуют больше всего времени.
Сейчас я иногда специально открываю фотографии первых прототипов.
Не чтобы посмеяться.
Хотя... иногда и чтобы посмеяться тоже.
Скорее чтобы напомнить себе одну простую мысль.
Любой проект, который в итоге выглядит аккуратно, когда-то выглядел так, что показывать его людям было немного неловко.
И знаете что?
Наверное, это совершенно нормально. В следующей части расскажу больше о тонкостях программной части, о дальнейшем развитии и расширении линейки. Которе, само собой, привели с собой новые трудности. И всё это ради того, чтобы два маленьких голубых квадрата начали казаться чуть более живыми.
А как думаете вы? Что оказалось самым сложным в разработке?
Что получится, если скрестить Warhammer, Arduino, и старый принтер.
Что, Зачем и Почему?
Для ЛЛ:
Самодельный механизм в стилистике Warhammer 40 000, задача которого перекладывать листы в обратном порядке и вести подсчёт. Нужен для любительской типографии.
У User10939331 есть хобби - изготовление книг. Для переплёта уже давно изготовлены самодельные машины, но сегодня речь не про них.
1/2
Речь о старом техпроцессе, который хотелось вернуть к жизни.
Итак, поехали:
С тех времён, когда типографское хобби у меня только начиналось, осталось несколько старых принтеров, которые были великолепны во всех отношениях: простота, неубиваемость, отсутствие чипов, лёгкость обслуживания и ничтожная стоимость тонера.
Это LaserJet-ы 10xx серии.
Но пара существенных недостатков, стала в итоге причиной постепенного перехода на более профессиональный класс техники - отсутствие двухсторонней печати, и необходимость вручную перекладывать в обратном порядке стопку листов для печати на задней стороне.
Да, существует возможность менять очерёдность печати программно, но она вечно приводила к путанице, особенно при большом количестве тетрадей. К тому же, редко, да метко, принтеры захватывали два листа одновременно, из-за чего вся партия распечаток отправлялась в шреддер.
Внезапное вдохновение подсказало мысль, сделать устройство, избавляющее от необходимости переслюнявливать пачки распечаток, и ведущее подсчёт листов в стопках.
В очередной раз услышав от жены коронную фразу:
В голове что-то щёлкнуло, и мозаика сложилась.
Преисполнившись вдохновением, для начала оформил проект на бумаге, стараясь по возможности придерживаться как нормативов единой системы конструкторской документации, так и стилистики Warhammer 40000 в оформлении текста.
Если уж борщить - то на полную катушку.
Документация в общем виде
Отдельно составил реестр всех контактных соединений, цветовой маркировки, таблицы выходных состояний, и распечатал программный код с комментариями. Если когда-нибудь придётся возвращаться к проекту для ремонта или модификации, то деменция уже не станет помехой.
1/5
Схемотехнический справочник со словарём терминов
Базовый конструктив построен на фундаменте Ардуинки, оптическом сенсоре, и паре реле, коммутирующих полярность питания 12в электромотора.
1/3
Конструкторская документация.
Матёрые
Радиолюбители могут справедливо упрекнуть, что такую задачу любой пионер мог реализовать на несимметричном мультивибраторе, из пары транзисторов, а индикацию выводить через сегментный индикатор, на схеме сдвигового регистра.
И в целом будут правы, но расчёты и распайка займут раза в 3 больше времени. Механизм задумывался (и реализовался от старта до финиша) как проект на 3 вечера
В качестве исходного донора аппаратной части взял потроха от какого-то HP-шного струйного принтера. Кинематика построена вокруг единственного электромотора, который в зависимости от полярности питания работает либо на механизм захвата листа, либо на его протяжку.
Нужный момент, когда лист уже подхвачен из стопки, должен определяться по сдвигу шторки, открывающей прохождение сигнала оптическому сенсору. К сожалению, плата с сенсором на доноре отсутствовала, поэтому по быстрому распаял датчик с обвязкой на куске картона, ввиду дефицита текстолита.
"Плата" пропитана цапонлаком, и проблем с ней не возникнет, а ублюдочность монтажа скрыта от глаз.
На заднюю крышку уместился блок питания, (в котором пришлось подобрать резистор обратной связи), для выдачи стабилизированных +5 и +12в, плата с коммутационными реле, и колодкой для подключения звёзд GND и VCC, и плата с Ардуинкой.
Учитывая почтенный возраст источника питания, выпаял и проверил ESR всех конденсаторов, коммутацию питания вывел на отдельную плату, чтобы ненужные токи не бегали через микроконтроллер. Питание Ардуинки вывел непосредственно в пин +5, в обход внутреннего стабилизатора.
Разумеется, обвязка катушек реле выполнена с использованием защитных диодов, и керамики, (не отмеченной на схеме). Индуктивность не будет шляться где-попало.
Предусмотрительно присобачил нормально замкнутый концевик, в месте будущей установки выходного лотка. Он должен подниматься, открывая доступ для загрузки, и работа двигателя в этот момент должна прерываться.
Лицо изделия - индикатор.
В запасах нашёлся дисплей формата 16х2, от старого японского программатора, начала 80-х годов, с совершенно потрясающей янтарной подсветкой и красивыми встроенными шрифтами.
Но выбор этого индикатора добавил кучу проблем:
Нестандартный, 15-пиновый коннектор, затрудняющий использования платы-адаптера, для лёгкого подключения двумя проводами через I2P.
Отсутствие русских символов в CGROM-ереликтового контроллераHD44780.
Крохотная память, способная хранить в CGRAM и одновременно выводить на экран только 8 "попиксельно" отрисованных пользовательских символов.
Но на мой взгляд, плюсы использования именно этого индикатора превышают потенциальные неудобства его пусконаладки. Подключить пришлось шлейфом, использовав кучу контактов микроконтроллера, но в блоке индикации всё равно смонтированы кнопки сброса и продолжения, так что коса больших затруднений не вызвала.
Программная часть.
С аппаратной частью практически всё готово, и настало время быдлокода. Вооружившись инфарктным количеством кофе, и обзаведясь слегка изменённым сознанием, сопровождаемым приятным тремором, приступил к программной реализации запланированного функционала.
Программировать я практически не умею, но простота синтаксиса, и море доступных примеров дают возможность написать пускай и уродливый, но вполне работоспособный код даже обезьяне. Вроде меня
1/8
Исходный код, полностью и с комментариями.
Скетч использует 13224 байт (40%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1409 байт (68%) динамической памяти, оставляя 639 байт для локальных переменных. Максимум: 2048 байт.
Итоговый скетч раздулся до двух тысяч строк кода, (включая комментарии и отладочные сообщения через serial) и отнял почти сутки жизни, зато удалось реализовать:
Русские символы, в специфическом дизайне, соответствующем оригинальным винтажным шрифтам дисплея.
Автоматический режим сна при бездействии.
Программное избавление от дребезга контактов, вызывающее ложное многократное повторение сигнала.
Ручное управление реверсом двигателя.
Счётчики текущей операции и ведение глобальной статистики.
Режим самодиагностики и самоочистки, при застревании бумаги.
И самое главное:
Тридцать одно сообщение, выводимое на экран, в стилистике Warhammer.
Изготовление корпуса
Моё представление о промышленном дизайне достаточно консервативное: функционал определяет форму. Это означает, что в проекте не будут использоваться декоративные кишочки, проводочки и узелочки, которые так любят многие самодельщики, добавляя окончание -панк к таким творениям.
Только цветовая триада медь/графит/красный, и минимум бесмысленных украшательств.
Любой проект, который выходит за рамки формата "собрано на коленке", неизбежно упирается в поскрёбывание по сусекам, в поисках листового материала для сборки корпуса. К сожалению, в закромах, несмотря на видимость изобилия, подходящего материала нужного размера толком не нашлось. Под "проект на выходные" не хотелось ехать закупаться, поэтому, мучительно преодолевая жадность, решил использовать пару листов, которые лежали пятый год без дела.
Собственно, "сусеки"
Графитонаполненный политетрафторэтилен, он же фторопласт-4, он же PTFE или Тефлон.
С одной стороны, совершенно абсурдно использовать материал с космическими свойствами, и космической же стоимостью не в контексте изготовления втулок скольжения.
Но с другой стороны, в месте, откуда я эти листы экспроприировал, 10-мм фторопласт пилили болгарками, и использовали для изготовления условно многоразовых табличек, примотанных проволокой к поддонам с продукцией.
Простейший способ изготовления прямоугольного корпуса - соединить шпильками верхнюю и нижнюю крышку, и затем обшить его по периметру. Это позволяет избежать лишних трудозатрат с поиском, резкой и гибкой крупноформатного листового материала.
Заранее подготавливаю все монтажные и резьбовые отверстия, не забывая про запас стыковочных диаметров на подгонку.
Лицевые поверхности, после шлифовки 120-240-320-400 приобретают свойства SoftTouch покрытия, это одновременно и плюс (на ощупь) и минус, (на камеру выглядит грязновато) Ворсинки, неразличимые невооружённым взглядом, укладываются в том же направлении, после касания, где прошла рука.
Торцы листов после раскроя не шлифую, они будут полностью скрыты наружными панелями.
Когда две базовые плоскости готовы, выставляю общую высоту, ориентируясь на ходовой зазор панели выходных прижимных роликов, и становятся известными размеры боковых и лицевых пластин.
Входной лоток на этом этапе решаю оставить как есть.
Так как в запасе имеются огрызки нержавейки, 20х20см, раскладываюю сварочный пикник, и настраиваю аппарат на тестовом образце.
1/2
По результату получившегося шва, мелькает мысль о том, что пора бы прекращать вы%%ываться, и такая техническая возможность сразу же предоставилась.
Прохлопал остаток аргона в баллоне, и пришлось заваривать лицевые панели электродами, и отказываться от изготовления мелких деталей. Как говорится: "Не говори гоп пока не переехал Чоп"
Самое неприятное в процессе работы с 304 нержавейкой - отверстия, и их зенковка.
Изготавливаю выходной лоток, из подходящей по размеру алюминиевой плиты, и пары каких-то под руку подвернувшихся мебельных профилей. Соединение на заклёпки.
Лицевую поверхность оформляю бесполезнейшей из покупок жены - "тефлоновым ковриком для гриля", заодно протестировав работу клеевого спрея на теоретически несклеиваемом материале.
С левого торца подгоняю штифт для концевого выключателя.
Лицевые панели после окраски. Дефекты геометрии по месту сгиба оставляю как есть, без шпаклёвки эпоксидкой. Перфекционизм часто приводит к творческому онанизму, срывая запланированные сроки выполнения.
Начало сборки корпуса. Зазор на переднем срезе закрывается тем же профилем, оставив пару миллиметров люфта для свободной работы механики.
Без сквозной посадки шпилек можно было обойтись, нарезав глухую резьбу с внутренней стороны, но фторопласт - капризный материал.
Сверло, едва коснувшись, начинает режим самоподхвата, и без сверлильного станка с ограничителем глубины, шансы на успешное выполнение такой задачи стремятся к нулю.
Внутренние радиусы лицевых панелей решил не закрывать, без WIG сварки слишком большой шанс искорёжить геометрию тепловыми деформациями.
Сборка контрольной панели. Единственная деталь, которую принял как есть, несмотря на явный концептуальный диссонанс с общим стилем геометрии.
Радиусы в отдельных функциональных элементах, (при хорошем дизайне), должны гармонически сочетаться друг с другом, а здесь рубленная остроугольная форма.
Но желания мучиться с нержавейкой, прогрызая окошко для индикатора, не было, а готовая алюминиевая коробка в наличии имелась. Поэтому вынужденный компромисс.
Последняя панель, монтаж кнопки питания.
И слегка обескураживающая картина, с мешаниной входов/выходов/управления/питания.
В этот момент поблагодарил себя, за составление документации. Когда все цепи расписаны заранее, не нужны даже бирки на коннекторах.
Классическую перевязку жгутов делать не стал, для этого пришлось бы подгонять длину проводов и перепрессовывать большую часть наконечников.
Наношу Священный Елей гальванический контактный состав из графита, замешанного с цапонлаком на заднюю панель. После трёх слоёв покрытие становится равномерно матовым, а графит запечатывается под слоем лака, и не пачкает руки.
Традиционно, вкладываю всю документацию внутрь корпуса, и закручиваю последний болт. Заодно крашу тем же составом и боковые стенки панели управления.
Время последнего штриха - Печать Чистоты. Распечатываю Литании и декоративную часть.
О том, как в домашних условиях, без проблем и спец. оборудования сделать выборочную металлизацию - я уже подробно описал в этом посте.
Лимит Пикабу на фотографии в посте ограничен 50, поэтому функционал работы сделал в формате видеоролика, в шапке поста.
Продублирую видео альтернативным плеером, если с Youtube имеются проблемы:
P.S. Ничего не рекламирую, зарабатываю на кусок хлеба сам, донаты не прошу, услуги и подписки не предлагаю, спасибо за внимание. .
P.P.S. Прошу прощения у трёх сотен подписавшихся на меня человек, ожидающих продолжения серии восстановления вкладышей turbo, ориентировочно со следующей недели проект продолжается.
Пациент: Инженегр-любитель Возраст проекта: 0 дней Диагноз: "Да чего там сложного" Стадия заболевания: Энтузиазм Симптомы: · открыто 48 вкладок, некоторые из них даже по делу · YouTube уже предлагает пайку · корзина на маркетплейсе растёт быстрее зарплаты Назначено лечение: Не начинать новые проекты. Пациент: Лечение проигнорировал.
═══════════════════════
🤖 Всем лимонов! 🍋🍋🍋
Есть у меня одна проблема. Я совершенно не умею вовремя останавливаться. Стоит взглядом слегка так зацепиться за что-либо, особенно если это касается хардвара, то маленький такой человечек на плече (возможно, красный и с рогами) начинает нашептывать:
— Да чего там сложного...делов на 20 минут, туда и обратно.
И каждый раз одно и то же Обычно все заканчивается еще на стадии проекта на бумаге, но иногда это перерастает в метры проводов на столе, километры документации на экране и недоумевающие возгласы жены:
— Это ещё что такое?
Ответ не зависит от стадии проекта и его наполненности: не знаю. Но оно мне надо.
Вообще люблю делать всякие проекты своими руками. Не потому, что так дешевле. Обычно как раз наоборот. Даже правильнее сказать – всегда наоборот. Просто есть какое-то странное удовольствие — сначала неделю разбираться, как всё устроено, потом месяц делать то, что можно было купить за пять минут. Это как выращивать картошку в огороде: дешевле в магазине, но важен сам процесс. Так вкуснее. Кажется, многие меня сейчас поймут. И вот однажды вечером сижу я за компьютером. Работаю, отвлекаюсь, снова работаю... Обычный вечер. Вместо ленты в инстаграме листаю ленту на озоне. И так случайно площадка начинает все больше подкидывать разных модулей и микросхем. И все это на фоне умиротворяющей тишины летней ночи под стрекотание сверчков. Тусклый свет от лампы, дабы не будить попугая падает на клавиатуру. Всё на своих местах. Статично. Постоянно.
Некий дзен сохранялся около часа. Потом меня осенило:
Мне захотелось, чтобы рядом жил маленький робот.
Не помощник, не умная колонка и не очередной модный гаджет. А именно маленький персонаж. Такой, который иногда улыбается, иногда недовольно смотрит на тебя, а иногда просто молча сидит рядом. Чтобы рабочий стол выглядел... живым.
Звучит немного странно?
Мне тоже тогда так показалось.
Первая мысль была вполне разумной:
«Наверняка кто-нибудь уже сделал нечто подобное»
Полез искать. И чем дольше искал, тем сильнее понимал: именно такого робота, которого хочется поставить рядом с монитором, почему-то не существует. Были варианты, похожие на мою идею, но им не хватало чего-то неуловимого. Каждый экземпляр был излишне вычурным и не подходил на роль тихого друга. В этот момент внутренний инженер свесил ноги с плеча (нет, он точно не красный и без рогов):
— Ну...
— Что?
— А давай сбацаем?
Вот знаете, бывают фразы, после которых жизнь неожиданно делает резкий поворот? Эта была именно такой. Я тогда ещё не знал, что через пару дней мой стол начнёт выглядеть так, будто на нём взорвался магазин радиокомпонентов, а в пвз буду ходить чаще чем моргаю. Но это уже совсем другая история.
В следующей части покажу, как выглядел самый первый прототип. Спойлер: сейчас бы вряд ли признался, что именно с него всё началось.
Пост состоит из 2 частей. Общая система управления для 5D кинотеатра и исполнительная часть smell-o-vision.
Для управления внешними устройствами используется программа MultiFunPlayer. Пока про нее не узнал планировал использовать писк в правом канале аудиодорожки. Для воспроизведения используется MultiFunPlayer версии 1.31.3 и MPC-BE версии 1.7.3. В настройках MPC-BE нужно включить дистанционное управление.
Для аудио/видеофайла должен быть составлен файл funscript. Аудио/видеофайл воспроизводится MPC-BE. MultiFunPlayer синхронизируется с MPC-BE и подхватывает funscript с темже именем файла и лежащий в тойже папке. MultiFunPlayer в нужный момент времени отправляет команды в COM порт.
Пример funscript.
{
"version": "1.0",
"inverted": false,
"range": 90,
"actions": [
{ "at": 0, "pos": 0 },
{ "at": 1000, "pos": 10 },
{ "at": 2000, "pos": 20 },
{ "at": 3000, "pos": 30 },
{ "at": 4000, "pos": 40 },
{ "at": 5000, "pos": 50 },
{ "at": 6000, "pos": 0 },
{ "at": 7000, "pos": 0 },
]
}
После "at": указывается таймкод в миллисекундах. После "pos": указывается значение от 0 до 100 которое будет отправлено внешнему устройству. Первая и последняя строка могут быть не выполнены. Если устройств несколько то для управления каждым используется свой файл funscript и к названию файла дописывается канал (еще не пробовал использовать). По умолчанию используется канал L0. Чтобы MultiFunPlayer не давал лишние команды нужно переключить интерполяцию в Step и отключить Auto-home.
MultiFunPlayer отправляет в COM порт команды на языке T-code. Я использую настройки COM порта типичные для устройств на Arduino: скорость 9600, формат данных 8N1.
Пример строки T-code:
L01000I100
L0 канал (L группа каналов, 0 номер канала в группе), 1000 значение(от 0000 до 9999), I100 время выполнения(не используется).
"pos": 0 соответствует L00000
"pos": 10 соответствует L01000
"pos": 20 соответствует L02000
"pos": 90 соответствует L09000
"pos": 100 соответствует L09999
Для упрощения прошивки Arduino я жду по UART букву L, R, V или A (группа каналов) и читаю следующие за ними 2 цифры (номер канала и 1 разряд значения). Так на каждый канал можно получить 10 дискретных значений.
"pos": 0 соответствует L00
"pos": 10 соответствует L01
"pos": 20 соответствует L02
"pos": 90 соответствует L09
Во время инициализации MultiFunPlayer и Arduino возможны ложные команды поэтому нужно предусмотреть выключатель блокирующий работу исполнительных устройств.
Исполнительная часть smell-o-vision.
Прошивка написана в ArduinoIDE 1.8.19 (последняя версия не требующая интернет для установки и работы). 3D модели делались в OpenSCAD
Состоит из 5 вентиляторов направленных в сторону зрителя. Используются осевые вентиляторы 80X25 12V. Провода + вентиляторов соединены вместе. Перед вентиляторами установлены картриджи.
Держатель картриджа
Код OpenSCAD
$fn=100;
difference()
{
union()
{
translate([-45,-45,0])
cube([90,90,4]);
}
union()
{
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
}
cylinder(d=78,h=4);
}
}
difference()
{
cylinder(d=87,h=20);
cylinder(d=83,h=20);
}
Средний соединитель вентиляторов
Код OpenSCAD
$fn=100;
difference()
{
union()
{
translate([-45,-75,0])
cube([110,150,4]);
}
union()
{
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
cylinder(d=78,h=4);
}
translate([0,-100,0])
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
cylinder(d=78,h=4);
}
translate([0,100,0])
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
cylinder(d=78,h=4);
}
translate([55,-57,0])
cylinder(d=4.5,h=4);
translate([55,57,0])
cylinder(d=4.5,h=4);
}
}
Крайние соединители вентиляторов
Код OpenSCAD
$fn=100;
difference()
{
union()
{
translate([-45,-25,0])
cube([90,50,4]);
}
union()
{
translate([0,-50,0])
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
cylinder(d=78,h=4);
}
translate([0,50,0])
union()
{
translate([-71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,-71.5/2,0])
cylinder(d=5.5,h=4);
translate([-71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
translate([71.5/2,71.5/2,0])
cylinder(d=5.5,h=4);
cylinder(d=78,h=4);
}
}
}
Картриджи сделаны из фильтров респиратора Исток. От фильтра оставлен только корпус и пластмассовые решетки. Внутри лежит ватный диск пропитанный ароматизатором. Картриджи нужно хранить в герметичных контейнерах. Экспериментально выяснено что в корпусе должно быть много свободного места и свободный проход воздуха.
Прошивка Arduino. Для управления вентиляторами использован релейный модуль с инверсными входами. HIGH выключение вентилятора, LOW включение вентилятора.
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT); //fan1
pinMode(12, OUTPUT); //fan2
pinMode(11, OUTPUT); //fan3
pinMode(10, OUTPUT); //fan4
pinMode(9, OUTPUT); //fan5
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
}
byte key=0;
byte group=0;
byte channel=4;
void loop()
{
if (Serial.available())
{
byte in = Serial.read();
if(in=='L')
{
key=1;
group=1;
}
if(key==1)
{
if(in=='0')
{
key=2;
channel=0;
}
}
else if(key==2)
{
key=3;
if(group==1&channel==0)
{
//smell-o-vision code
if(in=='0')
{
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
}
if(in=='1')
{
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(13, LOW);
}
if(in=='2')
{
digitalWrite(13, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(12, LOW);
}
if(in=='3')
{
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, LOW);
}
if(in=='4')
{
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
}
if(in=='5')
{
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
}
//smell-o-vision code end
}
}
}
}
Соответствие команд и вентиляторов
"pos": 0 выключает все вентиляторы
"pos": 10 включает вентилятор 1
"pos": 20 включает вентилятор 2 "pos": 30 включает вентилятор 3 "pos": 40 включает вентилятор 4 "pos": 50 включает вентилятор 5
Между включение вентилятора и тем как воздух дойдет до лица есть задержка. Решить эту проблему можно включая вентилятор заранее или расположив более компактный вариант исполнительного устройства ближе к лицу (работа над этим уже идет). Планирую сделать и другие устройства работающие синхронно с видео (имитатор климата, трясущееся кресло ...)
Если захотели повторить и код из поста не работает попробуйте его не скопировать а перепечатать.