Подключение динамика к ардуино уно

Звук в ардуино. Урок 7. Ардуино

Генерировать звук в Ардуино можно многими способами. Самый простой — это использовать функцию tone(). Поэтому, прежде всего, посмотрим как работает эта функция.

Генерируем звук на ардуино

Также существуют дополнительные платы, которые можно подключить к Ардуино с помощью перемычек. Но о них мы поговорим в дугой раз.

Сейчас посмотрим, как можно запрограммировать Ардуино для вывода звука. Для этого просто используем небольшой динамик.

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

Для выполнения этого урока нам понадобятся

  • Ардуино Uno
  • Макетная плата
  • Перемычки
  • 1 резистор номиналом 150 Ом
  • Потенциометр 10 кОм
  • Динамик 8 Ом
  • Кабель USB

Что такое звук

Во-первых, несколько слов о звуке. Что такое звук, какими свойствами он обладает, как люди воспринимают звук?

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

Звук в ардуино управляется двумя свойствами этих частиц. Частотой и амплитудой. Частота — это скорость вибрации, а амплитуда — это размах колебаний.

В физическом смысле звуки с большой амплитудой громче, чем с малой. Тон высокочастотных звуков выше, а низкочастотных, как видим на графике, — ниже.

Частота и амплитуда звуковой волны

Как работает динамик

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

Динамики работают так же для создания звука.

Схема громкоговорителя

Перед постоянным магнитом размещена звуковая катушка. Когда вы подаете на нее электрический сигнал, переменный ток создает магнитное поле, звуковая катушка перемещает диффузор вверх и вниз. Из-за вибрации диффузора из динамика раздается звук.

Функция tone()

Для работы со звуком в Ардуино предусмотрена функция tone(). Она создает меандр с заданной частотой и выводит его на выбранный контакт.

Функция tone() взаимодействует с одним из аппаратных таймеров контроллера ATmega, так что ее можно вызвать и продолжать работать с Ардуино, а звук будет играть в фоновом режиме.

Программа и схема

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

Сегодня мы хотим передавать на динамик данные из последовательного порта. А также, играть уже готовую мелодию.

Принципиальная схема подключения динамика к ардуино

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

Проверить работоспособность схемы очень просто. Используем функцию tone() и напишем простую программу чтобы продемонстрировать ее работу.

Поскольку функция tone() принимает несколько параметров, мы можем указать длительность сигнала. Поэтому будем использовать оператор setup() а не loop().

В результате выполнения этого кода, мы услышим высокий звук длительностью 1 секунду.

Ардуино и динамик

Теперь, если мы хотим использовать последовательный порт и принимать команды из него, используем функцию Serial.parseInt(). Для этого, будем считывать число из порта и передавать его как частоту в функцию tone().

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

Полный текст программы

Заключение

Сегодня мы рассмотрели еще один аспект работы с Ардуино. А именно звук в Ардуино. Более того, в будущем мы будем улучшать схему и программу этого урока. А в следующий раз подключим к схеме несколько кнопок и попробуем сыграть настоящую мелодию.

Источник

Динамики ардуино. Подключение динамиков к Arduino.

Для одного из проектов мне понадобилось вывести звук с Ардуино, как можно проще и бюджетнее. Можно было бы использовать пищалку, но у неё не такой диапазон частот, да и громкости маловато. Поэтому я решил подключить динамик.

Моей задачей было создать разные генераторы звуковых частот(эффектов). Как можно проще и по возможности разнообразнее.

А ещё подключенный динамик может выводить звуковые файлы. Для этого надо установить библиотеку PCM или TMRpcm. Но сразу скажу, что это в разы сложнее, и вам придётся готовить звуковые файлы определённым способом.
Гораздо лучше использовать DFPLAYER Mini. Это и проще и не грузит микроконтроллер. Как использовать плеер можно посмотреть здесь.

Скетч, как он работает и какие звуковые эффекты можно получить я покажу в конце.
Обычно в этом месте я показываю видео того что получилось, но сегодня я решил отойти от этой традиции, и сразу показать схему подключения.
Если вы когда-нибудь подключали пищалку к Ардуино, то, наверное, знаете, что её можно подключать как к контактам с Широтно-импульсной модуляцией, или по другому ШИМ или PWM, так и к обычным цифровым входам. А ещё для пищалки есть функция tone(). Кто хочет подробнее узнать, как подключать BUZZER, то советую посмотреть вот это видео.
Динамик надо подключать несколько иначе. Его не желательно, хотя и возможно, подключать напрямую к Ардуино.
Правильная схема подключения вот такая. Динамик подключается через транзистор. Транзистор можно использовать практически любой, NPN серии. Я обычно использую BC337, но можно использовать 2N2222.

Давайте сначала посмотрим, что получилось, а потом для тех кому интересно, я покажу как подключать динамик. Я помолчу, и мы просто послушаем.
Если есть мазохисты кто прослушал всё полностью, то напишите в комментариях.
Просто меняя значения, мы меняем звук. А я вас предупреждал. Как видите можно создать любой звуковой эффект, что мне и было нужно.

Вам понравится:  Микрофон универсальный fifine k669b

Про скетч я рассказывать не буду. Он очень короткий и не представляет интереса для сегодняшней темы. Думаю, что если захотите, то разберётесь сами.
Изменение звука происходит вот в этом цикле. Точнее не звука, а изменение длительности пауз между включением и выключением динамика, и количество срабатываний. Пауза высчитывается вот по этой сложной формуле. В цикле loop находится несколько функций, которые я подобрал и использовал в своём проекте. В каждой функции два параметра. Изменяя их вы сможете менять тональность.
Вот такой небольшой урок получился. Теперь вы знаете как подключить динамик к Ардуино, и поверьте это гораздо интереснее чем использовать пищалку.

Теперь давайте всё же посмотрим что получилось и как звучит динамик.

Если вам интересна эта тема, то я могу снять продолжение этого видео. Объём вашего интереса, я буду оценивать по количеству лайков и комментариев. Чем их будет больше, тем быстрее выйдет новое видео.
Ну, а если вам нравятся мои уроки, то ставьте лайк и делитесь моими видео, с другими. Это очень поможет мне в продвижении канала, а меня будет стимулировать выпускать уроки чаще и интереснее.
Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне. Ведь любой ваш просмотр — это знак YOUTUBE, что это кому-то интересно и что его надо показывать чаще.
Спасибо.
А пока на этом всё.

Источник

Arduino для начинающих. Урок 6. Подключение пьезоэлемента

Продолжаем серию уроков “Arduino для начинающих”. Сегодня собираем модель с пьезоэлементом (динамиком), которые используются в робототехники для управления звуками, издаваемыми роботом. В статье вы найдете видео-инструкцию, листинг программы, схему подключения и необходимые компоненты.

Пьезоэлемент — электромеханический преобразователь, одним из разновидностей которого является пьезоизлучатель звука, который также называют пьезодинамиком, просто звонком или английским buzzer. Пьезодинамик переводит электричеcкое напряжение в колебание мембраны. Эти колебания и создают звук (звуковую волну).

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

Видео-инструкция сборки модели:

Для сборки модели с пьезоэлементом нам потребуется:

  • плата Arduino
  • провода “папа-папа”
  • пьезоэлемент
  • программа Arduino IDE, которую можно скачать с сайта Arduino.

Что потребуется для подключения динамика на Arduino?

Схема подключения модели Arduino с пьезоэлементом:

Схема подключения пьезоэлемента (динамика) на Arduino

Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):

int p = 3; //объявляем переменную с номером пина, на который мы
//подключили пьезоэлемент
void setup() //процедура setup
<
pinMode(p, OUTPUT); //объявляем пин как выход
>
void loop() //процедура loop
<
tone (p, 500); //включаем на 500 Гц
delay(100); //ждем 100 Мс
tone(p, 1000); //включаем на 1000 Гц
delay(100); //ждем 100 Мс
>

Так выглядит собранная модель Arduino с пьезоэлементом:

Собранная модель подключения динамика на Arduino

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

Смотрите также:

Посты по урокам:

Все посты сайта «Занимательная робототехника» по тегу Arduino.

Наш YouTube канал, где публикуются видео-уроки.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Источник

Подключение динамика к ардуино уно

Arduino: Немного пошумим

