新年快乐

Так проникся печальной судьбой несчастного одинокого китайца, что купил себе в сычевальню хотпотницу и праздную Китайский Новый Год, не отходя от станка Компаса, Candle и прочего grbl.

Разумеется, зарядил я ее буквально чем бог пошлет, а послал мне боженька примерно следующее:

— 50-граммовый пакетик смеси специй для Том-Яма;
— замороженных креветок (почистить, панцири кинуть в бульон, мясо варить или обжаривать);
— китайских пельменей (варить, жарить, без разницы);
— мираторговский «бекон из мраморной говядины» (сойдет за полагающуюся для хого тонко порезанную говядину);
— фрикадельки из индейки;
— крабовые палочки;
— грибы-вешенки;
— жгучий перец;
— цветную капусту;
— пшеничную лапшу.

На креветочных панцирях, части грибов, жгучем перце и смеси специй варится бульон, остальные ингридиенты, кроме лапши, в произвольном порядке обжариваются или отвариваются (берем небольшой кусочек палочками, на минуту суем в кипящий бульон — готово!). Под конец в остатках бульона (обратите внимание, что этот бульон впитал в себя самые-самые разнообразные вкусы) отваривается лапша — и этим ужин завершается.

Месяц: 1 Неделя: 1 День: 1

А также после изощренного самоубийства жежешечки (подробности: https://ru-news.livejournal.com/80899.html) понял, что надо начать новый год с создания канальчика в телеграме:

https://t.me/shura_luberetsky

А давайте о чем-нибудь спрошу в день московской промышленности

Вот например таким вопросиком я озадачился (да-да, я все про зуборезные станки):

Вот есть у нас прямоугольный треугольник, известен угол при вершине и противолежащий катет, который равен , а , в свою очередь, равняется ; , и уже известны (если что, то это соответственно модуль шестерни, угол наклона зубьев и их количество). Надо найти прилежащий катет — и все мои знания тригонометрии подсказывают, что для этого надо разделить длину противолежащего катета на . Выражаем тангенс через синус и косинус и получаем, что — а во всех книжках по зуборезному делу про квадрат косинуса в числителе забывают, считают, что , вот как тут написано справа от чертежа. Если — небольшой угол — то это более-менее простительно, в таком случае — можно считать достаточно близким к единице. Но с другой стороны — а почему в таком случае не заменить тупо на значение угла в радианах?

Ну и да, учитывая, что при подборе шестерен зуборезного станка стараются подобрать коэффициенты до четвертого знака после запятой — это все отдельно интересно.

Пацанский подгон электронной промышленности

Если вы думаете, что день работника электронной промышленности прошел мимо меня — вы ошибаетесь! В честь праздника отлаживал сегодня механику питателя для SMD-расстановщика (да, вот для этого мне и понадобились разнообразные шестерни). Разумеется, полностью оригинальной эту разработку назвать сложно — но я посмотрел на многочисленные варианты недорогих электрических питателей (Bing Feeder, Smart Feeder, T2 Feeder, LumenPNP, тысячи их) и понял, что их можно отнести к двум категориям:

— оверпрайснутое переусложненное говно;
— эконом-вариант с ФАТАЛЬНЫМИ НЕДОСТАТКАМИ.

Long story short, но я решился делать «свою» механику, и по первоначальным прикидкам, даже по цене оно может получиться вполне конкурентоспособным.

Собственно, «происхождение» из этой фоточки более-менее читается, пока что дальше небольшого реверс-инжиниринга я не ушел — но в целом оно уже работает, «мозги» приложатся потом (и тут есть пара оригинальных идей).

Про профессиональные праздники

В качестве хобби немного преподаю в МИЭМ, и вот что подумал — если это не только «Московский институт элегантных мужчин», но и «Московский институт электронного машиностроения», то я имею все основания отмечать профессиональные праздники непрерывно — от дня машиностроителя (последнее воскресенье сентября) до дня работника электронной промышленности (первое воскресенье октября). В общем, стоит накатить!

Настольный зубофрезерный станок

Для начала — хочу поздравить всех причастных с днем машиностроителя (отмечается в последнее воскресенье сентября), а заодно — показать маленький, буквально настольный зуборезный станочек, который понадобился для одного из прожектов (а построив этот станок — могу гордо причислять себя к машиностроителям и накатить коньяка в этот торжественный день!). Зачем мне понадобились в большом количестве шестерни — может, покажу через недельку, а сегодня — начну с того, почему я решил соорудить такой станочек, и почему не обратиться к более традиционным методам получения компонентов для этого прожекта, вроде закупки на алиэкспрессе или озоне.

Итак, начнем с того, что мне понадобились косозубые шестерни с модулем 0,5, вроде бы понятными количеством зубьев и толщиной — ну а прочие параметры пока что не столь критичны. Возможно, будь дело где-то в Америке из воспоминаний Фейнмана, я бы просто взял каталог фирмы Boston Gear (в распространенном переводе «Вы, конечно, шутите, мистер Фейнман» его обозвали «Бостонским каталогом шестерен») и нашел бы там нужную деталь; если бы дело было в Германии, то наверное, стоило бы воспользоваться аналогичным каталогом Zahnradfabric Friedrichshafen — но, конечно, не уверен, что это было бы достаточно дешево. А какие опции доступны «микропроизводству» в Москве в 2025 году? Конечно, можно купить какие-то компоненты на Алиэкспрессе — и для некоторых типов шестерней это самый понятный вариант. Да, если речь идет о сотнях-тысячах деталей, придется подумать о вариантах доставки из Китая — но это будет работать только в случае, если эти детали достаточно «стандартные» (всякие компоненты для тех же 3D-принтеров или хоббийных станков, например). Прямозубые шестерни для игрушек с тем же модулем стоят копейки — можно даже купить в Чип-и-Дипе набор игрушечных шестерен, и может быть, если бы мне подходили стандартные шестерни из этого набора, это было бы даже экономически оправдано в варианте «покупаем набор и 90% из него выкидываем» — но мне понадобились более сложные, косозубые. Их, к сожалению, не получится сделать на термопластавтомате (а я даже приценивался к мини-ТПА, это внезапно не так дорого) — так что пришлось смотреть на другие, более традиционные методы изготовления зубчатых колес.

Чаще всего в этом контексте упоминают нарезание зубчатых колес модульной фрезой на фрезерном станке с делительной головкой, или что-то аналогичное — метод простой, не требующий специального оборудования, подходящий, к примеру, для ремонтных работ — сделать на универсальном станке в одном экземпляре шестерню взамен сломанной — и абсолютно не подходящий для более-менее серийного изготовления, даже если оснастить станок какой-то системой ЧПУ. Если же нужно делать шестерни хоть какой-то серией — то единственно оправданным методом становится зубофрезеровка, и на первый взгляд, это сложно и дорого. «Взрослый» зуборезный станок, какой-нибудь 5К32 — это дура в две тонны весом, расчитанная на нарезку здоровенных крупномодульных колес. Можно, конечно, обратиться и к [info]bougaev, у которого в мастерской есть аж настоящий Pfauter — но что-то мне подсказывает, что партия шестерен фирмы «жадинка Михалыч» выйдет буквально золотой :) Впрочем, на другом «полюсе» есть нищебродские методы, наподобие нарезания червячных эрзац-передач метчиком с крупным шагом — о которых даже пишут на Hackaday!

