Самодельные электронные ударные

Тема в разделе "Arduino & Shields", создана пользователем Dan, 24 дек 2016.

  1. sslobodyan

    sslobodyan Гик

    Спасибо за спасибо ;)
    Если вы всерьез хотите сделать барабаны, настоятельно рекомендую добавить диод Шоттки и потом конденсатор пик на 100-150 к земле. Дело в том, что хотя я старался максимально быстро сканировать датчики, но все же на переключение и опрос тратится много времени и замеры амплитуды датчика могут попасть сначала на поднимающийся, а потом на спадающий участок графика напряжения с пьеза. То есть можно пропустить самый пик напряжения и получить более слабый уровень удара. А конденсатор как раз будет накапливать это напряжение (диод не даст разрядиться обратно на пьез).
     
    pk_vital нравится это.
  2. pk_vital

    pk_vital Нерд

    обязательно попробую))
    А есть возможность активировать цифровые входы?
    Есть желание подключить педаль
    хай хэта (закрыт-открыт) и басбочку простой кнопкой.. там динамика не особо важна(нам).
     
  3. sslobodyan

    sslobodyan Гик

    Осмелюсь спросить - а вы чуток рубите в ардуине? Там я написал все так просто, что добавить пару своих кнопок - да без проблем. Если не получится - опишите точно что вы хотите, попробую помочь :)
     
    pk_vital нравится это.
  4. pk_vital

    pk_vital Нерд

    начинаю осваивать.. непойму просто - как объеденить 2 скетча
    1й ваш и 2й миди клава простая... кстати можно будет собрать тогда миди клаву с драм пэдами..
    Но сейчас будем собирать барабаны, под рукой только UNO и Нано. мегу закажем кнечно, но пока думаю что можно не всю установку собирать на пьезах. грубо говоря задействовать кнопки по аналогии - нажал - прозвучала нота с жестко заданой Velosity. нутром понимаю что там пару строк дписать ...
    //ножка датчика
    const unit8_t kick_pin[PIEZ_CNT]={A0,A1,....,4,5,6,7,8,9}
    в следующей строке тоже самое
    и куданибудь рядом с
    Int abc = analogRead...
    воткнуть digitalRead.. ))
     
  5. sslobodyan

    sslobodyan Гик

    Не, нутро ваше ошибается. Не надо вам мешать барабаны с клавой - это разные инструменты :)
    Если есть мелкая дунька, то у нее только 8 аналоговых портов. Так что смело уменьшайте PIEZ_CNT до 8 и соответственно все массивы до 8 значений.
    Для барабанов вам надо доделать контроль педали открытого/закрытого хэта и глушилку тарелок. Примерно так.
    Код (C++):
    #define TARELKA 6 // номер сенсора с тарелкой
    #define PIN_STOP_TARELKA 3 // нока куда впаяли кнопку

    void loop(){

        if ( mute[TARELKA] == false ) { // если тарелка сейчас играет
            if ( digitelRead( PIN_STOP_TARELKA ) == LOW ) { // если нажали кнопку глушения
                noteOn(DRUM_CHANNEL, kick_note[TARELKA], 0); // глушим тарелку
            }
        }
     
    Не забудьте в сетапе настроить ножку с кнопкой на вход с подтяжкой.

    А обработку открытого/закрытого хэта надо делать перед включением ноты.
    Код (C++):
     
      if (velocity > 127) velocity = 127;
      if (piez_idx == KANAL_HAT) {
         if ( digitalRead( KNOPKA_HAT ) == LOW ) {
           noteOn(DRUM_CHANNEL, OPEN_HAT, velocity); // играем открытый хэт
         }
         else {
           noteOn(DRUM_CHANNEL, kick_note[piez_idx], velocity); // играем ноту из массива - закрытый хэт
         }  
       }
      else {
         noteOn(DRUM_CHANNEL, kick_note[piez_idx], velocity); // играем остальные ноты из массива
       }
       tm[piez_idx] += kick_mute_time[piez_idx];
     
    Тоже не забудьте перевести ножку с кнопкой KNOPKA_HAT на вход с подтяжкой. Датчик хэта сидит на входе KANAL_HAT. Нота открытого хэта OPEN_HAT.

    PS Специально не пишу весь скетч, а только что надо добавить/изменить. Это же творчество, а не купил дуню, скачал скетч, без балды залил и считаемся крутым программером-электронщиком, хотя как оно работает - ни в зуб ногой ;)
     
    pk_vital нравится это.
  6. pk_vital

    pk_vital Нерд

    Педаль хэта работает!!! Респектище огромный Вам! А вот с глушилкой никак не справлюсь... Хотел добавить звук открывающегося(закрывающегося) хэта при нажатии на педаль... тоже не удалось пока. копаю потихоньку :)
    drum_amperka_Drum.ino
     

    Вложения:

  7. sslobodyan

    sslobodyan Гик

    Вот получаю удовольствие, когда помогаешь человеку самостоятельно развиваться :) Сделаю одно замечание - кнопки вы настроили на вход, но без подтяжки. Резисторы добавляли к плюсу питания? Или может все таки INPUT_PULLUP?
    И ждем описание как делали пэды и тарелки. И что воспроизводит у вас звук.
     
    pk_vital нравится это.
  8. pk_vital

    pk_vital Нерд

    резистор 10к на землю.. ))) долго думал про подтяжку, так и не додумал))
    пэды:
    1. кодла(боковины) будут нарезатся со старых барабанов (альт распилить пополам и 2 пэда готово)
    минус этого варианта в том, что такие барабаны слишком громкие по своим акустическим свойствам(хотя можно и заглушить поролоном.
    см. фото (взято на просторах сети)
    Partial.jpg
    или из оргстекла(акрила,фанеры, алюминия,пласика) гнуть. тогда нужно фанерное дно к которому будет натягиватся сетка. см фото (взято на просторах сети)
    X4_1.jpg
    2 Барабаны будут с сетками, чтоб по реалистичней отскок и все такое.
    в качестве сетки пока купил канву(на ней крестиком вышивают) и пришил к веревке... натянул на пионерский барабан для эксперимента. фото ниже мое
    IMG_3788.JPG IMG_3789.JPG
    3 для натяжки сетки - стандартный металлический обод
    или из фанеры...см фото (взято на просторах сети)
    2011-01-23_DSC_4865{jpg{800{85.jpg
    А вот очень понятное видео где можно подробно рассмотреть заводской пэд в разрезе


    про систему съема сигнала напишу позже... не все эксперименты проведены...
    Тарелки делать просто (как на фото выше), но еще пофантазируем...
    про звук и задержку....
    пока у меня все подключено через эмуляторы в FL11 плагин ezdrumer ... в стандартном режиме задержка большая, но как только я подключаю внешнюю звуковую карту (практически любую с поддержкой асио и настройкой этого самого асио) задержка становится практически незаметна, вполне можно играть(хоть на сцене)
    в будущем будет либо так http://arduino.ru/forum/proekty/midi-kontroller-na-arduino-uno-hiduino
    либо через миди звучку по миди порту.
     
    Последнее редактирование: 6 фев 2017
  9. sslobodyan

    sslobodyan Гик

    Нет, подтяжка к плюсу должна быть. У вас же опрос нажатой кнопки по LOW? И кнопка подключает вход к земле?
    Кстати, если скорость порта выставлена в 31250 как у меня, то цепляете прямо к выходу ТХ резистор в 180-220 ом и подаете на МИДИ вход настоящего семплера.
     
    pk_vital нравится это.
  10. pk_vital

    pk_vital Нерд

    я понял вас) image.jpg
    уменя было pull down, а надо Pull up.сейчас попробую..
    В скетче у меня частота 115200.
    я подключаюсь по USB. звуковой карты с миди входом-выходом нет пока(как подключить к дуне железный миди разём видел), поэтому пользуюсь программой serial midi converter V2D. Но есть Внешняя звуковая карта Behringer uca200. на ней usb шнур, серео вход и выход тюльпанами. Так вот если выводить звук с неё, то задержки нет.
     
    Последнее редактирование: 6 фев 2017
  11. pk_vital

    pk_vital Нерд

    перепаял кнопки, разницы нет... хэт как работал так и работает (открыть-закрыть)что хорошо, крэш не гасится..
     
  12. sslobodyan

    sslobodyan Гик

    Сорри, как то не подумавши написал на счет крэша. Вот вам правильный кусочек.
    Код (C++):
    byte btn_crash_cnt=0; // счетчик для игнора дребезга кнопки
    #define MAX_CRASH 5; // сколько проходов антидребезга - подобрать

    void loop(){
     
        if( piez_idx == CRASH ) { // обрабатываем канал крэша
            if (digitalRead[PIN_CRASH_STOP] == LOW) { // и при этом нажали кнопку
                if (btn_crash_cnt < MAX_CRASH) {
                    btn_crash_cnt++;
                    if (btn_crash_cnt == MAX_CRASH) {
                        noteOn (DRUM_CHANEL,kick_note[CRASH],0); // глуши тарелку
                    }
                }
            } else {
                btn_crash_cnt = 0; // еще дребезг либо отпустили кнопку
            }
        }
     
     
    pk_vital нравится это.
  13. pk_vital

    pk_vital Нерд

    не, не хочет :). пробовал INPUT со схемой соединения кнопок пул ап, пул даун; пробовал INPUT_PULLUP
    со схемой соединения кнопок пул ап, пул даун, и просто землю на пин... во всех случаях кнопка хэт работает...
    а вот тарелка не гасится... #define MAX_CRASH 5; выставлял 0,1,5,50,500 разницы нет...
    может дело в том что при посыле ноты с уровнем veloсiti=0 не гасится основная нота... потому что если ударить по тарелке сильно а затем слабее то будет звучать громкая нота, а на ее фоне тихий бздынь (как мог объяснил:))при этом громкая продолжит звучать...проверил отдельно на примере кнопки хэта .
     
  14. mcureenab

    mcureenab Гуру

    MIDI::sendNoteOn и MIDI::sendNoteOff отправляют разные MIDI команды. sendNoteOn с velocity=0 в общем случае не заменяет sendNoteOff.

    http://www.electronics.dit.ie/staff/tscarff/Music_technology/midi/note_on_off_messages.htm

    https://github.com/FortySevenEffects/arduino_midi_library/blob/master/src/MIDI.hpp
     
    pk_vital нравится это.
  15. sslobodyan

    sslobodyan Гик

    А в чем проблема заменить noteOn на noteOff и проверить?
     
    pk_vital нравится это.
  16. pk_vital

    pk_vital Нерд

    пробовал до этого... сейчас еще раз проверил... безрезультатно. еще загрузил виртуальный синт...так вот в нем при ударах по датчикам срабатывают клавиши и.... залипают пока резет на дуне не ткнеш. или на экране мышью не нажмешь на залипшие...
    .drum_amperka_1.3.ino
     

    Вложения:

  17. sslobodyan

    sslobodyan Гик

    Теоретически барабаны на 10 канале не требуют ноте_офф. По крайней мере, виндовсячий миди-проигрыватель их не требует. Железячный модуль у меня тоже не требовал. А если назначить пэды на другой канал (не ударных), то там да, требуется посылка ноте_офф, иначе нота залипает.
    Конечно, можно доделать скетч для отсылки ноте_офф, там еще два массивчика надо и одну проверочку, но пока без меня :) Я свою тестовую установку разобрал и использую в другом проекте, а теоретическими изысканиями заниматься не хватает времени. :(
     
    pk_vital нравится это.
  18. pk_vital

    pk_vital Нерд

    Да, для самих барабанов noteOff и не надо. Скетч звучит очень по живому и является "прожиточным минимумом" для барабанщика :). остальное - дело наживное и не принципиальное. Я вообще не видел чтоб в нашей группе барабанщик тарелки глушил)).Это из серии "не знаю зачем, а вдруг пригодится". Но по вашему совету конечно попробую прописать в скетч выключение ноты. ну и чтоб пост был не флудильным - картинка "нет предела совершенству" ;) 1.jpg
     
    sslobodyan нравится это.
  19. sslobodyan

    sslobodyan Гик

    Переделать мой скетч под мультиплексоры не сложно. Да, диоды на входах обязательны - у мультиплексоров 4051 нет защиты от отрицательного напряжения. И желательно вместо дуины перейти на платку с STM32F103. Цена до 2 баксиков на али, зато тактовая 72Мгц что даст бОльшую скорость опроса и лучшее определение силы удара. Программируется как дунька. Даже попадалась на глаза разработка, где эта платка была сразу с миди-юсб выходом.
     
    pk_vital нравится это.
  20. sslobodyan

    sslobodyan Гик

    Поискал по картинке и вышел на тему http://arduino.ru/forum/apparatnye-voprosy/ochen-silno-shumyat-multipleksory-4051 Там вполне рабочий скетч, естественно без педалей :)
    Посмотрел на цены готовых триггеров и "мозгов" - просто прозрел. Фирмачи таки неплохо навариваются.
    Интересно, наверное, сделать такой "конструктор канала", в котором прописать какие команды будут выдаваться при сработке датчика. Например, включить ноту барабана и одновременно включить ноту тарелки. Хотя лучше включить ноту барабана и выключить ноту корпуса и наоборот при двухзонном датчике. Тогда на каком-то датчике легко навесить "выключить ноту тарелок" - вот вам и глушилка. Наверное, три команды с одного датчика было бы достаточно.
     
    pk_vital нравится это.