Доброго времени суток, все, кто интересуется 3D печатью. Сегодня хочу показать как позаботиться о здоровье при печати ABS, РС и иными филаментами дабы не дышать стиролом либо тем же бисфенолом. Всё на примере Q1.
Первым делом напечатал и установил тоннель между вытяжным вентилятором камеры и задней крышкой. (модель именно такого нашёл на thingeverse) Он крепится достаточно просто: нужно снять заднюю крышку принтера и просто надеть на 4 стойки, в которые вкручен сам вытяжной вентилятор камеры, просто как на направляющие. Фото данного процесса, к сожалению, не делал.
Далее в родные выемки ставится заранее распечатанное крепление адаптера (модельки лежат на printables) для вентиляции и прикручивается в штатных отверстия саморезами (пара 3*20мм).
И просто вставляется через верх сам адаптер. Для модов к самому принтеру использовал пластик ABS/PA, тк он устойчив к температурам.
Затем закупил элементы вентиляции, напечатал крепления к стене (получилось в три раза дешевле, чем брать в магазине). Ну а пока шла печать креплений, схема была собрана "на коленке".
В конце видео можно заметить, что перед выходом в вент канал у меня стоял тройник с обратным клапаном, но позже я отказался от этой идеи и сделал напрямую.
Следующим днём вооружился инструментом для борьбы с соседями (перфоратором) и "прибил" к стене крепления, что напечатал накануне. Собрал всё и проклеил соединения фольгированным скотчем.
Получилось как-то так:
Да, принтеры на кухне. Система успешно работает, нет никакого запаха при печати "вредными" материалами.
В своем телеграмм канале я публиковал данную информацию. Канал о том, с чем сталкиваюсь в процессе, что модернизирую, как учусь печати инженерными пластиками, в тч композитами. Кому интересно - https://t.me/letspr1nt .
Доброго времени суток, мои 69 подписчиков и пикабушники, кто интересуется 3Д печатью. Сегодня знаменательный для меня день, я впервые попробовал композит PA6-GF30, нейлон с содержанием стекловолокон.
Впервые воспользовался таймлапсом на Qidi.
Дал детали остыть в камере, которую, кстати, я утеплил, о чём писал в своём телеграм канале.
Камера остывала с 60⁰С до 30⁰С один час! У принтера, который в стоке махом остывал. Это лучший наглядный пример моей доработки.
Далее промерил изделие на усадку:
А усадки и нет. Размеры 20 и 30 мм задавал при моделировании изделия.
Считаю, что первая печать композитом удалась! Филамент фирмы Nova с озона. Принтер Qidi Q1 Pro, Сопло 0.6 300⁰С, стол 110⁰С, пластина с текстолитовым покрытием. Материал абразивен, подавал его из сушилки без трубок, в них филамент пытался застрять.
P.S.: на Elegoo Neptune 4 Plus сделал новую систему подачи филамента, убрав этот держатель:
Напечатал такое:
В очередной раз выручили подшипники 608z с озона по 250 за десяток.
З.Ы.: В конце недели планирую опробовать печать РС, он же поликарбонат. Кому интересна тема, кто тоже начинает проходить этот путь с 3д печатью, да и более опытных, приглашаю в свой ТГ канал, где больше авторского контента на тему печати: https://t.me/letspr1nt
Все части можно глянуть в серии постов: Моддинг Disciples 2 Если вы не читали, то лучше начните с них.
Как я говорил в начале, я не люблю изменения ради изменений, поэтому давайте на практических примерах.
Меняем атаку и урон
Ангел у Империи довольно посредственный юнит во второй части. Ему явно не хватает чего-то, чтоб выгодно его выделять среди других. Я считаю, что с этой проблемой прекрасно справилась третья часть изменив тип урона с оружия на воздух, давайте сделаем тоже самое.
При помощи D2Info узнаем идентификатор атаки ангела:
Затем при помощи любого редактора dbf файлов открываем файл DisciplesII/Globals/Gattacks.dbf. По идентификатору находим нужную строчку, то есть ту у которой ATTACK_ID = g000aa0014. Нас интересует колонка SOURCE. Сейчас в ней записан 0, то есть источник урона у ангела это оружие.
Полный список лежит в файле DisciplesII/Globals/LattS.dbf и выглядит так:
То есть 0 это оружие, 1 это разум, 2 это жизнь (источник лечения и атаки стражей столиц), 3 это смерть, 4 это огонь, 5 это вода, 6 это земля и наконец 7 это воздух. Поэтому меняем SOURCE с 0 на 7 и получаем ангела, что атакует воздухом.
Теперь ангелы выглядят весьма заманчиво с новой возможностью истреблять нежить неуязвимую к оружию.
Как изменить урон, меткость, инициативу?
В том же файле Gattacks.dbf нас интересуют следующие столбцы:
INITIATIVE - отвечает за инициативу.
POWER - отвечает за меткость.
QTY_DAM - отвечает за урон.
QTY_HEAL - отвечает за лечение.
CLASS - отвечает за тип атаки (1 - обычный урон, 2 - вампиризм, 3 - паралич, 6 - лечение, 7 - страх, 8 - повышение урона, 9 - окаменение, 10 - понижение урона, 11 - понижение инициативы, 12 - яд, 13 - обморожение, 14 - воскрешение, 15 - вампиризм с лечением союзников, 16 - исцеление (снятие негативных эффектов), 17 - призыв, 18 - понижение уровня, 19 - дать двойную атаку, 20 - скопировать врага, 21 - изменить свою форму, 22 - превратить врага, 23 - ожог, 24 - дать вард (защиту от какого-то типа урона) 25 - разбивание брони)
REACH - дальность атаки (1 - все цели, то есть маги, 2 - любая одна цель, то есть дальний урон, 3 - ближний урон)
Меняем их значение – меняем характеристики, все просто.
Меняем основные характеристики: здоровье, регенерация, опыт.
Многие, кто играл PvP против гномов в курсе насколько сложно играть против 5 отшельников в отряде врага. Они слишком живучие для атакующих магов чью нишу они занимают в Горных кланах. Давайте сделаем их более сбалансированными.
По моим подсчетам у Отшельника должно быть 175 здоровья, а не 250. Для этого нам нужно открыть файл DisciplesII/Globals/Gunits.dbf. Идентификатор юнитам вы уже должны были научиться находить, в любом случае нас интересует g000uu0163.
Здесь смотрим на:
HIT_POINT - количество здоровья (его то я и хотел поменять, но посмотрим сразу все важные)
ATTACK_ID - основная атака юнита (почти всегда это урон или лечение)
ATTACK2_ID - дополнительная атака (всякие яды, исцеления, воскрешения и т.д.)
ATCK_TWICE - бьет ли юнит дважды. T - бьет, F - не бьет.
ARMOR - количество брони.
REGEN - количество процентов здоровья, что восстановит юнит в конце хода.
REVIVE_C - цена воскрешения юнита. Что примечательно - тут можно указать цену не только в золоте, но и мане. То есть g0600; r0000; y0000; e0000; w0000 значит, что для воскрешения юнита вам придется потратить 600 золота. Первый блок (g) отвечает за золото, второй (r) за ману легионов проклятых, третий блок (y) мана людей, четвертый (e) блок мана нежити, пятый (w) блок мана гномов. Иногда в подобных строчках (стоимость применения заклинаний эльфов) есть и шестой блок (b) мана эльфов, но в данном случае его нет и если честно я не пытался проверить будет ли оно работать, если это строку аналогично. Если интересно можете проверить сами.
HEAL_C - стоимость лечения 1 еденицы здоровья (запись стоимости аналогично воскрешению).
TRAINING_C - стоимость обучения в лагере инструктора за 1 еденицу опыта (запись стоимости аналогично воскрешению).
XP_KILLED - сколько будут давать опыта за убийство этого юнита.
XP_NEXT - сколько нужно опыта для получения нового уровня.
DEATH_ANIM - анимация при смерти юнита (1 - анимация, как у Империи, 2 - как у демонов, 3 - как у гномов, 4 - как у нежити, 5 - нейтральная, 6 - дракона, 7 - призрака/приведенья/тени, 8 - эльфов)
К остальным столбцам вернемся в другой части, когда будем разбирать, как добавить новых юнитов.
На этом всё, надеюсь кому-то поможет или было интересно.
Осторожно: в статье я постарался подробно и простым языком написать об аппаратном моддинге и ковыряние в железе, хакинге Linux и обходе проприетарной оболочки, а также программировании и портировании софта с других платформ. Но есть нюанс...
Я очень большой фанат портативных гаджетов с полноценными QWERTY-клавиатурами: ноутбуков, коммуникаторов и различных хэндхелдов. Когда в мои руки попадает девайс с Linux или Windows CE в том или ином виде, я стараюсь максимально расширить функционал устройства и порой даже портирую программы с других платформ! Недавно мне удалось купить китайский детский обучающий ноутбук с MIPS-процессором и поворотным дисплеем всего за 1 000 рублей. Интересно узнать о том, как я хакнул девайс и причём здесь Dingoo A320? Тогда жду вас под катом!
❯ Предыстория
В конце 2000-х годов, цена на бюджетные ноутбуки снизилась настолько, что купить полноценный лэптоп мог почти каждый студент. Если в начале нулевых годов миниатюрность была роскошью и стоила довольно дорого по отношению к обычным 15-дюймовым бюджетникам, то с выходом Asus EEEPC в 2007 году, маленькие нетбуки с 7-дюймовыми дисплеями наоборот образовали новый сегмент рынка недорогих портативных устройств.
Сейчас мы с вами привыкли, что большинство ноутбуков работает на базе процессоров с двумя архитектурами — x86_64 и ARM. Однако в те времена, инженеры и производители активно экспериментировали и с альтернативными архитектурами — например, MIPS. В 2009 году, некая китайская компания Noah Educational Holdings, которая занималась разработкой портативных устройств для обучения дошколят и школьников младших классов, выпустила на рынок свой собственный миниатюрный обучающий ноутбук — Noah NP5000.
Обычно, когда читатель слышит «детский ноутбук», он представляет себе небольшое устройство с почти полноценной QWERTY-клавиатурой, небольшим монохромным ЖК-дисплеем и набором некоторых обучающих программ. При этом замоддить такие устройства не представляется возможным — в них используются микроконтроллеры с масочной ROM (прожигаемой на заводе), которые скорее всего являются близкими родственниками процессоров тех самых Тетрисов!
Однако в случае с NP5000 всё было совершенно по другому — дисплей здесь уже цветной, а не монохромный, вместо батареек используется полноценный аккумулятор, да и в целом девайс выглядит действительно как взрослый миниатюрный нетбук с поворотным экраном! При включении пользователя встречает заставка с логотипом компании и характерным пингвинчиком, рабочий стол, напоминающий Windows XP и определенный набор обучающих программ на китайском языке.
В один день я листал Goofish (китайский аналог Авито) в поисках интересных гаджетов, именно пингвинчик и привлёк моё внимание. Информации о том, на каком процессоре работает ноутбук, можно ли на него устанавливать сторонние приложения и что он вообще умеет в сети не было. Однако приятная цена в 1 000 рублей и желание заполучить интересный девайс в коллекцию взяли верх — и я решил рискнуть!
Мчу на своем болиде за ноутбуком для дошколят!
Когда девайс приехал ко мне, я немного поковырял его родную оболочку, попытался выйти в терминал, поставить пакеты OpenWRT — но всё тщетно, оболочка тщательно была закрыта от ушлых детских ручек! Поэтому я решил разобрать девайс и узнать, на каком процессоре он работает и есть ли у нас UART, на котором можно поискать рут-консоль или хотя-бы консоль U-Boot.
Девайс помог привезти в Россию мой подписчик Роман и сервис YouCanBuy, за что им огромное спасибо! Также этой статьи не было бы без подписчика Андрея, который занял мне определенную сумму для заказа ништячков из Китая, за что ему отдельная благодарность!
❯ Что внутри?
Разбирается маленький нетбук почти также, как и его взрослые собратья — через клавиатуру! Со стороны поддона виднеется съёмная крышка, которая на x86-устройстве должна содержать в себе место под HDD и слоты для оперативной памяти. Однако в нашем случае, здесь скрывается кое-что поинтереснее: видите характерное место под миниджек с подписанными пинами RX и TX? Это и есть UART, о котором я говорил в прошлом абзаце.
Плата ноутбука выделяется низкой плотностью монтажа и отсутствием какого либо охлаждения. Процессор, оперативная память и флэшка скрыты под большим защитным экраном на винтиках, в то время как дополнительные модули скрываются под экранами, которые припаяны к плате.
В качестве процессора используется легендарный Ingenic JZ4757! Это готовая система на кристалле, включающая в себя MIPS-ядро собственной разработки с микроархитектурой XBurst, работающее на частоте до 380МГц, видеоконтроллер с возможностью вывода картинки на дисплей или телевизор, аудиокодек, USB-хост и т. п. Слева от процессора расположились два чипа ОЗУ типа SDRAM, в сумме образующие 64Мб, а чуть ниже распаяна NAND-флэшка от компании Samsung на 2Гб. Справа снизу «спрятался» чип часов реального времени — с которого при желании можно было бы взять шину I2C!
Что странно — маркировка флэшки была наполовину затерта с завода, при том что ноутбук ни разу не разбирался... видимо использовали Б/У-накопитель?
Я не зря назвал процессоры от Ingenic легендарными. Дело в том что именно JZ'шки использовались во многих легендарных портативных гаджетах нулевых годов. Например, JZ4732 использовался в популярной эмуляторной игровой консоли Dingoo A320, а JZ4725 использовался в журнале Vogue с экранчиком и OpenHardware-ноутбуке Ben NanoNote. Ingenic славились своей открытостью к сообществу моддеров и свободно предоставляла исходный код ядра Linux, BSP для Windows CE и даже код своей проприетарной прошивки для MP4-плееров!
Далее я решил подпаяться к UART'у, дабы почитать что у нас туда пишет система. Вне зависимости от чипсета или устройства, довольно часто на UART летят логи загрузчика и ядра, а иногда на нём можно найти и рутовую консоль. Благодаря такому «бэкдору» можно попытаться хакнуть самые разные устройства: например, тонкие клиенты на процессорах Marvell или незамысловатый ТВ-бокс. В качестве USB-UART преобразователя я использую плату с ESP32 с постоянным RESET'ом на микроконтроллере (дабы не вмешивался в работу шины):
Не забываем общую массу, иначе на шине будет мусор!
❯ Хакаем
Далее я включил ноутбук, настроил Putty на свой COM-порт с бодрейтом 115200 и увидел логи. Выяснилось что в качестве загрузчика используется всеми любимый U-Boot (в котором нельзя прервать процесс загрузки), а в качестве ядра — Linux версии аж 2.6! И конечно же на этом терминале висела полноценная рут-консоль!
Далее я сразу решил проверить с какой системой мне придется иметь дело: заглянул в top, обнаружив что используется оболочка Qtopia (формальная альтернатива Xorg и DirectFB для КПК на Linux), пошерстил по папкам с бинарниками и посмотрел inittab. Наша задача — заставить ноутбук запускаться с текстовым терминалом на дисплее, а Qtopia запускать уже по желанию.
Сначала я закомментировал запуск Qtopia в скрипте автозагрузки - inittab'е. Однако если просто «прибить» оболочку — после включения ноутбука нас будет встречать пустой экран без какого либо взаимодействия. Поскольку у меня не было возможности изменить cmdline ядра и перенаправить консоль на терминал fbcon, я решил это сделать уже в юзерспейсе с помощью системного вызова TIOCCONS, однако он по каким-то причинам выдавал ошибку. Тогда пришлось немного костылить и дублировать терминал с помощью getty:
После этого у меня начал нормально работать терминал! Правда, без скроллинга... пока не знаю почему. Теперь, когда у нас есть рутовая консоль и полноценный busybox, можно немного поэкспериментировать!
❯ Портируем эмуляторы
Далее я решил попробовать портировать эмуляторы с родственной данному ноутбуку Dingoo A320. В родной системе почти никакие эмуляторы не работали даже после подкидывания всех необходимых библиотек (в том числе и uclibc с SDL), однако после chroot'а в систему от Dingoo A320 у меня запустились часть эмуляторов. Однако в этом ноутбуке используется оригинальный непропатченный кривой драйвер фреймбуфера, который постоянно сыпет ошибками и не умеет работать в виртуальном разрешении. Из-за этого, часть эмуляторов выглядело... примерно вот так:
В эмуляторе был некорректно реализован скейлинг, который портил память
А часть вот так:
Разрешение оригинальной Dingoo A320 — 240x320, а в ноутбуке — 800x480
И я понял что без патчей в исходном коде не обойтись. Для сборки программ под старые Linux-машины, кросс-компилятор из репозиториев свежих дистрибутивов не подойдет — слишком новая версия glibc. Более того, некоторые устройства могут использовать uclibc вместо glibc, как, например, та же самая динга. Поэтому может потребоваться установка уже готового тулчейна — благо для динги он сохранился в сети. Распаковываем архив в /opt/, добавляем в переменную PATH путь к папке bin/ и пробуем собирать тестовую программу. Всё работает!
Далее предстояло найти исходный код эмуляторов для динги. Часть из них можно найти на гите (в качестве портов на GCW-Zero), часть — на сайте OpenHandhelds. Первым дело я решил портировать эмулятор GameBoy Color. Поскольку эмулятор работает поверх библиотеки SDL, в первую очередь я изменил видеорежим с 240x320 на 800x480...
if (!(fbSurface = SDL_SetVideoMode(240, 320, vmode[2], flags))) die("SDL: can't set video mode: %s\n", SDL_GetError());
И ожидаемо ничего не получил, никто растягивать картинку за меня не будет! Поэтому я сначала написал простейшую функцию скейлинга картинки на флоатах с заранее посчитанным шагом интерполяции, затем оптимизировал её до fixed-point арифметики, а после и вовсе решил «запечь» координаты для сэмплинга в один большой массив.
void BlitScale(SDL_Surface* srcSurface, SDL_Surface* dstSurface, framebuffer_scale_t* scales) { int i, j;
for (i = 0; i < dstSurface->h; i++) { for (j = 0; j < dstSurface->w; j++) { framebuffer_scale_t scale = scales[i * dstSurface->w + j];
Крайний вариант был самым быстрым, однако в нативном разрешении ноутбука я получил примерно 50%-скорости от реальной консоли — т. е., по сути, не играбельно. При этом в видеорежиме 240x320 всё работало нормально и упор был явно не в скорость растягивания картинки... по каким-то причинам либо блиттер SDL работал слишком медленно, либо драйвер фреймбуфера спотыкался об преобразование форматов пикселя из-за чего всё и тормозило.
Далее я решил попробовать запустить другие эмуляторы. NES, Sega Master System и другие консоли работали отлично... пока я не устанавливал разрешение выше 240x320. Ради интереса, я запустил оболочку для Linux-консолей gmenu2x с Ben NanoNote, которая вместо SDL использует DirectFB и получил вот такую картину. Epic fail...
После этого я решил попробовать накатить всем известный Debian. В отличии от эмуляторов, здесь пересобирать ничего не нужно: достаточно лишь собрать rootfs с необходимыми пакетами, отформатировать SD-карточку и chroot'унутся в систему. Для сборки можно использовать две утилиты — debootstrap и multistrap:
Сначала я хотел накатить что-то относительно современное по типу Debian Buster или Jessie, однако вскоре выяснилось, что ядро 2.6 эти версии системы не поддерживают...
Оказалось что последней версией Debian, поддерживающей ядро 2.6, был Squeeze вышедший в далёком 2011 году. После сборки и копирования рутфс, необходимо было выполнить вторую стадию установки системы, а именно фактическую распаковку и установку пакетов:
Установка БАЗОВЫХ пакетов занимает около 20 минут!
Далее мне удалось подкинуть некоторые пакеты и даже попытаться запустить иксы (на 64Мб ОЗУ!)... но затем я погряз в зависимостях и всё таки решил попытаться подкинуть сеть. Выяснилось что в ядре есть поддержка встроенного в чипсет Ethernet-контроллера, однако PHY на плате то не распаян!
❯ Заключение
Вот такая статья о попытке превратить китайский бюджетный MIPS-ноутбук в портативную игровую консоль у нас с вами получилось. И хотя в определенном смысле мне удалось добиться успехов — выйти в рутовую консоль, накатить Debian и запустить эмуляторы в половинном разрешении, всё равно это всё таки больше Epic fail... Но по крайней мере, эти бессонные ночи были очень веселыми!
А вам надеюсь было интересно почитать мой опыт моддинга такого замечательного девайса. Пишите своё мнение в комментариях! Если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет, подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я публикую бэкстейджи статей, иногда полезные посты ну и немножечко щитпоста! Если вам интересны мои видео той же тематики — предлагаю подписаться на мой YouTube-канал.
Как вам девайс?
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т.п, о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам: