В этом уроке вы узнаете, как настроить 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, который включает и выключает встроенный светодиод. Это было полезно в процессе проектирования, чтобы обеспечить обратную связь с функциями программы, в то время как компоненты этого не сделали.
28 ноября 2020 в 13:54
Здравствуйте!
Повторил ваш проект, но возник вопрос. Откуда берётся звук с компьютера? Надо устанавливать определённый софт?