В этой громкой статье маэстро Ник Вейч превращает свой Arduino
в музыкальный инструмент, употребляя слово «настройка» в буквальном смысле.

Во многих проектах Arduino — будь то хоровод светодиодов или контакты ЖК-экрана- ведущую роль играет свет. Это очень мило, но есть другие измерение, которым мы пока пренебрегали: это звук. Помигать перед кем-то светодиодами -штука хорошая, но люди ведь должны на них сначала посмотреть; прелесть же звука в том, что его не так легко игнорировать, в чем скоро убедятся ваши друзья и родные.

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

Сформировать собственный звук ненамного сложнее. Звук — это всего лишь ударная волна, и с подходящим генератором волн (например, динамиком) мы получим простые звуки прямо с выводов Arduino. Мало того, при всей несложности данной задачи, в ПО Arduino есть еще и специальная библиотека, которая об этом заботится.

Библиотека тонов формирует прямоугольные колебания (т.е. «вкл» и «выкл»), манипулируя внутренними генераторами тактов микросхемы Atmega. Она просто задает частоту и направляет результат на нужный вывод. Прямоугольные колебания дают грубый и сырой звук, но в этом есть и свои плюсы. В реальном мире вы вряд ли подключите эту схему к своей системе Hi-Fi, но она

прекрасно подойдет на роль дверного звонка. Помня обо всем этом, давайте покорежим классический опус- «Оду к радости» Бетховена. Так или иначе она нам подходит. Первое, что нам нужно знать — как сгенерировать звук. Это просто:

tone(pin, pitch, duration);

Обязательных аргументов у функции tone два: номер вывода (pin) и тон (pitch). Третий, необязательный аргумент- продолжительность звучания (duration). Номер вывода — обычный номер контакта Arduino. Тон — это произвольно указанная частота; воспроизводить стандартные ноты вы не обязаны.

Для вашего удобства, в библиотеке есть заголовочный файл с определениями нот, поэтому можно пользоваться такими обозначениями:

Оба варианта вызова воспроизведут одну и ту же ноту [«соль» средней октавы, — прим. ред.]. Если продолжительность звучания (целое число миллисекунд на воспроизведение ноты) не указана, то в нужный момент придется его остановить:

Вам понравится:  Подключи колонку заново к сети

В один момент времени можно воспроизводить несколько нот; в стандартном Duemiianove Arduino — до трех, но в большинстве случаев на практике есть ограничение в две ноты. Это связано с тем, что для получения прямоугольной волны используется встроенный генератор тактов, который также обеспечивает генерацию ШИМ-сигналов и функцию внутреннего таймера миллисекунд. Заняв его тремя нотами, вы больше не сможете отследить прохождение времени, что может стать проблемой. Учитывая качество звука, получаемого с такой схемой, часто достаточно вообще одного канала.

Итак, звуки издавать мы теперь умеем, но как создать музыку? Для каждой ноты нам нужно знать три вещи — тон, время звучания и интервал до следующей ноты. В примерах из библиотеки мелодий эти параметры хранятся в различных массивах, что, с одной стороны, упрощает код, а с другой — усложняет его понимание. В идеальном случае всю информацию о мелодии нужно хранить в одном массиве. Тут нам помогут структуры — struct, это пользовательский тип данных, который легко определить и которым удобно пользоваться. Он пришел из стандартного языка С, на котором, кстати, мы и пишем большую часть кода для Arduino (удивлены? — а мы вроде об этом упоминали). Вот синтаксис объявления структуры:

Структуру для ноты можно организовать так:

struct note <
uint16_t pitch;
uint8_t duration;
uint8_t pause;
>;
note first=<880,12,8>;
int duration =first.duration*25;

Мы создали простую структуру данных с тремя значениями. Частота- 16-битное целое число (0-65535), а продолжительность звучания и пауза — 8-битные числа (0-255). Два последних значения являются скорее условными, чем истинными. Время нужно задавать в миллисекундах в диапазоне где-то от 50 до 2000. Но если хранить эти значения в 16-битных числах, для хранения каждой ноты понадобится на 50 % больше места (шесть байт вместо четырех), и мы сильно раздуем объем требуемой памяти. Так как нам вряд ли нужно воспроизводить ноты с миллисекундной точностью, проще хранить в памяти меньшие числа, а при использовании умножать их на коэффициент. Если умножать их на 25, получится диапазон от 0 до 6375, т.е. более шести секунд, и этого должно быть вполне достаточно.

