...

суббота, 21 сентября 2013 г.

[Перевод] Рендер ландшафта в WebGL — 2

Часть вторая




Приветствую в серии статей о WebGL рендринге ландшафта, используемом в игре Trigger Rally!

Если еще не успели, то прочитайте первую часть, в которой я рассказываю о важности минимизации передачи данных между процессором и видеокартой, а также предлагаю хранить статические данные о высоте каждой точки ландшафта в текстуре.


В этой статье я расскажу структуре данных вершин, а так же о морфинге.

image


От переводчика: в статье много косноязычия и технических неточностей. Помогите их исправить!



Кольца



Geoclipmap рендринг оперирует с квадратными «кольцами» вокруг точки обзора, причем каждое кольцо в два раза больше предыдущего, но имеет в два раза меньшее разрешение. Благодаря этому мы видим плавное уменьшение количества вершин на единицу плоскости, по принципу: дальше — меньше. Внутренне кольцо полностью заполнено и имеет наивысшее разрешение, становясь простой квадратной сеткой треугольников:

image

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



Мы можем использовать это свойство, для того что бы сдвигать геометрию относительно камеры.


Так как каждое кольцо треугольников имеет собственный размер, а от размера зависит расстояние для переноса, мы должны перемещать кольца независимо друг от друга. Следовательно, вершинный шейдер должен знать, какой именно слой вершин он перемещает, что бы изменять его правильно.


В общем, нам нужно знать такие параметры вершин:



  • Положение по оси X

  • Положение по оси Y

  • Номер слоя




В Trigger Rally мы используем [X,Y,Z] вектор, а так же получаем номер слоя, в котором находится вершина, согласно ее положению по оси Z.
Зашивание дыр



Каждое кольцо имеет собственный масштаб, кроме того, каждое кольцо сдвигается на величину зависящую от масштаба. Таким образом может возникнуть проблема — одно кольцо транслировано, а ему соседнее нет и между ними образуется зазор:

image

Один из способов решения этой проблемы состоит в том, что бы дополнительно наращивать на край кольца «юбку». Согласно этой статье, юбка собирается из множества маленьких кусочков, для этого используется несколько буферов вершин и сложная процессорная логика. А нам ведь этого совсем не хочется!


При реализации ландшафта в Trigger Rally, я провела часы, пытаясь найти производительный и качественный способ собирать юбку, но увы, безрезультатно.


Но на последнем WebGL Camp Europe я встретила Florian Bösch, и он предложил сделать кольца немного больше, тем самым позволяя им пересекаться.


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


Морфинг



На границе колец мы имеем геометрию одного разрешения, которая соприкасается с геометрией имеющей размер в два раза меньший. Нам нужно сделать переходные области на краю каждого кольца, в которых геометрия будет плавно «перетекать» из высокого разрешения в низкое, так что бы край одного кольца строго совпадал с краем другого.

image

Вот так каждая вершина должна быть перемещена для соответствия следующему кольцу:

image


Мы должны делать это в вершинном шейдере. Самый просто способ заключается в том, что бы включить вектор морфинга в структуру данных вершины, но, снова таки, Florian предложил кое что получше — использовать модульную арифметику!


Чтобы показать, как это работает, давайте представим данные в виде таблицы:



Таким образом мы можем вычислить вектор морфинга, имея только координаты вершин, воспользовавшись таким GLSL кодом:


vec2 morphVector = mod(position.xy, 2.0) * (mod(position.xy, 4.0) - 2.0);


И это все без дополнительных свойств в структуре вершин! (прим. пер.: снимаю шляпу перед этим Florian)


Дальше будет...



В следующем посте, я расскажу о том, как в Trigger Rally хранится карта высот и как она обрабатывается в вершинном шейдере. Потом мы рассмотрим surface shading в шейдере фрагментов, ну и наконец как эффективнее рендрить окружение.

Спасибо за чтение!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Ion.Sound — плагин для воспроизведения звуков. Создание и особенности


Привет, последнее время мне частенько приходится обрабатывать всякие события на сайтах, будь то сообщения в чатах, оповещения, напоминания, входящая почта и т.д. Этих событий становится все больше и больше и все они хотят как то привлечь внимание пользователя к себе. Я изощряюсь в разных видах анимации, элементы прыгают, мигают, крутятся и т.д. и т.п. В какой-то момент я понял, что все эти приемы бесполезны, если пользователь, например, отвернулся от экрана или вовсе перешел на соседнюю вкладку в браузере. Решение пришло быстро — звуки. Но как это сделать? Немножко погуглив я не нашел каких либо простых и удобных решений этой задачи. Зато нашел кучи аудио/видео плееров всевозможных видов. Вот я и решил написать собственный плагин для воспроизведения звуков у событий.



Как оказалось в html5 уже есть подходящий API, и это элемент audio. Его кроссбраузерная поддержка оказалась очень даже неплохой. В JavaScript этот элемент доступен через конструктор Audio и обладает множеством настроек. В общем вооружимся описанием и начнем.


Описывать тонкости создания jQuery-плагина я не буду, на Хабре есть полно статей на эту тему, опишу сразу нужные части:


Создание звуков




Несмотря на то что элемент аудио поддерживает очень много браузеров, с поддержкой кодеков все обстоит не так уж радужно. Mp3 понимают не все, по этому каждый звук, что мы захотим использовать нужно будет дополнительно конвертировать в Ogg. Это можно сделать очень просто прямо онлайн. Например тут или тут.

Подключение звуков к нашему сценарию:




Вначале объявим нужные нам переменные:

var settings = {},
soundsNum,
canMp3,
url,
i,

sounds = {},
playing = false;


Создадим функцию, принимающую аргументом имя звукового файла



var createSound = function(name){
// В объект sounds записываем создаваемые экземпляры Audio
sounds[name] = new Audio();

// Переменная canMp3 - определяет может ли браузер проигрывать mp3,
// для этой проверки есть специальный метод canPlayType *.
// Метод при желании может провести проверку поддержки любого формата,
// ну а мы проверим поддержку mp3
canMp3 = sounds[name].canPlayType("audio/mp3");

// У метода canPlayType есть интересная особенность, он не определяет наличие кодека
// со стопроцентной точностью, вместо этого он возвращает строку "probably", "maybe" или "".
// В общем верим ему на слово и выбираем mp3 или ogg
if(canMp3 === "probably" || canMp3 === "maybe") {
url = settings.path + name + ".mp3";
} else {
url = settings.path + name + ".ogg";
}

$(sounds[name]).prop("src", url); // устанавливаем ссылку на звуковой файл
sounds[name].load(); // для старых браузеров потребуется теперь загрузить этот звук
sounds[name].volume = settings.volume; // устанавливаем громкость
};




* Подробнее о методе canPlayType

Проигрывание звуков:




Создаем еще одну функцию, принимающую аргументом имя звукового файла

var playSound = function(name){
var $sound = sounds[name],
playingInt;

// проверяем есть ли у нас что проигрывать
if(typeof $sound === "object" && $sound !== null) {

// Вначале о переменной settings.multiPlay. Эта переменная была задумана чтобы ограничить возможность
// бесконтрольного воспроизведения звуков. Если установить ей значение false, то плагин будет
// проигрывать звуки строго по одному за раз, иначе в некоторых ситуациях можно получить жуткую какофонию

// Проверяем играет ли звук
if(!settings.multiPlay && !playing) {
// Запускаем воспроизведение методом play
$sound.play();
playing = true;

// И запускаем интервал, ждущий окончания воспроизведения
playingInt = setInterval(function(){
// Чтобы понять, когда кончилось воспроизведение, существует специальная переменная ended,
// принимает значение true, если воспроизведение файла закончилось
if($sound.ended) {
clearInterval(playingInt);
playing = false;
}
}, 250);
} else if(settings.multiPlay) {
// Если же multiPlay включен то просто играем звук
if($sound.ended) {
$sound.play();
} else {
// Если звук еще проигрывается, пытаемся отмотать его назад, устанавливая значение 0
// переменной currentTime, но как выяснилось, это переменная не всегда доступна,
// например в iOS браузерах, так что нужно проверить возможность
try {
$sound.currentTime = 0;
} catch (e) {}
$sound.play();
}
}

}
};


Инициализация плагина и запуск воспроизведения:



// Создаем функцию, запускающую наш плагин
$.pluginName = function(options){

// загружаем и запоминаем настройки
settings = $.extend({
// массив имен звуковых фалов
sounds: [
"sound_name_1",
"sound_name_2"
],

// путь до папки со звуками
path: "sounds/",

// возможность воспроизведения нескольких звуков за раз
multiPlay: true,

// громкость в формате 0.0 - 1.0
volume: "0.5"
}, options);

// определяем сколько всего звуков нужно загрузить
soundsNum = settings.sounds.length;

// узнаем поддерживается ли вообще конструктор Audio
if(typeof Audio === "function" || typeof Audio === "object") {

// и подключаем наши звуки
for(i = 0; i < soundsNum; i += 1){
createSound(settings.sounds[i]);
}
}

// создаем метод воспроизводящий звуки по их именам
$.pluginName.play = function(name) {
playSound(name);
};
};


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


Послесловие




Звуки — это очень мощный инструмент привлечения внимания пользователя. Но этот инструмент так же очень опасен, так как люди не любят лишние звуки или слишком громкие звуки. И я советую вам очень осторожно подходить к подключению звуковых эффектов для ваших веб-сайтов. Не нужно привязывать звуки к каждому клику, это лишнее. Желательно только к очень важным и нужным событиям. И старайтесь делать громкость поменьше, вы ведь не хотите чтобы пользователь подскочил в кресле и расплескал на себя чай? :-)

Информация о плагине




Полностью готовый плагин можно посмотреть здесь:

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



0 A.D. — свободная стратегия в реальном времени собирает деньги на Indiegogo


Wildfire Games — группа независимых разработчиков, расположенных по всему свету, которая уже более 4 лет разрабатывает open-source стратегию под названием 0 A.D. Игра напоминает популярную Age of Empires, которая и послужила источником вдохновения для авторов. Изначально у игры был закрытый код, но в 2008 году компания решила сменить модель разработки и выложила код под GPL 2+, а игровой контент под CC-BY-SA. Игра разрабатывается для Windows, OS X и Linux.


Изначально в проекте участвовало 10-15 человек, но теперь команда сильно разрослась — до сотни человек. Многие из них непостоянно участвуют в разработке игры, некоторые ограничиваются единичным вкладом, но на протяжении этих лет образовалась основная группа разработчиков, которая готова упорно продолжать работу.


В игре представлены 10 цивилизаций: Афины, Македония, Спарта, бритты, галлы, племена иберов, Карфаген, Персидская империя, Римская республика и империя Маурьев. По окончании кампании планируется ввести эллинистический Египет и государство Селевкидов. Кстати, названия объектов для всех цивилизаций написаны на их собственных языках.




Геймплей схож с любой исторической RTS. Есть несколько видов ресурсов: пища, дерево, каменная и железная руда. Более 16 видов построек, уникальных для каждой нации и более тридцати моделей юнитов, среди которых есть конница, несколько видов пехоты, флот, а также различные животные, которые служат источником пищи. На картах возможно оставлять объекты-сокровища, являющиеся кладезью ресурсов.


Также возможно объединяться с противниками в альянсы и поддерживать рыночные отношения. Торговых путей как в AoE нет, но игра находится в стадии альфы и в финальной версии возможно добавление огромного количества фич, которых нет сейчас. Само название 0 A.D. отсылает к периоду, которого не существовало, т.к. по современному календарю после 1 года до н.э. сразу идёт 1 год нашей эры, и нулевой пропускается.


Главная мотивация разработчиков — принести дух старых добрых RTS, которых, к сожалению, становится всё меньше.

В игре планируется мультиплеер, использующий NAT Migration, то есть есть в случае внезапного отключения сервера матч все равно продолжится усилиями других игроков. Модели объектов создаются в Blender, там же ведется работа над анимацией юнитов.


Над музыкой в игре трудится несколько человек: композиторы Омри Лахав и Джефф Уиллет, флейтистка Марта МакКейв и многие другие. Уже сейчас доступно 27 треков в этническом стиле, которые можно послушать на Bandcamp.



Оценить альфа-версию игры можно прямо сейчас, скачав её с play0ad.com.


На мой взгляд, эта кампания — лучший шанс доказать, что свободные игры можно и нужно краудфандить: мы получаем полностью прозрачный процесс разработки, к которому благодаря собранному бюджету могут примкнуть профессионалы игростроения и сильно ускорить процесс создания. Авторы 0 A.D. поставили довольно амбициозную цель: 160 тысяч долларов. Это высокая планка для опенсорса и средняя для коммерческих проектов с Kickstarter. По составу и целеустремленности команды 0 A.D. опережает многие из таких проектов. По количеству уже проделанной работы — тоже.


Так давайте поможем им!


Страница игры на Indiegogo


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



[Перевод] Биопринтер своими руками

image

От переводчика: Это руководство поможет вам создать биопринтер из подручных материалов (не путать с 3D биопринтером!!!, об этом в следующий раз).


Биопечать — это печать биологическими материалами. Думайте об этом как о 3D печати, но спрессованными ингредиентами! Большая работа была проведена исследовательскими лабораториями и крупными компаниями, такими как Organovo занимающимися проблемой печати человеческих тканей и органов человека, с целью тестирования лекарств, и трансплантации органов людям.

Все это звучит невероятно сложно, но дело в том, что основные технологии широко доступны — все это основано на струйной и / или 3D-печати! Так что мы на BioCurious решили поиграть с этой технологией сами — и проект BioPrinter Community появился на свет!




image


Шаг 1: Разбор старого струйного принтера




image

Берём старый струйный принтер, в нашем случае HP 5150, но подойдёт практически любой. Можете просто срывать все пластиковые крышки, но убедитесь, что кнопка перезагрузки на передней панели всё ещё работает.

В нём есть маленький мгновенный переключатель, который чувствует открыта ли крышка. После снятия крышки, нужно зафиксировать это переключатель во включённом положении. вручную или с помощью зубочистки, приклеив маленький кусочек пластика, в общем включите фантазию.

image

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

Чтобы убедиться, что всё сделано правильно, распечатайте пару листов. Смотреть как разобранный принтер печатает, само по себе интересно.

image

Следующей задачей является вскрытие картриджа, для замены чернил на что-то более органическое. Лучше взять новый картридж, у которого сопла ещё не засорены, но вы можете попробовать и старый, только перед использованием включите режим очистки головки, если ПО принтера это позволяет.

image

После снятия всех наклеек вы увидите, что большинство картриджей имеют приклеенную крышку с небольшим вентиляционным отверстием для подачи воздуха во время вытекания чернил. Крышку нужно снять ножом или специальным инструментом, только имейте ввиду, что в будущем картридж нужно будет снова вставлять в принтер.

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

Теперь необходимо чем-нибудь заполнить наш картридж. Тут всё зависит о вашей фантазии. Мы решили начать с чего-нибудь простого, а не прыгать сразу к печати живых клеток. Мы решили напечатать что-то с помощью раствора арабинозы на фильтрованной бумаге.

Мы решили напечатать с помощью раствора арабинозы на фильтровальную бумагу. Затем мы вырезали её и положили на пластину агарозы, с выращенной плёнкой из кишечной палочки, чем спровоцировали перенос pGLO плазмид. Этот плазмид содержит зеленый флуоресцентный белок (GFP), под управлением арабинозочувствительного ускорителя.

В результате, там, где мы распечатали арабинозу на фильтровальной бумаге, мы увидели под ультрафиолетовым излучением зелёный свет излучаемый кишечной палочкой! Обратите внимание, что красота этого эксперимента заключается в его простоте (прим. переводчика: ну да, ну да… могли бы и что-то по интереснее придумать): мы только должны были печатать простым раствором сахара, а не объемными живыми клетками, причём на бумаге, так что нам даже не придётся менять технологию работы с бумагой. Также можно попробовать печать с помощью антибиотиков или даже белков, таких как ферменты или факторы роста.

image

На первой фотографии мы распечатали половину страницы арабинозой (Прим. переводчика: надо приглядеться, сочувствую дальтоникам.).

image

А на этом фото мы распечатали логотип глазного яблока. К сожалению, резкость изображения оставляет желать лучшего.

Шаг 2: Проблема — существующие принтеры имеют слишком высокое разрешение




image

Мы провели немало времени, смотря на струйные печатающие головки под микроскопом. Серебристая полоска в нижней части картриджа называют пластиной с соплами. Это просто ленты из нержавеющей стали. В этом картридже, сопла расположены в четыре ряда, из которых вы можете увидеть две на первом изображении выше. Сопла фактически пронумерованы от 1 до 416. 416 сопел в печатающей головке это примерно 1/3 дюйма выходит до 1200 точек на дюйм.

Теперь, 1/1200 на дюйм означает интервал в 21 мкм. Кроме того, сами сопла фактически около 23 микрон в диаметре. Это порядка размера эукариотической клетки — Ой-ой! Мы должны по-прежнему иметь возможность печатать клетки E.coli гораздо меньше размера (~ 1 мкм в диаметре ) с этой печатающей головки, а также возможно дрожжевые клетки (~ 10 мкм в диаметре ).

Но подождите — это еще не все!

Когда вы удаляйте металлическую пластину сопла, вы получаете фактически возможности печатающей головки — чуда инженерной кремния, который включает в себя как наливные, микроскопические нагреватели, которые испаряют часть чернил в термическом струйном принтере, так и кучу встроенной электроникой. Отличная мишень для продвинутых микроскопистов!

image

image

image

image

Последнее изображение волнует нас гораздо больше. Там, кажется, фильтр, интегрированный в кремний, расположенный между резервуаром чернил и печатающей головкой! По изображению с микроскопа, мы оцениваем отверстия в фильтре, размером около 3 мкм, что может оказаться недостаточно даже для клеток кишечной палочки!

image

Вдобавок, использую коммерческий принтер придётся изменить весь путь движения бумаги, к тому же существующие драйвера предоставляют ограниченные возможности для управления печатающей головкой, если конечно не адаптировать драйвера под Linux.

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

Шаг 3: Используем печатающую головку InkShield




image

Итак, похоже, что мы, возможно, не сможем печатать что-либо большее, чем дрожжевые клетки используя последнее поколение струйных принтеров. И мы не можем быть в состоянии напечатать даже дрожжи или клетки E.coli с помощью струйного картриджа на данном принтере!

Другим путём является использование древних HP принтеров с разрешением 300 dpi, и сопел размером предположительно около 80 микрон или около того, что должно быть достаточно для печати клеток человека. Например, HP DeskJet 500, дошедший до нас их 90-х. Удачи в поиске этого антиквариата.

image

Сейчас, комплект разработки Parallax для струйных принтеров и картридж HP 51604A позволяет печатать с разрешением в 96 dpiпроблема в том что они сняты с производства несколько лет назад.

image

image

К счастью для нас, Николас Льюис признал необходимость DIY-платформы для струйной печати, и начал на Kickstarter кампании по созданию Inkshield: An Open Source Inkjet Shield for Arduino. InkShield строится вокруг HP C6602 струйного картриджа, с 12 соплами и 96 точками на дюйм, предназначенный для печати этикеток на вещи, как кабели. 96 точек на дюйм равно шагу в 265 микрон. Как вы можете видеть в последнем изображении, фактический диаметр сопла составляет только около 1/3 от расстояния между точками, или около 85 микрон — просто идеально подходит для наших целей!

image

InkShield предназначен для управления Arduino, но нуждается в более высоком напряжении, чем 5V Arduino получаемые им от USB. Таким образом, вы должны предоставить 9-12V питания через специальный разъем питания на InkShield или через разъем питания на Arduino.


Шаг 4: Версия 2: Hackteriabot!




image

Для нашей второй биопечатающей платформы, мы построили XY-платформу из пары старых CD-приводов, вдохновленные красивым DIY лазерным резаком / микрофлюидо платформой от наших друзей из Hackteria:

hackteria.org/wiki/index.php/HackteriaLab_2011_Commons#Micro_Manipulator

hackteria.org/wiki/index.php/DIY_Micro_Dispensing_and_Bio_Printing

hackteria.org/wiki/index.php/DIY_Micro_Laser_Cutter

hackteria.org/wiki/index.php/DIY_Microfluidics#Advanced_DIY_Microfluidics

hackteria.org/?p=1186

diybio.org/2012/06/12/gaudilabalgaepicker/

Расположив движущиеся механизмы, перемещающие головку в CD/DVD приводе, под углом в 90 мы получаем XY-платформу с очень маленькой строительной областью, но с очень большой точностью позиционирования

Использование позиционирования лазерной головки от механизма CD привода для строительства высокоточной XY платформы — не новая идея: builders.reprap.org/2010/08/selective-laser-sintering-part-8.html


Шаг 5: Сборка X-Y платформы из Б/Ушных CD приводов




image

Сперва собираем стопку старых приводов. Открываем лоток с помощью скрепки. Возможно вам придётся перебрать несколько приводов прежде чем вы найдёте с шаговым двигателем. По крайней мере половина из тех что мы разобрали имели двигатель постоянного тока. Если кто-то знает как по виду отличить их между собой, то сообщите нам об этом.

image

Их легко отличить друг от друга разобрав привод: DC имеют два провода, а Stepper 4 и короткий шлейф.

image

В отличие от постоянного тока, шаговые двигатели предназначены для перемещения на определенное число шагов, где каждый шаг представляет собой часть полного оборота. Это делает удобным для высокоточного позиционирования, без необходимости создания системы обратной связи, проверяющей позицию нахождения головки. Например, 3D принтеры обычно используют шаговые двигатели для позиционирования печатающей головки.

image

После онлайн-проверки некоторых серийных номеров, мы наткнулись на хорошо документированный биполярный шаговый двигатель, помеченный как PL15S-020. Остальные найденные двигатели очень похожи на него, так что вероятно они имеют одинаковые параметры.

image

Технические данные: robocup.idi.ntnu.no/wiki/images/c/c6/PL15S020.pdf

Данный шаговый двигатель делает 20 шагов на оборот (не много, но достаточно), а ходовой винт имеет шаг 3 мм за один оборот. Таким образом, каждый шаг равен 150 мкм перемещения лазерной головки — не плохо!

На Arduino.cc сайт мы нашли схемы для биполярных шаговых двигателей, а также пример кода для их управления. Мы заказали несколько SN754410NE H-мостов для реализации схемы, показанной на последней картинке.

image


