analog microphone arduino

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Sashok26rus, 9 май 2012.

  1. Sashok26rus

    Sashok26rus Нерд

    Доброго времени суток, уважаемые участники форума! Прошу помочь и объяснить
    Имеется обычный microphone Capsules с двумя выходами хочу подключить его к Arduino на аналоговый вход. Подскажите схему что бы усилить сигнал или что-то другое! Ради такой мелочи не хочется делать заказ на http://amperka.ru/collection/Sensory/product/Mikrofon
    спасибо.​
     
  2. вот пожалуйста ссылка вам
    ну попробуйте как вариант вот такое чудо собрать только коэффициент усиления поставте )
     
    Sashok26rus нравится это.
  3. Sashok26rus

    Sashok26rus Нерд

    Спасибо за ответ. я вот тоже воспользовавшись гуглом нашел схемку вот например:


    [​IMG]Источник
    Что вы скажите?
     
  4. Sashok26rus

    Sashok26rus Нерд

    Собрал схему, представленная мною выше. Подключил и оказалось что сигнал очень маленький=( еле еле до 120 дотянуло. Посоветуйте, может микрофон попробовать заменить?
     
  5. Unixon

    Unixon Оракул Модератор

    В принципе, можно попробовать соорудить схему на операционнике, аналогичную той, что используется в сенсоре от DFRobot, если, конечно, есть аналогичные детали. Не знаю, стоит ли овчинка выделки, но попробоваьт можно.
     
    Sashok26rus нравится это.
  6. Sashok26rus

    Sashok26rus Нерд

    Не думал что будет так тяжело.. микрофон подключить к Arduino
     
  7. Unixon

    Unixon Оракул Модератор

    Подключить то не сложно, можно хоть просто воткнуть микрофон в аналоговый вход, только толку от этого не будет - микрофон сам по себе не создаст достаточно сильного для регистрации сигнала, поэтому его в любом случае нужно как-то усилить. Так что все эти пляски - они не вокруг ардуино, а вокруг усилителя, чтобы "сырой" датчик стал электрически согласован с остальной схемой правильным образом и превратился в Arduino-совместимый сенсор.
     
  8. Sashok26rus

    Sashok26rus Нерд

    УРА, все получилось! Нашел в интернете схему и собрал.
    [​IMG]
    Изготовленная на базеоперационного усилителя LM358A (к счастью я такой нашел).
    Sketch интересный выводит Delta = Max – Mi
    Код (Text):
    const int analogPin = 0;
     
    void setup() {
      Serial.begin(9600);
    }
     
    void loop() {
      int mn = 1024;
      int mx = 0;  
      for (int i = 0; i < 10000; ++i) {
        int val = analogRead(analogPin);
        mn = min(mn, val);
        mx = max(mx, val);
      }
     
      Serial.print("m=");
      Serial.print(mn);
      Serial.print(" M=");
      Serial.print(mx);
      Serial.print(" D=");
      Serial.print(mx-mn);
      Serial.println();
    }
    В принципе понимаю код, но не могли бы вы точней рассказать пожалуйста!


     
  9. Корней

    Корней Гик

    Delta = разница между минимальным и максимальным уровнем сигнала за каждые 10000 семплов. (c)КО Частота дискретизации примерно 9 кГц, если у вас Uno или аналог.
    Уточните вопрос.:rolleyes:
     
  10. Sashok26rus

    Sashok26rus Нерд

    Спасибо большое, у меня Uno!
     
  11. Sashok26rus

    Sashok26rus Нерд

    Вот что собрал! Немного коряво т.к звук наложен, к сожалению при съемки звук очень плохо звучит!

     
    xaser, NikitOS, mcureenab и ещё 1-му нравится это.
  12. REm

    REm Гик

    неожиданно, да?
    Подскажите пожалуйста, как задать частоту дискретизации, как её высчитать, и как проверить реальную?
     
  13. Корней

    Корней Гик

    REm нравится это.
  14. 1. Задать - два варианта ответа, через конфигурацию преселектора самого ацп, в режиме автозапуска - "free running mode". Или сконфигурировать запуск ацп от таймера -1, тогда частота определяется таймером.
    Пример
    Код (C++):
    ISR(TIMER1_COMPB_vect)
    {
      static int16_t counter = 0;
      PORTB  |= pin_Led;       // pin High      
        //  uint16_t temp = readBH1750(BH1750_ADDR1);
        int16_t temp  = ADCL;
                temp += (ADCH << 8);
                temp = 1023 - temp; // invers - diode to ground, resistor to +V
                temp /= 5;
             
      adcIn[counter] = temp;
      avr_value += temp;

      if(++counter >= INP_BUFF) {
        TIMSK1 &= ~(1<<OCIE1B);  
        counter = 0;
        flag    = 1;
        avr_value /= INP_BUFF;
        }
      PORTB  &= ~(pin_Led);    // pin Low          
    }

    void adc_init()
    {
      ADMUX    = 0x45;        // PIN 5 Analog. REF Internal. Bias = 0.55V
      ADCSRA = ((1<< ADEN)|   // 1 = ADC Enable
          (0<< ADSC)|         // ADC Start Conversion
          (1<<ADATE)|         // 1 = ADC Auto Trigger Enable
          (0<< ADIF)|         // ADC Interrupt Flag
          (0<< ADIE)|         // ADC Interrupt Enable
          (1<<ADPS2)|
          (0<<ADPS1)|         // ADC Prescaler : 1 MHz.
          (0<<ADPS0));
      ADCSRB = ((1<<ADTS2)|   // Sets Auto Trigger source - Timer/Counter1 Compare Match B
          (0<<ADTS1)|
          (1<<ADTS0));
    }

    void tmr_init()
    {
      DDRB   |=   pin_Led;     // Set OUPUTS pinmode
      PORTB  &= ~(pin_Led);    // Set LOW              
      /* Set up TIMER 1 - ADC sampler */
      TIMSK1 = 0x00;
      TCNT1  = 0;
      TCCR1A = 0;
      TCCR1B = 0;
      TCCR1C = 0;
      TCCR1A =  ((1<<WGM11) | (1<<WGM10));       // Mode 15, Fast PWM
      TCCR1B =  ((1<<WGM13) | (1<<WGM12));       // Mode 15, Fast PWM
      TCCR1B |=  (1<<CS10);                      // clk prescaling.
      OCR1A  = timer_set;
      OCR1B  = timer_set;
      TIFR1   |= (1<<OCF1B);
      TIMSK1  |= (1<<OCIE1B);
    }

    void tmr_freq() {
    //  timer_set =  ((62500000UL/freqc_mod) -1);      
      timer_set =  ((16000000UL/freqc_mod) -1);      
      OCR1A  = timer_set;
      OCR1B  = timer_set;
    }

    void startTmr(void)
    {
      TCNT1  = 0;
      TIFR1   |= (1<<OCF1B);
      TIMSK1  |= (1<<OCIE1B);
    }

    void stoptTmr(void)
    {
      TIMSK1 &= ~(1<<OCIE1B);  
    }
     
    2 - Измерить, для этого подать известные пульсы на вход (тоне сойдёт, лучше с другой ардуины, или этой но пины 3 или 11) потом распечатать буффер сэмплов и посмотреть
     
    REm нравится это.
  15. maikl_baklan

    maikl_baklan Нуб

    А можно с микрофона не уровень громкости получить, а частоту звука?
     
  16. REm

    REm Гик

    можно. Могу детекцию одной частоты подсказать