Arduino
66 постов
66 постов
Ранее в статье http://rcl-radio.ru/?p=111051 рассматривался пример создания интернет-радио на основе ESP32 (ESP32 DevKit v1 Wi-Fi Bluetooth ESP32-WROOM-32) и звукового ЦАП PMC5102A с использованием дисплея LCD1602 + I2C, в этой статье аналогичный пример, но с использованием дисплея 0.96′ I2C 128X64 OLED.
В Интернет радио использованы следующие компоненты:
ESP32 DevKit v1 Wi-Fi Bluetooth ESP32-WROOM-32
DAC PCM5102A
0.96′ I2C 128X64 OLED
Энкодер KY-040 (модуль)
Тактовая кнопка — 2 шт
В OLED дисплее отсутствует дополнительный слой подсветки всей поверхности экрана. Каждый пиксел, формирующий изображение, испускает самостоятельное свечение. При этом картинка получается яркой и контрастной.
Управление OLED дисплеем в данном примере осуществляется при помощи шины I2C.
Параметры дисплея SSD1306:
Технология дисплея: OLED
Разрешение дисплея: 128 на 64 точки
Диагональ дисплея: 0,96 дюйма
Угол обзора: 160°
Напряжение питания: 2.8 В ~ 5.5 В
Мощность: 0,08 Вт
Габариты: 27.3 мм х 27.8 мм х 3.7 мм
ESP32
ESP32 — серия недорогих микроконтроллеров с низким энергопотреблением. Представляют собой систему на кристалле с интегрированным Wi-Fi и Bluetooth контроллерами и антеннами. В серии ESP32 используется микроконтроллерное ядро Tensilica Xtensa LX6 в вариантах с двумя и одним ядром. В систему интегрирован радиочастотный тракт: симметрирующий трансформатор, встроенные антенные коммутаторы, радиочастотные компоненты, малошумящий усилитель, усилитель мощности, фильтры и модули управления питанием. ESP32 создан и разработан компанией Espressif Systems, китайской компанией, расположенной в Шанхае, а производится компанией TSMC по техпроцессу 40 нм. Серия является преемником микроконтроллеров ESP8266.
Характеристики ESP32 DevKit v1:
микроконтроллер: ESP32-WROOM-32
процессор: 2-ядерный Xtensa Dual-Core 32-bit LX6
тактовая частота процессора: 80, 160 или 240 МГц
оперативная память: 520 Кбайт;
флэш-память: 448 Кбайт;
преобразователь USB – UART
количество выводов платы: 30;
Bluetooth: спецификации 4.2 с функциями BR/EDR и Low Energy
WiFi: стандарта IEEE 802.11b/g/n/e/i безопасность WFA, WPA/WPA2 и WAPI на частоте 2,4 ГГц со скоростью до 150 Мбит/с, встроенный стек TCP/IP
антенна: PCB
режимы беспроводной связи: STA/AP/STA+AP
расстояние приема/передачи в идеальных условиях: 400 м;
периферия: АЦП 12 бит до 18 каналов, ЦАП 8 бит 2 канала, датчик температуры, 4x SPI, 2x I2S, 2x I2C, 3x UART, Ethernet контроллер, CAN 2.0, ведущий SD/eMMC/SDIO, ведомый SDIO/SPI, инфракрасный приемопередатчик, ШИМ до 16 каналов, датчик Холла, аналоговый предусилитель, шифровальщики, хешеры, генератор случайных чисел
поддерживаемые среды разработки: Arduino IDE, PlatformIO, Espressif IDF (IoT Development Framework), Micropython, JavaScript, LUA
PCM5102A
Напряжение однополярное … 3,3 В
Отношение сигнал/шум … 112 дБ
Динамический диапазон … 112 дБ
Уровень нелинейных искажений (THD+N) … -93 дБ
Выходное напряжение … 2.1 Vrms
Поддерживаемая частота дискретизации от 8 кГц до 384 кГц
Поддержка входных форматов данных … I2S, Left-Justified / 16, 24 и 32 бит
Схема Интернет радио
Название станции (бегущая строка)
Номер станции и скорость потока
Настройки радио:
Громкость (0…22 уровень)
Баланс (±16 дБ)
Bass (-40…+16 дБ)
Middle (-40…+16 дБ)
Treble (-40…+16 дБ)
Интернет радио не содержит WEB страницы, все параметры и url адреса станций необходимо заносить в скетч:
авторизация в сети
String ssid = "Keenetic-9009"; // ssid сети WI-FI
String password = "32481975"; // пароль от сети WI-FI
список станций
"https://rusradio.hostingradio.ru/rusradio96.aacp",
"https://str.pcradio.ru/funradio_sk_80s90s-hi",
"http://radio.promodj.com:8000/186mph-192",
кол-во станций
#define CH 5 // кол-во станций
Управление Интернет радио осуществляется при помощи энкодера и двух кнопок. Кнопки позволяют переключать каналы станций, а энкодер регулировать параметры громкости, баланса и тембра. Кнопка энкодера осуществляет переход по пунктам меню.
Как добавить ESP32 в среду Ardiuno IDE можно узнать на странице http://rcl-radio.ru/?p=92558
Версия платы должна быть не ниже 1.0.5
Плата ESP32 Dev Module
Скетч - http://rcl-radio.ru/?p=120767
На базе Arduino и аудиопроцессоре BD37033FV можно собрать довольно качественный регулятор тембра и громкости. В качестве органов управления регулятором тембра и громкости применены кнопки, энкодер и ИК пульт.
Аудиопроцессор BD37033FV имеет несколько входов и выходов, в данном случае будет использовано только три стерео входа и шесть выходов (ПК ЛК фронт, ПК ЛК тыл, два выхода сабвуфера).
Ранее в статье рассматривался пример создания на основе аудиопроцессора BD37033FV регулятора громкости и тембра с использованием дисплея LCD1602 + I2C, в этой статье аналогичный пример, но с использованием дисплея 0.96′ I2C 128X64 OLED.
В OLED дисплее отсутствует дополнительный слой подсветки всей поверхности экрана. Каждый пиксель, формирующий изображение, испускает самостоятельное свечение. При этом картинка получается яркой и более контрастной.
Управление OLED дисплеем в данном примере осуществляется при помощи шины I2C.
Параметры дисплея SSD1306:
Технология дисплея: OLED
Разрешение дисплея: 128 на 64 точки
Диагональ дисплея: 0,96 дюйма
Угол обзора: 160°
Напряжение питания: 2.8 В ~ 5.5 В
Мощность: 0,08 Вт
Габариты: 27.3 мм х 27.8 мм х 3.7 мм
Регулятор тембра и громкости на BD37033FV имеет следующие характеристики:
Напряжение питания от 7.0 до 9.5 В
Ток потребления 31 мА
КНИ 0,002% (VOUT=1Vrms BW=400-30KHz)
Выходное напряжение шума 5,5 µVrms
Перекрестные помехи между каналами -100 дБ
Входное сопротивление 100 кОм
Максимальное входное напряжение 2,1 Vrms
Перекрестные помехи между селекторами -100 дБ
Входной предварительный усилитель (независимый для каждого входа) 0…16 дБ
Диапазон регулировки громкости от -79 до +15 дБ
Режим MUTE — 100 дБ
Регулировка тембра по ВЧ СЧ и НЧ -15…+15 дБ, регулируемые частотные полосы и скважность
Тонкомпенсация 0…15 дБ, регулируемые частотные полосы
ФНЧ сабвуфера — регулируемые частотные полосы
Независимый для каждого выхода аттенюатор -79…15 дБ
Управление:
Энкодер — регулировка всех основных параметров
Кнопки — MUTE, MENU_SET, INPUT
ИК пульт — Работает только в основном меню (регулировка громкости, тембра и переключение входов)
Основное меню
В основное меню собраны основные параметры такие как громкость, тембр (ВЧ, СЧ, НЧ), выбор входа и регулировка предусилителя входа (независимый для каждого входа). Выбор параметра осуществляется при помощи кнопки энкодера, а изменение параметра при помощи поворота ручки энкодера, дополнительно для управления аудиопроцессором используются кнопки выбора входа, активация режима MUTE и переключения с основного меню на вспомогательное (и наоборот). В основном меню так же все параметры можно изменить при помощи ИК пульта.
Второе меню
Во втором меню находятся редко изменяемые параметры, в нем ИК пульт недоступен. Для перехода во второе меню нужно нажать кнопку MENU_SET, выбор параметра меню осуществляется при помощи кнопки энкодера, а изменение параметра при помощи поворота ручки энкодера и кнопки INPUT (кнопка отвечает за изменение дополнительно параметра пункта меню).
Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define IR2 0x33B820DF // button encoder
#define IR3 0x33B8946B // mute
#define IR4 0x33B810EF // >>>
#define IR5 0x33B8E01F // <<<
#define IR6 0x33B844BB // INPUT
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
Скетч - http://rcl-radio.ru/?p=120824
Ранее в http://rcl-radio.ru/?p=58563 описывался пример использования аудиопроцессора TDA7313 под управлением Arduino Nano с дисплеем LCD1602, на этой странице будет рассмотрен аналогичный пример но с использованием дисплея LCD2004 c I2C модулем на базе микросхем PCF8574, что позволяет подключать символьный дисплей LCD2004 к плате Arduino всего по двум проводам SDA и SCL (А4 и А5).
Микросхема TDA7313 имеет три стерео входа, регуляторы тембра НЧ и ВЧ, тонкомпенсация и четыре выхода (псевдоквадро). Управление осуществляется с помощью I2C. Обвязка минимальная — несколько конденсаторов и два резистора. Номинальное напряжение питания 9В.
Основные характеристики TDA7313
Напряжение питания 6…10 В (9 В рекомендуемое)
КНИ не более 0,01 %
Отношение сигнал / шум 106 дБ
Разделение каналов на частоте 1 кГц 103 дБ
Регулировка громкости от -78.75 до 0 дБ (0…63 уровня)
Регулировка тембра НЧ и ВЧ ±14 дБ (-7…+7)
Регулировка аттенюаторов независимое для каждого выхода от -38.75 до 0 дБ (шаг 1,25 дБ)
Регулировка предусилителя от 0 до 11.25 дБ (шаг 3,75 дБ)
Плата Arduino Nano аудиопроцессор TDA7313 обмениваются данными на шине I2C по линиям
В данном примере применены несколько модулей, таких как энкодер KY-040, часы реального времени DS3231, LCD2004_I2C, ИК-датчик VS1838B. Управление параметрами аудиопроцессора осуществляется при помощи 4-х кнопок — STANDBY, MUTE, SET, INPUT и энкодера KY-040.
В проекте используется два меню, в первом меню выводятся основные параметры аудиопроцессора — громкость, тембр НЧ и ВЧ, индикатор входа и часы. Во втором меню осуществляется регулировка дополнительных параметров — аттенюаторы выходов, включение или выключение тонкомпенсации, яркость подсветки дисплея в активном режиме и в режиме STANDBY.
Дополнительно имеется меню входов которое активируется нажатием кнопки INPUT, при этом происходит переключение входа и имеется возможность изменить регулировку предусилителя входа (независимая для каждого входа) при помощи энкодера.
Так как предусмотрена управляемая яркость подсветки дисплея, то можно установить яркость подсветки в основном режиме и в режиме STANDBY (как правило с пониженной яркостью подсветки), регулировка яркости подсветки осуществляется в меню №2.
Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).
Максимальный выходной ток одного выхода Arduino Nano не должен превышать 40 мА.
В проекте используются часы реального времени DS3231, текущее время выводится в меню №1, а так же в режиме STANDBY.
Установить текущее время можно двумя способами:
Установки времени через скетч:
Раскомментируйте строку:
clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
загрузите скетч, далее закомментируйте строку:
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
повторно загрузите скетч.
Установка времени кнопками:
Перейдите в режим STANDBY, нажать и удерживать кнопку энкодера, нажимать кнопки:
SET — обнуление секунд
IN — коррекция минут
MUTE — коррекция часов
ИК пульт дублирует работу энкодера и кнопок. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B850AF // Кнопка IN
#define IR_6 0x33B844BB // Кнопка SET
#define IR_7 0x33B8946B // Кнопка MUTE
#define IR_8 0x33B800FF // Кнопка STANDBY (POWER)
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
В проекте предусмотрен выход STANDBY для управления режим STANDBY усилителя мощности, а так же режим MUTE. Все параметры сохраняются в энергонезависимую память, сохранение происходит в момент перехода в режим STANDBY.
Скетч - http://rcl-radio.ru/?p=127449
Ранее на сайте рассматривались примеры создания генератора на модуле AD9833 и частотомера, но это были отдельные проекты, на этой странице будет рассмотрен пример создания генератора и частотомера в одном проекте.
AD9833 — генератор сигналов с низким энергопотреблением. Позволяет генерировать сигналы с частотой до 12.5 МГц синусоидальной, треугольной и прямоугольной формы. Управление осуществляется с использованием трехпроводного интерфейса SPI.
Основные характеристики микросхемы:
Цифровое программирование частоты и фазы.
Потребляемая мощность 12.65 мВт при напряжении 3 В.
Диапазон выходных частот от 0 МГц до 12.5 МГц.
Разрешение 28 бит (0.1 Гц при частоте опорного сигнала 25 МГц).
Синусоидальные, треугольные и прямоугольные выходные колебания.
Напряжение питания от 2.3 В до 5.5 В.
Трехпроводной интерфейс SPI.
Расширенный температурный диапазон: от –40°C до +105°C.
Опция пониженного энергопотребления.
При генерации синусоидальных и треугольных импульсов амплитуда изменяется в диапазоне 38мВ…0,65В. При генерации импульсов прямоугольной формы на выходе присутствует сигнал уровня TTL.
Работа генератора контролируется при помощи 2-х кнопок и энкодера, при нажатии кнопки энкодера можно перебирать разряды и поворотом ручки энкодера можно установить число от 0 до 9 в каждом разряде. При изменении частоты генератора выход генератора отключается, после установки нужно частоты необходимо нажать кнопку «Генератор On/Off«, для изменения формы сигнала необходимо нажать кнопку «Форма сигн.». Так же при изменении формы сигнала выход генератора отключается.
Частотомер работает независимо от генератора и в управлении не нуждается.
Генератор в данном проекте ограничен максимальной частотой в 10 МГц, диапазон измерения частотомера от 0 до 6,5 МГц.
Показания частотомера
Показания генератора
Индикатор выходного сигнала генератора
Форма сигнала
Ранее в http://rcl-radio.ru/?p=80541 рассматривался пример создания регулятора громкости на аудиопроцессоре PT2258 с использованием четырех разрядного семисегментного индикатора. На этой странице аналогичный проект, но в нем будет использован индикатор LCD2004 c модулем I2C.
ИМС PT2258 — шести канальный регулятор громкости с микроконтроллерным управлением. Управление PT2258 осуществляется при помощи шины I2C. Регулятор громкости обладает низким уровнем шума и малым коэффициентом нелинейных искажений. Регулировка громкости может быть как независимая для каждого канала, так и общая для всех каналов.
Основные характеристики PT2258:
Напряжение питания от 5 до 10 В, 9 В — рекомендуемое
Ток потребления 8 мА
Входное сопротивление 30 кОм
Максимальное входное напряжение 2,8 Vrms
Разделение каналов 100 дБ
Коэффициент нелинейных искажений 0,005%
Диапазон регулировки громкости от -79 до 0 дБ
Шаг регулировки громкости 1 дБ
Режим MUTE
Отношение сигнал/шум 105 дБ
Схема регулятора громкости достаточно проста, выводы 4 и 17 (CODE2 и CODE1) в зависимости от подключения к GND или VCC позволяют изменять адрес микросхемы при работе с I2C шиной, что дает возможность подключения других утс-в на шину I2С, у которых нет возможности изменить адрес:
CODE1 = GND, CODE2 = GND 80H
CODE1 = GND, CODE2 = VCC 84H
CODE1 = VCC, CODE2 = GND 88H
CODE1 = VCC, CODE2 = VCC 8CH
Библиотека PT2258 поддерживает адрес 0х88, если возникнет необходимость изменить адрес шины I2C, то потребуется корректировка адреса в библиотеке:
Файл — PT2258.h
В платформе Arduino адрес I2C 7 бит, поэтому вместо 0х88 (0B10001000), указывается 0х44 (0B1000100).
Регулятор громкости на PT2258 содержит следующие компоненты:
Плата Arduino Nano
Дисплей LCD2004 с модулем I2C
Часы реального времени DS3231
Энкодер KY-040
Три тактовые кнопки
ИК-датчик VS1838B
Схема регулятора громкости
Основные функциональные возможности регулятора громкости:
Основное меню:
Регулировка громкости 64 уровня (64 дБ), осуществляется при помощи энкодера и ИК пульта
Вывод даты и времени
Второе меню (для перехода в меню нажать кнопку SET, нажимая на кнопку энкодера можно перебирать пункты меню)
По канальная регулировка аттенюаторов выходов в диапазоне от 0 до 15 дБ
Регулировка яркости подсветки дисплея в обычном режиме и в режиме STANDBY
Меню коррекции времени
Режим установки-корректировки времени:
Нажать и удерживать кнопку энкодера, далее нажать кнопку SET, после появится меню корректировки времени, параметры перебираются кнопкой энкодера, ручка энкодера меняет выбранный параметр.
Режим MUTE, активируется при помощи кнопки MUTE или ИК пульта
Режим STANDBY, активируется при помощи кнопки или ИК пульта
Так как предусмотрена управляемая яркость подсветки дисплея, то можно установить яркость подсветки в основном режиме и в режиме STANDBY (как правило с пониженной яркостью подсветки), регулировка яркости подсветки осуществляется в меню №2.
Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).
Максимальный выходной ток одного выхода Arduino Nano не должен превышать 40 мА.
ИК пульт дублирует работу энкодера и кнопок. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define POWER 0x33B800FF
#define VOLUME_UP 0x33B8E01F
#define VOLUME_DW 0x33B810EF
#define MUT 0x33B8946B
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
Скетч - http://rcl-radio.ru/?p=128120
Ранее в http://rcl-radio.ru/?p=128799 был показан пример тестового запуска аудиопроцессора LC75421M, на этой странице будет показан пример практического применения аудиопроцессора в качестве регулятора громкости и тембра.
Регулятор громкости и тембра на LC75421M содержит следующие компоненты:
Аудиопроцессор LC75421M
Плата Arduino Nano (Atmega328)
Энкодер KY-040 (модуль)
Три тактовые кнопки
Модуль часов реального времени DS3231
ИК-датчик VS1838B
Пульт ДУ (NEC)
Дисплей LCD1602 с модулем I2C
Регулятор громкости и тембра на LC75421M обладает следующими характеристиками:
Регулировка громкости от -76 до 0 дБ (шаг 1 дБ)
Регулировка баланса ±4 дБ
Регулировка BASS от 0 до 14 шагов (±11.9 дБ)
Регулировка TREBLE от 0 до 14 шагов (±11.9 дБ)
Регулировка SUPER BASS от 0 до 10 шагов (0…+20 дБ)
5-и канальный селектор входов с независимой регулировкой предусилителя от 0 до 18,75 дБ
Режим MUTE
Режим STANDBY
Часы с коррекцией времени
Напряжение питания от 7,5 до 10 В
Изменение яркости подсветки
Основное управление параметрами аудиопроцессора будет осуществляться при помощи энкодера (KY-040) и 3-х кнопок, так же будет применен ИК пульт который будет дублировать энкодер и кнопки управления. Вся информация будет выводится на дисплей LCD1602 + I2C (I2C модуль на базе микросхем PCF8574 позволяют подключить символьный дисплей 1602 к плате Arduino всего по двум проводам SDA и SCL (А4 и А5), что дает возможность не использовать цифровые выходы Arduino при подключении дисплея.)
Громкость
BASS
SUPER BASS
TREBLE
Баланс
Часы (работаю в режиме STANDBY)
Коррекция времени часов: в режиме STANDBY нажать и удерживать кнопку энкодера, далее нажать кнопки INPUT, MUTE для изменения времени часов, минут.
Так же предусмотрено изменение яркости дисплея в режиме STANDBY: выход D6 Arduino подключить к пину управления подсветки:
Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).
Максимальный выходной ток одного выхода Arduino Nano не должен превышать 40 мА.
Яркость подсветки можно настроить через скетч:
#define BRIG_L 50
#define BRIG_H 250
BRIG_L — яркость в режиме STANDBY (0-250)
BRIG_H — яркость в рабочем режиме (0-250)
Схема подключения аудиопроцессора
Схема блока управления
ИК пульт дублирует работу энкодера и кнопок. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define IR_2 0x2FDB24D // Кнопка menu
#define IR_4 0x2FD906F // Кнопка >
#define IR_5 0x2FDF20D // Кнопка <
#define IR_6 0x2FD6A95 // Кнопка IN
#define IR_7 0x2FDF00F // Кнопка MUTE
#define IR_8 0x2FD00FF // Кнопка STANDBY (POWER)
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
Скетч:
Ранее в статье рассматривался пример создания на основе аудиопроцессора LC75421M регулятора громкости и тембра с использованием дисплея LCD1602 + I2C, в этой статье аналогичный пример, но с использованием дисплея 0.96′ I2C 128X64 OLED.
В OLED дисплее отсутствует дополнительный слой подсветки всей поверхности экрана. Каждый пиксел, формирующий изображение, испускает самостоятельное свечение. При этом картинка получается яркой и контрастной.
Управление OLED дисплеем в данном примере осуществляется при помощи шины I2C.
Параметры дисплея SSD1306:
Технология дисплея: OLED
Разрешение дисплея: 128 на 64 точки
Диагональ дисплея: 0,96 дюйма
Угол обзора: 160°
Напряжение питания: 2.8 В ~ 5.5 В
Мощность: 0,08 Вт
Габариты: 27.3 мм х 27.8 мм х 3.7 мм
Регулятор громкости содержит два основных блока, первый блок микроконтроллерный (Arduino Nano) с органами управления и индикации, второй блок плата аудиопроцессора.
Регулятор громкости и тембра на LC75421M обладает следующими характеристиками:
Регулировка громкости от -76 до 0 дБ (шаг 1 дБ)
Регулировка баланса ±4 дБ
Регулировка BASS от 0 до 14 шагов (±11.9 дБ)
Регулировка TREBLE от 0 до 14 шагов (±11.9 дБ)
Регулировка SUPER BASS от 0 до 10 шагов (0…+20 дБ)
5-и канальный селектор входов с независимой регулировкой предусилителя от 0 до 18,75 дБ
Режим MUTE
Режим STANDBY
Часы с коррекцией времени
Напряжение питания от 7,5 до 10 В
Основное управление параметрами аудиопроцессора будет осуществляться при помощи энкодера (KY-040) и 3-х кнопок, так же будет применен ИК пульт который будет дублировать энкодер и кнопки управления.
Коррекция времени часов: в режиме STANDBY нажать и удерживать кнопку энкодера, далее нажать кнопки INPUT, MUTE для изменения времени часов, минут.
Схема подключения аудиопроцессора
Схема блока управления
ИК пульт дублирует работу энкодера и кнопок. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define IR_2 0x2FDB24D // Кнопка menu
#define IR_4 0x2FD906F // Кнопка >
#define IR_5 0x2FDF20D // Кнопка <
#define IR_6 0x2FD6A95 // Кнопка IN
#define IR_7 0x2FDF00F // Кнопка MUTE
#define IR_8 0x2FD00FF // Кнопка STANDBY (POWER)
Для получения кодов кнопок Вашего пульта загрузите скетч:
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zipIRrecv irrecv(12); // указываем вывод модуля IR приемника
decode_results ir;void setup(){
irrecv.enableIRIn();
Serial.begin(9600);
}void loop(){
if ( irrecv.decode( &ir )) {Serial.print(«0x»);Serial.println( ir.value,HEX);irrecv.resume();}
}
Далее откройте монитор порта, в котором при нажатии кнопки пульта Вы увидите коды кнопок.
Скетч - http://rcl-radio.ru/?p=128826
Радио модули NFR24L01 работают в диапазоне частот 2.4-2.5 ГГц, поддерживают передачу данных до 2 Мбит/с и могут работать на 125 каналах. Радио модули выпускаются малой мощности (до 100 метров или около 30 метров в помещении) и с усилителем к которому можно подключить внешнюю антенну (до 1000 м).
Один модуль способен поддерживать связь сразу с шестью приемниками или передатчиками, то есть можно объединить сразу семь устройств в общую радиосеть на частоте 2,4 ГГц. Скорость беспроводного соединения можно настраивать: 250kbps, 1Mbps или 2Mbps, а так же можно изменять мощность в пережиме передатчика от -18dBm до 0dBm.
Основные параметры радио модуля NRF24L01
Напряжение питания от 1.9 В до 3.6 В
Потребляемый ток при мощности 0dBm 11.3 мА
Потребляемый ток при передачи 2 Мбит 13.5 мА
Частота 2,4 – 2,525 ГГц
Скорость передачи: 250 Кбит, 1 Мбит или 2Mбит
Программируемая выходная мощность: 0, -6, -12 и -18 dBm
Схема подключения
При передачи сигнала радио модуль NRF24L01 кратковременно может потреблять большой ток, поэтому рекомендуется по питанию установить электролитический конденсатор емкость от 10 до 220 мкФ.
В статье будет рассмотрено несколько простых примеров использования радио модулей, возможности радио модулей NRF24L01 достаточно большие и они могут применяться в различных системах беспроводной связи, беспроводного контроля доступа, в охранных системах, домашней автоматике и тд.
Перед загрузкой скетчей Вам понадобятся следующие библиотеки:
Тестовый скетч
В этом примере один радио модуль работает в качестве передатчика, а другой в качестве приемника. Передатчик передает два числа, а приемник принимает сигнал и выводит в монитор порта эти числа.
ПЕРЕДАТЧИК
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // (CE, CSN)
int data[2];
void setup(){
radio.begin();
radio.setChannel(5); // канал от 0 до 125
radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm
radio.openWritingPipe (0xA0A0A0A001);
}
void loop(){
data[0] = 1234;
data[1] = 5678;
radio.write(&data, sizeof(data));
delay(1000);
}
ПРИЕМНИК
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // (CE, CSN)
int data[2];
void setup(){
delay(1000);
Serial.begin(9600);
radio.begin();
radio.setChannel(5); // канал от 0 до 125 radio.setDataRate (RF24_1MBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
radio.setPALevel (RF24_PA_HIGH); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm r
adio.openReadingPipe (1, 0xA0A0A0A001);
radio.startListening (); // radio.stopListening ();
}
void loop(){
if(radio.available()){
radio.read(&data, sizeof(data));
Serial.println(data[0]);
Serial.println(data[1]);
} }
Управление 4-я реле
В этом примере можно управлять включением и выключением 4-х реле или других исполнительных уст-в. В передатчике используются 4 кнопки, при нажатии на кнопку в приемнике меняет логическое состояние один их выходов к которому можно подключить модуль реле.
ПЕРЕДАТЧИК
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // (CE, CSN)
int data_reg;
bool w1,w2,w3,w4;
void setup(){
delay(1000);
Serial.begin(9600);
radio.begin();
radio.setChannel(5); // канал от 0 до 125
radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm
radio.openWritingPipe(0xA1A1A1A102);
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
}
void loop(){
if(digitalRead(2)==LOW && w1==0){
w1=1;
data_reg |= (1<<0);
delay(200);
}
if(digitalRead(2)==LOW && w1==1){
w1=0;
data_reg &=~(1<<0);
delay(200);
}
if(digitalRead(3)==LOW && w2==0){
w2=1;
data_reg |= (1<<1);
delay(200);
}
if(digitalRead(3)==LOW && w2==1){
w2=0;
data_reg &=~(1<<1);
delay(200);
}
if(digitalRead(4)==LOW && w3==0){
w3=1;
data_reg |= (1<<2);
delay(200);
}
if(digitalRead(4)==LOW && w3==1){
w3=0;
data_reg &=~(1<<2);
delay(200);
}
if(digitalRead(5)==LOW && w4==0){
w4=1;
data_reg |= (1<<3);
delay(200);
}
if(digitalRead(5)==LOW && w4==1){
w4=0;
data_reg &=~(1<<3);
delay(200);
}
radio.write(&data_reg, sizeof(data_reg));
Serial.println(data_reg);
delay(100);
}
ПРИЕМНИК
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // (CE, CSN)
int data_old,data;
unsigned long times;
void setup(){
delay(1000);
Serial.begin(9600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
radio.begin();
radio.setChannel(5); // канал от 0 до 125 radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
radio.setPALevel(RF24_PA_MIN); // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm
radio.openReadingPipe(1, 0xA1A1A1A102);
radio.startListening();
}
void loop(){
if(radio.available()){
radio.read(&data, sizeof(data));
Serial.println(data);
if(((data >> 0) & 1) ==1){
digitalWrite(2,HIGH);
}
else{digitalWrite(2,LOW);
}
if(((data >> 1) & 1) ==1){
digitalWrite(3,HIGH);
}
else{digitalWrite(3,LOW);
}
if(((data >> 2) & 1) ==1){
digitalWrite(4,HIGH);
}
else{digitalWrite(4,LOW);
}
if(((data >> 3) & 1) ==1){
digitalWrite(5,HIGH);
}
else{
digitalWrite(5,LOW);
} } }
Электронный термометр DS18B20
В следующем примере к передатчику подключен цифровой датчик температуры DS18B20, передатчик передает температуру, а приемник выводит ее на дисплей LCD1602_I2C. В момент получения информации на экран выводится символ «*».
Терморегулятор
Во всех выше показанных примерах радио модули разделены на приемники и передатчики, в это примере каждый радио модуль работает как приемопередатчик.
Базовый модуль терморегулятора содержит дисплей LCD1602 с модулем I2C и энкодер для установки температуры регулирования. Модуль датчика и управления нагревательным элементом измеряет температуру и каждые 2 секунды передает ее значение в базовый модуль, базовый модуль получает значение температуры и выводит ее на дисплей, при помощи энкодера в базовом модуле можно изменить температуру регулирования, температура регулирования каждые 2 секунды передается в модуль датчика. Оба модуля основное время работают как приемники и раз в 2 секунды переходят в режим передатчика передавая необходимую информацию. Модуль датчика в зависимости от текущей температуры и температуры регулирования управляет цифровым выходом D3 к который может управлять нагревательным элементом.
Температура регулирования
Индикатор получения информации (в момент приема выводится символ *)
Скетчи - http://rcl-radio.ru/?p=128866