Запись в блоге юзера Gol

 

Виноградный мультитач

arduino ардуина железки видео

Наткнулся на интересную штуку под названием MaKey MaKey.

MaKey MaKey – детище двух аспирантов последнего года обучения в MIT Media Lab. Эта тонкая монтажная плата подсоединяется через USB к компьютеру, и с помощью зубчатых зажимов цепляет другие объекты. MaKey MaKey может передавать компьютеру нажатие на «клавиатуру», клики или движения мыши, и компьютер думает, что яблоко, которое вы присоединили к нему через устройство, – это и есть клавиатура или мышь.



http://www.kickstarter.com
http://makeymakey.com



Вот за что уважаю американцев - так это за талант красиво преподнести всякую простейшую штуку.

Посмотрел видео, порадовался за ребят. Но где-то сразу зудеть начало. Полез за резюками. Через 15 минут (из которых пять минут ушло на перекур) получился вот такой девайс:

Продолжение...




UPD> Некоторое время спустя...



Ну и музыкальная пауза :-D


Реализация проста до неприличия. Нужны лишь резисторы номиналом 1-50 Мом (по одному на каждый контакт). Я использовал резюки на 1 Мом.

В скетче использовал библиотеку CapSense, которая, собссно, всю работу и делает.

Схема подключения:




#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); // воспроизводим или останавливаем звук
}


Если прошить нечто типа такого - будет в роли 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 клавиш.


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;

using System.IO;
using System.IO.Ports;

namespace WindowsFormsApplication1
{

public partial class Form1 : Form

{
System.IO.Ports.SerialPort newPort;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}


private void button2_Click(object sender, EventArgs e)
{
newPort = new SerialPort("COM11", 57600, Parity.None, 8, StopBits.One);
newPort.Open();
newPort.DataReceived += new SerialDataReceivedEventHandler(GetArduinoBytes);
}

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);

}

}
}


UPD> А вот новый скетч для Ардуины. Воспроизведение писка спикером закомментил, просто передаём состояние клавиш в консоль.


#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;

void setup()
{
//key1.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serial.begin(57600); // стартуем консоль
}

void loop()
{
total1 = key1.capSense(sense);
total2 = key2.capSense(sense);
total3 = key3.capSense(sense);
total4 = key4.capSense(sense);
total5 = key5.capSense(sense);
total6 = key6.capSense(sense);
total7 = key7.capSense(sense);
total8 = key8.capSense(sense);

button = 0;
if (total1 > range) button |= 1;
if (total2 > range) button |= 2;
if (total3 > range) button |= 4;
if (total4 > range) button |= 8;
if (total5 > range) button |= 16;
if (total6 > range) button |= 32;
if (total7 > range) button |= 64;
if (total8 > range) button |= 128;

if (button != oldButton) {
Serial.println(button);
oldButton = button;
}

/*
if (button) freq = button * 10 + 200; else freq = 0;
if (freq) {
Serial.println(freq);
tone(SND_PIN, freq);
} else noTone(SND_PIN); // воспроизводим или останавливаем звук
*/
}


UPD> Про МакиМаки по телику показали. Запись выложена вот тут.
Копия в ЖЖ Gol      Среда, 16 Мая, 2012 03:05       56


Добавить комментарий
 

Gol Среда, 16 Мая, 2012 07:27 цитировать ссылка на коммент

Америкосы на Кикстартере на производство такой штуковины уже $42К собрали. Завидую.

 

 

Гость Среда, 16 Мая, 2012 08:15 цитировать ссылка на коммент

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

 

 

Gol Среда, 16 Мая, 2012 08:22 цитировать ссылка на коммент

2 Гость:
Полностью согласен

 

 

Gol Среда, 16 Мая, 2012 09:38 цитировать ссылка на коммент

Добавил ещё 5 виноградин. Итого 8 сенсорных клавиш. бОльшее кол-во уже потребует добавления сдвиговых регистров и т.д.

 

 

Dyez Среда, 16 Мая, 2012 10:59 цитировать ссылка на коммент

Жаль, что Кикстартер работает только с америкосами...Ты бы там, Сергей, собрал приличный стартовый капитал на свои разработки.

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

 

 

Gol Среда, 16 Мая, 2012 12:16 цитировать ссылка на коммент

Так… С помощью советов Leonardo удалось набросать простенькую софтинку на C#. Читает ардуинский COM-порт, принимает нажатия на виноградины, эмулирует нажатия клавиатуры. Щас попробую все восемь виноградин подцепить и тогда новый видеоролик сниму. Впервые писал что-то на C# :-)

 

 

Gol Среда, 16 Мая, 2012 13:02 цитировать ссылка на коммент

Гггы, я уже на 6-м месте в "Лучшее за 24 часа" на Хабре :-)

 

 

Гость Среда, 16 Мая, 2012 13:34 цитировать ссылка на коммент

А где можно взять более подробную схему вашей установки?

 

 

Gol Среда, 16 Мая, 2012 14:05 цитировать ссылка на коммент

2 Гость:
Так ведь я ж указал тут уже (см. рисунок). Или прям досконально нарисовать? Досконально могу, но теперь уж только вечером, а то я вырубаюсь уже (со вчера спать ещё не ложилсо).

 

 

Gol Среда, 16 Мая, 2012 14:05 цитировать ссылка на коммент

Добавил новое видео с игровым моментом :-)

 

 

Гость Среда, 16 Мая, 2012 20:39 цитировать ссылка на коммент

и чему только в мите учат - стыдно должно быть! и вообще меня смущает эта помешанность на ардуине.

 

 

Гость Среда, 16 Мая, 2012 23:13 цитировать ссылка на коммент

Ништяк :) можно сделать какой нибудь анализатор прикосновений.

 

 

Gol Четверг, 17 Мая, 2012 10:07 цитировать ссылка на коммент

Цитата: и чему только в мите учат - стыдно должно быть! и вообще меня смущает эта помешанность на ардуине.

Ну почему ж сразу помешанность. Ардуинка очень подходит для несложных проектов в виду простоты реализации.

 

 

Гость Четверг, 17 Мая, 2012 15:31 цитировать ссылка на коммент

Пожалуйста подскажите откуда заказали ардуинку, прям очень нужно и в короткие сроки)буду очень признателен! just_amf@mail.ru

 

 

Gol Четверг, 17 Мая, 2012 16:39 цитировать ссылка на коммент

Да куча магазинов ими торгует, доставка обычно на следующий день. Я в амперке обычно заказываю (amperka.ru) и на carmonitor.ru

 

 

Маман Четверг, 17 Мая, 2012 22:44 цитировать ссылка на коммент

Молодец! Но коммерческой жилки в тебе нет

 

 

Гость Вторник, 22 Мая, 2012 09:39 цитировать ссылка на коммент

А как эмулировать нажатия клавиш?

 

 

Гость Воскресенье, 27 Мая, 2012 17:52 цитировать ссылка на коммент

Можете выложить детальную схему. Я не понимаю куда подсоединять. И какие пины in и out. Заранее спасибо

 

 

Gol Понедельник, 28 Мая, 2012 00:59 цитировать ссылка на коммент

2 Гость:
Ну как освою рисование схем в Fritzing, так выложу

 

 

Гость Понедельник, 28 Мая, 2012 13:31 цитировать ссылка на коммент

Здравствуйте, делаем сюжет на телеканале "Россия 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 Понедельник, 28 Мая, 2012 21:28 цитировать ссылка на коммент

Ольга, ну какое ж это изобретение? Смех один. Идея не моя - тут МИТовцы молодцы, я лишь повторил (и, похоже, таки немного улучшил).

Насчёт съёмок - дык меня ж коллеги засмеют ибо такую фигню ещё и по телику показывать Мне "телевизионной славы" уже хватило, так что я пас. Ну и некоторые пункты правил конкурса смущают.

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

 

 

Гость Вторник, 29 Мая, 2012 14:08 цитировать ссылка на коммент

Gol,спасибо, что ответили. Согласна, канал мы федеральный, но аполитичный. Телеканал "Россия 2" это бывший канал "Спорт". Наша аудитория - мужчины, любящие спорт и научно-технологические новости. Ваша догадка совсем не фигня, а из серии "все гениальное - просто", например, главный редактор "Популярной механики" высоко оценил творение ребят из MIT. Так что может пересмотрите свой отказ, какие конкретно "правила" вас смущают, сюжет про это мы делаем в любом случае.

С уважением, Ольга,
продюсер "Вести.ру" и "Пятница"

 

 

angv Вторник, 29 Мая, 2012 23:54 цитировать ссылка на коммент

Цитата: 618-27-83.ru/?...

Аба-а-лдеть! :)

 

 

Gol Среда, 30 Мая, 2012 00:44 цитировать ссылка на коммент

2 angv:
Ага, весело было :-) Я там на видео бородатый ишо.

 

 

Gol Среда, 30 Мая, 2012 07:57 цитировать ссылка на коммент

Цитата: Ваша догадка совсем не фигня, а из серии "все гениальное - просто", например, главный редактор "Популярной механики" высоко оценил творение ребят из MIT. Так что может пересмотрите свой отказ, какие конкретно "правила" вас смущают, сюжет про это мы делаем в любом случае. С уважением, Ольга, продюсер "Вести.ру" и "Пятница"

А что именно от меня требуется? Показаться в кадре с виноградинками и проводками? :-)

 

 

Гость Среда, 30 Мая, 2012 11:28 цитировать ссылка на коммент

Ага) С супер-джойстиком! Ну и ответить на пару вопросов корреспондента. Здорово, что "Кулибины" не перевелись еще в России))).

 

 

Гость Четверг, 31 Мая, 2012 13:38 цитировать ссылка на коммент

Жаль, что Вы так и не уговорились) Программа "Пятница" уже завтра. Новых Вам идей!

С уважением, Ольга,
продюсер "Вести.ру" и "Пятница"

 

 

Gol Пятница, 1 Июня, 2012 11:59 цитировать ссылка на коммент

2 Гость:
Посмотрел :-) Всё-таки пару секунд мои виноградинки вы показали . Вы жу не против что я сюда фрагмент передачи выложу?

 

 

Gol Пятница, 1 Июня, 2012 12:31 цитировать ссылка на коммент

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

 

 

Гость Пятница, 1 Июня, 2012 17:14 цитировать ссылка на коммент

Выкладывайте) Если бы Вы согласились поучаствовать, то показали бы не пару секунд, а полноценный кусок. Удачи!

 

 

Gol Пятница, 1 Июня, 2012 22:09 цитировать ссылка на коммент

2 Гость:
Да ладн, у вас и так нормуль выпуск получился.

 

 

Гость Воскресенье, 18 Ноября, 2012 20:47 цитировать ссылка на коммент

Здравствуйте. Не могли бы вы сделать небольшой гайд по созданию(настройке) данного девайса?
В С++ немножко шарю, но совсем не понимаю что, куда и как подключать.
Какие проводки нужны и т.п. Вы бы мне очень помогли) Хочу написать курсовую на эту тему.
kelerman@inbox.ru

 

 

Gol Воскресенье, 18 Ноября, 2012 20:49 цитировать ссылка на коммент

2 Гость:
Уффф, вот чего я не умею - так это по шагам объяснять :-) Тут я ж вроде всё подробно расписал, или не? Схема подключения есть, код скетча для ардуины есть, даже для компа пример кода есть.

 

 

Гость Воскресенье, 18 Ноября, 2012 21:20 цитировать ссылка на коммент

Я даже не ожидал такого скорого ответа.
Я тогда вам просто свои глупые вопросы задам)

1. Провода).
Что это за провода? Обычные или какие-то особенные? (да-да, вопросы гениальные)
2. В физике разбираюсь плохо, поэтому не знаю зачем нужны резисторы и что с ними сделать), как и не понимаю самой схемы(
Вижу, что нужно ардуинку подключить к компу, посредством ЮСБ, засунуть в ардуинку провода... а резисторы зачем?
3. Скетч, как я понял, нужно вставить в софт Ардуино. с кодом на Сях тоже всё понятно.

Ну вот. Буду очень доволен, если ответите на первые 2 вопроса)

 

 

Gol Воскресенье, 18 Ноября, 2012 21:59 цитировать ссылка на коммент

2 Гость:
1. Провода самые обычные. Любые.
2. Резисторы нужны чтоб получить RC-цепочку. Именно из-за этого прикосновения и засекаются.

 

 

Гость Понедельник, 19 Ноября, 2012 01:10 цитировать ссылка на коммент

ооо я походу понял всё. и схему вроде даже понял, ахах. Резисторы же имеют вход и выход. К выходу нужно подсоединить провод, а вход засунуть в ардуинку? Ведь так?
Если так, то всё довольно просто)

 

 

Gol Понедельник, 19 Ноября, 2012 01:15 цитировать ссылка на коммент

2 Гость:
Ну вот видишь :-) Только немножко не так. Резистор надо между двумя пинами ардуины, между входом и выходом. Т.е. между теми пинами, которые указаны в функции CapSense. Т.е., например, CapSense(7, 5) - значит резистор должен быть между 7-м и 5-м пинами. Одним концом резистор подключить к 7-му пину, вторым - к 5-му. 7-й будет это "выход", 5-й - "вход". Вот к тому пину который "вход" уже (прям к ноге резистора можно) и подключать провод (сенсор). Т.е. к одной ноге ардуины будут одновременно подключены и резистор и провод.

 

 

Гость Понедельник, 19 Ноября, 2012 01:55 цитировать ссылка на коммент

ооо! Спасибо! Этого я не понял) Ещё раз спасибо!

 

 

Gol Понедельник, 19 Ноября, 2012 01:56 цитировать ссылка на коммент

2 Гость:
Да не за шо, собссно

 

 

GreyWolf Пятница, 14 Декабря, 2012 10:48 цитировать ссылка на коммент

Привет собрал по твоей схеме но звук идет с задержкой
В чем проблема?

 

 

Gol Пятница, 14 Декабря, 2012 10:52 цитировать ссылка на коммент

2 GreyWolf:
Точь-в-точь по моей схеме и с таким же скетчем? У меня задержка появлялась если больше восьми кнопок делать. Семь-восемь ещё нормуль держатся, без особой задержки.

 

 

GreyWolf Пятница, 14 Декабря, 2012 11:05 цитировать ссылка на коммент

Да резистор мегаомный взял первый скетч плата Seeeduino V3.0 (ATmega 328)

 

 

Gol Пятница, 14 Декабря, 2012 11:09 цитировать ссылка на коммент

2 GreyWolf:
А если одна кнопка подключена - тож задержка?

 

 

GreyWolf Пятница, 14 Декабря, 2012 11:16 цитировать ссылка на коммент

Да держишь секунды 3 провод спустя 7 секунд начинает пищать

 

 

Гость Пятница, 11 Января, 2013 02:01 цитировать ссылка на коммент

А как назначать кнопки?

 

 

Гость Пятница, 11 Января, 2013 02:07 цитировать ссылка на коммент

хочу купить teensy. какой купить с header pins или без? И вообше какой Development Board лучше брать? P.S. я живу в США

 

 

quattro Пятница, 11 Января, 2013 02:12 цитировать ссылка на коммент

Пожалуйста, напиши список того, что нужно купить (желательно с ссылкой в амазон или какой-то другой интернет магазин в США) чтобы сделать такую шнягу по самой низкой цене

 

 

Gol Пятница, 11 Января, 2013 03:34 цитировать ссылка на коммент

2 quattro:
Учитывая то что я Teensy в глаза не видел и тем более не щупал - затрудняюсь ответить :-) Но могу предположить что старшую модель лучше брать. С пинами или без - хз, тут уж кому как удобнее. Какой лучше девборд - смотря для чего. Для чего-то ардуина, для другого - биглборд, для третьего - виртурилка наша.

 

 

Гость Пятница, 11 Января, 2013 21:07 цитировать ссылка на коммент

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

 

 

Гость Пятница, 11 Января, 2013 21:30 цитировать ссылка на коммент

или сюда kelerman@inbox.ru

 

 

Гость Пятница, 18 Января, 2013 17:39 цитировать ссылка на коммент

Приветствую! Компилятор С sharp пишет "Доступ к порту 'COM30' закрыт." Не знаете в чем может быть проблема?

 

 

Гость Среда, 6 Февраля, 2013 14:16 цитировать ссылка на коммент

Огромное спасибо автору! Очень мне помог! Всё работает замечательно!

 

 

Гость Четверг, 14 Марта, 2013 23:32 цитировать ссылка на коммент

Приветствую. Хочу собрать электронную ударную установку, но не хватает знаний и опыта, стою перед выбором между ардуино уно и мега. сколько можно будет к уно прикрепить датчиков? я так понимаю аналоговых входов всего 6? Но этого маловато.. (планируется либо пьезоэлектрики, либо иные звукосниматели.) Буду признателен за помощь.

 

 

Гость Среда, 24 Апреля, 2013 02:55 цитировать ссылка на коммент

Спасибо огромное!!!
Очень интересно! =)

 

 

Гость Воскресенье, 14 Июля, 2013 03:33 цитировать ссылка на коммент

Can you please forward me the code for this script or please let know me in detail concerning this script?

 

 

Gol Воскресенье, 14 Июля, 2013 04:38 цитировать ссылка на коммент

2 Guest:
Hi! All scripts are posted here, all comments you can translate via Google Translate :-)

 

Сколько букв в слове Гол?

Вы вошли как Гость      

Сейчас на сайте: 1 и 4 гостей









Страница сгенерирована за 0.03053617477417 секунд