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

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

  1. mcureenab

    mcureenab Гуру

    Это хорошо ))). Судя по даташиту на вход МК можно не более Vcc + 0.5 Вольт подавать. Т.е. примерно 5.5 Вольт.
     
  2. sslobodyan

    sslobodyan Гик

    Это не совсем так, можно подать и больше, но через токоограничительное сопротивление. Можно даже 220 подать (многие так переход фазы через ноль определяют). Главное - ток, возникающий от превышения 5.5 вольта не должен пробить диоды внутри чипа.
     
    mcureenab нравится это.
  3. Dan

    Dan Гик

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

    Dan Гик

    и еще я слышал, что 1 МОм это большое сопротивление для пьезы и от этого помехи и наводки, может такое быть?
     
  5. sslobodyan

    sslobodyan Гик

    1 мегаом ставится впараллель с пьезой для того, чтобы снять статику и разрядить емкость. Я ж писал, что пробовал ввобще без ничего, только сам датчик. И еще с резистором в 100ком (какой попал под руку) - особых различий не заметил. Так что этот резистор кардинального значения не имеет.
     
  6. Dan

    Dan Гик

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

    sslobodyan Гик

    Фантомные ноты еще есть?
    Максимальное значение громкости?
    В сетапе референс к 1.1 вольта стоит?
     
  8. mcureenab

    mcureenab Гуру

    Понятно. Нагуглил на эту тему http://www.scienceprog.com/using-current-limiting-resistors-on-avr-io-pins/
     
  9. rkit

    rkit Гуру

    Что это за самоубийцы так переход через ноль определяют? Бред чудовищный.
    Через оптопару это делается всегда.
     
  10. Dan

    Dan Гик

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

    sslobodyan Гик

    У нас тема не об оптопарах. Не будьте столь категоричны на счет бреда. Чуть выше хорошая ссылка как работать с высоким (10 вольт это тоже высокое для чипа)
     
  12. sslobodyan

    sslobodyan Гик

    Параметр kick_mute_time задает время игнорирования датчика. Оно должно быть больше, чем реальное время затухания, но не сильно большое, иначе будут пропускаться быстрые дроби. Подбирайте эмпирически.
    Если появляются фантомы - ставьте больше, пока фантомы не пропадут. Начинайте с 500 с шагом 500.
     
    Последнее редактирование: 15 янв 2017
  13. sslobodyan

    sslobodyan Гик

    Подключил к ардуине. Постучал тихонько. Показалось мало, постучал сильнее. И ведь знал, что надо впаять диоды. Думал, что пронесет. Ага, пронесло. Остался я с ардуиной без АЦП. Так что помощь моя на этом закончилась, пока не поменяю контроллер :(
    Рекомендую ТС посмотреть на разработку MegaDrum. Там на форуме у них доступны и прошивки и схемы. Если конечно не стоит цель разобраться самому. Так вот входной узел у них очень простой: через резистор в 100 ом сигнал идет на пару диодов Шоттки к земле и питанию (ограничители по положительному и отрицательному напряжениям) и все. Дальше все математика.
     
  14. Dan

    Dan Гик

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

    mcureenab Гуру

    ХМ. Защитные диоды в Ардуине на пин заведены, а дальше коммутация идет к функциональным блокам МК. Может только один пин пробило, а АЦП сохранился?
     
  16. mcureenab

    mcureenab Гуру

    Судя по картинкам народ пьезы в корпусе с резонатором использует и стучит по корпусу, а не по керамике.
    Кроме электроники еще придется адекватный корпус делать. Иначе датчик долго не проживет.
     
  17. Dan

    Dan Гик

    я стучу по датчику, но в дальнейшем хочу его приклеить к пэду, чтобы стучать не по датчику
     
  18. Dan

    Dan Гик

    попробовал "поиграть" значениями kick_mute_time и kick_sample_time и выставил такие значения:
    Код (C++):
    uint16_t kick_sample_time=260;
    uint16_t kick_mute_time=350;
    Все равно что-то непонятное происходит с ударами. Нет фантомных нот, но и удары некорректно звучат. Могут быстрее отзвучать 2 ноты, а могут медленнее при одной и той же скорости удара пальцем по датчику.
    Возможно, что все-таки проблема самом датчике. Буду искать
     
    Последнее редактирование: 16 янв 2017
  19. sslobodyan

    sslobodyan Гик

    Блин, не поверите. Написал тут здоровенный пост как и что я делал и как умер проц. Пока не начал копировать текст отладочного скетча. И увидел в нем простую описку, из-за которой не работал опрос АЦП. Мужики, я снова в деле :) ! Я таки его домучу :)
     
  20. sslobodyan

    sslobodyan Гик

    Результаты.
    1. Подключил наиболее примитивно. Пьез, параллельно ему резистор на 1М, потом резистор в 1К на вход АЦП. Никаких конденсаторов. Стоял еще один диод на плюс питания, но пока работает и без него.
    2. Упростил алгоритм. Оказалось, что ждать пока пьез сядет в 0 нельзя - идут колебания через 0. Так что применяем вариант попроще - тупо ждем какое-то время. У меня получилось 80мсек когда уже нет фантомов.
    Вот код
    Код (C++):
    //include <MIDI.h>

    #define LED 13

    //MIDI_CREATE_DEFAULT_INSTANCE();

    uint16_t kick_sample_time=2500; // время звучания семпла
    uint16_t kick_treshold=160; // пороговый уровень датчика
    uint16_t kick_mute_time=80; // время ожидания успокоения датчика в миллисекундах

    uint32_t kick_note_off=0; // счетчик времени звучания семпла
    uint32_t kick_mute=0; // счетчик времени успокоения датчика в микросекундах
    uint16_t kick_val=0; // предыдущее значение датчика
    uint8_t kick_note_number=38; // номер ноты в GeneralMIDI
    const uint8_t kick_pin=A0;

    int tmp;
    void setup() {
      //MIDI.begin();
      Serial.begin(115200);
      Serial.println("MIDI Drumer");
      pinMode(kick_pin, INPUT);
      pinMode(LED, OUTPUT);
      digitalWrite(LED, LOW);
    }

    void loop(){

      if (kick_note_off > 0) { // здесь проверяем время звучания семпла и выключаем ноту
        if (millis() > kick_note_off) { // нота уже должна отзвучать
          kick_note_off=0;
          //MIDI.sendNoteOff(kick_note_number, 0, 1);
          Serial.println("Off");
        }
      }

      if (kick_mute > 0) { // здесь проверяем время затухания датчика
        if (millis() > kick_mute) { // уже должны затухнуть
          pinMode(kick_pin, INPUT);
          kick_mute = 0;
          kick_val=0;
          digitalWrite(LED, LOW);
        }
      }
      else {
        tmp = analogRead(kick_pin);
        if (tmp > kick_treshold ) { // уровень превышает порог+гистерезис
          if (tmp <= kick_val ) { // датчик пошел на спад - пик уже получен
            uint8_t velocity = (uint32_t) (kick_val * 127) / 10; // 50 подобрать
            if (velocity > 127) velocity = 127;
            kick_note_off = millis() + kick_sample_time; // ставим таймер на время звучания семпла
            kick_mute = millis() + kick_mute_time; // время ожидания успокоения сенсора
            //MIDI.sendNoteOn(kick_note_number, velocity, 1); // играем ноту
            digitalWrite(LED, HIGH);
            Serial.print("On ");Serial.println(kick_val);
            pinMode(kick_pin, OUTPUT);
            digitalWrite(kick_pin, LOW); // придавливаем датчик чтобы быстрее успокоился
          }
          else { // сигнал сенсора растет
            kick_val = tmp; // запоминаем текущее значение для сравнения со следующим
          }
        }
      }
    }
    Код отладочный, только мигает светодиодом и выдает в сериал сообщения.
    Все, дальше давайте самостоятельно :) Без нормальных пэдов и экранирования (сетевая помеха сильно мешает) ковыряться бессмысленно.
     
    Последнее редактирование: 16 янв 2017