Сами ноты тоже при желании можно уместить в один байт — если вы будете играть музыку, то скорее всего по нотам, а не звуками произвольной частоты, поэтому можно ограничиться диапазоном 255 нот (уж этого-то хватит!), который поместится в одном байте (еще одно беззнаковое 8-битное целое число). Наконец, стоит ввести обозначения для нот, которые мы хотим воспроизводить:

// notes in the melody:
enum ;
static const uint16_t frequency[] = <
784, // GG
880, //A
988, //B
1047,
1175,
1319,
1397,
1568//G
>;

Объявление их как статических констант означает, что значения никогда не будут и не смогут измениться. Вы можете счесть это скаредными попытками сэкономить используемое место, но иначе память растратится довольно быстро. Пусть наша мелодия не слишком длинная, но хранение данных таким образом сэкономит до 1 КБ даже на коротком наигрыше, и это важно, если вы намерены сделать в программе что-то еще.

Теперь можно перейти к мелодии. Для краткости мы приведем только первый такт «Оды к радости», но в листинге DVD приведена вся мелодия:

Пробелы при парсинге кода не воспринимаются, и вы можете отформатировать свой код так, чтобы его было проще читать или редактировать. Для каждой ноты приведены частота, продолжительность и пауза. Пауза всегда длиннее продолжительности, потому что в коде мы сделаем так, чтобы пауза включала время воспроизведения всей ноты. Наконец, нам нужен код для воспроизведения мелодии:

void loop() <
for (int i = 0; i

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

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

Вывод можно подключить к готовому усилителю (но сначала подключите делитель напряжения! Линейные входы обычно используют напряжение 1 В, а не 5 В) или собрать свой собственный. Существует множество схем простых усилителей для больших динамиков, а поскольку качество звука будет не слишком хорошим, если не пропустить его через несколько стадий фильтрации, выбирайте легко узнаваемые мелодии.

Рис. 1. Подключение динамика к Arduino. Рекомендуется,
хотя и не обязательно, использовать конденсатор.

Рис. 2. С помощью простого операционного усилителя/усилителя
мощности можно подключить схему к более мощным и громким
динамикам; либо подключите схему к отдельному усилителю через делитель напряжения.

В следующей строке мы воспроизводим ноту с помощью функции библиотеки тонов. Мы выдаем ее на вывод 7 (он не хуже любого другого), и это первый аргумент функции. Частоту ноты возьмем из созданного ранее массива. В качестве индекса мы используем значения из перечисления, которые хранятся в нашем массиве tune в поле структуры pitch . Так, tune[i].pitch содержит число от О до 7 (числами мы обозначили ноты, для простоты прочтения), которое используется в качестве индекса массива, где хранятся настоящие частоты.

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

Пауза между нотами реализуется стандартной функцией delay() , которая аналогичным образом использует данные из массива tune . Чтобы гарантированно прервать воспроизведение, можно было вызвать функцию noTone(7) , но на практике в этом нет необходимости.

Для воспроизведения мелодии можно подключить небольшой динамик прямо к выводам Arduino. Но чтобы не повредить сам динамик, понадобится небольшой резистор — где-то в диапазоне от 100 Ом до 1 кОм. Если вы используете пьезоэлемент или пьезодинамик, без резистора можно и обойтись: они часто обладают большим внутренним сопротивлением, рассчитанным на сигналы логических уровней. Формула, которую вам нужно знать, выглядит так:

Это всего лишь приближение! Динамики устроены сложнее, чем вы думали — они содержат индуктивную нагрузку, и в определении мощности по отношению к динамику есть масса тонкостей. Нам же важно просто его не сжечь, поэтому достаточно и приближенной формулы; но требуются меры предосторожности. В данном случае R — резистивная нагрузка (сопротивление динамика должно быть указано на его задней поверхности — обычно это 4,8 или 16 Ом), а V — пиковое напряжение — в нашем случае 5 В без использования усилителя мощности. С нагрузкой 16 Ом это даст нам примерно 1,5 Вт.

Вам понравится:  Не работает левый наушник hyperx cloud core

Что произойдет при перегрузке динамика? Пьезоэлемент, если не доходить до беспредела, просто будет издавать ужасные звуки, пока не выйдет из строя, но вообще-то на удивление вынослив. В обычном динамике с бумажным конусом и сердечником вы либо повредите сердечник, либо растрясете его на части, либо повредите конус — а часто и то, и другое, и третье; поэтому здесь тоже нужно принять меры предосторожности. Из-за способа своего изготовления динамики чреваты также опасностью для Arduino.

Крошечный пьезоэлемент не причинит ему вреда, но чем больше индуктивность, тем больше шумы скачков напряжения и тем больше мощность цепи. Хотя в цепях для управления динамиками с помощью Arduino, которые вам могут встретиться, его обычно нет, рекомендуется добавить развязывающий конденсатор емкостью около 250 мкФ, подключив его выход к «плюсу» динамика. Он не только сглаживает переходные процессы, но и поглощает постоянную компоненту сигнала, и сердечник будет перемещаться в обоих направлениях, как и предписано его природой.

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

Дело в том, что в цепях переменного тока компоненты ведут себя по-другому, и это заметнее всего на примере скромного конденсатора. В цепях постоянного тока мы пользовались конденсаторами для буферизации напряжения и сглаживания переходных процессов, и, возможно, иногда использовали их в качестве примитивного таймера. С переменным током они ведут себя иначе: они его пропускают. На самом деле никакого тока через них не течет — они просто сохраняют и освобождают электрическую энергию (это если вы не пробьете конденсатор, подав на него слишком большое напряжение, чего мы делать не советуем, потому что он щелкнет и премерзко завоняет), но из-за циклической зарядки и разрядки обоих пластин создается видимость прохождения тока.

Это поведение зависит только от частоты приложенного напряжения и, разумеется, емкости самого конденсатора — если вникнуть, то чем выше частота, тем больше циклов зарядки и разрядки выполняется каждую секунду, и тем больше ток, «проходящий» через конденсатор. Свойство зависимости от частоты называется реактивным сопротивлением компонента и определяется по формуле

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

Простой резистор и конденсатор (RC) можно использовать в качестве делителя напряжения сигнала, изменяющего его уровень в зависимости от частоты. Это означает, что сигналы с одними частотами пройдут через эту цепочку без изменений, а сигналы с другими — существенно снизятся; что и пригодится для подавления нежелательных сигналов и наводок в нашей системе. Частотный диапазон звука, слышимого человеческим ухом, нам известен, и можно отфильтровать ненужные колебания, подобрав подходящий конденсатор.

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

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

Хотя в нашей мелодии каждая нота описана тремя байтами, можно легко уместить все три значения высоты ноты, продолжительности звучания и паузы в один байт. В одной мелодии вряд ли будет задействовано более трех октав — это 32 значения. Как видно из нашего примера, продолжительность звучания и пауза также не превышали 32 каждая.

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

Когда зуммер — не зуммер

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

давления). Раньше зуммеры содержали какой-нибудь осциллятор для генерации собственных сигналов. Теперь, даже несмотря на то, что иногда их называют зуммерами, многие пьэзоэлементы представляют собой просто замену динамикам (т.е. вам нужно подать на них свой сигнал), хотя по своим звуковым характеристикам они больше подходят для воспроизведения «воющих» звуков, а не музыки — и это одна из причин, по которой аудиооткрытки так бесят именинников! Собравшись приобрести такую, предварительно озаботьтесь прослушиванием покупки.

В онлайн-руководстве по Arduino есть прекрасное описание побитовых функций: http://www.arduino.ee/en/Reference/Bitwise.

Сигналы с простой схемы

Осциллографы есть не у всех, поэтому вот примеры выходных сигналов нашей схемы.

Выход Arduino, к которому ничего не подключено. Нулевая точка — в середине, и вы видите аккуратные прямые линии и четкие переключения.

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

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

Источник

Поделиться с друзьями
Радиолюбительские схемы
Adblock
detector