Старый CD / DVD приводы имеют множество других интересных комплектующих! В том числе, лоток механизма открытия / закрытия, содержащий двигатель постоянного тока с низкоскоростной передаче, двигатель шпинделя, который вращает CD, имеет как правило, высокопроизводительный бесщеточный двигатель постоянного тока, который можно использовать в игрушечных самолетах и вертолетох. Плюс, куча переключателей, потенциометры, чёртовы лазеры, и даже соленоиды! В общем, извлеките всё!!!


Шаг 6: Соберите всё вместе




image

Материалы:

— Два механизма перемещения лазерной головки с шаговыми двигателями (желательно одинаковые) из старых приводов. Стоимость: несколько долларов за штуку.

— Один InkShield комплект, с картриджем и держателем картриджа. Стоимость: $ 57

— Дополнительно: дополнительный HP C6602 струйный картридж. Стоимость: 17 $

— Arduino Uno. Стоимость: $ 30

— Два SN754410NE H-Bridge Motor. Стоимость: $ 5

— Комплект для прототипирования Arduino и / или крошечная макетная плата. Стоимость: $ 4-21

— Провода, винты, стойки, корпуса. Стоимость: от бесплатно до $ $ $, в зависимости от воображения.

image

Общая стоимость для наших версия: около $ 150, доставка / обработки для частей включены. Фотографии выше показаны две различные версии мы сделали. Вторая имеет хорошую акриловую верхнюю пластину, и намного больше места для размещения вещей между ними.

image

Общая стоимость для нашей версии: около 150$, включая доставку/обработку частей. Фотографии выше показаны две различные версии, которые мы сделали. Вторая имеет хорошую акриловую верхнюю пластину, и намного больше места для размещения элементов между ними.

image

image

image

image

image

image

image

Механизм перемещения CD привода, находящийся внизу, перемещает синюю пластину на которой вы что либо печатаете (например, пластину агарозы). Верхний механизм привода, установленый под прямым углом, перемещает струйную печатающую головку. Мы использовали Shapelock и некоторые винты для крепления нижней платформы к лазерной головке, и крепления держателя картриджа к верхней головке лазера. Электроника состоит из Arduino Uno в нижней части, белого InkShield (подключенного к струйному держателю картриджа с хорошим белым ленточным кабелем), и протоплаты с шаговыми двигателями наверху.

image

image

image

image

Бумажные полоски, из бумаги в клеточку, на нижней и верхней платформах позволяют нам отслеживать положение по X и Y осям. Общая площадь печати составляет около 1,5 дюйма в обоих направлениях, с разрешением 150 мкм за один шаг. Следует отметить, что разрешение шаговых двигателей похоже на разрешение печатающей головки: 96 точек на дюйм 265 микрон шаг, но точки напечатанных печатающей головки четко разделены — больше как 150-200 микрон.

image

image

image

Шаг 7: Успех




image

Это наш первый по-настоящему-рабочий Биопринтер. Мы заправили картридж жидкой культуры кишечной палочки + pGLO. Слегка модифицировали «I

Как вы можете видеть, печать живыми клетками E.coli работает отлично! Мы, вероятно, дали колонии развиваются больше чем нужно, так что буквы немного расплываются. Мы получили распыление небольших колоний по углам клетки — вероятно, из-за некоторого распыления от струйной головки. Мы можем улучшить качество регулировкой вязкости или плотности клеток культуры, загружаемых в картридж.

Но в целом, не плохо для первого раза!

После печати мы дезинфекции поверхность и внутренность картриджа с отбеливателем, а потом пропустили немного отбеливателя через головку. После чего промыли всё дистилированной водой.

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

Шаг 8: Полученный урок и планы на будущее




Мы обратились к этому проекту с практически нулевым опытом работы с Биопечатью, шаговыми двигателями, струйными картриджами, и даже программирования Arduino! Поэтому, естественно, не все наши действия были оптимальными. Вот некоторые вещи, которые мы могли бы сделать иначе в следующий раз:

— Изучая работу шаговых двигателей мы получили действительно ценный опыт, но мы могли сэкономить кучу времени и усилий, адаптируя некоторые из RAMPS (RepRap Arduino MEGA Pololu Shield) технологий, которая уже была хорошо развита именно с этой целью в сообществе 3D-печати. В частности, шаговый двигатель Pololu уже имел встроенные микрошаговые возможности.


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


— Как только вы начинаете поиск новых шаговых двигателей и RAMPS электроники, почему бы не начать сразу с 3D-принтеров вместо этого? Если мы устали с нашей текущей версии биопринтера, то, наверное, из-за выбранного направления. Стоимость, скорее всего, увеличится на порядок и так, хотя…


— Наличие одного печатающая головка имеет свои ограничения. Если бы мы действительно хотели заняться какой-то тканевой инженерией, мы хотели бы иметь возможность печати нескольких типов клеток, и поставить некоторые леса материала между ними. Мы могли бы потенциально положить два струйных картриджей спина к спине. Решением Больших Мальчиков в этой области является использование шприцевых насосов. Представьте себе, что имея несколько шприцевых насосов рядом с принтером, каждый из которых подаёт свой материал на печать через тонкую трубку, а иглы установлены на печатающую головку. Следите за обновлениями…


Теперь слон в посудной лавке… Что, черт возьми, вы делаете с вашим собственным биопринтером?! Я не думаю, что BioCurious будет когда-либо конкурировать с такими компаниями как Organovo с точки зрения печати человеческих тканей или органов. С одной стороны, содержание клеток животных отнимают гораздо больше усилий. С растительными клетками намного легче работать! Не хочу, чтобы всй пошло прахом, так что следите за некоторые из наших следующих инструкций!


Между тем, вот несколько идей:


— Печать градиентов питательных веществ и / или антибиотиков на слой клеток для изучения комбинаторных взаимодействий — или даже для выбора различных изолятов из образца из окружающей среды.

— Печать шаблонов факторов роста на слой эукариотических клеток для изучения клеточной дифференцировки.

— Печать двух или более видов микроорганизмов на различных расстояниях друг от друга, чтобы исследовать метаболические взаимодействий.

— Настройка вычислительной задачи как 2D модель строительства микроорганизма на агаровой пластине.

— Исследование систем реакция-диффузия

— Печать 3D структур с помощью повторной печати слоёв. Теперь вы можете рассмотреть возможность сделать все выше в 3D!

— Распечатать клетки в раствор альгината натрия, на поверхности пропитанной хлористым кальцием, для создания 3D структур геля (по аналогии с процессом spherification в молекулярной гастрономии )


— Есть ещё идеи? Оставьте их в комментариях!


Шаг 9: Добавлено: Так что вы хотите сделать для реальной науки?




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

— Группа Дельфин Дин в университете Клемсон работает на Bioprinting с использованием модифицированного HP DeskJet 500. Определенно посмотрите их видео на JoVE on Creating Transient Cell Membrane Pores Using a Standard Inkjet Printer! Множество информации, о том как иметь дело со с струйными принтер, использующимися в качестве лабораторного оборудования, как очистить картриджи, готовить соответствующие клеточные суспензии, и некоторые интригующие не 3D приложения для печати.


— Мы еще не получили удовлетвореных доказательств того, что картриджи HP C6602 могут печатать эукариотические клетки. Мы считаем, что скорее всего это связано с засорением печатающей головки продуктами распада клеток. Мы будем держать вас в курсе по поводу использования ультразвуковых установок для очистки…


— Печати может занять несколько минут, так что держите принтер в капюшоне, чтобы избежать загрязнения.


— Оберните электроники в пищевую пленку или постройте корпус, чтобы сохранить его сухим и чистым. Все остальное можно протирать с хлоркой после использования.


D'haeseleer, P. (2013, 22 января).


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: