Звезда-трансформер на ёлку



    В предверии нового года в детском саду задали сделать игрушку на ёлку. Я решил помочь и взять на себя техническую часть по изготовлению поделки, а дизайнерскую оставить ребенку. Т.к. я не ищу легких путей, то принял решение сделать максимально технологическую игрушку и что-бы это была не просто светяшка в шаре. Не знаю как, но в моей голове сразу созрела идея сделать звезду-трансформер с использование шагового двигателя и адресных светодиодов.

    Используемые материалы:

    1. Оргстекло для торцевой подсветки
    2. Шаговый двигатель 28BYJ-48
    3. Драйвер на микросхеме ULN2003
    4. Микроконтроллер ATTINY85
    5. Светодиодная лента WS2812

    Если посветить в край оргстеклу для торцевой подсветки, то будут светиться не только края, но и сама плоскость. Из-за неоднородности внутренней структуры такого оргстекла свет внутри множество раз переотражается и тем самым подсвечивается плоскость. Распечатал на листе A4 лекало и вырезал 2 части звезды.

    image



    В одной из частей примерил шаговый двигатель, нашел центр вращения и вырезал круглое отверстие, в которое вклеил кусочек ленты WS2812 с 5 светодиодами. На вал двигателя прикрепил вторую часть и все это дело подключил к Arduino.



    Стандартная библиотека Stepper для управления шаговым двигателем содержит баг и не позволяет крутить против часовой стрелки, поэтому я использовал библиотеку TinyStepper_28BYJ_48. Для анимации светодиодов использовал библиотеку Adafruit_NeoPixel.

    Скетч для звезды-трансформер
    // Documentation for this library can be found at:
    // github.com/Stan-Reifel/TinyStepper_28BYJ_48
    //
    //
    // This library requires that the stepper motor be connected to the Arduino
    // using ULN2003 driver board.

    // ***********************************************************************

    #include <TinyStepper_28BYJ_48.h>
    #include <Adafruit_NeoPixel.h>

    // NEO Pixel configuration
    #define PIN 0
    #define LEDS_COUNT 5
    #define RED strip.Color(255, 0, 0)
    #define GREEN strip.Color(0, 255, 0)
    #define BLUE strip.Color(0, 0, 255)
    #define WHITE strip.Color(255, 255, 255)

    // pin assignments, any digital pins can be used
    #define MOTOR_IN1_PIN 1
    #define MOTOR_IN2_PIN 2
    #define MOTOR_IN3_PIN 3
    #define MOTOR_IN4_PIN 4

    // create the stepper motor object
    TinyStepper_28BYJ_48 stepper;
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS_COUNT, PIN, NEO_GRB + NEO_KHZ800);

    void setup() {
    // connect and configure the stepper motor to its IO pins
    stepper.connectToPins(MOTOR_IN1_PIN, MOTOR_IN2_PIN, MOTOR_IN3_PIN, MOTOR_IN4_PIN);
    // set the speed and acceleration rates for the stepper motor
    stepper.setSpeedInStepsPerSecond(256);
    stepper.setAccelerationInStepsPerSecondPerSecond(512);

    strip.begin();
    strip.show(); // Initialize all pixels to 'off'
    }

    void loop() {
    // Rotate the motor in the forward direction one revolution
    stepper.moveRelativeInSteps(410);
    for (byte i = 0; i < 20; i++){
    fadeInOut(0xff, 0x00, 0x00); // red
    }

    // rotate backward 1 rotation, then wait 1 second
    stepper.moveRelativeInSteps(-410);
    for (byte i = 0; i < 20; i++){
    fadeInOut(0x00, 0x00, 0xff); // blue
    }
    }

    void fadeInOut(byte red, byte green, byte blue){
    float r, g, b;

    for(int k = 0; k < 256; k=k+1) {
    r = (k/256.0)*red;
    g = (k/256.0)*green;
    b = (k/256.0)*blue;
    setAll(r,g,b);
    strip.show();
    delay(5);
    }

    for(int k = 255; k >= 0; k=k-2) {
    r = (k/256.0)*red;
    g = (k/256.0)*green;
    b = (k/256.0)*blue;
    setAll(r,g,b);
    strip.show();
    delay(5);
    }
    }

    void setAll(byte red, byte green, byte blue) {
    for(int i = 0; i < LEDS_COUNT; i++ ) {
    strip.setPixelColor(i, strip.Color(red, green, blue));
    }
    strip.show();
    }


    Оно живое!!!

    Теперь нужно было все компактно собрать и вместо Arduino использовать ATTINY85. Руководствуясь инструкцией с сайта create.arduino.cc можно легко и просто зашить ATTINY85 ардуиновским скетчем. Из 8 ног я использовал 7, 4 на шаговый двигатель, 1 на светодиоды, 2 на питание, свободный остался RESET.



    Для крепления на макушку елки отлично подошла ручка от вантуза.



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



    Всех с наступающим 2020 годом, новогоднего настроения и изобретательности!

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 247 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

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

      +1

      В общем, неплохо, но гораздо интересней и красивей было-бы реализовать звезду Сварога, разворачивающуюся из двух лучей в разных направлениях

        +1

        Хороша идея и реализация понятна, нужно будет 2 шестерни использовать.

        0
        А как и чем резали оргстекло?
          0
          У меня есть типа такого резака по пластику


          Но обычно я им пользуюсь от безысходности, когда нет времени заказать лазерную резку, которая стоит копейки.
            +1
            фигасе задания в садиках дают! Я со своим экономическим образованием, чувствую, через год загнусь нафиг!
              +1
              В садике просто знают кому какие задания давать ))
              +1
              На мой взгляд зря контуры выделили, теперь бросается в глаза что звезда составная. Возможно, стоит добавить фальшивых «краев» по пересечениям всех линий, чтобы выделить центральный пятиугольник и лучи.
              Ну и не совсем понятно зачем был использован шаговый двигатель, если можно было обойтись коллекторным, а в заднем куске оргстекла сделать паз, который бы ограничивал угол поворота. Гораздо точнее бы получилось совмещение
                0
                До этого коммента и не замечал, что контур как то разрезает звезду. Теперь не смогу развидеть )
                Шаговый двигатель продается в соседнем магазине за 125р, уже содержит редуктор. Легко настроить его работу программно без дополнительной механики. Ну и в тот момент в голову пришел только такой двигатель.
                  0
                  Без ограничительной механики (да банально пару штифтов приклеить между слоями чтобы друг в друга упирались) или датчика (но это сложнее) нельзя гарантировать совмещение. Даже в случае ШД его могут сдвинуть на пару шагов просто руками.
                  Впрочем, если возникнет желание, можно таки добавить датчик нулевого положения (пару контактов между слоями чтобы замыкались в начальном положении), а остальное мерить относительного него. По сравнению с чистой механикой это сложнее, зато не ограничивает эффекты. Скажем, в вашем варианте никто не мешает наружную стрелку крутить больше чем на 1/5.

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

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