TiTAN Stereo UV-METER
Сегодня мы исследуем в Arduino IDE две интересные библиотеки, которые достались нам в наследство от компании panStam,.
Первая библиотека работы с адресными RGB-светодиодами WS2812 (NeoPixel).
Вторая библиотека для работы с радио. Мы применим эти библиотеки в нашем проекте «TiTAN Stereo UV-METER».
Некоторые скажут: «таких индикаторов на Arduino очень много!». Но мы ответим так: «А много таких БЕСПРОВОДНЫХ индикаторов?»
Вот что должно у нас получиться.
Начнем с самого начала.
Нам потребуется лента RGB-светодиодов совместимых с WS2812, например, SK6805 как это сделали мы. Надо помнить, что этим светодиодам необходимо питание 5 Вольт и около 1 Ампера на 1 метр, поэтому не выбирайте слишком длинную ленту, которая будет потреблять большое количество энергии. Мы выбрали 2х метровую ленту со 120 светодиодами.
Надеемся, что вы уже настроили Arduino IDE так, как мы рассказывали в прошлой статье (в прошлом видео) {ссылка} и опробовали пример с мигающим светодиодом.
Следующим нашим шагом будет загрузка примера от panStam, который мы найдем в «File -> Examples -> Examples for TiTAN 1.0 w/cc430f5137 -> ws2812 -> ws2812driver».
В библиотеке panStamp не предусмотрено переназначения портов, поэтому мы будем использовать для управления светодиодами заложенный в библиотеку порт P1.1
Почему именно P1.1? Потому, что он является выходом интерфейса SPI, а это самый простой и быстрый способ формирования протокола управления такими RGB-светодиодами.
Вот что у нас получилось.
Прежде чем загружать проект в TiTAN нужно указать сколько светодиодов в нашей ленте. Это указывается в строке WS2812STRIP strip(120);
В библиотеке «ws2812.cpp» есть одна досадная ошибка. Файл находится в
Нужно в этом файле найти и снять комментарии со строки «//while (!(UCB0IFG & UCTXIFG));».
Скомпилируем наш пример и загрузим его в плату TiTAN. У нас получилось вот так. А у вас такой же результат?
Продолжим.
Отложим ненадолго GRB-светодиоды и займемся аналоговой частью нашего проекта.
Так как мы будем подавать на вход сигнал с разъема для наушников, то амплитуда этого сигнала будет достаточно малой. И при внутреннем опорном напряжении АЦП (ADC) слабые сигналы будет сложно измерить. Для исправления этой ситуации мы сделаем свой источник опорного напряжения на переменном резисторе, которым и будем регулировать чувствительность. Подключим его к порту P2.5. А левый и правый каналы звука к портам P2.0 и P2.1. Вот такая схема у нас должна получиться.
Переходим к программированию аналоговой части.
Вынуждены вас немного огорчить, но пакет panStamp не подразумевал использование внешнего опорного напряжения и параллельного многократного, скоростного измерения АЦП (ADC). Это скрывается в теле функции «analogRead()». Каждый раз (!) при вызове этой функции происходит настройка аналогового входа, настройка регистров АЦП (ADC), ожидание готовности в течении 1100 циклов генератора, считывание значения после измерения, отключение АЦП (ADC). Вы можете себе представить какие возникнут задержки при 100 измерениях?
Чтобы нам было доступно скоростное и параллельное измерение сразу по двум каналам, нам необходимо самостоятельно инициализировать АЦП (ADC) в нужном нам режиме работы.
Нет ничего страшного если вам сложно понять написанное. Со временем вы самостоятельно сможете писать такие конструкции.
Теперь создадим функцию получения аналоговых данных по результатам 100 измерений.
При вызове этой функции с каждым циклом будет запускаться АЦП (ADC), производить измерения на каналах A0 и A1 и по окончании будет запоминаться максимальное значение.
И в основной программе, каждые 20 миллисекунд мы будем преобразовывать полученные данные в количество светящихся светодиодов на каждом канале.
Обратите внимания на действия, производимые с измеренными уровнями.
Сначала мы отбрасываем все низкочастотные шумы, уровень которых меньше LOW_PASS и равномерно распределяем полученное значение в диапазон 0..500. Так мы сглаживаем полученные результаты.
После этого возводим значение в степень EXP=1.4 для подчеркивания эффекта резкого нарастания звука.
Потом формируем эффект плавного снижения уровня при резком снижении громкости и вычисляем получившиеся длины светящихся светодиодов.
Теперь нам нужно все это отобразить на наших RGB-светодиодах. Для этого нам потребуется функция «fillAudio()»
Вот она.
Первые 12 светодиодов мы будем подсвечивать фиолетовым, следующие 18 будем подсвечивать синим, еще 18 светодиодов – зеленым и оставшиеся 12 – красным. Светодиоды, не входящие в список светящихся — будут погашены.
Полный текст программы, который у нас получился вы можете скачать на нашем сайте https://titan-project.com/software/.
Проверьте, все ли вы сделали правильно.
Осталось скомпилировать проект и загрузить его в плату TiTAN.
Вращая переменный резистор, вы можете добиться нужной чувствительности при выбранной громкости музыки.
Поздравляем! У вас получился «Stereo UV-METER»!
Но как же беспроводный «TiTAN Stereo UV-METER»?
Это очень просто! Для этого у нас почти все готово.
Осталось разделить наш проект на 2 проекта.
Первый из них будет передатчиком, а второй приемником.
Итак – передатчик.
Добавим в наш передатчик следующие строки
Функцию setup() немного изменим
Так мы настроим наше радио на частоту 433 МГц со всеми необходимыми параметрами.
Вместо строк
Напишем
С этого момента нам больше не нужна функция «fillAudio()» и все, что связано с RGBсветодиодами и сами светодиоды. Они нам нужны будут в приемнике.
Обратите внимание на определение «SHOWMODE». Оно может принимать значение 1,2 или 3. Так мы выбираем алгоритм отображения на светодиодной ленте.
Для удобства в качестве передатчика мы будем использовать плату TiTAN-I.
Компилируем, загружаем проект в нашу плату и напечатаем корпус. Вот что получилось.
Схема будет питаться от батарейки CR2032. Потребляемый ток составит около 20 миллиампер. Что позволит проработать около 8 часов от новой, качественной батарейки.
Теперь очередь приемника.
Для работы радио на прием нам необходимо добавить функцию обработки полученных по радио данных.
Эта функция заменит нам получение данных от АЦП (ADC). В переменной «packetAvailable» будет указан номер алгоритма отображения на светодиодной ленте, который мы указали в передатчике.
Изменим функцию setup() вот так:
И в основное тело программы напишем:
Это все, что нам нужно.
Осталось только описать алгоритмы отображения. Их три. Но вы можете придумать и свои.
Полный текст программы для передатчика и приемника, который у нас получился вы можете скачать на нашем сайте https://titan-project.com/software/.
Для удобства в качестве передатчика мы будем использовать плату TiTAN-I.
Компилируем, загружаем проект в нашу плату и напечатаем корпус.
Вот что получилось.
Теперь установим ленту в специальный держатель для светодиодных лент.
Соберем и включим все, что у нас получилось.
Поздравляем! Вы самостоятельно сделали уникальную установку световых эффектов «TiTAN Stereo UV-METER»!