Уроки arduino: регулятор громкости с кнопками управления

Уроки arduino: регулятор громкости с кнопками управления

ПОДКЛЮЧЕНИЕ КНОПКИ К ARDUINO

Кнопка – простейший орган управления микроконтроллером. Подключить кнопку к Arduino очень просто, но нужно помнить, что пин должен иметь два стабильных состояния – высокое и низкое, GND или VCC. Для этого пин кнопки подтягивают резистором

10 кОм противоположно подключению кнопки, т.е. если кнопка подключена второй ногой к GND, пин подтягивают к VCC, и наоборот.

Микроконтроллер имеет “встроенную” подтяжку ног к VCC, что даёт возможность подключать кнопку только к GND и пину, но режим работы пина нужно выбрать INPUT_PULLUP. Я, например, всегда подключаю отладочную кнопку на D3 вот таким образом:

Также можно подключить несколько кнопок к аналоговому пину, получится так называемая аналоговая клавиатура. Значение функции analogRead() будет зависеть от нажатой кнопки.

БИБЛИОТЕКА GYVERBUTTON

GyverButton v3.4

Для удобной и многофункциональной работы с кнопкой я написал библиотеку GyverButton. Что она умеет:

  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
  • Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)

Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)

Регулировка громкости звука с Arduino по I2C на контроллере PT2257


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

Datasheet PT2257
PT2257 2-х канальный I2C цифровой контроллер громкости,
Контроль громкости звука с помощью интерфейса I2C для Arduino или другой системы MCU.

Power supply: 3-10V
THD@1V 0.003%
SNR: 120dB
Control resolution: 1dB/step
Package: DIP8


Команды:
для 2 каналов:
0b01111000 //MUTE OFF
0b01111001 //MUTE ON
0b11111111 //Function OFF (-79dB)

0b11010000 // -0
0b11010001 // -1
0b11010010 // -2
0b11010011 // -3
0b11010100 // -4
0b11010101 // -5
0b11010110 // -6
0b11010111 // -7
0b11011000 // -8
0b11011001 // -9

0b11100000 // -00
0b11100001 // -10
0b11100010 // -20
0b11100011 // -30
0b11100100 // -40
0b11100101 // -50
0b11100110 // -60
0b11100111 // -70

0b10100000 // -0
0b10100001 // -1
0b10100010 // -2
0b10100011 // -3
0b10100100 // -4
0b10100101 // -5
0b10100110 // -6
0b10100111 // -7
0b10101000 // -8
0b10101001 // -9

0b10110000 // -00
0b10110001 // -10
0b10110010 // -20
0b10110011 // -30
0b10110100 // -40
0b10110101 // -50
0b10110110 // -60
0b10110111 // -70

0b00100000 // -0
0b00100001 // -1
0b00100010 // -2
0b00100011 // -3
0b00100100 // -4
0b00100101 // -5
0b00100110 // -6
0b00100111 // -7
0b00101000 // -8
0b00101001 // -9

0b00110000 // -00
0b00110001 // -10
0b00110010 // -20
0b00110011 // -30
0b00110100 // -40
0b00110101 // -50
0b00110110 // -60
0b00110111 // -70

Например для того чтобы задать на оба канала громкость -62 dB нужно отправить
Wire.write(0b11100110); // задаем десятки
Wire.write(0b11010010); // задаем еденицы


Правила перепечатки

Понравилась статья?
Лучшей наградой для меня будет ваш комментарий !

Релейный регулятор громкости на Arduino Nano

Проблема выбора регулятора громкости

При разработке усилителя столкнулся с проблемой – что использовать в качестве регулятора громкости. В первых версиях использовался обычный китайский переменный резистор.

После прочтения различных формуов по звуку, пришло понимание, что использовать китайский переменный резистор не круто, нарушается балланс между каналами, со временем он начинает “шуршать” и всё такое прочее. Поэтому пришлось отказаться от этого способа и заняться поиском другого решения.

Галетный переключатель в роли регулятора громкости

