Доброго времени суток, уважаемые участники форума! Прошу помочь и объяснить Имеется обычный microphone Capsules с двумя выходами хочу подключить его к Arduino на аналоговый вход. Подскажите схему что бы усилить сигнал или что-то другое! Ради такой мелочи не хочется делать заказ на http://amperka.ru/collection/Sensory/product/Mikrofonспасибо.
вот пожалуйста ссылка вам ну попробуйте как вариант вот такое чудо собрать только коэффициент усиления поставте )
Спасибо за ответ. я вот тоже воспользовавшись гуглом нашел схемку вот например: Источник Что вы скажите?
Собрал схему, представленная мною выше. Подключил и оказалось что сигнал очень маленький=( еле еле до 120 дотянуло. Посоветуйте, может микрофон попробовать заменить?
В принципе, можно попробовать соорудить схему на операционнике, аналогичную той, что используется в сенсоре от DFRobot, если, конечно, есть аналогичные детали. Не знаю, стоит ли овчинка выделки, но попробоваьт можно.
Подключить то не сложно, можно хоть просто воткнуть микрофон в аналоговый вход, только толку от этого не будет - микрофон сам по себе не создаст достаточно сильного для регистрации сигнала, поэтому его в любом случае нужно как-то усилить. Так что все эти пляски - они не вокруг ардуино, а вокруг усилителя, чтобы "сырой" датчик стал электрически согласован с остальной схемой правильным образом и превратился в Arduino-совместимый сенсор.
УРА, все получилось! Нашел в интернете схему и собрал. Изготовленная на базеоперационного усилителя 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(); } В принципе понимаю код, но не могли бы вы точней рассказать пожалуйста!
Delta = разница между минимальным и максимальным уровнем сигнала за каждые 10000 семплов. (c)КО Частота дискретизации примерно 9 кГц, если у вас Uno или аналог. Уточните вопрос.
неожиданно, да? Подскажите пожалуйста, как задать частоту дискретизации, как её высчитать, и как проверить реальную?
Например: http://forum.amperka.ru/threads/Два-микрофона-Положение-диктора-в-пространстве.281/page-2 Первое сообщение.
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) потом распечатать буффер сэмплов и посмотреть