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

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

  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 годом, новогоднего настроения и изобретательности!

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


  1. gerasimenkoao
    13.12.2019 09:54

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


    1. aivs Автор
      13.12.2019 10:00

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


  1. staticmain
    13.12.2019 11:48

    А как и чем резали оргстекло?


  1. aivs Автор
    13.12.2019 12:04

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


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


  1. Zel
    13.12.2019 12:53
    +1

    фигасе задания в садиках дают! Я со своим экономическим образованием, чувствую, через год загнусь нафиг!


    1. aivs Автор
      13.12.2019 13:20

      В садике просто знают кому какие задания давать ))


  1. COKPOWEHEU
    13.12.2019 14:32

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


    1. aivs Автор
      13.12.2019 14:50

      До этого коммента и не замечал, что контур как то разрезает звезду. Теперь не смогу развидеть )
      Шаговый двигатель продается в соседнем магазине за 125р, уже содержит редуктор. Легко настроить его работу программно без дополнительной механики. Ну и в тот момент в голову пришел только такой двигатель.


      1. COKPOWEHEU
        13.12.2019 17:34

        Без ограничительной механики (да банально пару штифтов приклеить между слоями чтобы друг в друга упирались) или датчика (но это сложнее) нельзя гарантировать совмещение. Даже в случае ШД его могут сдвинуть на пару шагов просто руками.
        Впрочем, если возникнет желание, можно таки добавить датчик нулевого положения (пару контактов между слоями чтобы замыкались в начальном положении), а остальное мерить относительного него. По сравнению с чистой механикой это сложнее, зато не ограничивает эффекты. Скажем, в вашем варианте никто не мешает наружную стрелку крутить больше чем на 1/5.