image

Впервые светодиодные ресницы показал дизайнер Тьен Фам на «The Maker Faire» в Сан-Франциско. Это было года два назад. Ну, и почти сразу в пещере алибабы, китайские разбойники начали раздавать аналоги за 400 или даже 300 рублей.

На картинках это две тонкие печатные платы с двенадцатью светодиодами, которые подключены тонкими шлейфами к плате управления с аккумулятором. Светящиеся ресницы крепятся с помощью специального клея поверх обычных или накладных, а контроллер и аккумулятор прячутся в волосах. Технически на первый взгляд ничего сложного. Но! Если присмотреться на плате-реснице 12 светодиодов, а в шлейфе только три провода. При этом светодиоды не только светятся или моргают, но и работают как бегущие огни. Я полдня ломал голову, как это они сделали. Пересмотрел кучу рекламных роликов. И, при замедленном просмотре оказалось, что любой эффект светодиоды выполняют парами. То есть задача тут же сузилась до управления шестью светодиодами по трем проводам. Но все-таки по трём! Шестью по трём! Ещё раз — шестью по трём. И ещё… Потом повторил ещё раз и ответ как-то всплыл сам по себе. Вот он — число всех перестановок из трех элементов равно 6!

Оказывается микроконтроллер перебирает на шлейфе, состоящем из трёх проводников три сигнала: ноль, единицу и третье состояние. Получаем шесть комбинаций/перестановок, а значит, при каждой из перестановок горит один из шести светодиодов. Если они включены по этой схеме:



Для примера зажжем светодиод D2. На А-ноль, на B – третье состояние, на С-единица. Горит только светодиод D2!

Теперь дальше. Ноль и единица на выходах микроконтроллера это легко. А третье состояние? Ещё проще. Устанавливаем режим “вход”. Теперь высокоомный вход, не подтянутый ни к нулю, ни к единицы, практически отключается от схемы управления.

Дальше уже дело кода, динамически управляя выходами микроконтроллера, включаем любое количество светодиодов. Делаем бегущие огни, моргаем, сверкаем, гасим в конце концов.
Ниже код для Arduino с несколькими эффектами для двух ресниц с шестью группами светодиодов в каждой.

Открываем и смотрим
#include <PinChangeInt.h>

#define   LEFT_PIN_1       2
#define   LEFT_PIN_2       3
#define   LEFT_PIN_3       4
#define   RIGHT_PIN_1      5
#define   RIGHT_PIN_2      6
#define   RIGHT_PIN_3      7
#define   KEY_PIN          8

#define   EFFECT_0         0
#define   EFFECT_1         1
#define   EFFECT_2         2
#define   EFFECT_3         3
#define   EFFECT_4         4
#define   EFFECT_5         5
#define   EFFECT_6         6
#define   EFFECT_7         7
#define   EFFECT_LAST      EFFECT_7
uint8_t EffectCnt = 0;

void setup()
{
  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(LEFT_PIN_2, OUTPUT);
  pinMode(LEFT_PIN_3, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_2, OUTPUT);
  pinMode(RIGHT_PIN_3, OUTPUT);
  pinMode(KEY_PIN, INPUT);
  digitalWrite(KEY_PIN, HIGH);
  PCintPort::attachInterrupt(KEY_PIN, &Key_ISR, FALLING);
}
//------------------------------------------------------
void loop()
{
  void (*EFFECTS[])(void) = { Lashes_0, Lashes_1, Lashes_2,
                              Lashes_3, Lashes_4, Lashes_5,
                              Lashes_6, Lashes_7, };    
                              
  (*EFFECTS[EffectCnt])();//EffectCnt

  delay(100);
  Lashes_Off();
  while(!digitalRead(KEY_PIN));
  delay(300);
  PCintPort::attachInterrupt(KEY_PIN, &Key_ISR, FALLING);
}
//------------------------------------------------------
void Lashes_0()
{
  const uint16_t ViewDelay = 5;
  
  while(EffectCnt == EFFECT_0)
  {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
  }
}
//------------------------------------------------------
void Lashes_1()
{
  const uint16_t ViewDelay = 5;
  const uint8_t LashesON = 27;
  const uint16_t PauseDelay = ViewDelay * LashesON * 3;
  
  while(EffectCnt == EFFECT_1)
  {
    for (uint8_t i = 0; i < LashesON; i++)
    {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    }

    Lashes_Off();
    delay(PauseDelay);
  }
}
//------------------------------------------------------
void Lashes_2()
{
  const uint16_t ViewDelay = 5;
  const uint8_t LashesON = 17;
  
  while(EffectCnt == EFFECT_2)
  {
    for (uint8_t i = 0; i < LashesON; i++)
    {
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    }
    
    Lashes_Off();

    for (uint8_t i = 0; i < LashesON; i++)
    {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    delay(ViewDelay);
    }

    Lashes_Off();
  }
}
//------------------------------------------------------
void Lashes_3()
{
  const uint16_t ViewDelay = 70;

  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  pinMode(LEFT_PIN_2, INPUT);
  pinMode(RIGHT_PIN_2, INPUT);
  pinMode(LEFT_PIN_3, OUTPUT);
  pinMode(RIGHT_PIN_3, OUTPUT);
  
  while(EffectCnt == EFFECT_3)
  {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);    
    digitalWrite(LEFT_PIN_3, LOW);    
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, LOW);  
    digitalWrite(LEFT_PIN_3, HIGH);    
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    pinMode(LEFT_PIN_1, INPUT);
    pinMode(RIGHT_PIN_1, INPUT);
    pinMode(LEFT_PIN_2, OUTPUT);
    pinMode(RIGHT_PIN_2, OUTPUT);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);    
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    pinMode(LEFT_PIN_3, INPUT);
    pinMode(RIGHT_PIN_3, INPUT);
    pinMode(LEFT_PIN_1, OUTPUT);
    pinMode(RIGHT_PIN_1, OUTPUT);
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_2, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH); //последняя пара
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_2, LOW);
    delay(ViewDelay);
    pinMode(LEFT_PIN_1, INPUT);
    pinMode(RIGHT_PIN_1, INPUT);
    pinMode(LEFT_PIN_3, OUTPUT);
    pinMode(RIGHT_PIN_3, OUTPUT);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    pinMode(LEFT_PIN_2, INPUT);
    pinMode(RIGHT_PIN_2, INPUT);
    pinMode(LEFT_PIN_1, OUTPUT);
    pinMode(RIGHT_PIN_1, OUTPUT);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
  }
}
//------------------------------------------------------
void Lashes_4()
{
  const uint16_t ViewDelay = 30;
  randomSeed(analogRead(0));
  
  while(EffectCnt == EFFECT_4)
  {
    uint8_t randNumber = random(0, 7);
    switch(randNumber)
    {
      case 0:
        digitalWrite(LEFT_PIN_1, HIGH);
        digitalWrite(LEFT_PIN_3, HIGH);
      break;

      case 1:
        digitalWrite(RIGHT_PIN_1, HIGH);
        digitalWrite(RIGHT_PIN_3, HIGH);
      break;

      case 2:
        digitalWrite(LEFT_PIN_1, HIGH);
        digitalWrite(LEFT_PIN_2, HIGH);
      break;

      case 3:
        digitalWrite(RIGHT_PIN_1, HIGH);
        digitalWrite(RIGHT_PIN_2, HIGH);
      break;

      case 4:
        digitalWrite(LEFT_PIN_2, HIGH);
        digitalWrite(LEFT_PIN_3, HIGH);
      break;

      case 5:
        digitalWrite(RIGHT_PIN_2, HIGH);
        digitalWrite(RIGHT_PIN_3, HIGH);
      break;
    }

    delay(ViewDelay);
    Lashes_Off();
  }
}
//------------------------------------------------------
void Lashes_5()
{
  const uint8_t DelayMin = 1;
  const uint8_t DelayMax = 25;
  const uint8_t LashesON = 6;
  int8_t DelayVal = DelayMin;
  bool Direction = false;
  
  while(EffectCnt == EFFECT_5)
  {
    for (uint8_t i = 0; i < LashesON; i++)
    {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(DelayVal);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(DelayVal);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(DelayVal);
    }

    if (!Direction)
    {
      DelayVal++;
      if (DelayVal == DelayMax + 1)
      {
        DelayVal = DelayMax - 1;
        Direction = true;
      }
    }
    else
    {
      DelayVal--;
      if (DelayVal == DelayMin - 1)
      {
        DelayVal = DelayMin + 1;
        Direction = false;
      }
    }
  }
}
//------------------------------------------------------
void Lashes_6()
{
  const uint16_t ViewDelay = 5;
  const uint8_t LashesON_RED = 45;
  const uint8_t LashesON_RED_BLUE = LashesON_RED;
  
  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  pinMode(LEFT_PIN_2, INPUT);
  pinMode(RIGHT_PIN_2, INPUT);
  pinMode(LEFT_PIN_3, OUTPUT);
  pinMode(RIGHT_PIN_3, OUTPUT);

  for (uint8_t i = 0; i < LashesON_RED; i++)
  {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
  }

  for (uint8_t i = 0; i < LashesON_RED_BLUE; i++)
  {
    pinMode(LEFT_PIN_1, OUTPUT);
    pinMode(RIGHT_PIN_1, OUTPUT);
    pinMode(LEFT_PIN_2, INPUT);
    pinMode(RIGHT_PIN_2, INPUT);
    pinMode(LEFT_PIN_3, OUTPUT);
    pinMode(RIGHT_PIN_3, OUTPUT);
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    pinMode(LEFT_PIN_1, INPUT);
    pinMode(RIGHT_PIN_1, INPUT);
    pinMode(LEFT_PIN_2, OUTPUT);
    pinMode(RIGHT_PIN_2, OUTPUT);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
  }

  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  
  while(EffectCnt == EFFECT_6)
  {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);
  }
}
//------------------------------------------------------
void Lashes_7()
{
  const uint16_t ViewDelay = 70;

  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  pinMode(LEFT_PIN_2, INPUT);
  pinMode(RIGHT_PIN_3, INPUT);
  pinMode(LEFT_PIN_3, OUTPUT);
  pinMode(RIGHT_PIN_2, OUTPUT);
  
  while(EffectCnt == EFFECT_7)
  {
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);    
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_2, HIGH);
    delay(ViewDelay);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_3, HIGH);    
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_2, LOW);
    delay(ViewDelay);    
    pinMode(LEFT_PIN_1, INPUT);    
    pinMode(LEFT_PIN_2, OUTPUT);   
    digitalWrite(LEFT_PIN_2, HIGH);    
    digitalWrite(LEFT_PIN_3, LOW);
    pinMode(RIGHT_PIN_1, INPUT);
    pinMode(RIGHT_PIN_3, OUTPUT);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);    
    digitalWrite(LEFT_PIN_2, LOW);    
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);    
    pinMode(LEFT_PIN_3, INPUT);
    pinMode(RIGHT_PIN_2, INPUT);
    pinMode(LEFT_PIN_1, OUTPUT);
    pinMode(RIGHT_PIN_1, OUTPUT);
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);    
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW); //последняя пара
    delay(ViewDelay);    
    digitalWrite(LEFT_PIN_1, HIGH);
    digitalWrite(RIGHT_PIN_1, LOW);
    digitalWrite(LEFT_PIN_2, LOW);
    digitalWrite(RIGHT_PIN_3, HIGH);
    delay(ViewDelay);    
    pinMode(LEFT_PIN_1, INPUT);
    pinMode(RIGHT_PIN_1, INPUT);
    pinMode(LEFT_PIN_3, OUTPUT);
    pinMode(RIGHT_PIN_2, OUTPUT);
    digitalWrite(LEFT_PIN_3, HIGH);
    digitalWrite(RIGHT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, LOW);
    delay(ViewDelay);    
    digitalWrite(LEFT_PIN_2, HIGH);
    digitalWrite(RIGHT_PIN_3, HIGH);
    digitalWrite(LEFT_PIN_3, LOW);
    digitalWrite(RIGHT_PIN_2, LOW);
    delay(ViewDelay);    
    pinMode(LEFT_PIN_2, INPUT);
    pinMode(RIGHT_PIN_3, INPUT);
    pinMode(LEFT_PIN_1, OUTPUT);
    pinMode(RIGHT_PIN_1, OUTPUT);
    digitalWrite(LEFT_PIN_1, LOW);
    digitalWrite(RIGHT_PIN_1, HIGH);
    digitalWrite(LEFT_PIN_3, HIGH);
  }
}
//----------------------------------------
void Key_ISR()
{
  EffectCnt++;
  if (EffectCnt > EFFECT_LAST)
    EffectCnt = EFFECT_0;

  PCintPort::detachInterrupt(KEY_PIN);
}
//----------------------------------------
void Lashes_Off()
{
  pinMode(LEFT_PIN_1, OUTPUT);
  pinMode(LEFT_PIN_2, OUTPUT);
  pinMode(LEFT_PIN_3, OUTPUT);
  pinMode(RIGHT_PIN_1, OUTPUT);
  pinMode(RIGHT_PIN_2, OUTPUT);
  pinMode(RIGHT_PIN_3, OUTPUT);
  digitalWrite(LEFT_PIN_1, LOW);
  digitalWrite(LEFT_PIN_2, LOW);
  digitalWrite(LEFT_PIN_3, LOW);
  digitalWrite(RIGHT_PIN_1, LOW);
  digitalWrite(RIGHT_PIN_2, LOW);
  digitalWrite(RIGHT_PIN_3, LOW);
}


