Оглавление:

Интерактивный светодиодный журнальный столик Arduino: 6 шагов (с изображениями)
Интерактивный светодиодный журнальный столик Arduino: 6 шагов (с изображениями)

Видео: Интерактивный светодиодный журнальный столик Arduino: 6 шагов (с изображениями)

Видео: Интерактивный светодиодный журнальный столик Arduino: 6 шагов (с изображениями)
Видео: LED Coffee Table - Snake 2024, Июль
Anonim
Image
Image
Интерактивный светодиодный журнальный столик Arduino
Интерактивный светодиодный журнальный столик Arduino

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

Датчики приближения состоят из фотодиодов и ИК-излучателей. Излучатели используют инфракрасный свет (который не может видеть человеческий глаз), чтобы светить за пределы стола, а фотодиоды принимают инфракрасный свет, отраженный от объекта. Чем больше отражается света (чем ближе объект), тем больше колеблется напряжение, исходящее от фотодиодов. Это используется как индикатор, указывающий, какой узел должен загореться. Узлы представляют собой набор светодиодов ws2812b и датчик приближения.

В прилагаемом видео рассматривается весь процесс сборки, а ниже я опишу более подробную информацию.

Запасы

  1. Светодиодные лампы ws2812b -
  2. Блок питания 5 В -
  3. Любой Arduino, который я использовал 2560 -
  4. Фотодиоды
  5. ИК-излучатели
  6. Резисторы 10 Ом
  7. Резисторы 1 МОм
  8. Конденсаторы 47 пФ
  9. CD4051B Мультиплексоры
  10. Регистры сдвига SN74HC595
  11. ULN2803A Массивы Дарлингтона
  12. Любая подложка для использования в качестве большой доски для светодиодов, я использовал композитный картон из домашнего склада.

Шаг 1. Создайте плату и вставьте светодиоды

Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды
Создайте плату и вставьте светодиоды

Первым делом я создал доску, на которой будут светодиоды, которые мы разместим внутри журнального столика. Я использовал кусок бумажного композитного картона из домашнего склада и отрезал его до нужных размеров для журнального столика, который у меня был. Отрезав плату до нужного размера, я просверлил все отверстия, в которых собирались светодиоды. На самой плате было 8 рядов и 12 столбцов светодиодов ws2812b, разделенных на 3 дюйма друг от друга, и они были прикреплены в виде змеевика. Я использовал горячий клей, чтобы закрепить их на месте.

Мне также пришлось просверлить отверстия в центре того, что станет узлом: 4 светодиода ws2812b, составляющих квадрат, 2 фотодиода и 2 ИК-излучателя в меньшем квадрате в центре этого узла. Эти 4 отверстия в центре узла будут пятнами для фотодиодов и инфракрасных излучателей (по 2 каждого). Я чередовал их, чтобы обеспечить максимальную экспозицию, и разместил их на расстоянии около 1 дюйма друг от друга в центре каждого узла. Мне не нужно было приклеивать их на место горячим клеем, я просто согнул провода с другой стороны, чтобы убедиться, что они не выходят с другой стороны. Я также позаботился о том, чтобы положительный и отрицательный концы сгибались в определенных направлениях, чтобы они были правильно сориентированы в цепи. Все положительные выводы были на левой стороне задней части платы, а все отрицательные выводы были на правой стороне платы.

Шаг 2: понимание схемы

Понять схему
Понять схему
Понять схему
Понять схему
Понять схему
Понять схему

Примечание: все анимированные рисунки не соответствуют реализации (некоторые контакты Arduino отличаются, и я подключу несколько последовательно, подробнее об этом позже). Конечный результат был немного другим из-за сложности схемы, но все анимированные схемы служат отличной базой для понимания того, как создавать прототипы каждой детали. Обычная принципиальная схема и принципиальная схема такие же, как на печатной плате, используемой в проекте.

Код платы, содержащий проект KiCad и файлы gerber, можно найти здесь: https://github.com/tmckay1/interactive_coffee_tabl…, на случай, если вы захотите заказать печатные платы самостоятельно и создать аналогичный проект. Я использовал NextPCB для создания плат.

В основном эта таблица состоит из трех различных схем. Первый, который мы не будем вдаваться в подробности, представляет собой простую схему, питающую светодиоды ws2812b. Сигнал данных PWM отправляется от Arduino на светодиодные лампы ws2812b и контролирует, какие цвета и где отображаются. Мы используем светодиоды ws2812b, поскольку они адресуются индивидуально, поэтому мы сможем контролировать, какие светодиоды включать, а какие выключать. Светодиоды ws2812b питаются от внешнего источника питания 5 В, поскольку одной только Arduino не хватает мощности для включения всех ламп. На прилагаемой анимированной диаграмме используется подтягивающий резистор на 330 Ом, однако я не использую его в своей сборке.

Вторая схема включает ИК-излучатели. Эта схема использует регистр сдвига для управления массивом Дарлингтона, который передает питание на ИК-излучатели. Сдвиговый регистр - это интегральная схема, которая может отправлять сигналы HIGH и LOW на несколько контактов только с небольшого количества контактов. В нашем случае мы используем регистр сдвига SN74HC595, которым можно управлять с 3 входов, но который управляет до 8 выходами. Преимущество использования этого с arduino заключается в том, что вы можете последовательно подключить до 8 регистров сдвига подряд (arduino может обрабатывать только до 8 из них). Это означает, что вам нужно всего 3 контакта от Arduino для включения и выключения 64 ИК-излучателей. Массив Дарлингтона позволяет вам питать устройство от внешнего источника, если входной сигнал ВЫСОКИЙ, или выключать питание для этого устройства, если входной сигнал НИЗКИЙ. Итак, в нашем примере мы используем массив Дарлингтона ULN2803A, который позволяет внешнему источнику питания 5 В включать и выключать до 8 ИК-излучателей. Мы используем резистор 10 Ом с последовательно включенными ИК-излучателями, чтобы получить максимальную силу тока от ИК-излучателей.

Третья схема использует мультиплексор для приема нескольких входных сигналов от фотодиодов и отправляет выходной сигнал в виде сигнала данных. Мультиплексор - это устройство, которое используется для приема нескольких входов, с которых вы хотите читать, и для чтения с этих входов требуется только несколько контактов. Он также может делать обратное (демультиплексирование), но мы здесь не используем его для этого приложения. Таким образом, в нашем случае мы используем мультиплексор CD4051B для приема до 8 сигналов с фотодиодов, и нам нужно только 3 входа для считывания этих сигналов. Кроме того, мы можем последовательно подключить до 8 мультиплексоров (arduino может обрабатывать только до 8 из них). Это означает, что Arduino может считывать с 64 сигналов фотодиода всего с 3 цифровых контактов. Фотодиоды ориентированы с обратным смещением, что означает, что вместо ориентации в нормальном направлении с положительным выводом, подключенным к источнику положительного напряжения, мы назначаем отрицательный вывод на источник положительного напряжения. Это эффективно превращает фотодиоды в фоторезисторы, сопротивление которых меняется в зависимости от количества получаемого света. Затем мы создаем делитель напряжения для считывания напряжения, зависящего от переменного сопротивления фотодиодов, добавляя к земле резистор с сопротивлением 1 МОм. Это позволяет нам получать более высокие и более низкие напряжения на Arduino в зависимости от того, сколько ИК-света получают фотодиоды.

Я следил за большей частью этого дизайна от другого человека, который сделал это здесь: https://www.instructables.com/Infrared-Proximity-S … В этом дизайне они также добавили конденсатор 47 пФ, как и мы, напротив резистора 1 МОм. используется для создания делителя напряжения с фотодиодами. Причина, по которой он добавил это, заключалась в том, что он включал и выключал ИК-излучатели с помощью ШИМ-сигнала, и это вызвало небольшое падение напряжения на фотодиодах, когда ИК-излучатели были немедленно включены. Это заставляло фотодиоды изменять сопротивление, даже когда они не получали больше ИК-света от объекта, потому что ИК-излучатели использовали тот же источник питания 5 В, что и фотодиоды. Конденсатор использовался для проверки отсутствия падения напряжения при включении и выключении ИК-излучателей. Изначально я планировал использовать ту же стратегию, но у меня не хватило времени на ее тестирование, поэтому я оставил ИК-излучатели всегда включенными. Я хотел бы изменить это в будущем, но пока я не изменю код и схему, прямо сейчас печатная плата предназначена для постоянного включения ИК-подсветки, и я все равно сохранил конденсаторы. Вам не понадобится конденсатор, если вы используете эту конструкцию печатной платы, но я собираюсь представить другую версию печатной платы, которая принимает дополнительный ввод в сдвиговый регистр, который позволит вам включать и выключать ИК-излучатели. Это значительно сэкономит на энергопотреблении.

Вы можете проверить прилагаемые анимированные диаграммы для настройки прототипа для тестирования на вашем Arduino. Также имеется более подробная цветная схема для каждой схемы, которая описывает настройку и ориентацию электронных устройств. На прилагаемой схеме печатной платы у нас есть 4 общих схемы, 2 схемы, используемые для включения ИК-излучателей, и 2 схемы для считывания с фотодиодов. Они ориентированы на печатной плате 2 группами рядом друг с другом с группой, состоящей из 1 схемы ИК-излучателя и 1 схемы фотодиода, так что 2 столбца по 8 узлов могут быть помещены в одну печатную плату. Мы также последовательно соединяем две цепи вместе, поэтому три контакта от Arduino могут управлять двумя регистрами сдвига, а 3 дополнительных контакта могут управлять двумя мультиплексорами на плате. Есть дополнительный выходной заголовок для возможности последовательного подключения к дополнительным платам.

Вот несколько ресурсов, которые я использовал для создания прототипов:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Шаг 3: припаяйте провода к узлу

Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу
Припаяйте провода к узлу

Теперь, когда вы понимаете, как сделана схема, припаивайте провода к каждому узлу. Я спаял фотодиоды параллельно (желтый и серый провода) и ИК-излучатели последовательно (оранжевый провод). Затем я припаял более длинный желтый провод к фотодиодам параллельно, который будет подключен к источнику питания 5 В, и синий провод, который будет подключен к входу фотодиода на печатной плате. Я припаял длинный красный провод к цепи ИК-излучателя, который будет использоваться для подключения к источнику питания 5 В, и черный провод, который будет подключаться к входу ИК-излучателя на печатной плате. Я на самом деле сделал провода немного короткими, и мне не хватило времени, поэтому я смог соединить только 5 узлов в каждом столбце в конце (вместо 7). Я планирую исправить это позже.

Шаг 4: припаяйте компоненты печатной платы и прикрепите их к плате

Припаяйте компоненты печатной платы и прикрепите их к плате
Припаяйте компоненты печатной платы и прикрепите их к плате
Припаяйте компоненты печатной платы и прикрепите их к плате
Припаяйте компоненты печатной платы и прикрепите их к плате
Припаяйте компоненты печатной платы и прикрепите их к плате
Припаяйте компоненты печатной платы и прикрепите их к плате

Примечание. Печатная плата на прилагаемом рисунке - это первая созданная мной версия, в которой отсутствовали входы и выходы питания, а также гирляндный выход для каждой внутренней цепи. Новый дизайн печатной платы исправляет эту ошибку.

Здесь вам просто нужно следовать схеме печатной платы, чтобы припаять компоненты к печатной плате, а затем, как только это будет сделано, припаять печатную плату к плате. Я использовал внешние печатные платы, чтобы подключить сигнал питания 5 В, который я распределил по всем желтым и красным проводам. Оглядываясь назад, мне не нужны были такие длинные красные и желтые провода, и я мог бы соединять узлы друг с другом (вместо того, чтобы подключать их к общей внешней печатной плате). Это действительно уменьшит беспорядок на обратной стороне доски.

Поскольку у меня было 8 рядов светодиодов ws2812b и 12 столбцов, в итоге я получил 7 строк и 11 столбцов узлов (всего 77 узлов). Идея состоит в том, чтобы использовать одну сторону печатной платы для одного столбца узлов, а другую сторону - для другого столбца. Итак, поскольку у меня было 11 колонок, мне понадобилось 6 печатных плат (для последней требовалась только одна группа компонентов). Поскольку я сделал провода слишком короткими, я смог соединить только 55 узлов, 11 столбцов и 5 строк. Вы можете видеть на картинке, я ошибся и припаял необработанные провода к плате, что было бы хорошо, если бы провода были достаточно тонкими, но в моем случае они были слишком толстыми. Это означало, что у меня были изношенные концы проводов очень близко друг к другу для каждого входа ИК-излучателя и входа фотодиода, поэтому было много отладки из-за всего короткого замыкания проводов. В будущем я собираюсь использовать разъемы для подключения печатной платы к проводам на плате, чтобы избежать коротких замыканий и навести порядок.

Поскольку Arduino может последовательно подключать до 8 регистров сдвига и мультиплексоров, я создал две отдельные цепочки, одна из которых занимает первые 8 столбцов, а другая - оставшиеся 3 столбца. Затем я прикрепил каждую цепочку к другой плате, на которой было всего 2 мультиплексора, чтобы я мог считывать каждую цепочку сигналов данных мультиплексора от этих двух мультиплексоров в Arduino. Эти два мультиплексора также были подключены гирляндой. Это означает, что всего в Arduino использовалось 16 выходных сигналов и 2 аналоговых входа: 1 выходной сигнал для управления светодиодами ws2812b, 3 выходных сигнала для первой цепочки регистров сдвига, 3 выходных сигнала для первой цепочки мультиплексоров, 3 выходных сигнала для второй цепочки регистров сдвига, 3 выходных сигнала для второй цепочки мультиплексоров, 3 выходных сигнала для 2-х мультиплексоров, которые агрегируют каждый сигнал данных печатной платы, и, наконец, 2 аналоговых входа для каждого сигнала данных от 2-х агрегированных мультиплексоров.

Шаг 5. Просмотрите код

Примечание. В дополнение к интерактивному коду, приведенному ниже, я использовал стороннюю библиотеку для создания анимации для светодиодов ws2812b. Вы можете найти это здесь:

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

Вверху я определяю контакты Arduino, которые будут подключаться к каждой части печатной платы. В методе настройки я устанавливаю выходные контакты для мультиплексоров, включаю ИК-излучатели, устанавливаю массив baseVal, который отслеживает показания окружающего света для каждого фотодиода, и инициализирую FastLED, который будет записывать на светодиоды ws2812b. В методе цикла мы сбрасываем список светодиодов, которые должны быть включены в полосе ws2812b. Затем мы считываем значения с фотодиодов в цепях мультиплексора и устанавливаем светодиоды ws2812b, которые должны гореть, если показания с фотодиода в узле превышают определенный определенный порог от базового значения показаний внешнего освещения. Затем мы визуализируем светодиоды, если есть какие-либо изменения в узле, который должен быть включен. В противном случае цикл будет продолжаться до тех пор, пока что-то не изменится, чтобы ускорить процесс.

Код, вероятно, можно было бы улучшить, и я собираюсь это сделать, но есть задержка примерно в 1-2 секунды с момента включения света после того, как объект помещен на стол. Я считаю, что основная проблема заключается в том, что FastLED требуется некоторое время, чтобы отобразить 96 светодиодов на столе, а код должен пройти и прочитать 77 входов из таблицы. Я попытался использовать этот код с 8 светодиодами и обнаружил, что он работает почти мгновенно, но я ищу лучшее из светодиодов, которые будут работать с этим кодом и работать почти мгновенно, а также улучшать код.

Шаг 6: Включите Arduino

Включите Arduino!
Включите Arduino!
Включите Arduino!
Включите Arduino!
Включите Arduino!
Включите Arduino!

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

Рекомендуемые: