Четверг, 18.04.2024, 23:12
Мой персональный сайт Добрым людям smart & sober

Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Калькулятор


Меню сайта
Календарь
«  Декабрь 2010  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031


Форма входа


Архив записей
Мини-чат


Категории раздела


Наш опрос
В чем заключается ваш смысл жизни
Всего ответов: 154
 
Главная » 2010 » Декабрь » 28 » самоделка
02:37
самоделка
Олег Игоревич

Как известно человек стал человеком благодаря труду. Но ведь на этот труд его толкает бесконечная лень. Когда-то давно, когда обезьяне надоело лазить на дерево за бананами, она взяла в руки палку и начала сбивать их с земли. Вроде прогресс, а двигатель - лень!

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

Для воплощения данной идеи нам необходима сама флешка, пара светодиодов (я взял по стандарту зеленый и красный), пара метров удлинительного кабеля usb от ПК до замка, сервомоторчик и сердцем всей нашей системе будет контроллер Arduino (в одном из журналов о нем написана довольно неплохая статья, поэтому рассказывать что это не буду).

Для начала нам необходимо написать небольшую программку для определения id флешки. Писать будем на c++ в builder'е.

Собственно вот код:

GetVolumeInformation("h:", VolumeName.c_str() , 50, &SN, NULL, NULL, FSName, 50);

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

Дальше нам просто нужно записать вычисленный нами id в какую-то переменную и сравнить его с тем, который мы получаем при очередном подключении флешки.

Эту задачку решим так: Кладем на форму таймер, а в нем пишем:

dtyp = GetDriveType("h:");
if (dtyp != 2)
{
    Timer2->Enabled=0;
    Button1Click (this);
}

Здесь мы проверяем диск h:\ на наличие в нем устройства, а результат кидаем в dtyp.

dtyp != 2 означает, что в порту что-то есть. Тормозим таймер и запускаем проверочную процедурку Button1Click в которой мы и проверим соответствие нашего id тому, что получили:

unsigned long MySn=2797188077; // это номер моей флешки+
hCom = CreateFile("COM3", GENERIC_READ + GENERIC_WRITE, 3, NULL, CREATE_ALWAYS, 0, NULL);

if (SN==MySn) {
// проводим сравнение и если есть совпадение, то записываем в com-порт 1, в //противном лучае - 0;
    buf=1;
    WriteFile(hCom, &buf, 1, &n, NULL);
    access=1;

}
else {
    buf=0;
    WriteFile(hCom, &buf, 1, &n, NULL);
}
CloseHandle(hCom); //и естесственно не забываем закрыть порт
}

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

Суть следующая.

Ситуация 1 - у нас есть закрытая дверь и "правильный" ключ. Тогда при подключении флешки диод радостно загорается зеленым цветом, сервомоторчик открывает дверь:

if (buf==254 && accsses) {
    digitalWrite (red,HIGH);
    digitalWrite (green,LOW);
    accsses=0;
    for(int pos = 0; pos < 180; pos += 1)
    {
        servo1.write(pos);
        delay(5);
    }
}

Ситуация 2 - у нас есть открытая дверь и "правильный" ключ. Тогда загорается красный диод и сервопривод поворачивается в обратную сторону, тем самым закрывает дверь:

if (buf==254 && !accsses) {
    digitalWrite (red,LOW);
    digitalWrite (green,HIGH);
    accsses=1;
    for(int pos = 180; pos>=1; pos-=1)
    {
        servo1.write(pos);
        delay(5);
    }
}

Ситуация 3 - у нас в руках оказался "неправильный" ключ. Что делать?! Дадим понять, что в usb-вход попало что-то не то поморгав красным диодом:

if (buf==252 && accsses) {
    digitalWrite (red,HIGH); digitalWrite (green,LOW);
    delay (300);
    digitalWrite (red,LOW);
    delay (300);
    digitalWrite (red,HIGH);
    delay (300);
    digitalWrite (red,LOW);
    delay (300);
    digitalWrite (red,LOW);
    delay (300);
    digitalWrite (red,LOW);
    digitalWrite (green,HIGH);
}

В общем вот и все. Теперь осталось собрать все в кучу, скомутировать и вешать на дверь - пугать соседей.


Просмотров: 743 | Добавил: Breger | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024