Что же лежит между этим нищебродством и использованием «настоящих» зуборезных станков? Дело в том, что запатентованный герром Пфаутером в 1897 году метод нарезания зубчатых колес с помощью червячных фрез довольно сложен, требует согласованного вращения фрезы и заготовки, и сложной настройки передач зубофрезерного станка — у которого есть аж две гитары — соло и бас вращения заготовки и подачи фрезы, а для нарезания косозубых шестерен добавляется еще и дифференциал с еще одной гитарой. Если добавить еще и ударные инструменты (без кувалды и зубила ты не слесарь, а мудила) — можно играть heavy metal! Какой-нибудь «справочник зубореза» состоит в основном из таблиц настройки этих гитар — которые еще и здорово отличаются у разных станков!

Я не зря вспомнил Фейнмана — потому что задачей получения заданного передаточного отношения с помощью подбора шестерен он в своих мемуарах и занимался. Но сейчас у нас не 1941 год, и даже токари-любители-ардуинщики придумали «электронную гитару» — несложный проект, позволяющий с помощью сравнительно недорогих компонентов получить любой коэффициент деления в широких пределах. В общем, дальнейшая идея почти очевидна — соорудить действующий макет зуборезного станка, использовав вместо механических передач «электронные». Может быть, так сработало место расположения моей мастерской, в районе остатков завода «Фрезер», может, дотянулись какие-то флюиды от Станкиновского учебного корпуса неподалеку — но мне это показалось достаточно заслуживающим внимания.

Мелкомодульную червячную фрезу по ГОСТ 10331-81 удалось недорого найти на Озоне, а остальные компоненты станка — «общего назначения» — алюминиевый профиль, Hiwin-овские направляющие, энкодер, шаговые двигатели — в общем, ничего редкого и дефицитного. Изготавливать пришлось лишь несколько пластин из капролона (для этого использовал макет фрезерного станка под названием CNC 3018) и вал для фрезы, но при наличии токарного станка последняя задача несложная, даже если учитывать то, что точил хоть какую-то деталь я в первый раз (но резьбовую пластинку все же сломал дважды). А, ну еще и надо токарить всякие оправки для закрепления заготовок — но это даже особо внимания не заслуживает.

Компоновка станка — «по мотивам» настоящих, «взрослых» зубофрезерных станков. Справа — неподвижная стойка, по ней в вертикальном направлении ездит установленная на поворотном столе ось фрезы. Стойка слева, с приводом заготовки в трехкулачковом патроне, подвижная, может двигаться вперед-назад. Возможно, я где-то немного прогадал с размерами — но сейчас сюда влезают заготовки радиусом до 40 мм, мне это «за глаза», возможная высота заготовки — тоже порядка нескольких сантиметров, если буду обрабатывать по много одинаковых колес «пакетом» — пригодится.

«Электронная гитара» на Arduino — проект прикольный, я частично подсмотрел там работу с шаговиками и энкодером — но потом все равно все переделал, конечно же :) Как это выглядит? На вал шпинделя (или, в нашем случае, червячной фрезы) ставится энкодер, выдающий, стандартно, 600 импульсов на оборот. Все же зависящие от количества оборотов шестерни передачи оснащаются шаговыми двигателями со стандартными, знакомыми многим по 3D-принтерам, драйверами, у меня завалялось несколько A4988 и TMC2208 (опять же, в виде готовых модулей для тех же 3D-принтеров). В режиме «микрошага» x16 для полного оборота шагового двигателя необходимо выдать 16*200=3200 импульсов, да еще и привод заготовки оснащен редуктором 1:4. В прошивке «электронной гитары» для этого вычисляется целая и дробная часть коэффициента деления — скажем, если мы будем резать шестерню на 127 зубьев (специально подобрал не очень хорошее число — но такие шестерни иногда нужны), то надо сделать один оборот заготовки на 127 оборотов фрезы. Соответственно, 76 200 импульсов энкодера будут соответствовать 12 800 импульсам, которые надо выдать на шаговый двигатель. Делим, и получаем, что коэффициент деления нашей «электронной гитары» должен составлять 5,953125. В ардуиновской прошивке с Chipmaker для такого дробного деления заводятся две переменных, Ks_divisor, с целой частью коэффициента деления, и Km_divisor, с дробной — давайте я приведу здесь максимально упрощенный код, без учета направления вращения вала (можете найти подобное в обработчике прерывания от энкодера):

int Ks_divisor = 5;
int Km_divisor = 9531;
int Ks_counter = 0;
int Km_counter = 0;
void isr(void){
    Ks_counter++;
    if(Ks_counter > Ks_divisor){
        step();
        Km_counter += Km_divisor;
        if(Km_counter > Km_divisor) {
            Km_counter -= 10000;
            Ks_counter = 0;
        } else {
            Ks_counter = 1;
        }
    }
}

В общем, можно понять, что автор ардуиновской прошивки пытается с помощью целочисленных переменных имитировать вычисления с точность 1/10000 (или 4 знака после десятичной запятой). Метод, может, и работающий, но имеющий очевидный недостаток — вы видите в этой программе число 5,953125, полученное в ходе расчетов? Дробную часть пришлось округлить, и это не очень хорошо — при большом количестве оборотов, то есть медленной и печальной, с подачей 0,1 мм на оборот, обработке даже не очень длинной заготовки — скажем, длиной 10 мм — ваша заготовка сделает 100 оборотов, фреза — 12700, ошибка на один шаг уже вылезет. Может, это и немного — но учитывая жесткость станка, точнее, ее отсутствие, вытекающие отсюда небольшие подачи и такой же небольшой съем материала — накапливающаяся ошибка становится проблемой.

Увеличивать разрядность в расчетах можно (хотя на Ардуине это проблема), но давайте посмотрим на задачу с другой стороны. Нам надо на каждые 76 200 шагов по одной «координате» равномерно сделать 12 800 шагов по другой. Классический алгоритм для этого был предложен Брезенхемом из IBM в 1962 году (да, все хорошее в программировании было придумано либо IBM в 60-х, либо DEC в 70-х) — и в аналогично упрощенном виде целочисленный алгоритм Брезенхема будет выглядеть так:

int dx = 76200;
int dy = 12800;
int err = 0;
void isr(void){
    err += dy;
    if(2*err > dx){
        step();
        err -= dx;
    }
}

Конечно, переменнные dx и dy можно и даже, наверное, нужно сократить на общий множитель (заодно вычисления будут умещаться в меньшую разрядность, полезно, если у вас 16-битный int на AtMega), а умножение на 2, если вы не доверяете оптимизации компилятора, заменить битовым сдвигом — но в целом тут и вычисления проще, и, что важно, ошибка не превышает 1/2 шага и не накапливается. Таким же образом можно получить и любые коэффициенты деления, выражающиеся простыми несократимыми дробями — полезно, если вам надо заменить настоящую чугунную гитару.

Разумеется, все «наработки» по этому станочку (чертежи деталей и исходники софта) я выложу на какой-нибудь гитхаб — а может, и даже на его российский клон. Пока еще не все идеально работает, нужна, очевидно, некоторая наладка механики, надо все-таки поставить отдельный двигатель, а не изгаляться с шуруповертом — но сама идея, кажется, вполне себе жизнеспособна. Во всяком случае, заготовки из капролона станочек режет довольно бодро, есть мнение, что и с латунью сможет справиться.

UPD Латунь («сыпучку», ЛС59-1) станочек вполне успешно обрабатывает с вертикальной подачей 0,3 мм/оборот.

Клару и Розу с днем!

Они боролись за то, чтобы у тебя был лишний выходной, а ты несмешно отвечаешь на вопросы в медузовском тесте про феминизм!

Всех причастных — с праздником!

Для остальных напоминаю, что сегодня — день Советской армии и военно-морского флота, а вовсе не день, когда всем мужикам надо дарить носки и пену для бритья.

Кстати, про китайский новый год

Сабж крайне недооценен среди праздников — но при этом удачно попадает между «новогодней» серией (от католического Рождества до Старого Нового года) и «гендерной» (14 и 23 февраля, 8 марта).

Но вообще сегодня же Хеллоуин

Так что надо бы переписать предыдущую запись в немного более страшных тонах.

halloween-keyboard

Вот представьте себе, что вы, скажем, разработали какое-то устройство для модного «интернета вещей» — и поддавшись рекламе с какого-то очередного хакатона, сделали его на RiotOS с поддержкой LoRaWAN. Вам повезло, на волне хайпа ваше устройство установлено в десятках самых разных мест, произведено десятками тысяч экземпляров — и в один не очень хороший день ВНЕЗАПНО все эти десятки тысяч устройств начинают невообразимо глючить. В самом худшем случае — зависают через секунды после включения и подключения сети, в чуть более лучшем — то же самое происходит иногда, случайно.

Приятных вам сновидений — в которых мечта о собственном IoT-стартапе превращается в ужасный кошмар.

С праздником!

Очень оригинально решил поздравить российских программистов с государственным праздником Gitlab:

https://gitlab.com/gitlab-com/www-gitlab-com/issues/5555

Если коротко — то предложили выставить на мороз сотрудников из России и Китая — а то они могут подсмотреть какие-то секреты у некоего неназванного «customer considering using GitLab.com». Ну я думаю, перечень таких «customer considering using», ради которых Гитлаб готов делать все, что угодно — не такой большой. Если вспомнить еще и недавнюю историю с «телеметрией» для платных пользователей — то ну его нахрен, такой гитлаб?