Тема предыдущего поста заинтересовала некоторых граждан, и поэтому, решил выложить подробности создания ядерного реактора холодного синтеза Stark Industries с блек дж...
с ООП и нелинейными динамическими системами ;)
На этот раз решил запилить фото немного лучшего качества чем предыдущем посте :)
На чем все собрано:
Головка от видика - 1 шт. (Привет поколению 00);
Стеклянная параллелепипедная форма от ароматической свечи - 1 шт;
Светодиодное кольцо на 12 В - 1 шт;
Arduino nano - 1 шт;
MOSFET IRF520 - 1 шт;
Блок питания 12 В - 1 шт;
USB шнурок - 1 шт.
Для начала необходимо подпилить светодиодное кольцо по внутреннему радиусу, чтобы оно садилось в посадочное место на головке видика. На удивление, садится как влитое. В этом нам поможет наждачная бумага.
Светодиодное кольцо досталось на 12 Вольт, но если вы возьмете на 5В будет только лучше и систему целиком можно будет запитать от одного мобильного зарядника на 5В. Но без мосфета итак не обойтись ибо нагрузка всего LED кольца на 1 пин будет слишком большой.
В схеме подключения я думаю никто не нуждается, ибо всего 2 провода нужно подключить от ардуины к мосфету. Подключение напряжениея питания платы мосфета и нагрузки тоже не сложное и представляет собой 2 провода с блока питания на входе и 2 провода LED кольца на выходе:
Не забываем объединять GND Aeduino и мосфет модуля.
На данном этапе все просто.
Принцип работы модуля заключается в том, чтобы коммутировать напряжение нагрузки в зависимости от наличия напряжения на пине SIG. Грубо говоря, когда там появляется +5 вольт с Arduino - модуль запитывает LED кольцо внешним источником питания (12В).
На этом, вопрос по железу завершен. Выглядит все после сборки так:
Чтобы заставить проект работать достаточно загрузить стандартны скетч Fade или Blink из примеров Arduino IDE и заШИМить ногу к которой подключен модуль мосфета, но это было бы слишком просто :)
Как вам идея немного уразнообразить скучное и однообразное мигание LED кольца теорией нелинейных динамических систем и приемами объектно ориентированного программирования? Ведь мы же хотим эффекта нестабилных химических реакций холодного ядерного синтеза, а не просто так, и чтобы длительность и период каждого мерцания было неповторимым и уникальным.
Для целей получения уникальных значений которые мы потом превратим в яркость светодиодов воспользуемся широко популярной в узких кругах динамической системой Лоренца. Почитать о ней можно, например, тут.
Этот генератор хаоса имеет весьма странный аттрактор:
В общем, если не вдаваться в подробности, теория нелинейных динамических систем гласит, что линии странного аттрактора никогда не пересекутся при достаточной точности вычислительной системы (Количестве знаков после запятой). Это значит, что в любой момент времени система выдаст 3 значения (х, y, z) которые не встречались и не встретятся в такой комбинации больше никогда. Если же это произойдет при каких-то условиях, то тогда можно говорить о длинной, но периодичной природе системы. Эта тема является предметом споров профильных ученых и рассматривать мы ее конечно же не будем.
Для получение этих значений (х, y, z) необходимо записать уравнение системы Лоренца в понятной для ардуины и IDE форме.
Таким образом система из такой (дифференциальная форма):
Превратилась в такую (разностная форма):
Теперь, ардуина сможет решать это уравнение циклически и на каждом цикле скармливать результаты предыдущего цикла этому же уравнению, а наша задача, в промежутке между циклами выхватить эти уникальные решения (dx, dy, dz) для своих коварных целей. Все вроде просто. Но, нужно решить 3 вопроса.
1. Запустить систему с правильными начальными условиями, так как при неправильных система будет генерировать что угодно - от линии с синусоидой до сигнала бесконечной амплитуды.
2. Иметь возможность менять параметры системы(систем) в любой момент времени.
3. Масштабировать систему на множество потребителей. Например, мы хотим мигать не одним или тремя LED кольцами, а бесконечным множеством колец, и при этом чтобы все они мигали с разной интенсивностью. Не писать же нам over9000 уравнений? Никакой памяти не хватит, да и не практично оно как-то.
Для решения этих вопросов воспользуемся методами ООП. Таким образом, уместив всего одно уравнение в класс, мы сможем насоздавать "сколько угодно" уникальных генераторов хаоса которые будут представлены в виде объектов с соответствующими плюшками.
Написанный код с подробными комментариями выложен тут.
Рабочая обстановочка.
Давайте посмотрим что же сгенерировала нам ардуина за несколько секунд:
вроде все как должно быть. Аттрактор типичный.
Теперь посмотрим какими значениями будем устанавливать яркость LED кольца, учитывая что выбрана координата х и она не должна быть меньше 0 (для этого мы возьмем ее модуль):
Как видим, модуль сигнала координаты х весьма плавно изменяет свои значения обеспечивая тем самым плавность нарастания и спадания интенсивности свечения нашего LED кольца, а амплитуда и периодичность ее скачков всегда разная, тем самым обеспечивается всегда разная скорость/стабильность протекания реакций холодного ядерного синтеза.
В статике, рабочий процесс выглядит так:
И на средней мощности - 800 кВт!
Дальше было страшно разгонять ядерный реактор ибо свет в доме напротив начал мигать и оставить квартал без электричества не хотелось ;)
Небольшая гифка
Таким вот получился мой ядерный реактор холодного синтеза Stark Industries с ООП и нелинейными динамическими системами. Теперь он будет украшать рабочий стол.
Оригинальная идея:
На конец моя котейка которой очень интересны мнения тролей. И которая любит читать про ООП, например тут.
Для вас трудился Siegurd, надеюсь пост будет полезен начинающим и не только ардуинщикам! На "идеальность, оптимальность, сексуальность" кода и платформы не претендую.
Баянометр выдавал какую-то стимпанковскую и скайримовскую 0_о дичь)
PS: Пользуясь случаем поздравляю всех пикабушниц с 8 Марта! :)