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

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

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

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

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

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

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

 
Источник

Читайте также