Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Портативное емкостное сенсорное пианино

Компоненты и расходные материалы

Корпус ProtoStax для Arduino
ProtoStax для Arduino - стекируемые модульные корпуса
× 1
Adafruit 12 x Capacitive Touch Shield для Arduino - MPR121
× 1
Пьезозуммер Adafruit - PS1240
× 1
Arduino UNO
× 1
Лента из медной фольги с проводящим клеем
× 1
Комплект проводов для подключения, 22 AWG
× 1

Об этом проекте

В этом проекте я объясняю, как создать портативное емкостное сенсорное пианино с помощью

  • Arduino,
  • емкостный сенсорный экран для Arduino с использованием MPR121,
  • пьезозуммер,
  • лента из медной фольги с токопроводящим клеем (в форме клавиш пианино),

все они заключены в прозрачный акриловый корпус (ProtoStax для Arduino) с емкостными сенсорными клавишами, прикрепленными к его верхней поверхности. Это превращает его в красивое компактное маленькое пианино, на котором можно играть, играть на нем и записывать новые мелодии!

Для емкостного распознавания касаний я использую 12-кратный емкостный сенсорный экран Adafruit для Arduino с использованием MPR121 в сочетании с библиотекой Adafruit_MPR121, которая позволяет легко обнаруживать прикосновения к 12 различным проводящим поверхностям и реагировать на них.

Подождите минуту! В октаве 12 полутонов - C, C #, D, D #, E, E #, F, G, G #, A, A #, B! Идеально! Что ж, было бы здорово, если бы MPR121 обрабатывал 13 входов - это позволило бы нам перейти от C до C более высокой октавы, но есть еще много мелодий! (и я также предлагаю ниже предложения о том, как вы можете развить этот проект дальше, расширив диапазон октавы)

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

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

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

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

В этом примере я использую ProtoStax для Arduino, прозрачный акриловый корпус для Arduino - он подходит как для Uno / Leonardo, так и для большего размера Mega / Due - который также может быть штабелирован и модулен и имеет удобное место для двоих. Щиты (с небольшими изменениями, которые я опишу). Он прозрачный и прочный, а также имеет резиновые ножки, которые немного приподнимают его и защищают поверхность вашего стола. Верхняя поверхность корпуса также действует как клавиатура для сенсорного пианино - именно сюда вы будете наклеивать проводящую ленту из медной фольги! В конце концов, у вас будет изящное маленькое сенсорное пианино, которое вы можете легко носить с собой, демонстрировать и играть вместе! 😊

Хорошо, давайте начнем, ладно? 😊

Шаг 1. Установите Arduino на опорную пластину корпуса

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

Установите Arduino на опорную пластину и добавьте ножки и другое оборудование, чтобы подготовить корпус в конфигурации платформы . . См. Шаги ниже в слайд-шоу - заголовок для каждого изображения пронумерован и дает дополнительное объяснение для каждого шага.

Вот все шаги в виде анимированного gif:

Шаг 2. Подготовьте MPR121 Shield для Arduino

Я отрезал 12 кусков многожильного провода 22 AWG. Затем я припаял их к MPR121 Shield. Adafruit Shield имеет два больших отверстия для каждого из 12 входов для захвата зажимами из крокодиловой кожи. Между этими двумя отверстиями находится меньшее по размеру обычное отверстие, в которое можно вставить провод 22 AWG.

MPR121 Shield также открывает все контакты через отверстия рядом с заголовками. Я также припаял пьезо-зуммер PS1240, вставив одну ножку в контакт 12, а другую - в GND.

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

Шаг 3. Подготовьте корпус

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

Я взял верхнюю часть корпуса ProtoStax для Arduino и добавил к ней 12 отверстий, чтобы через них можно было вставить провода от входов экрана. Я использовал лазерный резак, чтобы вырезать отверстия, соответствующие шаблону клавиш пианино, но вы также можете легко использовать дрель (просто обязательно используйте малярный скотч на акриловой пластине перед сверлением). Небольшого отверстия диаметром 1/8 дюйма должно быть достаточно.

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

Затем я отталкиваю провода до тех пор, пока наружу не будут выступать только металлические части.

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

Вот шаблон для клавиш пианино и отверстий. Вы должны иметь возможность распечатать это на бумаге формата Letter 8,5x11 и иметь правильный размер (дайте мне знать, если у вас возникнут проблемы!)

В конце концов, это выглядит так:(Я мог бы лучше поработать с лентой из медной фольги, но я использовал ее впервые, так что, надеюсь, я поправлюсь с ней в будущем! 😊)

Шаг 4 - Демо-код

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

  • Нажмите C E G B, чтобы воспроизвести "Twinkle Twinkle Little Stars"
  • Нажмите C D E F G для увеличения или уменьшения масштаба.
  • Нажмите C D A B, чтобы сыграть "Oh Susanna!"
  • Нажмите C C # A # B, чтобы воспроизвести "Frere Jacques / Brother John".

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

Если вам интересно узнать больше о коде (а я знаю, что это так!), Читайте дальше!

Давайте быстро пройдемся по основным частям кода. Вы можете быстро сослаться на демонстрационный код здесь - https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo/blob/master/ProtoStax_CapacitiveTouch_Piano_Demo.ino

Код можно разделить на 3 части:

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

Вот быстрый взгляд на емкостную сенсорную часть кода. Как обычно, вы объявляете объект класса Adafruit_MPR121. В setup () вы вызываете метод begin () для его инициализации, и вы можете получить контактные площадки в loop (), используя метод cap.touched (). Просто!

  Adafruit_MPR121 cap =Adafruit_MPR121 (); void setup () {... // Адрес по умолчанию - 0x5A, если он привязан к 3,3 В, его 0x5B // Если привязан к SDA, его 0x5C, а если SCL, то 0x5D if ( ! cap.begin (0x5A)) {Serial.println ("MPR121 не найден, проверить проводку?"); в то время как (1); } ...} void loop () {// Получить контактные площадки, которых коснулись в данный момент currtouched =cap.touched ();}  

Используя данные касания, вы можете реагировать на прикосновения, воспроизводя соответствующий сигнал, и останавливая звук, когда кнопка не нажимается:

  // если это * касалось * и * не * касалось * раньше, воспроизвести соответствующий тон! if ((currtouched &_BV (i)) &&! (lasttouched &_BV (i))) {// Serial.print ("currtouched ="); Serial.print (тушеный); Serial.print ("lasttouched ="); Серийный принт (последний тронутый); Serial.print (""); Serial.print (i); Serial.println («тронут»); тон (TONE_PIN, шкала [i]); } // если его * коснулись *, а теперь * нет *, и, кроме того, не нажимается никакая кнопка, то остановите звук // Это позволяет плавно переходить между нотами, когда вы проводите пальцем по клавишам // Это также позволяет для сустейна данной ноты, прикоснувшись к любой клавише и удерживая ее нажатой - вы можете нажать другую клавишу, и она сыграет эту клавишу, но не перестанет играть // пока вы не отпустите свою первую клавишу - вроде как педаль сустейна пианино! if (! (currtouched &_BV (i)) &&(lasttouched &_BV (i)) &&! currtouched) {// if (! (currtouched &_BV (i)) &&(lasttouched &_BV (i))) {/ / Serial.print ("currtouched ="); Serial.print (тушеный); Serial.print ("lasttouched ="); Серийный принт (последний тронутый); Serial.print (""); Serial.print (i); Serial.println («выпущен»); noTone (TONE_PIN); }  

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

  // Играем мелодию, если нажата наша «секретная» комбинация клавиш! if (currtouched ==2193) {// C E G B playTune (мелодия, MELODY_LENGTH (мелодия), 2); // Воспроизвести Twinkle Twinkle Little Star} else if (currtouched ==181) {// C D E F G playTune (melody2, MELODY_LENGTH (melody2), 48); // Скольжение масштаба воспроизведения вверх и вниз} else if (currtouched ==2565) {// C D A B playTune (melody3, MELODY_LENGTH (melody3), 1); // Играть Oh Susanna! } else if (currtouched ==3075) {// C C # A # B playTune (melody4, MELODY_LENGTH (melody4), 1); // Играем Фрера Жака} else {...  

playTune () используется для воспроизведения мелодии, которая представляет собой массив «Note»

  void playTune (Примечание * m, int mSize, int speedUp) {noTone (TONE_PIN); // Начнем с чистого листа for (int thisNote =0; thisNote  

Давайте посмотрим на мелодию - она ​​состоит из массива нот. У каждой ноты есть частота и продолжительность. =

  typedef struct Note {int frequency; длительность плавания; } Примечание; // Эта мелодия воспроизводит все ноты октавы от C до B и обратно до CNote melody2 [] ={{NOTE_C, NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_D, NOTE_WHOLE}, {NOTE_DS, NOTE_WHOLE} , {NOTE_E, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_FS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE}, {NOTE_GS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_AS, NOTE_WHOLE, {NOTE_WHOLE}, {NOTE_WHOLE}, {NOTE_WHOLE} NOTE_AS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_GS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE}, {NOTE_FS, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_E, NOTE_WHOLE}, {NOTE_DS, NOTE_DS, NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_C, NOTE_WHOLE}};  

Здесь могут пригодиться #defines в файле pitches.h и noteDurations.h. Вы можете использовать их вместо фактических частот и продолжительности. Например, используйте NOTE_C, чтобы воспроизвести тон C, и используйте NOTE_WHOLE, чтобы воспроизвести его как целую ноту (NOTE_HALF, NOTE_QUARTER, NOTE_EIGHTH - это некоторые другие длительности нот). Вы также можете использовать макрос DOTTED (), чтобы указать "пунктирную" ноту, например DOTTED (NOTE_QUARTER).

[Примечание:точечная нота - это нота, продолжительность которой увеличена на другую ноту, равную половине ее длительности - например, пунктирная половинная нота эквивалентна 3/4 целой ноты (1/2 ноты плюс 1/2 из 1/2 примечания). ]

Это позволит вам взять любые ноты и записать их в свой набор мелодий!

В демо я расшифровал "Twinkle Twinkle Little Star", "Frere Jacques / Brother John" и "Oh Susanna!" так что у вас есть с чем поиграть (это не каламбур ?! 😜) - все эти песни умещаются в пределах одной октавы, что является ограничением нашей клавиатуры, которого я пытался придерживаться. Конечно, играя секретную мелодию, вы не ограничены этим пределом и можете использовать несколько октав. "О Сюзанна!" также немного сложнее, используя половинные, четвертные и восьмые ноты, а также четвертные и половинные ноты с точками - надеюсь, это поможет вам хорошо почувствовать, как легко транскрибировать другие мелодии.

Давайте посмотрим на это в действии, не так ли? 😊

Шаг 5 - Продолжаем!

Вот несколько идей по развитию проекта!

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

2. Добавьте второй пьезо, чтобы получить двухуровневую полифонию! Библиотека тонов использует Timer2 для отправки прямоугольной волны на пьезозуммер для воспроизведения тона. Arduino Uno имеет 3 таймера, хотя Timer 0 особенный и используется для таких вещей, как millis () и pwm. Остается использовать Timer1. Библиотека NewTone - это более оптимизированная версия библиотеки тонов, в которой используется Timer1. Таким образом, вы можете использовать два тона одновременно, например, один с использованием тона, а другой с использованием NewTone.

3. Добавьте одну или две дополнительные кнопки, чтобы добавить дополнительные функции - например, использование нажатия кнопки для увеличения октавы до более высокой или более низкой. Нажимая эти кнопки вместе с емкостными сенсорными клавишами, вы можете расширить диапазон на клавиатуре!

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

Удачного создания! 😊

Код

ProtoStax_CapacitiveTouch_Piano_Demo
Демо для ProtoStax Piano с ProtoStax для корпуса Arduino, Adafruit 12 x Capacitive Touch Shield для Arduino - MPR121, Piezo Buzzer и Arduino https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo.git

Изготовленные на заказ детали и корпуса

Шаблон для вырезания клавиш пианино для ProtoStax Capacitive Touch Piano и для сверления отверстий в верхней пластине

Схема


Производственный процесс

  1. Фортепиано
  2. Портативный туалет
  3. Игрок на фортепиано
  4. Arduino Spybot
  5. FlickMote
  6. Самодельный телевизор B-Gone
  7. Основные часы
  8. Игра Arduino Touch Breakout
  9. Arduino + светодиоды + MIDI-клавиатура + MuseScore =Piano Tutor
  10. Емкостной датчик отпечатков пальцев с Arduino или ESP8266