Оглавление:

Компьютерная система с автоматической блокировкой: 4 шага
Компьютерная система с автоматической блокировкой: 4 шага

Видео: Компьютерная система с автоматической блокировкой: 4 шага

Видео: Компьютерная система с автоматической блокировкой: 4 шага
Видео: Перевод числа в двоичную систему за два шага!!! 2024, Июнь
Anonim
Image
Image
Сборка и загрузка
Сборка и загрузка

В этом уроке мы собираемся изучить безопасность блокировки экрана компьютера. Операционные системы имеют настраиваемый тайм-аут, который заблокирует ваш экран, если пользователь не коснулся мыши или клавиатуры.

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

Однажды коллега по работе спросил меня, могу ли я «исправить» эту проблему с помощью какого-то устройства, которое блокирует компьютер, когда его нет рядом, и я принял вызов:)

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

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

Шаг 1: Компоненты

Поскольку это доказательство концепции, мы собираемся построить устройство на макетной плате.

Вам понадобиться:

1. Arduino Leonardo (важно использовать Leonardo, потому что он может эмулировать клавиатуру)

2. Ультразвуковой датчик расстояния HC-SR04.

3. Переменные резисторы 2 x 10 кОм

4. Макет, макет провода

5. USB-кабель.

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

Шаг 2. Сборка и загрузка

Сборка и загрузка
Сборка и загрузка

Сначала проверьте, есть ли у вас все необходимые компоненты и IDE Arduino. Я собираюсь вкратце перейти к этапам подключения, и вы всегда можете взглянуть на прилагаемую схему фритзинга.

сборка

1. Поместите Леонардо на макетную плату и закрепите его резинкой.

2. Поместите два переменных резистора, OLED-дисплей и ультразвуковой датчик на макетную плату.

3. подключите заземление и vcc

4. Подключите средние контакты резисторов к Arduino A0 и A1.

5. Подключите SDA и SCL дисплея к SDA и SCL, отмеченным на Leonardo.

6. Подключите триггерный и эхо-контакт ультразвукового датчика к 12, 13 цифровым контактам Леонардо.

7. подключаем USB к компьютеру

Загрузить

Прежде всего вам нужно скачать и установить необходимые библиотеки arduino:

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

2. Библиотека Ultrasonic-HC-SR04:

Если вы не знаете, как установить библиотеки Arduino, ознакомьтесь с этим руководством.

После того, как вы загрузили и установили указанные выше библиотеки, вы можете клонировать или загрузить мой репозиторий arduino, расположенный здесь: https://github.com/danionescu0/arduino, и мы будем использовать этот эскиз: https://github.com/danionescu0 / arduino / tree / master…

Или вы можете скопировать и вставить приведенный ниже код:

/ * * Библиотеки, используемые в этом проекте: * * 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 byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; беззнаковое длинное maxDistanceDetectionTime; bool lockTimerStarted = false;

установка void ()

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

пустой цикл ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); если (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = миллис (); Serial.println («запуск таймера блокировки»); } else if (! shouldEnableLockTimer ()) {Serial.println («таймер блокировки отключен»); lockTimerStarted = false; } если (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; }

недействительным writeStatusData ()

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

void initializeDisplay ()

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

void setDisplayText (byte fontSize, String label, String data)

{GOFoled.setTextSize (размер шрифта); GOFoled.println (метка + ":" + данные); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; для (байт i = 0; i <10; i ++) {distanceSum + = ultrasonic. Ranging (CM); }

return distanceSum / 10;

}

интервал 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- пр…

Это был кусок пирога! Но были и недостатки: камеру ноутбука нельзя было использовать для других целей во время работы программы, и для этого потребовались бы некоторые ресурсы компьютера. Так что я тоже отказался от этой идеи.

Если у вас есть идеи о том, как это можно сделать, поделитесь ими, спасибо!

Рекомендуемые: