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

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

Для воссоздания этого явления я взял кусок чёрного эластана, чтобы он имитировал «ткань пространства-времени», а вокруг него разместил «горизонт событий» — кольцо из белых светодиодов; стoит ещё чуть приблизиться к «чёрной дыре» — и свет наружу не выйдет. Чем дольше вы держите светильник включённым, тем больше разрастается чёрная дыра, вбирая в себя вещество и энергию. В нашей модели для имитации этого эластан натягивает плетёная леска, пропущенная через медную трубу и приводимая в движение расположенным в основании электродвигателем. Регулятор яркости одновременно влияет на скорость натяжения: чем больше света и вещества попадает в чёрную дыру за единицу времени, тем быстрее она растёт, и наоборот. Если светильник выключить, двигатель вращается в обратную сторону, ослабляя натяжение, что является аналогом испарения чёрной дыры за счёт излучения Хокинга.

GIF ~11 МБ

Полезно ли такое художественное представление чёрной дыры кинетической скульптурой с примитивной механикой? Наверное, да, в той же степени, что и комикс «Тим и Бит» про человечков в компьютере. Или моделирование любых физических явлений схемами на операционных усилителях. Хотите более серьёзного, хотя и тоже упрощённого рассказа о чёрных дырах — вот вам это видео на YouTube-канале «Короче говоря».

Если вы желаете собрать такой же светильник, приготовьте:

— чёрную растягивающуюся ткань вроде эластана (он же спандекс, лайкра и др.)
— полудюймовую медную трубу (подойдёт и пластмассовая, если вы не стимпанкер) и три 90-градусных угловых фитинга
— деревянное основание
— плетёную леску
— баллончик с чёрной краской
— Arduino Nano
— 9-вольтовый блок питания
— самодельную белую светодиодную ленту, отличающуюся от стандартной тем, что в ней все светодиоды просто соединены параллельно
— модуль с двумя H-мостами с защитой от сквозного тока L9110
— шаговый двигатель 28BYJ
— тумблер
— переменный резистор
— провода, припой, флюс, макетную плату
— инструменты для радиомонтажа и деревообработки

Отпилите три куска трубы: два по 330 мм и один в 368 мм.



При желании можно отполировать так:



Просверлите три 16-миллиметровых отверстия: два под наклоном примерно в 25 градусов от вертикали — для труб, к которым вы затем прикрепите светодиодное кольцо, затем, отступив от них назад на 25 мм — центральное отверстие для трубы, через которую будет пропущена леска.

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

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

Вырежьте из эластана квадрат и наложите на тонкое кольцо. Проделайте в ткани отверстия для 10 саморезов, затем, продолжая держать её слегка натянутой, накройте толстым кольцом и соедините получившийся «бутероброд» саморезами. Срежьте эластан, оставшийся за пределами.

Привяжите к центру куска эластана плетёной леской бусину.



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

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

Соедините компоненты по прилагаемой схеме.



У шагового двигателя 28BYJ пять проводов, но один из них — красный — никуда подключать не надо. Оранжевый и розовый провода подключите к выходу модуля H-мостов «Motor B», а жёлтый и синий — к выходу «Motor A». Сам модуль подключите к Arduino так:

B1A к D11
B1B к D10
A1A к D9
A1B к D8

Светодиодную ленту (напомню, она самодельная, и у неё все светодиоды просто соединены параллельно) подключите через 100-омный резистор между выходом D3 (или другим выходом с ШИМ, можно выбрать в скетче) и общим проводом. Тумблер подключите таким образом, чтобы он подключал через резистор на 2,2 кОм к входу D2 в нижнем положении общий провод, в верхнем — выход пятивольтового стабилизатора. Интересно, за что автор так не любит подтягивающие резисторы, это позволило бы использовать и выключатели без нормально замкнутых контактов. Один из боковых выводов переменного резистора подключите к общему проводу, другой — к выходу пятивольтового стабилизатора, а средний вывод — к входу A0.

Напечатайте шкив из того же набора STL-файлов, наденьте на вал двигателя, прикрепите леску. Вот и получилось что-то вроде показанного на снимке.



Залейте скетч:

//ДрайверL9110 -> шаговый двигатель 28BYJ

int A1A = 8;
int A2A = 9;
int B1B = 10;
int B2B = 11;
int PotPin = 0; //аналоговый вход A0
int SwitchPin = 2;
int LEDring = 3; //укажите выбранный вами ШИМ-выход
int waitTime; // пауза между шагами (больше нуля)
int PotVal; //сигнал с переменного резистора
int SwitchVal;
int intensity;

//укажите геометрические параметры собранной вами конструкции
float pulleyRadius = 1.4;   //радиус шкива в см
float maxStringContraction = 7.0;   //максиальная длина, на которую можно натягивать ткань, в см
float stepsPerRevolution = 2048.0; //количество шагов на оборот двигателя

float Pi = 3.14159;
float circumference = 2.0 * Pi * pulleyRadius;
float MaxRevs = maxStringContraction / circumference; //максимальное разрешённое количество оборотов
float MaxSteps = MaxRevs * stepsPerRevolution; //максимальное разрешённое количество шагов в одном направлении
int StepLimit = MaxSteps; //переведённое в целое число
int StepCount = 0;

void setup() {
  Serial.begin(9600);
  //Serial.println(circumference);
  //Serial.println(MaxRevs);
  //Serial.println(MaxSteps);
  //Serial.println(StepLimit);
  pinMode(SwitchPin, INPUT);
  pinMode(LEDring, OUTPUT);
  pinMode(A1A, OUTPUT);
  pinMode(A2A, OUTPUT);
  pinMode(B1B, OUTPUT);
  pinMode(B2B, OUTPUT);
}

void step1() {
  digitalWrite(A1A, LOW);
  digitalWrite(A2A, HIGH);
  digitalWrite(B1B, HIGH);
  digitalWrite(B2B, LOW);
  delay(5);
}
void step2() {
  digitalWrite(A1A, LOW);
  digitalWrite(A2A, HIGH);
  digitalWrite(B1B, LOW);
  digitalWrite(B2B, HIGH);
  delay(5);
}
void step3() {
  digitalWrite(A1A, HIGH);
  digitalWrite(A2A, LOW);
  digitalWrite(B1B, LOW);
  digitalWrite(B2B, HIGH);
  delay(5);
}
void step4() {
  digitalWrite(A1A, HIGH);
  digitalWrite(A2A, LOW);
  digitalWrite(B1B, HIGH);
  digitalWrite(B2B, LOW);
  delay(5);
}
void Stop() {
  digitalWrite(A1A, LOW);
  digitalWrite(A2A, LOW);
  digitalWrite(B1B, LOW);
  digitalWrite(B2B, LOW);
  delay(5);
}

void BHgrowth() {
  analogWrite(LEDring, intensity);
  if (StepCount < StepLimit) { //хватит натягивать эластан
    step1();
    step2();
    step3();
    step4();
    StepCount += 1;
  }
  Stop();
}

void HawkingRadiation() {
  analogWrite(LEDring, 0);
  if (StepCount > 0) {
    step3();
    step2();
    step1();
    step4();
    StepCount -= 1;
  }
  Stop();
}

void loop() {
  PotVal = analogRead(PotVal);
  intensity = map(PotVal, 0, 1024, 0, 254);
  SwitchVal = digitalRead(SwitchPin);
  if (SwitchVal == 1) {
    BHgrowth();
    waitTime = 255 - intensity; //чем ярче светим, тем быстрее натягиваем, и наоборот
    if (waitTime < 1){
      waitTime = 1;
    }
  }
  else {
    HawkingRadiation();
    waitTime = 255;
  }
  delay(waitTime);
  Serial.println(waitTime);
  Serial.println(SwitchVal);
}


Готово, можно пользоваться!

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


  1. Malignus
    06.05.2018 09:19
    +2

    Вполне забавная тулза. Хотя и не очень полезная.


    1. tormozedison Автор
      06.05.2018 10:08

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


  1. Serge78rus
    06.05.2018 09:57
    +3

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


    1. tormozedison Автор
      06.05.2018 10:03

      Через 100 Ом больше 50 мА не пойдёт, это для Ардуино впритык, но не фатально. Учитывая, что там не только резистор, но и светодиоды, будет меньше 50. Через ключ, так вообще можно обычной светодиодной лентой управлять.
      А вот H-мосты от стабилизатора на Ардуине он неправильно запитал. Надо отдельный стабилизатор.


      1. Serge78rus
        06.05.2018 10:23
        +6

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


        1. tormozedison Автор
          06.05.2018 10:27

          50 мА будет без светодиодов, если просто выход замкнуть через 100 Ом «на пол». Со светодиодами — на них упадёт около 2,5 В, на резисторе столько же. Стало быть, 25 мА, это даже от «притыка» далеко.


          1. Serge78rus
            06.05.2018 10:58
            +2

            Падение напряжения на открытых выходных ключах при питании от 5В нормируется при токе 20мА, именно этот ток и следует рассматривать как наибольший в номинальном режиме эксплуатации. Читая значение 40мА на ногу из таблицы Absolute Maximum Ratings следует также не забывать читать примечание под таблицей, в котором, в частности говорится:

            Exposure to absolute maximum rating conditions for extended periods may affect device reliability.

            т.е. это параметры отнюдь не для нормальной длительной эксплуатации.


            1. tormozedison Автор
              06.05.2018 11:14

              Там ещё важно, сколько выходов одновременно нагружены большим током. Одно дело один выход нагрузить 20 миллиамперами, другое — несколько. Как-то так.


              1. Serge78rus
                06.05.2018 11:33
                +1

                Совершенно верно. Кстати, в примечание под таблицей Common DC Characteristics есть еще ограничение на суммарный ток групп выводов

                3. Although each I/O port can source more than the test conditions (20mA at VCC
                = 5V, 10mA at VCC = 3V) under steady state conditions (non-transient), the following must be observed:
                3.1. The sum of all IOH, for ports C0 — C5, D0- D4, ADC7, RESET should not exceed 100mA.
                3.2. The sum of all IOH, for ports B0 — B5, D5 — D7, ADC6, XTAL1, XTAL2 should not exceed 100mA.
                If IIOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current greater than the listed test condition.
                4. Although each I/O port can sink more than the test conditions (20mA at VCC
                = 5V, 10mA at VCC =3V) under steady state conditions (non-transient), the following must be observed:
                4.1. The sum of all IOL, for ports C0 — C5, ADC7, ADC6 should not exceed 100mA.
                4.2. The sum of all IOL, for ports B0 — B5, D5 — D7, XTAL1, XTAL2 should not exceed 100mA.
                4.3. The sum of all IOL, for ports D0 — D4, RESET should not exceed 100mA.


          1. GennPen
            06.05.2018 11:14
            +1

            Странный светильник. Он хоть что-нибудь освещает на эти 25 мА?


            1. tormozedison Автор
              06.05.2018 11:16

              Как ни странно. Белые светодиоды весьма эффективны, даже при 1 мА на диод ночник такой выходит, что от стен отражается. Попробуйте, увидите.


              1. GennPen
                06.05.2018 11:19
                +1

                Ну, как ночник согласен, работает, но до нормальной функции светильника далеко не дотягивает.


                1. tormozedison Автор
                  06.05.2018 11:26

                  Не поверите. Стал переделывать один налобник на питание от «банки силы». Там 7 светодиодов параллельно, хотел 100 Ом поставить, нечаянно поставил 1 кОм. Так оно всё вместе 2,5 мА потребляет, 0,36 мА на диод. Некоторые «банки силы» даже за нагрузку это не считают, выключают преобразователь секунд через 10 и всё тухнет. Некоторые работают.
                  И самое интересное, что в таком режиме оно для использования в качестве налобника вполне пригодно. Всё, что под лучом, в темноте неплохо видно. Потом, конечно, поменяю на 100 Ом, чтобы работало с любыми «банками силы», а не с определёнными. Но случайно получившийся опыт многое о кпд белых диодов говорит.


                  1. killik
                    07.05.2018 01:18
                    +1

                    Этот опыт скорее говорит о КПД системы распознавания образов человека ;)


              1. GennPen
                06.05.2018 11:29
                +1

                И еще один вопрос. Почему вы не использовали стандартную библиотеку 'Stepper.h' для управления шаговым двигателем?


                1. tormozedison Автор
                  06.05.2018 11:30

                  Это перевод. Вопросы к Уиллу Доналдсону.


                  1. GennPen
                    06.05.2018 11:32
                    +2

                    Вечно эти метки не вижу.


  1. NLO
    00.00.0000 00:00

    НЛО прилетело и опубликовало эту надпись здесь


  1. wych-elm
    06.05.2018 14:44
    +1

    Off-top: GIF на 11 Мб. Сайт IT-шный, а до сих пор нет применению webm(p), mp4. Как так-то?


    1. DrPass
      06.05.2018 15:26
      +1

      Спорно. Я, например, вообще GIF больше люблю. Он тёплый, ламповый, жмётся так себе, зато для воспроизведения не требует хитровымудренных кодеков и сложных телодвижений со стороны браузера.


  1. Chamie
    06.05.2018 14:56
    +2

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


    1. super-guest
      06.05.2018 15:26
      +1

      Видимо причина в том, что не очень получилось — вот и нет фотки…


  1. OKyJIucT
    06.05.2018 15:47
    +1

    > Чёрные дыры — точки настолько огромной плотности

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


    1. SandroSmith
      06.05.2018 23:24
      +1

      Это если рассматривать чёрную дыру как «всё, что внутри горизонта событий». А так-то, внутре у неё неонка условно точечная масса.


      1. Nuwen
        07.05.2018 02:51
        +1

        Это тоже как посмотреть. Учитывая релятивистское замедление времени, и, как следствие, бесконечно замедлившееся пересечение горизонта событий всеми поглощёнными объектами, масса ЧД будет в основном размазана по её поверхности.


  1. Rohan66
    06.05.2018 20:38
    +2

    Хм… Во всякую х… ню лепят теперь Arduino…
    Тенденция, однако… )))


    1. tormozedison Автор
      06.05.2018 20:53

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


      1. Mike_soft
        07.05.2018 07:31

        Яркость и скорость — проволочным переменным резистором.
        — это чтоб добавить еще и функцию отопителя?


      1. GarryC
        07.05.2018 11:21

        Ну а теперь посчитайте стоимость реверсивного переключателя (с его установкой), добавьте переменные резисторы (с установкой) и сравните со стоимостью Ардуино — результат подсказать?


        1. Mike_soft
          07.05.2018 11:48

          переключатель на парочке РЭС-55 — 2*25=50 рублей, резисторы-одноваттники — по 55, концевики DM-03P по 12 — это против ардуины по 250 выходит даже чуточку дешевле (цены с сайта магазина радиодеталей, если брать в китае, то цены можно половинить)
          Но дело не в этом — для меня вопрос, нужна ли эта неведомая хрень вообще?