Внимание! Данная статья относится к механической/электрической машине Голдберга и алгоритмам её работы.



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

Вступление


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

Зимним ноябрьским днём на физическом факультете КНУ им. Тараса Шевченко мы с другом решили “почему бы нам не сделать что-то полезное самим? Мы же физики, для нас не проблема придумать что-то невероятно крутое и сделать это. Всего два дня и готово”. Остаток той пары теории групп был потрачен на попытку придумать, что же мы будем делать.

“Цитируя великих”, можно сказать: “Отсюда, очевидно, следует…”, что не так всё просто даже с определением, чего же мы хотим сделать. В конце концов ответ был найден. Мы хотим включить свет. Но не просто включить его, а включить лишь когда станет темнеть. Вроде простая задача – тут и думать не надо. Достаточно загуглить двухстраничный How To и готово. Но ведь это не интересно нам. Мы хотим включать свет механически. То бишь, нам нужна рука для МКС, как у Говарда Воловица.

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

Неожиданно вспомнив своё детство, проведённое за различными играми-вариациями “The Incredible Machine”, я решил, что будет здорово сделать именно так. Сделать эффектный механизм, а не только полезный и сложный. Посему, добро пожаловать в мир машин Голдберга!

P.S.: Далее по тексту я буду называть наше творение роботом, а не машиной Голдберга для экономии ресурса клавиши Shift.

Машина Голдберга и возможности реализации


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

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

Задача про освещённость


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

Для решения подобной задачи построим некоторый алгоритм А.


Рис. 1. Простой алгоритм определения освещённости

Таким образом нам необходимо всего 2 шага для перехода к дальнейшим действиям:

1. Получить информацию
2. Проверить её

Но, если всё так просто, зачем вообще морочить себе голову? Потому алгоритм легко можно усложнить. Для начала воспользуемся исключительно полезным усложнением. К примеру, увеличением точности (алгоритм Б).


Рис. 2. Усложнённый алгоритм определения освещённости

1. Получение информации
2. Проверка
3. Запрос дополнительных данных, если 2 выполнен
4. Получение дополнительных данных
5. Проверка дополнительных данных
6. Продолжение работы

Благодаря усложнению алгоритма и получению дополнительных данных мы можем увеличить точность. К примеру, раз мы включаем свет, то освещённость увеличится, значит свет надо выключить? Боюсь, мы так зациклимся, а прохожие будут в недоумении, что за азбука Морзе доносится из окна.

Теперь осталось лишь придумать, каким образом механически всё усложнить. Что первое приходит в голову, когда мы задумываемся о свете? Не о белом свете, а о том полезном компоненте нашей жизни, который делает жизнь немного приятнее.

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

Тем не менее, начать нужно с простого, иначе сложное у вас никогда не получится таким, как хочется и будет жить своей жизнью. Итак, 3 примера реализации простого алгоритма определения освещённости.


Рис. 3. Схемы разных реализаций простого алгоритма

I. Электричество и фотоэлемент
Одна из простейших реализаций. Берём, к примеру, фоторезистор (диод, транзистор и т.д.) у которого меняются электрические характеристики в зависимости от освещённости и подключаем к электрической цепи. В результате изменения освещённости изменится падение напряжения на таком резисторе.

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

III. Линза, нитка, груз и таймер (трудно повторяемый)
Схема существенно результативнее предыдущей. При увеличении светового потока, нитка, находящаяся в фокусе линзы будет пережигаться быстрее, что и будет зафиксировано таймером. К сожалению, данный алгоритм требует дополнительный механизм, который выполнял бы полезную работу – поднимал груз и натягивал новую нитку (много и ещё больше раз в день).

Понятное дело, что подобных алгоритмов можно придумать уйму, однако точность каждого следующего вряд ли будет увеличиваться, что нам совершенно не нужно. Наша задача теперь усложнить самый точный из алгоритмов с системой проверки так, чтобы механизм стал немного ближе к “идеально сложному” роботу. Для себя я лично выбрал алгоритм I. Тем не менее, я не утверждаю, что он лучший из всех возможных. Перейдём к модификациям.

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

I.1. Рельсы и перемещение датчика
Ремарка. Для упрощения схемы перемещения будем считать, что в одну сторону перемещения всегда происходят под действием гравитации, а в обратную с помощью внешней силы (поезда, кто же в детстве не мечтал о железной дороге?).

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

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

I.3. Поляризационный или частотный фильтр (цветной светофильтр)
Закрывая датчик фильтром можно определить источник света (солнечный рассеянный или свет от уже включённой лампы). Требует должного знания спектральных или поляризационных характеристик источника освещения (лампы). Закрывать датчик фильтром можно разными методами. К примеру, поворотом фильтра вокруг некоторой оси, перпендикулярной ему, либо опусканием фильтра ближе к сенсору.

“Где же здесь сложный механизм?” – спросите вы. На этом вопрос я могу легко ответить. Наш алгоритм не ограничивает схему физически или философски, то есть никак не ограничивает. Соответственно, что мешает нам учесть, что каждый элемент на блок-схеме – это целая отдельная схема?

Потому перейдём к следующей задаче.

Задача про механическую кнопку, которая убегает


Предположим, дана кнопка, которая постоянно перемещается в одномерном пространстве (перемещается вдоль произвольной, в общем случае, заданной линии). Как на неё нажать?

Зачем нам это нужно? Что бы было эффектнее. Что если кнопка включения света не стоит на месте? К примеру, она может перемещаться по круговой траектории. Рассмотрим схему с использованием специального рычага для нажимания на кнопку.


Рис. 4. Схема работы рычага


Рис. 5. Схема с перемещением кнопки вокруг рычага

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


Рис. 6. Схемы с перемещающимися кнопками и с перемещающимся рычагом

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

Алгоритм, выполняемый в простом случае, идентичный простому алгоритму для определения освещённости. В усложнённом же случае:


Рис. 7. Усложнённый алгоритм выполнения механического задания

Можно заметить, что усложнить алгоритм в данном случае для таких себе “мышц” робота не получится. Мы лишь можем увеличить количество шагов.

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

Вывод


Очевидно, что для реализации механической машины Голдберга нет необходимости в сложном алгоритме. Тем не менее это никак не влияет на само исполнение. Таким образом, машина Голдберга – идеальный представитель линейной, а соответственно и простейшей алгоритмической логики.

P.S.: Я буду очень признателен всем, кто знает варианты реализации алгоритмически сложной машины Голдберга.

Спасибо за внимание!

Комментарии (7)


  1. dMac
    11.12.2015 15:11
    -1

    В каком ВУЗе продают такие вещества?


  1. valemak
    11.12.2015 18:30
    +1

    >>> P.S.: Я буду очень признателен всем, кто знает варианты реализации алгоритмически сложной машины Голдберга.

    Если это алгоритмически несложная машина Голдберга, то Вас тогда ничем не удивишь.


    1. VaskivskyiYe
      11.12.2015 22:48
      +1

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

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

      P.S. Посмотрел ещё раз видео. Очень здорово и эффектно они всё сделали!


    1. Arezus
      15.12.2015 12:02

      Мощно! Вот метки для исполнителей я увидел, но не заметил где же рельсы для камеры, которая облеты делала? Не на квадрике же они снимали… Или потом рельсы просто потерли из видео.


      1. VaskivskyiYe
        15.12.2015 12:53

        Человек с камерой, насколько я понял. Там отражение видно в одном — двух местах


  1. rPman
    11.12.2015 19:37
    +1

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


    1. VaskivskyiYe
      11.12.2015 23:17
      +1

      Спасибо за подсказку! Я попробую воспользоваться таким методом. Хотя это требует довольно большой подготовительной работы. К примеру, изучение эффективности подобного способа измерения освещённости при использовании исключительно рассеянного солнечного света (скорее всего, всё будет не очень позитивно в связи с низкой интенсивностью в ИК диапазоне после рассеивания). К тому же, у меня есть сомнения касательно внешних температурных условий в помещении, где будет использован подобный детектор и сезонных зависимостей светового потока, который будет доходить до датчика