А это девушка Вероника демонстрирует эти эффекты.


Наверное, для кого-то этот метод управления давно знаком и вы его уже используете. Но всё равно, очень захотел поделится. Ардуинщикам должно понравится!

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


  1. tormozedison
    15.06.2018 19:01

    Это называется «чарлиплексинг».


    1. tolegs Автор
      15.06.2018 21:42
      +1

      Да, спасибо


      1. Popadanec
        16.06.2018 15:02

        Вот от Naomi 'SexyCyborg' Wu реснички, для сравнения


  1. Flagman
    15.06.2018 19:02

    Ресницы не отвиснут? :)


    1. Vnuchok
      15.06.2018 19:19

      На веках мышцы можно накачать))


    1. hasap
      16.06.2018 01:01
      +3

      Провода к светодиодам можно было и потоньше провести.


  1. express
    15.06.2018 19:41

    Чет на полицейские мигалки больше похоже, чем на ресницы.


  1. JC_IIB
    15.06.2018 20:18
    +1

    Оно же в глаза лупит светом, жалко Веронику :)


    1. Sly_tom_cat
      15.06.2018 20:51
      +2

      Нет, не в глаза, смотрите внимательнее как они размещены.
      Со стороны глаза там плата + ресницы накладные… да и с обратной стороны светодиод практически не светится.


      1. JC_IIB
        15.06.2018 21:00
        +1

        По поводу света вопрос снимаем, а нагрев, а масса? :) Веронику все еще жалко!


  1. Sly_tom_cat
    15.06.2018 22:08
    +3

    Нагрев накладных ресниц. Будем считать их радиатором :)


    Масса, которую дамы туда себе навешивают и без диодов не малый. А диоды там малюсенькие и платка — тоже. Веса в этой конструкции от силы пара грамм.


    1. JC_IIB
      15.06.2018 22:31
      +2

      Не, сама идея огонь, конечно. И второй вариант, когда на… ушах(?) — тоже хорош, волосы здорово подсвечены.


      1. questor
        16.06.2018 13:46

        На ушах — это надо в экранизацию какого-нибудь фильма про эльфов.


        1. tormozedison
          16.06.2018 21:04

          То ли «Моделист-конструктор», то ли «Левша». Светодиодные серьги с контактными датчиками мотания головой.


    1. leschenko
      15.06.2018 22:35
      +3

      Кольцо весит всего 7 грамм. Тем не менее, я когда женился, постоянно чувствовал его наличие, когда куда-то шел (махал рукой). Потом привык.


  1. Karlson_rwa
    15.06.2018 22:24

    Мда.
    Надо чтобы они морзянкой что-нибудь передавали.
    Например, WTF?!

    Плюс у китайцев сделано более правильно — на полиимиде. Так вся конструкция получается гибкой и спокойно повторяет изгибы век.


    1. JC_IIB
      15.06.2018 22:34
      +3

      Надо чтобы они морзянкой что-нибудь передавали.


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


      1. ivan2kh
        16.06.2018 01:57
        +4

        image


        1. tormozedison
          16.06.2018 09:09

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


  1. Vanellope
    16.06.2018 09:26
    +1

    До Сексикиборгини не дотягивает.


    1. tormozedison
      17.06.2018 10:47

      А там такая задача и не поставлена. Сказано же: киберзолушка.


      1. Popadanec
        17.06.2018 11:28

        Имелась в виду Naomi 'SexyCyborg' Wu, у неё есть свой канал на ютубе.


        1. tormozedison
          17.06.2018 15:31

          Заполучит 3D-принтер и лазерорез — тоже дотянет.



  1. Elmot
    16.06.2018 16:20

    на ws2813 и подобном можно десятки rgb светодиодов запускать по трем проводам. Да, корпус побольше, но следует учитывать, что там 3 диода на корпус


  1. Cast_iron
    17.06.2018 22:47

    Imho, не лучшее украшение для женщины.


  1. roscomtheend
    18.06.2018 09:30

    А как оно справляется с камерами и системами распознавания лиц?