Съдържание:

Компютърна система за автоматично заключване: 4 стъпки
Компютърна система за автоматично заключване: 4 стъпки

Видео: Компютърна система за автоматично заключване: 4 стъпки

Видео: Компютърна система за автоматично заключване: 4 стъпки
Видео: 5 Яки Трика за iPhone, които НЕ ЗНАЕТЕ! 2024, Юли
Anonim
Image
Image
Сглобяване и качване
Сглобяване и качване

В този урок ще изследваме сигурността на заключването на екрана на компютъра. Операционните системи имат конфигурируем таймаут, който ще заключи екрана ви, ако потребителят не е докоснал мишката или клавиатурата.

Обикновено по подразбиране е около една минута. Ако следвате това по подразбиране и оставите компютъра си в натоварена среда, някой може да получи достъп до компютъра ви в тази минута, докато екранът се заключи. Ако го настроите на няколко секунди, ще получавате заключения екран много често, когато не докосвате клавиатурата и това е досадно …

Един ден колега от работа ме попита дали мога да „поправя“този проблем с някакво устройство, което заключва компютъра, когато той не е там, и аз приех предизвикателството:)

Разгледах няколко опции в главата си, като например използване на arduinos и инфрачервен сензор за термометър, PIR сензор или може би използване на разпознаване на лица на компютъра, но се спрях на по -прост метод:

Ще комбинираме функционалността на Arduino Leonardo HID (емулиране на клавиатурата) с ултразвуков сензор за разстояние, за да установим дали човек използва компютъра, ако не, устройството ще изпрати комбинация от клавиши през USB, за да заключи компютъра.

Стъпка 1: Компоненти

Тъй като това е доказателство за концепцията, ние ще изградим устройството на макет

Ще имаш нужда:

1. Arduino Leonardo (важно е да използвате Leonardo, защото може да подражава на клавиатурата)

2. HC-SR04 ултразвуков сензор за разстояние

3. 2 x 10 K променливи резистори

4. макет, проводници за макет

5. USB кабел

6. OLED дисплей (https://www.adafruit.com/product/931)

Стъпка 2: Сглобяване и качване

Сглобяване и качване
Сглобяване и качване

Първо проверете дали имате всички необходими компоненти и Arduino IDE. Ще отида накратко на стъпките за свързване и винаги можете да разгледате приложената схема за фризиране

Монтаж

1. Поставете Leonardo върху дъската и го задръжте на място с гумена лента

2. поставете двата променливи резистора, OLED дисплея и ултразвуковия сензор на дъската

3. свържете основания и vcc

4. свържете средните щифтове на резисторите към arduino A0 и A1

5. свържете SDA и SCL на дисплея към SDA и SCL, маркирани на Leonardo

6. свържете спусъка и ехоконта на ултразвуковия сензор към 12, 13 цифрови пина на Leonardo

7. свържете USB към компютъра

Качване

На първо място ще трябва да изтеглите и инсталирате необходимите библиотеки arduino:

1. Библиотека GOFi2cOLED:

2. Ултразвукова библиотека-HC-SR04:

Ако не знаете как да инсталирате arduino библиотеки, вижте този урок.

След като изтеглите и инсталирате библиотеките по -горе, можете да клонирате или изтеглите моето хранилище на arduino, намиращо се тук: https://github.com/danionescu0/arduino, и ние ще използваме тази скица: https://github.com/danionescu0 /arduino/дърво/майстор …

Или можете да копирате и поставите кода по -долу:

/ * * Библиотеки, използвани от този проект: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #include "Wire.h" #include "GOFi2cOLED.h" #include "Ultrasonic.h"

GOFi2cOLED GOFoled;

Ултразвуков ултразвуков (12, 13);

const байт разстояниеPot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; unsigned long maxDistanceDetectionTime; bool lockTimerStarted = false;

void setup ()

{Serial.begin (9600); Keyboard.begin (); initializeDisplay (); }

void loop ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("таймер за заключване започва"); } else if (! shouldEnableLockTimer ()) {Serial.println ("таймерът за заключване е деактивиран"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Заключен екран"); } забавяне (100); }

bool shouldLockScreen ()

{return lockTimerStarted && (millis () - maxDistanceDetectionTime) / 1000> getTimer (); }

bool shouldEnableLockTimer ()

{int allowedDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); return getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> allowedDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Таймер:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Низово съобщение = ""; if (shouldLockScreen ()) {message = "заключване изпратено"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {message = "no"; } setDisplayText (1, "Заключване:", съобщение); }

void initializeDisplay ()

{GOFoled.init (0x3C); GOFoled.clearDisplay (); GOFoled.setCursor (0, 0); }

void setDisplayText (байт шрифт, етикет на низ, данни за низ)

{GOFoled.setTextSize (fontSize); GOFoled.println (етикет + ":" + данни); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

{GOFoled.clearDisplay (); GOFoled.setCursor (0, 0); }

int getActualDistance ()

{int distanceSum = 0; for (байт i = 0; i <10; i ++) {distanceSum+= ултразвук. Range (CM); }

връщане разстояниеSum / 10;

}

int getDistance ()

{карта за връщане (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{карта за връщане (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("натискане"); Keyboard.press (KEY_LEFT_CTRL); забавяне (10); Keyboard.press (KEY_LEFT_ALT); забавяне (10); Keyboard.write ('l'); забавяне (10); Keyboard.releaseAll (); }

Накрая свържете компютъра arduino с помощта на usb кабел и качете скицата в arduino.

Стъпка 3: Използване на устройството

Използване на Устройството
Използване на Устройството

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

Устройството има някои конфигурации:

1. Нормално разстояние, разстоянието може да се конфигурира с помощта на променливия резистор, свързан към A0. Разстоянието се показва и на OLED. Когато разстоянието се увеличи с 25% от това, което е зададено, отброяването ще започне

2. Таймаут (обратно броене). Времето за изчакване в секунди също може да се конфигурира от резистора, свързан към A1. Когато изтече времето за изчакване, ще бъде изпратена командата за заключване

3. Заключване на комбинация от клавиши. Комбинацията от ключове по подразбиране за заключване е настроена да работи за Ubuntu Linux 18 (CTRL+ALT+L). За да промените комбинацията, трябва да промените скицата си според операционната система:

4. Защита на изчакване и разстояние. Тъй като това е устройство, което емулира клавиатурата, добра идея е да имате механизъм за деактивиране на функционалността на клавиатурата. В моята скица съм избрал, че времето за изчакване и разстоянието трябва да са по -големи от "1". (можете да промените това в кода, ако желаете)

Намерете и променете функцията "lockScreen ()"

void lockScreen () {Serial.println ("натискане"); Keyboard.press (KEY_LEFT_CTRL); забавяне (10); Keyboard.press (KEY_LEFT_ALT); забавяне (10); Keyboard.write ('l'); забавяне (10); Keyboard.releaseAll (); }

За пълен списък със специални ключове на arduino проверете тук:

Стъпка 4: Други подходи

Преди това изпълнение разгледах и някои други реализации:

1. Инфрачервен термометър (MLX90614 https://www.sparkfun.com/products/10740). Инфрачервеният термометър е устройство, което измерва температурата, като анализира инфрачервените лъчения, излъчвани от обект на разстояние. Имах един, който лежеше наоколо и си помислих, че може би мога да открия разликата в температурата пред компютъра.

Закачих го, но температурната разлика беше много малка (когато бях отпред или не) 1-2 градуса и си мислех, че не може да бъде толкова надежден

2. PIR сензор. (https://www.sparkfun.com/products/13285) Тези евтини сензори се продават като "сензори за движение", но те наистина откриват промени в инфрачервеното излъчване, така че на теория може да работи, когато човек напусне компютъра, сензорът ще открие че.. Също така тези сензори имат вградени тайм -аут и копчета за чувствителност. Така че аз свързах един и си играх с него, но изглежда, че сензорът не е направен за близко разстояние (има широк ъгъл), той даваше всякакви фалшиви сигнали.

3. Откриване на лица с помощта на уеб камерата. Тази опция изглеждаше много интересна, тъй като играх с това компютърно поле в другите си проекти като: https://github.com/danionescu0/robot-camera-platfo… и https://github.com/danionescu0/image-processing- пр…

Това беше парче торта! Но имаше някои недостатъци: камерата на лаптопа не можеше да се използва за други цели, докато програмата работи, и за това ще са необходими някои компютърни ресурси. Така че и аз се отказах от тази идея.

Ако имате още идеи как това може да стане, споделете ги, благодаря!

Препоръчано: