Иван Иванов   11 марта в 14:09

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

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

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

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

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

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

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

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

  • потенциометр
  • 3,5 мм разъем
  • ЖК

Также на изображении выше можно заметить чип 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: Код

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

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

github.com/connornishijima/arduino-volume1 // библиотека громкости

playground.arduino.cc/Main/I2cScanner // i2c

github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library // ЖК + i2c

Сам код:

#include <Volume.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display

LiquidCrystal_I2C lcd(0x3F, 16, 2);

int inPin = 2;
int outPin = 13;
int spkr = 5;
int state = HIGH;
int reading;
int previous = LOW;

long time = 0;
long debounce = 200;

bool play = false; // boolean variables are either true or false
Volume vol;

float mv = 0;
void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
pinMode(spkr, OUTPUT);
vol.begin();
// initialize the LCD lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.print("Volume:");
}

void loop()
{
mv = constrain(analogRead(A0) / 10, 0, 100) / 100.00;
lcd.setCursor(7,0);
lcd.print(String(int(mv*100)) + "% ");
delay(20);

if (play == true) //if the boolean "play" is equal to true then do this...
{
vol.tone(1000, 255 * mv); //makes sound
}
else // if the boolean "play" is not equal to true then do this...
{
vol.noTone();
}

reading = digitalRead(inPin);

if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH) {
state = LOW;
play = true; /// set the boolean to true
}
else {

state = HIGH;
play = false; // set the boolean to false
time = millis();
}
}

digitalWrite(outPin, state);
// analogWrite(spkr, state);
previous = reading;
}

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

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

Шаг 9: Итог

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

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