2013-04-11 1 views
0

Я занимаюсь разработкой и приложением, и я хотел бы измерить повороты колеса. Я купил дешевый одометр велосипеда, который подсчитывает повороты велосипедного колеса с помощью переключателя , который замыкает цепь один раз за ход, когда магнит находится достаточно близко к датчику. У меня была идея , добавив этот магнитный переключатель в микрофонную схему из гарнитуры iphone, а затем с помощью аудиокарты для управления подключением микрофона, что делает коммутатор, который можно определить, когда микрофон находится или нет а затем создать счетчик с ним. Способ, которым я мог сделать коммутатор, заключался в использовании рамки AVFoundation с классом [AVCaptureDevice], так как я узнал, что это единственный способ дифференцировать внешний и внутренний микрофон после ответа [this-post].Как сделать переключатель с микрофонным входом iphone для подсчета оборотов колеса?

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

NSString *name; 
static int micSwitch=0; 
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; 
    for (AVCaptureDevice *device in devices) { 
     name = [ device localizedName]; 
    } 
    if ([name isEqual:@"iPhone Microphone"]) { 
     micSwitch=0; 
    } 
    else{ 
     micSwitch=1; 
    } 

Однако этот коммутатор обновляется медленнее, чем мне нужно. Согласно моей оценке, переключатель необходимо будет обновить менее чем за 1,5 мс. У кого-то есть лучшая идея, как я могу это сделать, используя вход аудиоразъема ?

+0

Моя математика будет грубой. С переключателем на 12 'от центра колеса, вращающегося с частотой 20 Гц, его скорость составляет около 3800 см/с. Если переключатель работает с радиусом 5 см, у вас есть окно размером 2 мс для его обнаружения, это означает, что вам нужно иметь возможность проверять устройство один раз каждый N с, где «N <1 мс», а не 50 мс. –

+0

Да, я понял. Я сделал это быстро, просто размышляя о периоде поворота. Но думая о том, насколько быстро магнит проходит через датчик, это точка. Я правильно измерил размер колеса и расстояние от датчика от центра колеса, и я получил окно 1,5 мс. Благодарю. – tsvilela

ответ

0

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

Если вы не можете заставить язычковый выключатель генерировать достаточно длинный и шумный шип, когда он вставляет/выключает, то небольшая катушка на своем месте должна делать трюк с магнитом, прикрепленным к колесу.

Обновление: я нашел этот учебник для обнаружения шумового удара в микрофон - принцип обнаружения щелчка от язычкового переключателя или катушки должен быть таким же (с гораздо более коротким окном обнаружения) и кодом будет очень похожим.

http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/

+0

Tks за советом, извините за задержку. Я следил за учебником и тестировал коммутатор с ним. Он работал хорошо, он обнаруживает пики, но не настолько, чтобы сделать счетчик. Я имею в виду, я тестировал с помощью приложения осциллографа и один шип создается, когда переключатель активирован. Затем я тестировал следующий учебник, но NSLog показывает «обнаруженный микрофон» несколько раз, в то время как есть только один всплеск. Я полагаю, это потому, что временное окно считает, что пик PowerForChannel слишком длинный. Вы знаете, как я могу иметь более короткое окно, так как [recorder updateMeters] нельзя изменить? – tsvilela

+0

О, я думаю, что период фильтрации встроенного уровня измерения должен быть слишком длинным для ваших нужд. В этом случае вместо использования 'AVAudioRecorder' вам придется обрабатывать аудио самостоятельно. Посмотрите на этот образец проекта от Apple: http://developer.apple.com/library/ios/#samplecode/aurioTouch2/Introduction/Intro.html - если вы измеряете, как долго (сколько выборок) длится шип, вы можете применить очень короткий фильтр под этой длиной, чтобы надежно обнаружить всплеск. – jhabbott

+0

Как вы поступили с этим проектом? – jhabbott