Новый способ взаимодействия с пользователем
- Войдите на сайт для отправки комментариев
Ср, 09/05/2012 - 20:16
Я впечатлен.
Новая технология определение нажатия пользователя. Способна детектить не только факт нажатия, но и "как" (одним пальцем, двумя, всей ладоню охватил). По одному проводку! Не нужно специализированного железа (генератор сигнала+АЦП+металический предмет+ математика).
- Обзорная статья на компьютерре (и видео): http://blogs.computerra.ru/29867
- Оригинал (eng): http://www.disneyresearch.com/research/projects/hci_touche_drp.htm
- Описание "как это работает" (eng): http://www.disneyresearch.com/research/projects/touchechi2012.pdf
- Твиттер автора: http://twitter.com/#!/@ipoupyrev
- Блог автора : http://ipoupyrev.wordpress.com/ (правда там, пока ничего не нашел по этой теме, но...)
Вообщем IMHO стоит ждать шквала "ардуино имплементаций" и "шилдов". Думаю, через какое-то время, это "добавь хваты", станет так же модно как и "просто добавь блютус", некоторое время назад.
P.S. Если конечно оно и вправду так стибильно работает как показано и не требует предварительно часовой калибровки-обучения.
В виду некоторых обстоятельств, сегодня в инете через ЖПРС сижу, так что у меня все очень долго грузится и открывается... Вы ничего не путаете - 3 милигерца?
>Вы ничего не путаете - 3 милигерца
Возможно очепятнулся. От 1 до 3.5 Mhz..
>через ЖПРС сижу
Тогда в двух словах:
"Железно" все похоже на обычную сенсорную кнопку. Основная идея - разные части человеческого тела (не кожа, именно части тела, за счет внутреннего строения) по разному проводят переменный ток, разной частоты.
Берется пластина. На нее выводится сигнал, который меняет частоту от 1 до 3.5 Mhz.. И эта же пластина подключена к АЦП. Меряется амплитуда сигнала на каждой частоте. По полученой картинке, в итоге, они смогли отличить касание одним пальцем, двумя, локтем, ухом, охват все ладонью, большой палец от указательного (даже если площадь контакта совпадает). Даже под водой страбатывает (хоть и с меньшей точностью).
Единистевнный минус сужающий область примиенения - нужно обучение под конкретного человека. Но в случае персональных вещей, это терпимо.
Очень интересно. А на сколько интересно профили стабильны для одного человека, я имею ввиду сухая-мокрая ладошка, внешняя температура и т.д.
Еще мне подумалось, что шилды могут не появится ибо копирайт. Эта работа disneyresearch центра, надо внимательно почитать legal notice внизу, если честно не вчитывался, не очень люблю такое чтиво :)
Если я правильно понял, то там нужно менять частоту от 1 до 3,5 МГц, а дуина генерит частоту ШИМ в зависимости от предделителя. т.е. 1 - 16МГц, 8 - 2МГц, 32 - 500кГц. Да и ШИМ здесь и не нужен, можно попробывать генерить прямоугольный сигнал:
так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.
Или посмотреть, как устроена внутри функция tone()
Хм... вам расписал и до самого дошло. Библиотека tone. Но там максимум который получается - килогерцы. Есть, конечно вероятсность что это ограничение либы, а железное, но маловероятно.
Так что похоже, "в лоб", тупо подключив пластину к пину, без внешнего генератора/ацп не получится попробовать.
>Очень интересно. А на сколько интересно профили стабильны для одного человека, я имею ввиду сухая-мокрая ладошка, внешняя >температура и т.д.
Ну "распознавние", там как я понял довольно не простое (но и не "сверх-матиматика"). Для класификации (на большом компе) полученных "слепков" используется метод опорных векторов. И еще парочку "улчшателей". Технология пока, конечно, сырая. Ложные сработки есть. Но думаю это как раз "доводимо". Методов классификации/кластеризации и обучения/распознавания - довольно много. FineReader тоже далеко не сразу научился тексты распознавать. :)
>я имею ввиду сухая-мокрая ладошка, внешняя температура и т.д.
Точно я сказать не могу, но "сухая-мокрая" это больше влияет на "постоянный ток". Они как раз расказывают что кожа, в отличает от самого тела, имеет большое сопротивление (для постоянного тока). А вот переменный - "проходит на ура", даже для сухой. Поэтому если мы снизим сопротивление кожи, IMHO, это не будет иметь решаютщего значения. На видео даже есть пример как оно работает когда пластина положена в аквариум с водой, туда засовывают руку и трогают ее.
>Еще мне подумалось, что шилды могут не появится ибо копирайт.
Да, где-то попадалось "для некоммерческого". Но думаю это не проблема. Если она "пойдет в массы", то будут чипы, где это все реализовано на железном уровне. Копирайт будет "немножко заложен в цену", но не думаю что "заоблачно". А на чипах - будут шилды. Ведь те которые существуют, тоже внутри себя (в чипах) имеют кучу коммерческих технологий.
Да и "само железо" - как бы не содержит ничего нового. "Фишка" в алгоритмах распознавания. И не обязательно "сдирать", можно и со своими поигратся. Даже без глубокого знания математики. Очень много этой лабуды уже есть реализованно в виде готовых либ (они кстати тоже не с нуля писали, взяли либу и подбирали коэфициенты настроечные).
Если я правильно понял, то там нужно менять частоту от 1 до 3,5 МГц, а дуина генерит частоту ШИМ в зависимости от предделителя. т.е. 1 - 16МГц, 8 - 2МГц, 32 - 500кГц. Да и ШИМ здесь и не нужен, можно попробывать генерить прямоугольный сигнал:
так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.
Уже додумался до tone() :) Вы ответили пока я набирал очередную простыню :)
Вот только осцила - нет :(
У меня есть на работе, если завтра не забуду посмотрю какую максимальную частоту можно выжать из дуины.
так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.
Хотя не нужен и осцил. Не будет его. Либо обрежутся, либо лишнию нули, либо будет переполнение типа.
Параметр частота имеет unsigned int. То есть максимальное значение 65535 -> 65Khz.
Теоретически, но на форуме народ плачется что похоже, где-то внутри она переводт в просто int.
То есть максимальное 32767 -> 32Khz из-за этого, даже IR несущую в 38Khz не могут изобразить.
А PWM - нужен. Tone его и используют. Вопрос только в том это ограничение в килогерцы от кривости tone() или ограничение железа.
А нужен именно PWM? Т.е. сигнал переменной скважности?
В режиме CTC (Clear Timer on Compare Match) 8-битовые таймеры АВРок позволяют получить меандр с максимальной частотой в половину от тактовой, т.е. при работе от 20-МГц системного генератора - 10 МГц (разд. 14.7/2 дейташита на ATMega328).
Максимум того, что можно выжать из режима Fast PWM, используемого в лоб (или более мягко - при максимальном разрешении) - 1/256 тактовой частоты, т.е. 78 125 Гц на 20 МГц (разд 14.7.3). Ничто не мешает снизить разрешение в 2-4-8-16-32-64 раз (дальше уже, наверное, проблематично) и добраться-таки до частоты 5 МГц с бедным набором скважностей - 25-50-75%.
Но это уже будут нестандартные режимы, ,библиотека, рассчитанная на широкое применение, их естественным образом не поддерживает
А нужен именно PWM? Т.е. сигнал переменной скважности?
Нет. Если я правильно понял, то при генерации сигнала важна частота. А потом замеряется - насколько упала амплитуда.
В оригинале использовалась синусоида, но как я понял и PWM со скважностью 50% подойдет.
Главное - возможность плавно менять время между импульсами. И потом "успеть вычитать". И надеятся что хватит разрешение АЦП что-бы уловить падание амплитуды и не нужно было каких-то усилителей городить (хотя у них, в блок-схеме они есть).
В режиме CTC (Clear Timer on Compare Match) 8-битовые таймеры АВРок позволяют получить меандр с максимальной частотой в половину от тактовой, т.е. при работе от 20-МГц системного генератора - 10 МГц (разд. 14.7/2 дейташита на ATMega328).
Максимум того, что можно выжать из режима Fast PWM, используемого в лоб (или более мягко - при максимальном разрешении) - 1/256 тактовой частоты, т.е. 78 125 Гц на 20 МГц (разд 14.7.3). Ничто не мешает снизить разрешение в 2-4-8-16-32-64 раз (дальше уже, наверное, проблематично) и добраться-таки до частоты 5 МГц с бедным набором скважностей - 25-50-75%.
Но это уже будут нестандартные режимы, ,библиотека, рассчитанная на широкое применение, их естественным образом не поддерживает
Правильно ли я понял ваш ответ как "меандр c плавной регулировкой в диапазоне 1МГц - 3.5МГц получить можно, и для этого, нужно копать даташит в разделе CTC (Clear Timer on Compare Match)"?
Где-то натыкался, вреде, tone() как раз СТС использует...
Правильно ли я понял ваш ответ как "меандр c плавной регулировкой в диапазоне 1МГц - 3.5МГц получить можно, и для этого, нужно копать даташит в разделе CTC (Clear Timer on Compare Match)"?
"Плавно" и "цифровая система" - две вещи несовместные. Возможно получение более или менее дискретного ряда частот.
В CTC возможны частоты f=F/(2N*(n+1)), где
F - частота системного тактирования (принимаем за 20 МГц)
N - значение предделителя (берем минимальное - 1)
n - значение в регистре сравнения (меньше 1 никак, так что в моем предыдущем сообщении "небольшая" ошибка - в два раза).
Получаем
n f
1 5 Мгц
2 3,3(3) МГц
3 2,50 МГц
4 2,0 МГц
ну и так далее (1,666 1,43 1, 25 1,11 1,0 ...)
Где-то натыкался, вреде, tone() как раз СТС использует...
Библиотека Topne.cpp в каталоге <arduino>\hardware\arduino\cores\arduino; в функции toneBegin после того, как найден доступный таймер:
"Плавно" и "цифровая система" - две вещи несовместные. Возможно получение более или менее дискретного ряда частот.
Естественно я это и подразумевал. "Плавность", как синоним дискретности хотя-бы на порядок меньше чем абсолютное значения.
То есть 3Мгц и вниз с шагом, например 10Кгц.
В CTC возможны частоты f=F/(2N*(n+1)), где
Спасибо. Эта именно та формула и то объяснение которые были нужны.
Правда, получается, в требуемом диапазоне, нужной дискретности - не добится. Слишком "широко шагает".
Я так понимаю смотреть в строну аудикарт и т.п. смысла особого нет? Это же "далеко за слышимым диапазоном" (плюс искажения непрдесказуемые).
Похоже AD9833 мне потребуется для генерации (относительно дорогая зараза, и в DIP корпусе пока не нашел).
Правда еще не могу сообразить как на таких частотах замер делать. Но, так как нужно определить только амплитуду, то, возможно, парочка пропущеных испульсов - рояля не сыграет.