Наткнулся на интересную штуку под названием MaKey MaKey.
“
MaKey MaKey – детище двух аспирантов последнего года обучения в MIT Media Lab. Эта тонкая монтажная плата подсоединяется через USB к компьютеру, и с помощью зубчатых зажимов цепляет другие объекты. MaKey MaKey может передавать компьютеру нажатие на «клавиатуру», клики или движения мыши, и компьютер думает, что яблоко, которое вы присоединили к нему через устройство, – это и есть клавиатура или мышь.
Вот за что уважаю американцев - так это за талант красиво преподнести всякую простейшую штуку.
Посмотрел видео, порадовался за ребят. Но где-то сразу зудеть начало. Полез за резюками. Через 15 минут (из которых пять минут ушло на перекур) получился вот такой девайс:
Реализация проста до неприличия. Нужны лишь резисторы номиналом 1-50 Мом (по одному на каждый контакт). Я использовал резюки на 1 Мом.
В скетче использовал библиотеку CapSense, которая, собссно, всю работу и делает.
Схема подключения:
[code] #include <CapSense.h>
#define SND_PIN 12 // пин, к которому подключён спикер
CapSense key1 = CapSense(7, 5); // клавиша 1 между 7-м и 5-м пинами CapSense key2 = CapSense(7, 4); // клавиша 2 между 7-м и 4-м пинами CapSense key3 = CapSense(7, 3); // клавиша 3 между 7-м и 3-м пинами
int range = 200; // пороговое значение, определяющее нажатие byte button; // побитовое обозначение нажатых клавиш int freq; // частота звука для воспроизведения на спикер
void setup() { // выключает автокалибровку на 1-й клавише. // Пока фиг знает зачем, советуют в примерах либы key1.set_CS_AutocaL_Millis(0xFFFFFFFF); }
void loop() { long total1 = key1.capSense(30); long total2 = key2.capSense(30); long total3 = key3.capSense(30);
button = 0; if (total1 > range) button |= 1; if (total2 > range) button |= 2; if (total3 > range) button |= 4;
switch (button) { case 1: freq = 200; break; case 2: freq = 300; break; case 3: freq = 400; break; case 4: freq = 500; break; case 5: freq = 600; break; case 6: freq = 700; break; case 7: freq = 800; break; default: freq = 0; }
if (freq) tone(SND_PIN, freq); else noTone(SND_PIN); // воспроизводим или останавливаем звук } [/code]
Если прошить нечто типа такого - будет в роли HID-клавиатуры (ещё не пробовал). Ещё такое можно попробовать - hiduino. Но для этого не всякая Ардуинка подойдёт, нужна с чипом atmega8u2 в качестве USB контролера (новая Arduino UNO как раз с ним). Жаль, под рукой нет ничего подходящего, а хотелось поиграть в бамбермена-онлайн с виноградной клавиатуры :-) Можно, конечно, набросать софтинку которая будет через COM-порт читать с ардуины сигнали о нажатиях и транслировать их в события клавиатуры, но это уже не то (через HID всё-таки интереснее).
UPD> Получил работающий девайс, зудеть перестало, расслабился. Почитал про МакиМаки поподробнее - оказывается, там как раз на ардуине и сделано :-)
UPD> Нашёл интересный проект — Виртуальная USB клава, без использования atmega8u2. Надо будет попробовать подцепить.
UPD> Сварганил простенькую программульку на C# (впервые, кстати, на C# что-то делал). Спасибо Leonardo за подсказки и спасибо хабраюзеру GreenGo за наводку на библиотеку InputSimulator.
UPD> Исходный код (VS2010, C#). Я в C# не шарю, так что как получилось — так получилось :-) Огромное спасибо Leonardo за подсказки, иначе вообще нифига бы не получилось. И спасибо хабраюзеру GreenGo за наводку на библиотеку InputSimulator.
Софтина слушает указанный COM-порт (никаких настроек нет, имя порта жёстко прописано в исходнике (COM11). Это тот порт, по которому доступна Ардуина. Задействованы только 6 клавиш.
[code] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using WindowsInput;
public void GetArduinoBytes(object sender, SerialDataReceivedEventArgs e) { string data = newPort.ReadExisting(); string [] arr; int key = 0; arr = data.Split('\r'); try { key = Convert.ToInt32(arr[0]); } catch (System.FormatException) { // ничего не делаем }
int key1 = key & 1; int key2 = (key >> 1) & 1; int key3 = (key >> 2) & 1; int key4 = (key >> 3) & 1; int key5 = (key >> 4) & 1; int key6 = (key >> 5) & 1; int key7 = (key >> 6) & 1; int key8 = (key >> 7) & 1;
if (key1 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.DOWN); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
if (key2 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.UP); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
if (key3 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.LEFT); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.LEFT);
if (key4 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.RIGHT); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.RIGHT);
if (key5 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.SPACE); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.SPACE);
if (key6 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_Z); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_Z);
}
} } [/code]
UPD> А вот новый скетч для Ардуины. Воспроизведение писка спикером закомментил, просто передаём состояние клавиш в консоль.
[code] #include <CapSense.h>
#define SND_PIN 12 // пин, к которому подключён спикер
CapSense key1 = CapSense(5, 2); // клавиша 1 между 5-м и 5-м пинами CapSense key2 = CapSense(5, 3); // клавиша 2 между 5-м и 4-м пинами CapSense key3 = CapSense(5, 4); // клавиша 3 между 5-м и 3-м пинами CapSense key4 = CapSense(5, 6); // клавиша 4 между 5-м и 3-м пинами CapSense key5 = CapSense(5, 7); // клавиша 5 между 5-м и 3-м пинами CapSense key6 = CapSense(5, 8); // клавиша 6 между 5-м и 3-м пинами CapSense key7 = CapSense(5, 9); // клавиша 7 между 5-м и 3-м пинами CapSense key8 = CapSense(5, 11); // клавиша 8 между 5-м и 3-м пинами
int range = 100; // пороговое значение, определяющее нажатие unsigned int button = 0, oldButton = 0; // побитовое обозначение нажатых клавиш int freq; // частота звука для воспроизведения на спикер byte sense = 30; long total1, total2, total3, total4, total5, total6, total7, total8;
Так… С помощью советов Leonardo удалось набросать простенькую софтинку на C#. Читает ардуинский COM-порт, принимает нажатия на виноградины, эмулирует нажатия клавиатуры. Щас попробую все восемь виноградин подцепить и тогда новый видеоролик сниму. Впервые писал что-то на C# :-)
2 Гость: Так ведь я ж указал тут уже (см. рисунок). Или прям досконально нарисовать? Досконально могу, но теперь уж только вечером, а то я вырубаюсь уже (со вчера спать ещё не ложилсо).
Здравствуйте, делаем сюжет на телеканале "Россия 2" про "джойстик изо всего" (изобретение парней из MIT http://slon.ru/fast/world/eto-ochen-kruto-iz-lyuboy-veshchi-mozhno-sdelat-klaviaturu-788703.xhtml). Хотим попросить Вас поучаствовать в сюжете как автора девайса из виноградин.Съемочная группа готова подъехать к Вам на любой удобный для Вас адрес, чтобы сделать съемку Вашего изобретения и спросить про саму идею. Очень ждем положительного ответа ))). С уважением, Ольга, продюсер "Вести.ру" и "Пятница" 8 985 303 01 47 8 499 257 35 36 Факс: 8 499 257 32 17 e-mail:oalenkina@vgtrk.com
Ольга, ну какое ж это изобретение? Смех один. Идея не моя - тут МИТовцы молодцы, я лишь повторил (и, похоже, таки немного улучшил).
Насчёт съёмок - дык меня ж коллеги засмеют ибо такую фигню ещё и по телику показывать Мне "телевизионной славы" уже хватило, так что я пас. Ну и некоторые пункты правил конкурса смущают.
Ну и поддерживаю бойкот государственных телекомпаний. Когда начнёте адекватно показывать происходящий на улицах беспредел в отношении оппозиции, тогда можно будет о чём-то говорить. А сейчас - извиняйте.
Gol,спасибо, что ответили. Согласна, канал мы федеральный, но аполитичный. Телеканал "Россия 2" это бывший канал "Спорт". Наша аудитория - мужчины, любящие спорт и научно-технологические новости. Ваша догадка совсем не фигня, а из серии "все гениальное - просто", например, главный редактор "Популярной механики" высоко оценил творение ребят из MIT. Так что может пересмотрите свой отказ, какие конкретно "правила" вас смущают, сюжет про это мы делаем в любом случае.
С уважением, Ольга, продюсер "Вести.ру" и "Пятница"
Цитата: Ваша догадка совсем не фигня, а из серии "все гениальное - просто", например, главный редактор "Популярной механики" высоко оценил творение ребят из MIT. Так что может пересмотрите свой отказ, какие конкретно "правила" вас смущают, сюжет про это мы делаем в любом случае. С уважением, Ольга, продюсер "Вести.ру" и "Пятница"
А что именно от меня требуется? Показаться в кадре с виноградинками и проводками? :-)
Здравствуйте. Не могли бы вы сделать небольшой гайд по созданию(настройке) данного девайса? В С++ немножко шарю, но совсем не понимаю что, куда и как подключать. Какие проводки нужны и т.п. Вы бы мне очень помогли) Хочу написать курсовую на эту тему. kelerman@inbox.ru
2 Гость: Уффф, вот чего я не умею - так это по шагам объяснять :-) Тут я ж вроде всё подробно расписал, или не? Схема подключения есть, код скетча для ардуины есть, даже для компа пример кода есть.
Я даже не ожидал такого скорого ответа. Я тогда вам просто свои глупые вопросы задам)
1. Провода). Что это за провода? Обычные или какие-то особенные? (да-да, вопросы гениальные) 2. В физике разбираюсь плохо, поэтому не знаю зачем нужны резисторы и что с ними сделать), как и не понимаю самой схемы( Вижу, что нужно ардуинку подключить к компу, посредством ЮСБ, засунуть в ардуинку провода... а резисторы зачем? 3. Скетч, как я понял, нужно вставить в софт Ардуино. с кодом на Сях тоже всё понятно.
Ну вот. Буду очень доволен, если ответите на первые 2 вопроса)
ооо я походу понял всё. и схему вроде даже понял, ахах. Резисторы же имеют вход и выход. К выходу нужно подсоединить провод, а вход засунуть в ардуинку? Ведь так? Если так, то всё довольно просто)
2 Гость: Ну вот видишь :-) Только немножко не так. Резистор надо между двумя пинами ардуины, между входом и выходом. Т.е. между теми пинами, которые указаны в функции CapSense. Т.е., например, CapSense(7, 5) - значит резистор должен быть между 7-м и 5-м пинами. Одним концом резистор подключить к 7-му пину, вторым - к 5-му. 7-й будет это "выход", 5-й - "вход". Вот к тому пину который "вход" уже (прям к ноге резистора можно) и подключать провод (сенсор). Т.е. к одной ноге ардуины будут одновременно подключены и резистор и провод.
2 GreyWolf: Точь-в-точь по моей схеме и с таким же скетчем? У меня задержка появлялась если больше восьми кнопок делать. Семь-восемь ещё нормуль держатся, без особой задержки.
Пожалуйста, напиши список того, что нужно купить (желательно с ссылкой в амазон или какой-то другой интернет магазин в США) чтобы сделать такую шнягу по самой низкой цене
2 quattro: Учитывая то что я Teensy в глаза не видел и тем более не щупал - затрудняюсь ответить :-) Но могу предположить что старшую модель лучше брать. С пинами или без - хз, тут уж кому как удобнее. Какой лучше девборд - смотря для чего. Для чего-то ардуина, для другого - биглборд, для третьего - виртурилка наша.
Здравствуйте. Не могли бы вы залить полностью работающую программу С# на какой-либо хостинг? Сложно объяснить зачем, но я думаю, что мне это поможет. Заранее спасибо.
Приветствую. Хочу собрать электронную ударную установку, но не хватает знаний и опыта, стою перед выбором между ардуино уно и мега. сколько можно будет к уно прикрепить датчиков? я так понимаю аналоговых входов всего 6? Но этого маловато.. (планируется либо пьезоэлектрики, либо иные звукосниматели.) Буду признателен за помощь.
У них сейчас вышла Makey Makey Go, прям юзб свисток, и на видео там никто не заземляется в отличие от предыдущей версии Makey Makey - там на видео и в инструкции надо быть заземленным, я подумал в чем же отличие между ними
Gol Среда, 16 Мая, 2012 07:27 цитировать ссылка на коммент
Гость Среда, 16 Мая, 2012 08:15 цитировать ссылка на коммент
Gol Среда, 16 Мая, 2012 08:22 цитировать ссылка на коммент
Полностью согласен
Gol Среда, 16 Мая, 2012 09:38 цитировать ссылка на коммент
Dyez Среда, 16 Мая, 2012 10:59 цитировать ссылка на коммент
Ищи посредника америкоса для Кикстартера. Видел один сюжет, что один московский дизайнер игрушек собрал так бабла на свою идею.
Gol Среда, 16 Мая, 2012 12:16 цитировать ссылка на коммент
Gol Среда, 16 Мая, 2012 13:02 цитировать ссылка на коммент
Гость Среда, 16 Мая, 2012 13:34 цитировать ссылка на коммент
Gol Среда, 16 Мая, 2012 14:05 цитировать ссылка на коммент
Так ведь я ж указал тут уже (см. рисунок). Или прям досконально нарисовать? Досконально могу, но теперь уж только вечером, а то я вырубаюсь уже (со вчера спать ещё не ложилсо).
Gol Среда, 16 Мая, 2012 14:05 цитировать ссылка на коммент
Гость Среда, 16 Мая, 2012 20:39 цитировать ссылка на коммент
Гость Среда, 16 Мая, 2012 23:13 цитировать ссылка на коммент
Gol Четверг, 17 Мая, 2012 10:07 цитировать ссылка на коммент
Ну почему ж сразу помешанность. Ардуинка очень подходит для несложных проектов в виду простоты реализации.
Гость Четверг, 17 Мая, 2012 15:31 цитировать ссылка на коммент
Gol Четверг, 17 Мая, 2012 16:39 цитировать ссылка на коммент
Маман Четверг, 17 Мая, 2012 22:44 цитировать ссылка на коммент
Гость Вторник, 22 Мая, 2012 09:39 цитировать ссылка на коммент
Гость Воскресенье, 27 Мая, 2012 17:52 цитировать ссылка на коммент
Gol Понедельник, 28 Мая, 2012 00:59 цитировать ссылка на коммент
Ну как освою рисование схем в Fritzing, так выложу
Гость Понедельник, 28 Мая, 2012 13:31 цитировать ссылка на коммент
С уважением, Ольга,
продюсер "Вести.ру" и "Пятница"
8 985 303 01 47
8 499 257 35 36
Факс: 8 499 257 32 17
e-mail:oalenkina@vgtrk.com
Gol Понедельник, 28 Мая, 2012 21:28 цитировать ссылка на коммент
Насчёт съёмок - дык меня ж коллеги засмеют ибо такую фигню ещё и по телику показывать Мне "телевизионной славы"
Ну и поддерживаю бойкот государственных телекомпаний. Когда начнёте адекватно показывать происходящий на улицах беспредел в отношении оппозиции, тогда можно будет о чём-то говорить. А сейчас - извиняйте.
Гость Вторник, 29 Мая, 2012 14:08 цитировать ссылка на коммент
С уважением, Ольга,
продюсер "Вести.ру" и "Пятница"
angv Вторник, 29 Мая, 2012 23:54 цитировать ссылка на коммент
Аба-а-лдеть! :)
Gol Среда, 30 Мая, 2012 00:44 цитировать ссылка на коммент
Ага, весело было :-) Я там на видео бородатый ишо.
Gol Среда, 30 Мая, 2012 07:57 цитировать ссылка на коммент
А что именно от меня требуется? Показаться в кадре с виноградинками и проводками? :-)
Гость Среда, 30 Мая, 2012 11:28 цитировать ссылка на коммент
Гость Четверг, 31 Мая, 2012 13:38 цитировать ссылка на коммент
С уважением, Ольга,
продюсер "Вести.ру" и "Пятница"
Gol Пятница, 1 Июня, 2012 11:59 цитировать ссылка на коммент
Посмотрел :-) Всё-таки пару секунд мои виноградинки вы показали . Вы жу не против что я сюда фрагмент передачи выложу?
Gol Пятница, 1 Июня, 2012 12:31 цитировать ссылка на коммент
Гость Пятница, 1 Июня, 2012 17:14 цитировать ссылка на коммент
Gol Пятница, 1 Июня, 2012 22:09 цитировать ссылка на коммент
Да ладн, у вас и так нормуль выпуск получился.
Гость Воскресенье, 18 Ноября, 2012 20:47 цитировать ссылка на коммент
В С++ немножко шарю, но совсем не понимаю что, куда и как подключать.
Какие проводки нужны и т.п. Вы бы мне очень помогли) Хочу написать курсовую на эту тему.
kelerman@inbox.ru
Gol Воскресенье, 18 Ноября, 2012 20:49 цитировать ссылка на коммент
Уффф, вот чего я не умею - так это по шагам объяснять :-) Тут я ж вроде всё подробно расписал, или не? Схема подключения есть, код скетча для ардуины есть, даже для компа пример кода есть.
Гость Воскресенье, 18 Ноября, 2012 21:20 цитировать ссылка на коммент
Я тогда вам просто свои глупые вопросы задам)
1. Провода).
Что это за провода? Обычные или какие-то особенные? (да-да, вопросы гениальные)
2. В физике разбираюсь плохо, поэтому не знаю зачем нужны резисторы и что с ними сделать), как и не понимаю самой схемы(
Вижу, что нужно ардуинку подключить к компу, посредством ЮСБ, засунуть в ардуинку провода... а резисторы зачем?
3. Скетч, как я понял, нужно вставить в софт Ардуино. с кодом на Сях тоже всё понятно.
Ну вот. Буду очень доволен, если ответите на первые 2 вопроса)
Gol Воскресенье, 18 Ноября, 2012 21:59 цитировать ссылка на коммент
1. Провода самые обычные. Любые.
2. Резисторы нужны чтоб получить RC-цепочку. Именно из-за этого прикосновения и засекаются.
Гость Понедельник, 19 Ноября, 2012 01:10 цитировать ссылка на коммент
Если так, то всё довольно просто)
Gol Понедельник, 19 Ноября, 2012 01:15 цитировать ссылка на коммент
Ну вот видишь :-) Только немножко не так. Резистор надо между двумя пинами ардуины, между входом и выходом. Т.е. между теми пинами, которые указаны в функции CapSense. Т.е., например, CapSense(7, 5) - значит резистор должен быть между 7-м и 5-м пинами. Одним концом резистор подключить к 7-му пину, вторым - к 5-му. 7-й будет это "выход", 5-й - "вход". Вот к тому пину который "вход" уже (прям к ноге резистора можно) и подключать провод (сенсор). Т.е. к одной ноге ардуины будут одновременно подключены и резистор и провод.
Гость Понедельник, 19 Ноября, 2012 01:55 цитировать ссылка на коммент
Gol Понедельник, 19 Ноября, 2012 01:56 цитировать ссылка на коммент
Да не за шо, собссно
GreyWolf Пятница, 14 Декабря, 2012 10:48 цитировать ссылка на коммент
В чем проблема?
Gol Пятница, 14 Декабря, 2012 10:52 цитировать ссылка на коммент
Точь-в-точь по моей схеме и с таким же скетчем? У меня задержка появлялась если больше восьми кнопок делать. Семь-восемь ещё нормуль держатся, без особой задержки.
GreyWolf Пятница, 14 Декабря, 2012 11:05 цитировать ссылка на коммент
Gol Пятница, 14 Декабря, 2012 11:09 цитировать ссылка на коммент
А если одна кнопка подключена - тож задержка?
GreyWolf Пятница, 14 Декабря, 2012 11:16 цитировать ссылка на коммент
Гость Пятница, 11 Января, 2013 02:01 цитировать ссылка на коммент
Гость Пятница, 11 Января, 2013 02:07 цитировать ссылка на коммент
quattro Пятница, 11 Января, 2013 02:12 цитировать ссылка на коммент
Gol Пятница, 11 Января, 2013 03:34 цитировать ссылка на коммент
Учитывая то что я Teensy в глаза не видел и тем более не щупал - затрудняюсь ответить :-) Но могу предположить что старшую модель лучше брать. С пинами или без - хз, тут уж кому как удобнее. Какой лучше девборд - смотря для чего. Для чего-то ардуина, для другого - биглборд, для третьего - виртурилка наша.
Гость Пятница, 11 Января, 2013 21:07 цитировать ссылка на коммент
Гость Пятница, 11 Января, 2013 21:30 цитировать ссылка на коммент
Гость Пятница, 18 Января, 2013 17:39 цитировать ссылка на коммент
Гость Среда, 6 Февраля, 2013 14:16 цитировать ссылка на коммент
Гость Четверг, 14 Марта, 2013 23:32 цитировать ссылка на коммент
Гость Среда, 24 Апреля, 2013 02:55 цитировать ссылка на коммент
Очень интересно! =)
Гость Воскресенье, 14 Июля, 2013 03:33 цитировать ссылка на коммент
Gol Воскресенье, 14 Июля, 2013 04:38 цитировать ссылка на коммент
Hi! All scripts are posted here, all comments you can translate via Google Translate :-)
Гость Воскресенье, 31 Января, 2016 14:01 цитировать ссылка на коммент
Gol Воскресенье, 31 Января, 2016 14:08 цитировать ссылка на коммент
Неа, не заземлялся, и так пашет.
Гость Воскресенье, 31 Января, 2016 14:28 цитировать ссылка на коммент
Гость Вторник, 6 Сентября, 2016 10:48 цитировать ссылка на коммент