Светильник «чёрная дыра»

Автор оригинала: Will Donaldson
  • Перевод
  • Tutorial


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

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

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

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);
}


Готово, можно пользоваться!
Поддержать автора
Поделиться публикацией

Комментарии 40

    +3

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

      0
      Полезность примерно такая же, как у модели молекулы из шариков.
      +6
      Интересно, за что автор так не любит подтягивающие резисторы ...
      Кроме того, автор не любит читать документацию и считать, иначе бы подключил светодиоды через транзисторный ключ. В код впечатлительным вообще лучше не смотреть.
        0
        Через 100 Ом больше 50 мА не пойдёт, это для Ардуино впритык, но не фатально. Учитывая, что там не только резистор, но и светодиоды, будет меньше 50. Через ключ, так вообще можно обычной светодиодной лентой управлять.
        А вот H-мосты от стабилизатора на Ардуине он неправильно запитал. Надо отдельный стабилизатор.
          +6
          ATMEGA вообще очень «крепкая» штука, но от этого схемотехнические решения из разряда «впритык, но не фатально» нельзя считать хорошей практикой.
            0
            50 мА будет без светодиодов, если просто выход замкнуть через 100 Ом «на пол». Со светодиодами — на них упадёт около 2,5 В, на резисторе столько же. Стало быть, 25 мА, это даже от «притыка» далеко.
              +2
              Падение напряжения на открытых выходных ключах при питании от 5В нормируется при токе 20мА, именно этот ток и следует рассматривать как наибольший в номинальном режиме эксплуатации. Читая значение 40мА на ногу из таблицы Absolute Maximum Ratings следует также не забывать читать примечание под таблицей, в котором, в частности говорится:
              Exposure to absolute maximum rating conditions for extended periods may affect device reliability.

              т.е. это параметры отнюдь не для нормальной длительной эксплуатации.
                0
                Там ещё важно, сколько выходов одновременно нагружены большим током. Одно дело один выход нагрузить 20 миллиамперами, другое — несколько. Как-то так.
                  +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.
                    0
                    Задавал вопрос на профильном форуме, ответов было много, но не внушили доверия, при всём уважении к отвечавшим. Могу ли я нагрузить одновременно 20 выходов Ардуино про микро по 10 мА на каждый, т.е. в сумме 200 мА на корпус. Чип 168 один из самых мелких. Режим аварийный по сути и при работе маловероятен, но для перестраховки хотелось бы знать.
                      0
                      по даташиту — (28. Electrical Characteristics 28.1 Absolute Maximum Ratings) максимальный ток как раз 200 мА. с примечанием «длительная эксплуатация в этом режиме может повлиять на надежность»
                        +1
                        Кроме того, надо учесть примечание под таблицей Common DC Characteristics, касающееся ограничения суммарного тока не группы выводов, на которое я ранее ссылался
                          +1
                          согласен. но если по 10 на ногу (а не до 40) — то в ограничение «100 на группу» вписывается.
                +1
                Странный светильник. Он хоть что-нибудь освещает на эти 25 мА?
                  0
                  Как ни странно. Белые светодиоды весьма эффективны, даже при 1 мА на диод ночник такой выходит, что от стен отражается. Попробуйте, увидите.
                    +1
                    Ну, как ночник согласен, работает, но до нормальной функции светильника далеко не дотягивает.
                      0
                      Не поверите. Стал переделывать один налобник на питание от «банки силы». Там 7 светодиодов параллельно, хотел 100 Ом поставить, нечаянно поставил 1 кОм. Так оно всё вместе 2,5 мА потребляет, 0,36 мА на диод. Некоторые «банки силы» даже за нагрузку это не считают, выключают преобразователь секунд через 10 и всё тухнет. Некоторые работают.
                      И самое интересное, что в таком режиме оно для использования в качестве налобника вполне пригодно. Всё, что под лучом, в темноте неплохо видно. Потом, конечно, поменяю на 100 Ом, чтобы работало с любыми «банками силы», а не с определёнными. Но случайно получившийся опыт многое о кпд белых диодов говорит.
                        +1

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

                          0
                          Светодиодов тоже. Лампы накаливания при той же суммарной потребляемой мощности дали бы намного меньше видимого света.
                          0
                          Заинтересовала ваша трактовка, специально сейчас посмотрел возможные варианты перевода. Правильней, я думаю, будет «банк энергии».
                            0
                            Это общепринятое название. Как лошадиная сила, хотя она — единица не силы.
                        +1
                        И еще один вопрос. Почему вы не использовали стандартную библиотеку 'Stepper.h' для управления шаговым двигателем?
                          0
                          Это перевод. Вопросы к Уиллу Доналдсону.
                            +3
                            Вечно эти метки не вижу.
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Off-top: GIF на 11 Мб. Сайт IT-шный, а до сих пор нет применению webm(p), mp4. Как так-то?
                  +2
                  Спорно. Я, например, вообще GIF больше люблю. Он тёплый, ламповый, жмётся так себе, зато для воспроизведения не требует хитровымудренных кодеков и сложных телодвижений со стороны браузера.
                  +5
                  И хоть бы одна иллюстрация того, как это выглядит «с лица» иллюстрирующая, чем это вообще похоже на чёрную дыру.
                    +3
                    Видимо причина в том, что не очень получилось — вот и нет фотки…
                    +1
                    > Чёрные дыры — точки настолько огромной плотности

                    Это не всегда так: плотность черной дыры обратно пропорциональна ее диаметру. Например, плотность сверхмассивных черных дыр намного меньше плотности воды при нормальных условиях.
                      +1
                      Это если рассматривать чёрную дыру как «всё, что внутри горизонта событий». А так-то, внутре у неё неонка условно точечная масса.
                        +1
                        Это тоже как посмотреть. Учитывая релятивистское замедление времени, и, как следствие, бесконечно замедлившееся пересечение горизонта событий всеми поглощёнными объектами, масса ЧД будет в основном размазана по её поверхности.
                      +3
                      Хм… Во всякую х… ню лепят теперь Arduino…
                      Тенденция, однако… )))
                        0
                        Согласен, я бы такое сделал на коллекторном двигателе с редуктором и реверсивном переключателе. Прекращение натяжения и ослабления — концевыми выключателями. Яркость и скорость — проволочным переменным резистором.
                          +1
                          Яркость и скорость — проволочным переменным резистором.
                          — это чтоб добавить еще и функцию отопителя?
                            +1
                            Ну а теперь посчитайте стоимость реверсивного переключателя (с его установкой), добавьте переменные резисторы (с установкой) и сравните со стоимостью Ардуино — результат подсказать?
                              +1
                              переключатель на парочке РЭС-55 — 2*25=50 рублей, резисторы-одноваттники — по 55, концевики DM-03P по 12 — это против ардуины по 250 выходит даже чуточку дешевле (цены с сайта магазина радиодеталей, если брать в китае, то цены можно половинить)
                              Но дело не в этом — для меня вопрос, нужна ли эта неведомая хрень вообще?
                                0
                                Реверсивный переключатель для коллекторного двигателя можно сделать из тумблера ТП1-2.
                                  +1
                                  это если вручную переключать
                                    0
                                    Так и в оригинале вручную переключают.

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

                        Самое читаемое