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

Впрочем речь идет не об обезьянах, а о той самой лени. Чтобы очеловечиться
еще чуть-чуть, ленивым открывателям дверей я предлагаю собрать небольшой
девайсик, который можно установить поверх дверного замка, а ключик от него будет
- обыкновенный 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);
}

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии