Новый способ взаимодействия с пользователем

leshak
Offline
Зарегистрирован: 29.09.2011

 Я впечатлен.

Новая технология определение нажатия пользователя. Способна детектить не только факт нажатия, но и "как" (одним пальцем, двумя, всей ладоню охватил).  По одному проводку! Не нужно специализированного железа (генератор сигнала+АЦП+металический предмет+ математика).

 

Вообщем IMHO стоит ждать шквала "ардуино имплементаций" и "шилдов". Думаю, через какое-то время, это "добавь хваты", станет так же модно как и "просто добавь блютус", некоторое время назад.

P.S. Если конечно оно и вправду так стибильно работает как показано и не требует предварительно часовой калибровки-обучения.

 

maksim
Offline
Зарегистрирован: 12.02.2012

В виду некоторых обстоятельств, сегодня в инете через  ЖПРС сижу, так что у меня все очень долго грузится и открывается... Вы ничего не путаете - 3 милигерца?

leshak
Offline
Зарегистрирован: 29.09.2011

 >Вы ничего не путаете - 3 милигерца

Возможно очепятнулся. От 1 до 3.5 Mhz..

>через ЖПРС сижу

Тогда в двух словах:

"Железно" все похоже на обычную сенсорную кнопку. Основная идея - разные части человеческого тела (не кожа, именно части тела, за счет внутреннего строения) по разному проводят переменный ток, разной частоты.

Берется пластина. На нее выводится сигнал, который меняет частоту от 1 до 3.5 Mhz.. И эта же пластина подключена к АЦП. Меряется амплитуда сигнала на каждой частоте. По полученой картинке, в итоге, они смогли отличить касание одним пальцем, двумя, локтем, ухом, охват все ладонью, большой палец от указательного (даже если площадь контакта совпадает). Даже под водой страбатывает (хоть и с меньшей точностью).

Единистевнный минус сужающий область примиенения - нужно обучение под конкретного человека. Но в случае персональных вещей, это терпимо.

 

Zapek@n
Offline
Зарегистрирован: 16.02.2012

 Очень интересно. А на сколько интересно профили стабильны для одного человека, я имею ввиду сухая-мокрая ладошка, внешняя температура и т.д.

Еще мне подумалось, что шилды могут не появится ибо копирайт. Эта работа disneyresearch центра, надо внимательно почитать legal notice внизу, если честно не вчитывался, не очень люблю такое чтиво :)

maksim
Offline
Зарегистрирован: 12.02.2012

Если я правильно понял, то там нужно менять частоту от 1 до 3,5 МГц, а дуина генерит частоту ШИМ в зависимости от предделителя. т.е. 1 - 16МГц, 8 - 2МГц, 32 - 500кГц. Да и ШИМ здесь и не нужен, можно попробывать генерить прямоугольный сигнал:

  tone(3,3000000);

так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.

maksim
Offline
Зарегистрирован: 12.02.2012

Или посмотреть, как устроена внутри функция tone()

leshak
Offline
Зарегистрирован: 29.09.2011

 Хм... вам расписал и до самого дошло. Библиотека tone. Но там максимум который получается - килогерцы. Есть, конечно вероятсность что это ограничение либы, а железное, но маловероятно.

Так что похоже, "в лоб", тупо подключив пластину к пину, без внешнего генератора/ацп не получится попробовать.

>Очень интересно. А на сколько интересно профили стабильны для одного человека, я имею ввиду сухая-мокрая ладошка, внешняя >температура и т.д.

Ну "распознавние", там как я понял довольно не простое (но и не "сверх-матиматика"). Для класификации (на большом компе) полученных "слепков" используется метод опорных векторов. И еще парочку "улчшателей". Технология пока, конечно, сырая. Ложные сработки есть. Но думаю это как раз "доводимо". Методов классификации/кластеризации и обучения/распознавания - довольно много. FineReader тоже далеко не сразу научился тексты распознавать. :)

>я имею ввиду сухая-мокрая ладошка, внешняя температура и т.д.

Точно я сказать не могу, но "сухая-мокрая" это больше влияет на "постоянный ток". Они как раз расказывают что кожа, в отличает от самого тела, имеет большое сопротивление (для постоянного тока). А вот переменный - "проходит на ура", даже для сухой. Поэтому если мы снизим сопротивление кожи, IMHO, это не будет иметь решаютщего значения. На видео даже есть пример как оно работает когда пластина положена в аквариум с водой, туда засовывают руку и трогают ее.

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

Да, где-то попадалось "для некоммерческого". Но думаю это не проблема. Если она "пойдет в массы", то будут чипы, где это все реализовано на железном уровне. Копирайт будет "немножко заложен в цену", но не думаю что "заоблачно". А на чипах - будут шилды. Ведь те которые существуют, тоже внутри себя (в чипах) имеют кучу коммерческих технологий.

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

maksim
Offline
Зарегистрирован: 12.02.2012

void setup() {   
  Serial.begin(9600);  
}

void loop() {
  long i = 10;
  while(i <= 30){
    tone(3, i*100000);
    delay(10);
    Serial.print(analogRead(0), DEC);
    Serial.print(" ");
    i++;    
  }
  Serial.print('\n');
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

Если я правильно понял, то там нужно менять частоту от 1 до 3,5 МГц, а дуина генерит частоту ШИМ в зависимости от предделителя. т.е. 1 - 16МГц, 8 - 2МГц, 32 - 500кГц. Да и ШИМ здесь и не нужен, можно попробывать генерить прямоугольный сигнал:

  tone(3,3000000);

так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.

Уже додумался до tone() :) Вы ответили пока я набирал очередную простыню :)

Вот только осцила - нет :( 

maksim
Offline
Зарегистрирован: 12.02.2012

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

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

 

  tone(3,3000000);

так компилируется, но вот вопрос, а генерится ли на выводе 3 МГц? Надо смотреть осцилом.

Хотя не нужен и осцил. Не будет его. Либо обрежутся, либо лишнию нули, либо будет переполнение типа.

Параметр частота имеет unsigned int. То есть максимальное значение 65535 -> 65Khz.

Теоретически, но на форуме народ плачется что похоже, где-то внутри она переводт в просто int.

То есть максимальное 32767 -> 32Khz из-за этого, даже IR несущую в 38Khz не могут изобразить.

А PWM - нужен. Tone его и используют. Вопрос только в том это ограничение в килогерцы от кривости tone() или ограничение железа.

step962
Offline
Зарегистрирован: 23.05.2011

 А нужен именно 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%.

Но это уже будут нестандартные режимы, ,библиотека, рассчитанная на широкое применение, их естественным образом не поддерживает

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

 А нужен именно PWM? Т.е. сигнал переменной скважности?

Нет. Если я правильно понял, то при генерации сигнала важна частота. А потом замеряется - насколько упала амплитуда.

В оригинале использовалась синусоида, но как я понял и PWM со скважностью 50% подойдет.

Главное - возможность плавно менять время между импульсами. И потом "успеть вычитать". И надеятся что хватит разрешение АЦП что-бы уловить падание амплитуды и не нужно было каких-то усилителей городить (хотя у них, в блок-схеме они есть).

step962 пишет:

В режиме 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)"?

maksim
Offline
Зарегистрирован: 12.02.2012

Где-то натыкался, вреде, tone() как раз СТС использует...

step962
Offline
Зарегистрирован: 23.05.2011

leshak пишет:

Правильно ли я понял ваш ответ как "меандр  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 ...)

 

step962
Offline
Зарегистрирован: 23.05.2011

maksim пишет:

Где-то натыкался, вреде, tone() как раз СТС использует...

Библиотека Topne.cpp в каталоге <arduino>\hardware\arduino\cores\arduino; в функции toneBegin после того, как найден доступный таймер:

    // Set timer specific stuff
    // All timers in CTC mode
    // 8 bit timers will require changing prescalar values,
    // whereas 16 bit timers are set to either ck/1 or ck/64 prescalar

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

"Плавно" и "цифровая система" - две вещи несовместные. Возможно получение более или менее дискретного ряда частот.

Естественно я это и подразумевал. "Плавность", как синоним дискретности хотя-бы на порядок меньше чем абсолютное значения.

То есть 3Мгц и вниз с шагом, например 10Кгц.

step962 пишет:

В CTC возможны частоты f=F/(2N*(n+1)), где

Спасибо. Эта именно та формула и то объяснение которые были нужны.

Правда, получается, в  требуемом диапазоне, нужной дискретности  - не добится. Слишком "широко шагает".

Я так понимаю смотреть в строну аудикарт и т.п. смысла особого нет? Это же "далеко за слышимым диапазоном" (плюс искажения непрдесказуемые).

leshak
Offline
Зарегистрирован: 29.09.2011

 Похоже AD9833 мне потребуется для генерации (относительно дорогая зараза, и в DIP корпусе пока не нашел).

Правда еще не могу сообразить как на таких частотах замер делать. Но, так как нужно определить только амплитуду, то, возможно, парочка пропущеных испульсов - рояля не сыграет.