Одним из самых простых, относительно дешевых и качественных решений было использование галетника, припаяв к нему много постоянных резисторов. Этот способ мне подходил. Заказвал на aliexpress у этого продавца (https://ru.aliexpress.com/item/Free-shipping-New-1pc-2-Pole-23-Step-Rotary-Switch-Attenuator-Volume-Control-Pot-Potentiometer-DIY/1849958014.html?spm=a2g0s.9042311.0.0.274233ed1C0m4n). Галетник был на 23 положения, чего вполне хватало. Как по мне, цена оказалось не такой уж и маленькой, учитывая что продавались уже готовые переключатели с резисторами уже за 800 рублей. Купил резисторов, вышло ещё около 200 рубей. В итоге, кривые руки, вместе с жадностю, создали вот такую штуку.

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

Причины выбора релейного регулятора громкости

Основная причина – лень. Лень – двигатель прогресса. Стало не удобно стоять ждать, пока в фильме что-то скажут, чтобы отрегулировать громкость на усилителе. Плюс, т.к. я живу в квартире, при просмотре фильмов в ночное время необходимо контролировать громкость, т.к. обычная речь и спецэффекты имеют разный уровень громкости – не хотелось мешать соседям. Третью причина был интерес собрать устройство на микроконтроллере, запрограмировать что-то, что можно потрогать руками и покрутить.

Выбор пал на релейный регулятор громкости, в народе его называют регулятором громкости Никитина. Именно его статья, опубликованная в одном из журналов радио (или какого-то другого), послужила проявлением массового интереса к такому типу регулятора.

Выбор сразу пал на готовые модули ардуино, чтобы заниматься проектированием, а не пайкой и сборкой устройств. Короче ардуино позволял собрать рабочий прототип очень просто, дешево и быстро. Ну как дешево, в моём случае весь усилитель вышел неоправдано дорогим – на момент написания статьи уже более 15 тысяч рублей.

В понимании работы этого регулятора мне мопогли вот эти 2 сайта:

На текущий момент всё это безобразие собрано на макетных платах. Я снял демонстрационное видео

  • Добавить ещё изображений первых версий
  • Привести код программы в нормальный вид и выложить проект на github
  • Привести список компонентов, цены и ссылки где их купить
  • Привести схему и печатную плату в нормальный вид, расшарить проект easyeda

Регулятор громкости с помощью Arduino

В этом уроке вы узнаете, как настроить Arduino UNO для создания тональных сигналов через стандартные наушники, с регулятором громкости через потенциометр, с визуальным отображением громкости через ЖК-дисплей с кнопкой пауза/воспроизведение.

Шаг 1: Части, детали

На изображении показаны компоненты, используемые в этом уроке.

Итак, в уроке понадобятся:

  • макетная плата (прикреплена к акриловой базе на фотографии)
  • стандартные наушники
  • аналоговый потенциометр
  • 3,5 мм разъем
  • 16×2 ЖК дисплей с чипом I2c
  • кнопка
  • 10 Ом резистор (на фото над кнопкой)
  • Aruino UNO с разъемом USB
  • провода

Шаг 2: Примечание о пайке

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

Также на изображении выше можно заметить чип I2c на задней панели ЖК-дисплея. Обычно ЖК-интерфейс имеет 16 соединений. Одна из функций I2c состоит в том, чтобы уменьшить это число до 4. Там где сделаны паяные соединения.

Шаг 3: Питание и заземление

Начните с подсоединения питания и заземления к макетной плате с помощью проводов без пайки.

Это делает питание и заземление остальной части схемы более управляемой, поскольку на Arduino очень ограниченное число пинов.

Шаг 4: Кнопка пауза/воспроизведение

На изображении кнопка располагается на двух половинах макета для того, чтобы оставить больше места. Резистор на 10 Ом подключается к заземляющей шине и другой стороной к кнопке.

Другой соединительный провод без пайки соединяет другую сторону кнопки с шиной питания.

Шаг 5: Подключение ЖК-дисплея

Чип Ic2 и Arduino оба помечены, чтобы помочь определить, где находятся соединения. SDA и SCL (синий и желтый) подключаются к ardunio в контактах, обозначенных одинаково.

GND и VCC заземлены и соответственно 5 В. Подключите их к земле и шине питания на макете.

Шаг 6: Подключение разъема 3,5 мм

Компонент на изображении имеет 3 вывода: два канала (справа и слева) и землю. В этом уроке создается только один канал аудио. Во время подготовки к уроку было непонятно способен ли ардуино контролировать два канала. В любом случае на изображении видно, что один вывод с разъема 3,5 мм остается несвязанным (в данном случае красный).

Одна из особенностей библиотеки управления звуком, используемой в этом примере, а также аппаратное обеспечение arduino, заключается в том, что pin 5 должен использоваться для вывода звука.

На изображении показан черный провод заземления с разъема 3,5 мм, подключенного к шине заземления макетной платы, и белый провод, подключенный к контакту 5.

Шаг 7: Подключение потенциометра

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

Тем не менее, один внешний штырь присоединяется к заземляющей шине (черный провод на изображении), а другой соединяется с шиной питания (красный провод на изображении).

Средний контакт (белый провод на изображении) подключается к выходу ANALOG на Arduino Uno (A0 на изображении). Эти контакты интерпретируют аналоговый вход, а не цифровые сигналы, как и остальные ардуины.

Шаг 8: Код

К сожалению, нет возможности много комментировать код. Итоговый вариант получился после изучения большого количества рекомендаций.

Этот код использует определенные библиотеки. В уроке мы не касаемся установки библиотек (что довольно просто). Сами ссылки на библиотеки ниже:

I2c ЖК-дисплея имеет адрес, который является частью кода. Вышеуказанная ссылка «i2c address finder» – это программа arduino, которая, хотя и не используется в коде, как и другие библиотеки, возвращает адрес I2c в SERIAL MONITOR (серийный монитор).

Ниже на изображении показан раздел кода в который должен быть введен ЖК-адрес. В этом случае адрес равен 0x3F.

Шаг 9: Итог

Прикрепите наушники к разъему 3,5 мм обычным способом. Подключите arduino к компьютеру через USB-порт. Используя программное обеспечение arduino, установите библиотеки и загрузите код.

В этом уроке сохраняется элемент из кода примера arduino, который включает и выключает встроенный светодиод. Это было полезно в процессе проектирования, чтобы обеспечить обратную связь с функциями программы, в то время как компоненты этого не сделали.

Источники:

http://adatum.ru/regulirovka-gromkosti-zvuka-s-arduino-po-i2c-na-kontrollere-pt2257.html

http://nikitakiselev.ru/article/releynyy-regulyator-gromkosti-na-arduino-nano

http://arduinoplus.ru/regulyator-gromkosti-arduino/

http://arduino.ru/forum/apparatnye-voprosy/spalil-kontroller

Ссылка на основную публикацию