Inhaltsverzeichnis:

Computersystem mit automatischer Sperre - Gunook
Computersystem mit automatischer Sperre - Gunook

Video: Computersystem mit automatischer Sperre - Gunook

Video: Computersystem mit automatischer Sperre - Gunook
Video: 32 Geheime Kombinationen Auf Deiner Tastatur 2024, November
Anonim
Image
Image
Zusammenbau & Hochladen
Zusammenbau & Hochladen

In diesem Tutorial werden wir die Sicherheit der Computerbildschirmsperre untersuchen. Betriebssysteme haben ein konfigurierbares Timeout, das Ihren Bildschirm sperrt, wenn der Benutzer die Maus oder Tastatur nicht berührt hat.

Normalerweise beträgt der Standardwert etwa eine Minute. Wenn Sie diese Vorgabe befolgen und Ihren Computer in einer geschäftigen Umgebung lassen, könnte in dieser Minute jemand auf Ihren Computer zugreifen, bis der Bildschirm gesperrt wird. Stellt man es auf wenige Sekunden, kommt der Sperrbildschirm sehr oft, wenn man die Tastatur nicht berührt und das nervt…

Eines Tages fragte mich ein Arbeitskollege, ob ich dieses Problem mit einer Art Gerät "beheben" kann, das den Computer sperrt, wenn er nicht da ist, und ich nahm die Herausforderung an:)

Ich habe in meinem Kopf mehrere Optionen erkundet, wie die Verwendung von Arduinos und einem Infrarot-Thermometersensor, PIR-Sensor oder vielleicht die Gesichtserkennung auf dem Computer, aber ich habe mich für eine einfachere Methode entschieden:

Wir werden die Arduino Leonardo HID-Funktionalität (Tastatur emulieren) mit einem Ultraschall-Abstandssensor kombinieren, um zu erkennen, ob eine Person den Computer verwendet. Wenn nicht, sendet das Gerät eine Tastenkombination über USB, um den Computer zu sperren.

Schritt 1: Komponenten

Da dies ein Proof of Concept ist, bauen wir das Gerät auf einem Steckbrett

Du brauchst:

1. Arduino Leonardo (es ist wichtig, Leonardo zu verwenden, da es die Tastatur emulieren kann)

2. HC-SR04 Ultraschall-Abstandssensor

3. 2 x 10 K variable Widerstände

4. Steckbrett, Steckbrettdrähte

5. USB-Kabel

6. OLED-Display (https://www.adafruit.com/product/931)

Schritt 2: Zusammenbau & Hochladen

Zusammenbau & Hochladen
Zusammenbau & Hochladen

Überprüfen Sie zuerst, ob Sie alle benötigten Komponenten und eine Arduino-IDE haben. Ich gehe kurz auf die Anschlussschritte ein, und Sie können jederzeit einen Blick auf den beigefügten Fritzing-Schema werfen

Montage

1. Setzen Sie den Leonardo auf das Steckbrett und halten Sie ihn mit einem Gummiband fest

2. Legen Sie die beiden variablen Widerstände, das OLED-Display und den Ultraschallsensor auf das Steckbrett

3. Masse und VCCs verbinden

4. Verbinden Sie die mittleren Pins der Widerstände mit dem Arduino A0 und A1

5. Verbinden Sie SDA und SCL des Displays mit den auf dem Leonardo markierten SDA und SCL

6. Verbinden Sie den Trigger- und Echo-Pin des Ultraschallsensors mit den 12, 13 digitalen Pins des Leonardo

7. Verbinden Sie den USB mit dem Computer

Hochladen

Zunächst müssen Sie die erforderlichen Arduino-Bibliotheken herunterladen und installieren:

1. GOFi2cOLED-Bibliothek:

2. Ultraschall-HC-SR04-Bibliothek:

Wenn Sie nicht wissen, wie Sie Arduino-Bibliotheken installieren, lesen Sie dieses Tutorial.

Nachdem Sie die obigen Bibliotheken heruntergeladen und installiert haben, können Sie mein Arduino-Repository klonen oder herunterladen, das sich hier befindet: https://github.com/danionescu0/arduino, und wir verwenden diese Skizze: https://github.com/danionescu0 /arduino/baum/meister…

Oder Sie können den folgenden Code kopieren und einfügen:

/* * Von diesem Projekt verwendete Bibliotheken: * * 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;

Ultraschall Ultraschall (12, 13);

const byte distancePot = A0;

const Byte TimerPot = A1; const float ProzentMaxDistanceChangedAllowed = 25; int tatsächliche Distanz; unsigned long maxDistanceDetectionTime; bool lockTimerStarted = false;

Void-Setup ()

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

Leere Schleife ()

{ clearDisplay(); aktueller Abstand = getActualDistance(); writeStatusData(); doDisplay(); if (!lockTimerStarted && shouldEnableLockTimer()) { lockTimerStarted = true; maxDistanceDetectionTime = millis(); Serial.println ("Sperrzeitgeber beginnen"); aufrechtzuerhalten. Sonst if (!shouldEnableLockTimer ()) { Serial.println ("Sperrtimer deaktiviert"); lockTimerStarted = false; aufrechtzuerhalten. Wenn (sollteLockScreen()) {lockScreen(); Serial.println ("Sperrbildschirm"); } Verzögerung (100); }

bool sollteLockScreen()

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

bool sollteEnableLockTimer()

{ int allowDistance = ProzentMaxDistanceChangedAllowed / 100 * getDistance(); return getTimer() > 1 && getDistance() > 1 && aktuelleDistance - getDistance() > erlaubtDistance; }

void writeStatusData()

{ setDisplayText(1, "MinDistance:", String(getDistance())); setDisplayText(1, "Timer:", String(getTimer())); setDisplayText(1, "ActualDistance:", String(actualDistance)); int countDown = getTimer() - (millis() - maxDistanceDetectionTime) / 1000; String-Nachricht = ""; if (shouldLockScreen()) { message = "Sperre gesendet"; } else if (shouldEnableLockTimer() && countDown >= 0) { message = ".." + String(countDown); } Else { Nachricht = "Nein"; } setDisplayText(1, "Sperren:", Nachricht); }

void initializeDisplay()

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

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

{ GOFoled.setTextSize (fontSize); GOFoled.println(Label + ":" + Daten); }

void doDisplay()

{ GOFoled.display(); }

void clearDisplay()

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

int getActualDistance()

{ int AbstandSumme = 0; für (Byte i=0;i<10;i++) { DistanceSum += Ultraschall. Ranging (CM); }

RückwegSumme / 10;

}

int getDistance()

{ Karte zurückgeben (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer()

{ Karte zurückgeben (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen()

{ Serial.println ("drücken"); Keyboard.press(KEY_LEFT_CTRL); Verzögerung(10); Tastatur.press(KEY_LEFT_ALT); Verzögerung(10); Keyboard.write('l'); Verzögerung(10); Keyboard.releaseAll(); }

Schließen Sie schließlich das Arduino mit dem USB-Kabel an den Computer an und laden Sie die Skizze in das Arduino hoch.

Schritt 3: Verwenden des Geräts

Verwenden des Geräts
Verwenden des Geräts

Wenn das Arduino mit dem Computer verbunden ist, überwacht es kontinuierlich die Entfernung vor dem Sensor und sendet eine Tastenkombination für den Bildschirm "Sperren" an den Computer, wenn die Entfernung zunimmt.

Das Gerät hat einige Konfigurationen:

1. Normaler Abstand, der Abstand kann mit dem an A0 angeschlossenen variablen Widerstand konfiguriert werden. Die Entfernung wird auch auf dem OLED angezeigt. Wenn die Distanz um 25 % von der eingestellten Distanz zunimmt, beginnt ein Countdown

2. Zeitüberschreitung (Countdown). Der Timeout in Sekunden ist auch über den an A1 angeschlossenen Widerstand konfigurierbar. Nach Ablauf des Timeouts wird der Sperrbefehl gesendet

3. Tastenkombination sperren. Die Standard-Sperrtastenkombination ist für Ubuntu Linux 18 (STRG+ALT+L) eingerichtet. Um die Kombination zu ändern, müssen Sie Ihre Skizze entsprechend Ihrem Betriebssystem ändern:

4. Timeout- und Distanzschutz. Da dies ein Gerät ist, das die Tastatur emuliert, ist es eine gute Idee, einen Mechanismus zum Deaktivieren der Tastaturfunktionalität zu haben. In meiner Skizze habe ich gewählt, dass das Timeout und der Abstand größer als "1" sein müssen. (Sie können das im Code ändern, wenn Sie möchten)

Suchen und ändern Sie die Funktion "lockScreen()"

Void lockScreen () {Serial.println ("drücken"); Keyboard.press(KEY_LEFT_CTRL); Verzögerung(10); Tastatur.press(KEY_LEFT_ALT); Verzögerung(10); Keyboard.write('l'); Verzögerung(10); Keyboard.releaseAll(); }

Eine vollständige Liste der Arduino-Sondertasten finden Sie hier:

Schritt 4: Andere Ansätze

Vor dieser Implementierung habe ich auch einige andere Implementierungen in Betracht gezogen:

1. Infrarot-Thermometer (MLX90614 https://www.sparkfun.com/products/10740). Ein Infrarot-Thermometer ist ein Gerät, das die Temperatur misst, indem es Infrarotstrahlung analysiert, die von einem Objekt in der Ferne emittiert wird. Ich hatte einen herumliegen und dachte, vielleicht kann ich den Temperaturunterschied vor dem Computer erkennen.

Ich habe es angeschlossen, aber der Temperaturunterschied war sehr gering (wenn ich vorne war oder nicht) 1-2 Grad und ich dachte, es könnte nicht so zuverlässig sein

2. PIR-Sensor. (https://www.sparkfun.com/products/13285) Diese billigen Sensoren werden als "Bewegungssensoren" vermarktet, aber sie erkennen wirklich Veränderungen der Infrarotstrahlung, so dass es theoretisch funktionieren könnte, wenn eine Person den Computer verlässt, würde der Sensor erkennen dass.. Auch diese Sensoren haben einen eingebauten Timeout- und Empfindlichkeitsregler. Also habe ich einen angeschlossen und damit gespielt, aber es scheint, dass der Sensor nicht für den Nahbereich geeignet ist (er hat einen Weitwinkel), er gab alle Arten von Fehlalarmen aus.

3. Gesichtserkennung mit der Webcam. Diese Option schien sehr interessant, da ich in meinen anderen Projekten mit diesem Computerfeld gespielt habe wie: https://github.com/danionescu0/robot-camera-platfo… und https://github.com/danionescu0/image-processing- pr…

Das war ein Kinderspiel! Aber es gab einige Nachteile: Die Laptop-Kamera konnte während des Programmlaufs nicht für andere Zwecke verwendet werden, und dafür wären einige Computerressourcen erforderlich. Also ich habe diese Idee auch fallen gelassen.

Wenn Sie weitere Ideen haben, wie dies geschehen könnte, teilen Sie diese bitte mit, danke!

Empfohlen: