Давайте из соплей и палок кучки резисторов, алюминиевой фольги и Arduino соорудим настоящий трехмерный интерфейс для управления компьютером жестами. И заставим Nintendo с ее хваленым Wii от…., в смысле отойти в сторонку.
По словам автора, основной целью проекта была разработка трехмерного ручного интерфейса для управления устройствами при помощи жестов. Одним из условий было соблюдение баланса между функциональностью и простотой изготовления.
Чтобы понять, где можно использовать такой интерфейс – просмотрите ВИДЕОРОЛИК.
Итак, приступим…
Шаг 1. Материалы и инструменты
Инструменты:
- Arduino
- Среда управления Processing
- Кусачки
- Паяльник
- Строительный нож
Материалы:
- Резистор номиналом 270 КилоОм – 3 шт.
- Резистор номиналом 10 КилоОм – 3 шт.
- Низкотемпературный припой
- Провода
- Алюминиевая фольга
- Картон от упаковочных ящиков
Дополнительные материалы:
- Скотч
- Экранированный кабель (также известен как коаксиальный)
- Разъем типа «крокодил» - 3 шт.
- 3-х штырьковый разъем (тип «папа»)
- Электротехническая стяжка (платиковый хомут)
- Термоусадочная трубка или горячий клей
Шаг 2. Изготовление сенсорных пластин
Сенсоры нашего интерфейса работают на принципе емкостного сопротивления, причем каждый контур считывает дистанцию по одной из трех осей. После долгих поисков истины автор определил, что оптимальным решением будет размещение сенсорных пластин на внутренних гранях одного из углов куба.
Изготовив три грани (полукуб) из упаковочного картона, приклейте (или закрепите при помощи скотча) на их внутреннюю грань квадраты из фольги.
ВНИМАНИЕ! КВАДРАТЫ ИЗ ФОЛЬГИ НЕ ДОЛЖНЫ ИМЕТЬ КОНТАКТА МЕЖДУ СОБОЙ. КАЖДЫЙ ИЗ КВАДРАТОВ ДОЛЖЕН ИМЕТЬ СОБОДНОЕ ОТ ИЗОЛЯЦИИ МЕСТО ДЛЯ ПОДКЛЮЧЕНИЯ ЗАЖИМА ТИПА «КРОКОДИЛ».
Шаг 3. Проводники
Для подключения сенсорных пластин к Arduino нам потребуется экранированный провод. Использование именно экранированного провода объясняется тем, что провод без экрана скорее всего станет частью конденсатора.
Зажимы типа «крокодил» припаиваются к кабелям, которые через резисторы включается в гнезда №№ 8, 9, 10 на микроконтроллере. Несмотря на множество способов подключения сенсорных пластин, автор считает «крокодилы» самым удачным.
Примечание переводчика: учитывая, с каким трудом паяется алюминий, с автором я в целом согласен. В то же время, при отсутствии «крокодилов» вполне подойдет болт с гайкой и пара шайб. Ну и отверстие в сенсорной пластине, конечно.
Последовательность работ:
Отрежьте три куска экранированного кабеля равной длины. Чем короче, тем лучше. Возможно использование телевизионного коаксиального кабеля, но лучше выбрать более тонкий и гибкий.
Оголите полдюйма (1, 275 Сантиметра) экрана и около 8 Миллиметров центральной жилы.
Припаяйте центральную жилу и экран к разъему типа «крокодил» и заизолируйте термоусадкой или изолентой.
Шаг 4. Сенсорные контуры
Каждый контур состоит всего лишь из двух резисторов и алюминиевой пластины (в нашем случае – листа фольги на картонной основе). Чтоб понять принцип их работы, давайте рассмотрим наши действия с микроконтроллером Arduino.
Итак:
- Выставляем порт на режим вывода
- Подаем на порт сигнал «логический ноль», что приводит к разрядке конденсатора на общую шину
- Переводим порт на режим ввода
Подсчитываем время, необходимое для зарядки конденсатора до уровня «логическая единица». Эта переменная зависит от номинального сопротивления резисторов и емкости конденсатора (алюминиевой пластины). Номиналы резисторов неизменны, что дает нам возможность измерить емкость конденсатора. Основной переменной для таких расчетов является расстояние «земли» (вашей руки) от пластины конденсатора.
Через резисторы номиналом 270 КилоОм проходит ток, который заряжает конденсаторы. Чем меньше их номинал – тем быстрее заряжается конденсатор. От резисторов меньшего сопротивления (у нас - на 10 КилоОм) также время завершения полного цикла заряд/разряд, цикла, однако автор так и не понял, с чем это связано.
Примечание переводчика: согласно теории датчиков емкостного сопротивления, меньшее время считывания показаний повышает их точность. Таким образом, номинал сопротивления, через которое сенсор подключен к Arduino, определяет время разрядки конденсатора, во время чего и производится расчёт положения руки. Исходя из изложенного, можно предположить, что реальный алгоритм работы выглядит следующим образом:
- Выставляем порт на режим вывода.
- Происходит зарядка пластин конденсатора до некоторой величины, условно равной уровню «логическая единица» .
- Переводим порт на режим ввода.
- Подаем на порт сигнал «логический ноль», что приводит к разрядке конденсатора, одновременно отключается цепь +5 Вольт.
Подсчитываем время, необходимое для разрядки конденсатора до уровня «логический ноль». Эта переменная зависит от номинального сопротивления резисторов и емкости конденсатора (алюминиевой пластины). Номиналы резисторов неизменны, что дает нам возможность измерить емкость конденсатора. Основной переменной для таких расчетов является расстояние «земли» (вашей руки) от пластины конденсатора.
Впрочем, это все беллетристика. Припаяйте резисторы к каждому из проводников по приведенной схеме. 10 КилоОмный резистор припаяйте к центральной жиле экранированного кабеля. 270 КилоОмный резистор припаяйте между экраном кабеля и сенсорной пластиной, то есть, к выводу 10 КилоОмного резистора, который ближе к сенсору.
Шаг 5. Подключение цепей к Arduino
Теперь – паяем проводники вместе на выводы 3-х штырькового разъема, который будет подключен к плате микроконтроллера.
ВАЖНО! НЕОБХОДИМО ЗАИЗОЛИРОВАТЬ ПРОВОДНИКИ ДЛЯ ПРЕДОТВРАЩЕНИЯ ЗАМЫКАНИЯ ШИНЫ +5 ВОЛЬТ НА ОБЩУЮ.
Кроме того, к месту спайки резисторов на 270 КилоОм припаиваем провод, который будет подключатся к + 5 Вольтовой шине.
Шаг 6. Подключение и загрузка программного кода
Подключите коннектор к портам №№ 8,9, 10 платы Arduino.
Зажимы «крокодил» подключите к пластинам сенсора в следующем порядке:
порт №8 – ось Х, левая пластина
порт № 9 – ось Y, нижняя пластина
включите питание, подключив соответствующий провод (красный) к выводу +5 Вольт Arduino
Загрузите код в микроконтроллер (если вы находитесь за пределами Северной Америки – вам возможно потребуется заменить значение аргумента #define mains на 50 вместо 60).
Ссылки на код для Arduino и Processing приведены ниже.
Arduino
Processing
Шаг 7. Немного развлечемся
Давайте взглянем на окно терминала последовательного порта в вашей консоли управления Arduino. Мы видим, что на него выводятся необработанные данные о трехмерных координатах с частотой около 10 герц на кардую ось.
Почему именно 10 герц? Поясним – каждый сенсор опрашивается 2 раза, что при частоте развёртки экрана в 60 герц по формуле:
Частота экрана/количество циклов на сенсор * количество сенсоров дает искомые 10 Герц. Программный код считывает показания сенсоров максимальное количество раз за период 2 цикла с целью предотвращения дублирования результатов.
Первое, что сделал автор по его собственным словам – написал простой интерфейс для игры в трехмерные крестики-нолики. Код рабочей демо-версии приведен по этой ссылке, то есть вам всего лишь достаточно папку под названием «TiCTacToe3D» в директорию с исходным кодом проектов Processing.
Этот проект демонстрирует три основные вещи:
- Линеаризация полученных с датчиков необработанных данных. Время зарядки конденсатора в соответствии с законом степенной зависимости пропорционально дистанции. Таким образом, для определения дистанции вам необходимо извлечь квадратный корень из соотношения дроби 1/время. Таким образом, дистанция рассчитывается по следующей формуле: Дистанция = корень квадратный из (1/время).
- Нормализация полученных данных. После запуска проекта, зажмите левую кнопку мыши и одновременно перемещайте ладонь в зоне действия сенсорных пластин. Это позволит установить границы виртуальной рабочей зоны.
- Устраняет «дребезг» сенсоров путем введения начальной точки отсчета.
На практике, с использованием описанной схемы автору удалось достигнуть максимальной площади сенсорной пластины в 1.5 кубических фута.
Шаг 8. Варианты дальнейшего развития проекта
- Создать большие по площади сенсоры
- Подобрать номиналы резисторов и оптимизировать код для обработки вибраций более высокой частоты с перспективой создания чувствительного конденсаторного микрофона
- Найти способ уменьшить электромагнитные наводки от сети переменного тока (мощный конденсатор между сенсорными пластинами и землей)
- Сделать подборщик цветов
- Организовать управления видео- или музыкальными параметрами (подбор мелодии или ритма)
- Сделать интерфейс управления, как в фильме «Особое мнение»
Журнал проекта
На сайте о Arduino размещены две статьи, посвященные использованию емкостных сенсоров. Там же, выложена для загрузки готовая библиотека для работы с емкостными сенсорами. В конце - концов, автор изменил конструкцию емкостной цепи из книги «Physical Computing».
Микросекундные интервалы были подобраны опытным путем с использованием слегка измененного кода с конференции о Arduino.
Возвращаясь к нашей теме, автор хочет отметить, что несмотря на огромное количество изученного материала о терменвоксах, он так и не полян принцип их действия в степени достаточной для проектирования собственной схемы. В то же время, автор поставил себе целью сделать проект достаточно простым для повторения и в то же время функциональным.
Автор выражает благодарность Dane Kouttron за терпение и выдержку при доведении до него общих принципов работы колебательного контура терменвокса.
#DIY-3D-Controller( A-Z)