В этом проекте мы собираемся создать развлечение с использованием Arduino. У всех нас есть привычка нажимать на стол или ручку для создания произвольной музыки. Конечно, это нельзя считать хорошим манерством, но всем нам нравится делать это хотя бы раз. Поэтому я подумал о том, чтобы вывести его на новый уровень, используя способность Arduino воспроизводить тоны. Как только вы создадите этот проект, вы сможете генерировать тоны, касаясь пальцами чего-либо проводящего, и создавать свои собственные ритмы, как если бы вы играли на пианино на ладони. Звучит круто, так что давайте построим это.
Необходимые компоненты:
Материалы, необходимые для этого проекта, перечислены ниже, их не обязательно придерживаться. Как только вы усвоите концепцию, вы можете использовать свой собственный способ ее создания.
- Arduini Pro Mini
- Пейзо спикер
- Гибкий датчик
- Пальцевые перчатки
- Резисторы 10 кОм
- BC547 Транзисторы
- Батарея 9В
Принципиальная схема и пояснения:
Принципиальная схема этого пальмового пианино Arduino показана ниже.
В проекте используется всего четыре датчика, то есть два гибких датчика и две пары Дарлингтона, действующие как сенсорные датчики. Мы также использовали два понижающих резистора R1 и R2 номиналом 10 кОм каждый, которые будут действовать как понижающие резисторы для датчика Flex. Здесь датчик Flex используется для генерации трех разных тонов одним пальцем в зависимости от того, насколько он согнут. Таким образом, мы можем воспроизвести 6 звуков двумя пальцами. Узнайте здесь о Flex Sensor.
Пара Дарлингтона:
Прежде чем мы продолжим, важно знать, что такое Дарлингтон и как именно он работает в нашем проекте. Пара Дарлингтона может быть определена как два биполярных транзистора, соединенных таким образом, что ток, усиленный первым, дополнительно усиливается вторым транзистором. Пара Дарлингтона показана на изображении ниже:
Как показано выше, мы использовали два транзистора BC547, коллекторы которых соединены вместе, а эмиттер первого транзистора соединен с базой второго транзистора. Эта схема действует как усилитель с коэффициентом усиления, что означает, что любого небольшого сигнала, подаваемого на базу первого транзистора, достаточно для смещения базы второго транзистора. Наше тело действует здесь как земля, поэтому всякий раз, когда мы касаемся базы транзистора, второй транзистор смещается. Воспользовавшись этим, мы создали сенсорный датчик для этого проекта.
Контакты номер 2 и 3 - это контакты прерывания на Arduino, которые будут вытягиваться высоко с помощью внутренних подтягивающих резисторов, а затем эти контакты будут заземлены всякий раз, когда переключатель Дарлингтона замыкается. Таким образом, каждый раз, когда мы касаемся провода (от базы 1- го транзистора), от Arduino будет запускаться прерывание.
Использование двух пальцев может воспроизводить только два типа тона, поэтому я также добавил датчик изгиба, который будет изменять тон в зависимости от того, насколько он согнут. Я запрограммировал воспроизведение трех разных тонов для каждого пальца в зависимости от того, насколько палец (датчик изгиба) согнут. Вы можете увеличить это число, если хотите, чтобы на кончиках ваших пальцев было больше тонов.
Я сделал всю плату на перфорированной плате, чтобы она легко умещалась в моих ладонях, но вы также можете использовать макетную плату. Просто убедитесь, что ваше тело в какой-то момент касается земли цепи. После того, как вы все припаяете, это должно выглядеть примерно так
Я использовал перчатки для двух пальцев, чтобы закрепить провода от пары Дарлингтона и датчика гибкости в положении, как показано выше. Вы можете придумать свою (лучше, если возможно) идею, как закрепить их на месте, пока вы играете свои тоны.
Программирование Arduino:
Программа для этого генератора тонального сигнала Arduino довольно проста. Нам просто нужно следить за прерываниями от проводов Дарлингтона, и если они обнаружены, мы должны воспроизводить тон, который зависит от того, насколько изогнутый датчик. Полный код приведен в конце этого поста, но я объяснил несколько важных фрагментов ниже.
Примечание: эта программа работает с помощью библиотеки «pitches.h». Поэтому убедитесь, что вы добавили файл заголовка в свою программу перед ее компиляцией. Вы можете скачать заголовочный файл pitches.h отсюда.
В функции настройки мы инициализируем контакты 2 и 3 как вход с подтягивающими резисторами. Мы также объявить их в качестве прерываний булавки и выполнить tone1 (), когда имеется прерывание на выводе 2 и функция tone2 (), когда есть прерывание на 3 - й штифтом. Эти прерывания будут срабатывать всякий раз, когда эти выводы получают НИЗКИЙ уровень из своего подтянутого состояния.
void setup () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
Внутри функции петли мы постоянно проверяем, насколько погнут датчик изгиба. Мой FlexSensor 1, например, дал значения около 200, когда оставил его ровным, и полностью опустился до 130, когда я согнул его до максимума, поэтому я сопоставил значение от 200 до 130 как от 1 до 3, так как мне нужно играть в 3 разных типа. тонов. Вам нужно настроить эти две строки в зависимости от значений вашего датчика Flex и количества тонов.
void loop () {flexSensor1 = map (analogRead (A0), 200,130,1,3); // Сопоставление с вашими собственными значениями на основе вашего гибкого датчика flexSensor2 = map (analogRead (A1), 170,185,1,3); // Сопоставление с вашими собственными значениями на основе вашего датчика гибкости}
Как мы видели ранее, функция tone1 () будет выполняться при обнаружении прерывания на выводе 2. Что происходит внутри функции tone1 (), показано выше. Мы смотрим на значения FlexSensor1 и проигрываем тон на основе значения flexSesnor. Тоны будут воспроизводиться с использованием функции тона Arduino. Мы объяснили функцию тон () в нашем предыдущем проекте.
void tone1 () {если (flexSensor1 == 1) тон (8, NOTE_D4,50); иначе, если (flexSensor1 == 2) tone (8, NOTE_A3,50); иначе, если (flexSensor1 == 3) tone (8, NOTE_G4,50); иначе тон (8, NOTE_D4,50); }
Следующая строка используется для воспроизведения тона. Вы можете играть любой тон, доступный в заголовочном файле «pitches.h». Вышеупомянутая строка, например, воспроизводит NOTE_A3 на выводе в течение 50 миллисекунд.
тон (8, ПРИМЕЧАНИЕ_A3,50); // тон (PinNum, Название ноты, Продолжительность);
За работой:
Когда ваше оборудование будет готово, загрузите код и закрепите его на пальцах. Убедитесь, что ваше тело в какой-то момент касается земли цепи. Теперь просто прикоснитесь к любому проводящему материалу или к своему телу, и вы сможете услышать соответствующий звук. Вы можете воспроизводить свою собственную мелодию или музыку, нажимая на разные интервалы и в разных позициях.
На видео ниже показана полная работа проекта. Надеюсь, вам понравилось создавать проект, любые предложения или вопросы можно публиковать в разделе комментариев ниже. Также проверьте наш Arduino Audio Player и Arduino Tone Generator Project.