Как сделать переключатель с микрофонным входом iphone для подсчета оборотов колеса?

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

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

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 мс . У кого-нибудь есть идеи получше, как мне это сделать с помощью входа аудиоразъема?


person tsvilela    schedule 11.04.2013    source источник
comment
Моя математика будет грубой. С переключателем в 12 футах от центра колеса, вращающимся с частотой 20 Гц, его скорость составляет около 3800 см/с. Если коммутатор работает в радиусе 5 см, у вас есть окно около 2 мс для его обнаружения, это означает, что вам нужно иметь возможность проверять устройство один раз каждые N с, где N < 1ms, а не 50 мс.   -  person A-Live    schedule 12.04.2013
comment
Да, я понял твою мысль. Я сделал этот расчет быстро, просто подумав о периоде хода. Но важно думать о том, как быстро магнит проходит через датчик. Я правильно измерил размер колеса и расстояние датчика от центра колеса и получил окно в 1,5 мс. Спасибо.   -  person tsvilela    schedule 12.04.2013


Ответы (1)


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

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

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

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

person jhabbott    schedule 11.04.2013
comment
Спасибо за совет, извините за задержку. Я следовал инструкциям и протестировал переключатель с его помощью. Он работал хорошо, он обнаруживает пики, но недостаточно быстро, чтобы сделать счетчик. Я имею в виду, что я тестировал с помощью приложения осциллографа и одного шип создается при активации переключателя. Затем я проверил, следуя руководству, но NSLog показывает, что удар микрофона обнаружен несколько раз, в то время как есть только один шип. Я предполагаю, что это связано с тем, что временное окно, в котором рассчитываетpeakPowerForChannel, слишком длинное. У вас есть какие-либо идеи, как я могу сделать более короткое окно, поскольку [рекордер updateMeters] не может быть изменен?? - person tsvilela; 16.04.2013
comment
О, я думаю, что период фильтрации встроенного измерения уровня должен быть слишком длинным для ваших нужд. В этом случае вместо использования AVAudioRecorder вам придется обрабатывать звук самостоятельно. Посмотрите на этот пример проекта от Apple: developer.apple.com /library/ios/#samplecode/aurioTouch2/ — если вы измерите, как долго (сколько семплов) длится всплеск, вы можете применить очень короткий фильтр чуть меньше этой длины, чтобы надежно обнаружить всплеск. - person jhabbott; 16.04.2013
comment
Как вы справились с этим проектом? - person jhabbott; 01.05.2013
comment
На самом деле, я на какое-то время перестал этим заниматься. Как только я вернусь, я дам вам обновленную информацию. Спасибо. - person tsvilela; 23.03.2014