Led Ring

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Salk, 20 ноя 2014.

  1. Salk

    Salk Гик

    Добрый время суток. Возникла идея сделать LED Ring (светодиодное кольцо), которое призвано будет украсить лицевую панель самосбороной акустической системы (2.1), вокруг ручек регуляторов (потенциометров) громкости/НЧ/ВЧ. Идея возникла после просмотра подобных видео:


    Но только идея, т.к. покупка подобных готовых модулей не приемлема, т.к. мои регуляторы, по определенным причинам, будут обычными переменными резисторами, а не энкодерами. Эти переменные резисторы не стоят напрямую в звуковом тракте, а подключены к +5 В и их показания считываются от 0 до 1023, как в примере "управление яркостью светодиода с помощью потенциометра".
    Так же имеется сама arduino Uno и всего три свободных пина на каждую регулировку (гром./нч/вч). Вопрос, собственно, в реализации подобного девайса. Самый легкий способ, который видится, это - подключение smd светодиодов параллельно и подключение их к ШИМ-пинам на arduino, переконвертировав значения в 0-255. Но в этом случае все светодиоды будут одновременно гореть, просто ярче или тусклее в зависимости от положения ручки регулятора.
    А вот возможно ли сделать подобное, как на видео, чтобы светодиоды загорались поочередно, имея всего один ШИМ-пин arduino для одного регулятора и обычные переменные резисторы? Может на помощь придет какая-то специализированная микросхема, которая имеет несколько выходов и умеющая их переключать? Или что-то ещё :)
    Буду признателен любому ответу. Спасибо.
     
  2. Unixon

    Unixon Оракул Модератор

    Arduino Mega ?
     
  3. Salk

    Salk Гик

    Нет, Uno.
     
  4. Unixon

    Unixon Оракул Модератор

    Ну так я и говорю, возьмите мегу и забудьте про дефицит выводов.
     
  5. Salk

    Salk Гик

    А, понял :)
    Согласен, мега хорошая вещь, но в проекте, который я собираю, всех пинов меги не задействовать, поэтому думал может найдется простой способ реализации такой идеи.
    Значит придется делать банальное управление яркостью всего "кольца"... ну тоже не плохо, наверное ... :rolleyes:
     
  6. Unixon

    Unixon Оракул Модератор

    Ну вы, конечно, можете взять вторую Uno/Nano/Mini/Micro/Leo и организовать между ними связь по единственному проводу, но это будет какое-то уже извращение, когда рядом есть более подходящая железка.
     
  7. geher

    geher Гуру

    А ШИМ - это обязательно?
    Два сдвиговых регистра каскадом, подключенные к пинам SPI.
    Вгружать на эту конструкцию значение 0х0000FFFF>>(15-value) (две посылки по байту), где value - уровень, считанный из аналогового входа и перенесенный в диапазон от 0 до 15.
     
    Salk нравится это.
  8. а куда остальные порты делись?
     
  9. geher

    geher Гуру

    Если надо три таких устройства подключить, то каскад сделать из шести регистров. Придется записывать три пары байт, по паре для каждого устройства.
    Как раз три пина и придется задействовать.
     
    alp69 и Salk нравится это.
  10. Salk

    Salk Гик

    Пост #32 - описание собираемого мною устройства. Движется потихоньку :)
    Управление аналоговым ТБ с помощью Arduino

    Нет, пины могут быть практически любые.
    Насчет сдвиговых регистров, идея хорошая и даже очень хорошая :) И требуются всего три пина, как раз, то что нужно :)
    Порылся в инете, самый доступный и дешевый регистр 74HC595 - имеет 8 выходов. Если делать по два регистра, как Вы говорите, то получится 16 светодиодов на один регулятор. Да, круто, спасибо, возьму на вооружение, в ближайшее время придется познакомится с ними по ближе :)

    Для удобной работы с ними лучше всего применять библиотеку <SPI.h> ?
    Нашел интересную статью, посвященную регистрам и каскадному подключению, в частости на arduino:
    http://robocraft.ru/blog/arduino/519.html
    Ещё раз спасибо.
     
  11. экран можно подцепить на i2c, как и более другой расширитель портов, вроде PCF8574
     
  12. Salk

    Salk Гик

    Да, я об этом тоже подумываю, если честно, недавно только об этом узнал, что можно вместо 6 пинов на экран задействовать всего два, аж глаза на лоб вылезли :)
    Нашел ещё пример использования регистра на Вики:
    http://wiki.amperka.ru/конспект-arduino:счетчик-нажатий
    Без всякого SPI.h
    Я попробую реализовать данную идею в жизнь, если возникнут вопросы, касательно скетча, думаю будет правильно создать новую тему в подходящем для этого месте - Arduino & Shields, или можно здесь продолжить? В данный момент регистров нет под рукой, но буду покупать :)
    Как я понял для одного регулятора нужно сконфигурировать цепочку битов из 16 (0-15) и функцией
    shiftOut() передать их регистру, по два регистра на одну регулировку.
    Спасибо ещё раз.
     
    Последнее редактирование: 21 ноя 2014
  13. sanik

    sanik Гик

    А еще есть TLC5940 LED driver на одной 16 каналов ШИМ можно очень много подключать друг к другу. И управляется с библиотекой просто.
     
  14. Salk

    Salk Гик

    Ура!!! Получилось! Дошли руки, наконец-то :) Спасибо geher за помощь.
    Пока черновой вариант, SMD светодиодов нужного размера и цвета в магазине не оказалось, буду искать.
    Осталось отмыть от канифоли, поставить SMD светодиоды, вставить переменный резистор в отверстие по середине и Ммм-м... конфЭтка :D Финальную версию, так же опубликую тут.
    Предполагается задействовать 15 светодиодов на один переменный резистор. Сдвиговые регистры - 74HC595, по два на переменный; выводы регистра задействованы в таком порядке: Q0-Q7 первый регистр и Q0-Q6 второй (Q7 не подключен). Скетч для одного переменного, которым я тестировал:
    Код (Text):
    #define DATA_PIN    13 // пин данных (англ. data); DS
    #define LATCH_PIN  12 // пин такта (англ. clock); STcp
    #define CLOCK_PIN  11 // пин строба (англ. latch); SHcp

    // пины регулировок (потенциометров)
    #define POT_VOL A5

    int potV; // здесь хранится показания потенциометра (0-16)
    unsigned int ledV; // полученная комбинация битов, для отправки на регистры

    void setup()
    {
      pinMode(POT_VOL, INPUT);
      pinMode(DATA_PIN, OUTPUT);
      pinMode(CLOCK_PIN, OUTPUT);
      pinMode(LATCH_PIN, OUTPUT);
    }

    void loop()
    {
      // данные с потенциометра переконвертированные в диапазон 0-16
      potV = map(analogRead(POT_VOL), 0, 1023, 0, 16);
      // формула: биты сдвигаются вправо относительно показаний с потенциометра
      ledV = 0x0000FFFF >>((16-potV));
      digitalWrite(LATCH_PIN, LOW);
      // задвигаем (англ. shift out) байт-маску бит за битом,
      // начиная с младшего (англ. Least Significant Bit first)
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ledV&0xFF);
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, (ledV&0xFF00)>>8);
      // чтобы переданный байт отразился на выходах Qx, нужно
      // подать на пин строба высокий сигнал
      digitalWrite(LATCH_PIN, HIGH);
    }
    Для трех переменных и/или более просто добавить:
    Код (Text):
    digitalWrite(LATCH_PIN, LOW);
      // задвигаем (англ. shift out) байт-маску бит за битом,
      // начиная с младшего (англ. Least Significant Bit first)
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ledV&0xFF);
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, (ledV&0xFF00)>>8);

      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ledL&0xFF);
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, (ledL&0xFF00)>>8);

      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ledH&0xFF);
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, (ledH&0xFF00)>>8);
      // чтобы переданный байт отразился на выходах Qx, нужно
      // подать на пин строба высокий сигнал
      digitalWrite(LATCH_PIN, HIGH);
    Для теста, поставил 8 обычных светодиодов, по 4 на каждый регистр, т.е. через один. Как то так :)
     

    Вложения:

  15. ANV

    ANV Гуру

    В чем плату разводили?
     
  16. Salk

    Salk Гик

    В Sprint Layout 6.0
     
  17. ANV

    ANV Гуру

    Как впечатления от него? И как он по сравнению с Eagle?
     
  18. Salk

    Salk Гик

    К сожалению я не пользовался Eagle, сразу начал с Sprint Layout, начинал с 4.0 версии. Мне это программа кажется очень удобной, интуитивно понятной. Очень легка в освоении, как для новичков и имеет все необходимое для работы с более сложной разводкой платы..
     
    Последнее редактирование: 5 дек 2014
  19. Unixon

    Unixon Оракул Модератор

    А где там принципиальная схема устройства рисуется и как вы проверку соответствия разводки принципиальной схеме осуществляете? В SprintLayout ERC/DRC уже есть?
     
  20. Salk

    Salk Гик

    Нигде. Принципиальные схемы я рисую в sPlan 7.0. Сначала рисую принципиальную, а после по ней уже ПП в Layout.
    Никакой автоматики тут нет, все в ручную. В Layout есть "прозвонка" - подсвечивает весь проводник и все что с ним соприкасается. Так и проверяется разводка ПП на соответствие принципиальной.
    Ring.jpg
    Так же в программе есть "автотрассировка", которая.., в принципе, должна облегчить разводку плат и сократить время, но я ей не доверяю, проще и лучше самому, провести проводник, пусть это займет больше времени.
    А что сама тема "Led Ring" никому не интересна ? :D