Оглавление:

Создание песен с помощью Arduino и двигателя постоянного тока: 6 шагов
Создание песен с помощью Arduino и двигателя постоянного тока: 6 шагов

Видео: Создание песен с помощью Arduino и двигателя постоянного тока: 6 шагов

Видео: Создание песен с помощью Arduino и двигателя постоянного тока: 6 шагов
Видео: Студенты российского вуза разработали вечный двигатель #вечныйдвигатель #изобретения 2024, Ноябрь
Anonim
Создание песен с помощью Arduino и двигателя постоянного тока
Создание песен с помощью Arduino и двигателя постоянного тока

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

Однако, когда я попробовал это сам, я обнаружил, что шаговый двигатель, который у меня есть, не может вращаться достаточно быстро, чтобы создавать звук. Вместо этого я использовал двигатель постоянного тока, который относительно просто запрограммировать и подключить к Arduino. Обычная микросхема L293D может использоваться для простого управления двигателем от вывода ШИМ Arduino, а встроенная функция tone () в Arduino может генерировать необходимую частоту. К моему удивлению, я не нашел в Интернете никаких примеров или проектов, использующих двигатель постоянного тока, и поэтому эта инструкция - мой ответ, чтобы исправить это. Давайте начнем!

P. S. Я предполагаю, что вы уже имеете некоторый опыт работы с Arduino и знакомы с ее языком программирования и оборудованием. Вы должны знать, что такое массивы, что такое ШИМ и как его использовать, как работают напряжение и ток, и это лишь некоторые вещи. Если вы еще не там или только начали Arduino, не волнуйтесь: попробуйте эту страницу начала работы с официального сайта Arduino и возвращайтесь, когда будете готовы.:)

Запасы

  • Arduino (я использовал UNO, но вы можете использовать другой Arduino, если хотите)
  • Стандартный двигатель постоянного тока 5 В, желательно с вентилятором (см. Рисунок в разделе «Сборка схемы»).
  • L293D IC
  • Столько кнопок, сколько нот в песне, которую вы хотите сыграть
  • Макетная плата
  • Провода перемычки

Шаг 1. Обзор

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

Шаг 2: Сборка схемы

Сборка схемы
Сборка схемы
Сборка схемы
Сборка схемы

Чтобы собрать схему, просто следуйте приведенной выше схеме Fritzing.

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

Шаг 3: Как работает схема

Как работает схема
Как работает схема

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

Выше представлена распиновка / функциональная схема L293D из его таблицы данных. Поскольку мы управляем только одним двигателем (L293D может управлять двумя), нам нужна только одна сторона ИС. Контакт 8 - это питание, контакты 4 и 5 - GND, контакт 1 - это выход ШИМ от Arduino, а контакты 2 и 7 управляют направлением двигателя. Когда контакт 2 ВЫСОКИЙ, а контакт 7 НИЗКИЙ, двигатель вращается в одну сторону, а когда контакт 2 - НИЗКИЙ, а контакт 7 ВЫСОКИЙ, двигатель вращается в другую сторону. Поскольку нас не волнует, в какую сторону вращается двигатель, не имеет значения, являются ли контакты 2 и 7 НИЗКИМ или ВЫСОКИМ, если они отличаются друг от друга. Контакты 3 и 6 подключаются к двигателю. Вы можете подключить все к другой стороне (контакты 9-16), если хотите, но имейте в виду, что контакты питания и PWM меняются местами.

Примечание. Если вы используете Arduino, у которого недостаточно контактов для каждой кнопки, вы можете использовать сеть резисторов для подключения всех переключателей к одному аналоговому контакту, как в этой инструкции. Как это работает, выходит за рамки этого проекта, но если вы когда-либо использовали ЦАП R-2R, вам он должен быть знаком. Обратите внимание, что использование аналогового вывода потребует перезаписи больших частей кода, поскольку библиотеку кнопок нельзя использовать с аналоговыми выводами.

Шаг 4: Как работает код

Чтобы упростить работу со всеми кнопками, я использовал библиотеку под названием «Button» от Madleech. Я первым делом включил библиотеку. Затем в строках 8-22 я определил частоты для нот, необходимых для воспроизведения Twinkle, Twinkle, Little Star (пример песни), булавки, которую я буду использовать для управления L293D, и кнопок.

В функции настройки я инициализировал последовательный порт, кнопки и установил вывод драйвера для L293D в режим вывода.

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

К сожалению, из-за того, как структурирована библиотека, я не смог найти способ проверить, была ли нажата или отпущена кнопка менее подробным способом, чем использование двух условных выражений для каждой заметки. Другой недостаток этого кода заключается в том, что если вы нажмете две кнопки одновременно, а затем отпустите одну из них, обе заметки будут остановлены, потому что noTone () останавливает создание любых заметок, независимо от того, какая заметка ее запустила.

Шаг 5: программирование песни

Вместо использования кнопок для воспроизведения нот вы также можете запрограммировать Arduino на автоматическое воспроизведение мелодии. Вот модифицированная версия первого скетча, в котором на двигателе воспроизводятся Twinkle, Twinkle, Little Star. Первая часть скетча такая же - определение частот нот и тона. Попадаем в новую часть при bpm = "100". Я устанавливаю количество ударов в минуту (уд / мин), а затем использую математику, чтобы вычислить количество миллисекунд на удар, которому соответствует уд / мин. Для этого я использовал метод, называемый анализом размеров (не волнуйтесь - это не так сложно, как кажется). Если вы когда-либо посещали курс химии в средней школе, вы определенно использовали анализ размеров для преобразования единиц измерения. Поплавки () нужны для того, чтобы ничего в уравнении не округлялось до самого конца для точности.

После того, как мы получили количество миллисекунд на долю, я разделил или умножил его соответствующим образом, чтобы найти значения миллисекунд для различных длительностей нот в музыке. Затем я составляю массив каждой ноты в хронологическом порядке и еще один с продолжительностью каждой ноты. Очень важно, чтобы индекс каждой ноты совпадал с индексом ее длительности, иначе ваша мелодия не будет звучать. В качестве примера я поместил ноты для Twinkle, Twinkle, Little Star, но вы можете попробовать любую песню или последовательность нот по своему усмотрению.

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

Шаг 6: обратная связь

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

Рекомендуемые: