Sadržaj:

Računalni sustav za automatsko zaključavanje: 4 koraka
Računalni sustav za automatsko zaključavanje: 4 koraka

Video: Računalni sustav za automatsko zaključavanje: 4 koraka

Video: Računalni sustav za automatsko zaključavanje: 4 koraka
Video: Building The World's First MANUAL Dodge Demon! | PT 8 2024, Studeni
Anonim
Image
Image
Montaža i prijenos
Montaža i prijenos

U ovom ćemo vodiču istražiti sigurnost zaključavanja zaslona računala. Operacijski sustavi imaju konfigurirano vremensko ograničenje koje će zaključati vaš zaslon ako korisnik nije dodirnuo miš ili tipkovnicu.

Obično je zadana vrijednost oko jedne minute. Ako slijedite ove zadane postavke i ostavite računalo u užurbanom okruženju, netko bi mogao pristupiti vašem računalu u toj minuti dok se zaslon ne zaključa. Ako ga postavite na nekoliko sekundi, vrlo često ćete dobiti zaključani zaslon kada ne dodirujete tipkovnicu, a to je neugodno …

Jednog dana radni kolega me pitao mogu li "riješiti" ovaj problem pomoću nekog uređaja koji zaključava računalo kad njega nema, a ja sam prihvatio izazov:)

U glavi sam istražio nekoliko opcija, poput korištenja arduina i infracrvenog senzora termometra, PIR senzora ili možda pomoću detekcije lica na računalu, ali odlučio sam se na jednostavniju metodu:

Kombinirat ćemo Arduino Leonardo HID funkcionalnost (oponašati tipkovnicu) s ultrazvučnim senzorom udaljenosti kako bismo otkrili koristi li osoba računalo, ako ne, uređaj će poslati kombinaciju tipki putem USB -a za zaključavanje računala.

Korak 1: Komponente

Budući da je ovo dokaz koncepta, napravit ćemo uređaj na ploči

Trebat će vam:

1. Arduino Leonardo (važno je koristiti Leonarda jer može oponašati tipkovnicu)

2. HC-SR04 ultrazvučni senzor udaljenosti

3. 2 x 10 K promjenjivi otpornici

4. matična ploča, žice za matičnu ploču

5. USB kabel

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

Korak 2: Montaža i prijenos

Montaža i prijenos
Montaža i prijenos

Prvo provjerite imate li sve potrebne komponente i Arduino IDE. Kratko ću prijeći na korake povezivanja, a uvijek možete pogledati priloženu shemu fritzinga

Skupština

1. Stavite Leonarda na ploču i držite ga gumicom

2. stavite dva promjenjiva otpornika, OLED zaslon i ultrazvučni senzor na ploču

3. spojiti temelje i vcc

4. spojite srednje pinove otpornika na arduino A0 i A1

5. spojite SDA i SCL zaslona na SDA i SCL označene na Leonardu

6. spojite okidač i eho pin ultrazvučnog senzora na 12, 13 digitalnih pinova Leonarda

7. spojite USB na računalo

Učitaj

Prije svega morate preuzeti i instalirati potrebne arduino knjižnice:

1. GOFi2cOLED biblioteka:

2. Ultrazvučna biblioteka-HC-SR04:

Ako ne znate kako instalirati arduino knjižnice, pogledajte ovaj vodič.

Nakon što preuzmete i instalirate gore navedene knjižnice, možete klonirati ili preuzeti moje arduino spremište koje se nalazi ovdje: https://github.com/danionescu0/arduino, a mi ćemo koristiti ovu skicu: https://github.com/danionescu0 /arduino/stablo/gospodar…

Ili možete kopirati i zalijepiti donji kod:

/ * * Knjižnice koje koristi ovaj projekt: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrazvučni-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #include "Wire.h" #include "GOFi2cOLED.h" #include "Ultrasonic.h"

GOFi2cOLED GOFoled;

Ultrazvučni ultrazvučni (12, 13);

const byte distancePot = 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 ("zaključavanje timera počinje"); } else if (! shouldEnableLockTimer ()) {Serial.println ("isključen mjerač vremena"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Zaključani ekran"); } kašnjenje (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, "Timer:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Niz poruka = ""; if (shouldLockScreen ()) {message = "zaključavanje poslano"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {poruka = "ne"; } setDisplayText (1, "Zaključavanje:", poruka); }

void initializeDisplay ()

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

void setDisplayText (veličina bajta fontova, oznaka niza, podaci niza)

{GOFoled.setTextSize (fontSize); GOFoled.println (oznaka + ":" + podaci); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; for (bajt i = 0; i <10; i ++) {distanceSum+= ultrazvuk. Ranging (CM); }

povratna udaljenostSum / 10;

}

int getDistance ()

{return map (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{return map (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("pritiskanje"); Tipkovnica.pritisnite (KEY_LEFT_CTRL); kašnjenje (10); Tipkovnica.pritisnite (KEY_LEFT_ALT); kašnjenje (10); Keyboard.write ('l'); kašnjenje (10); Keyboard.releaseAll (); }

Na kraju spojite arduino računalo pomoću USB kabela i prenesite skicu u arduino.

Korak 3: Korištenje uređaja

Korištenje uređaja
Korištenje uređaja

Kad je arduino spojen na računalo, on će kontinuirano nadzirati udaljenost ispred senzora i slati računalu tipku za zaključavanje zaslona ako se udaljenost poveća.

Uređaj ima nekoliko konfiguracija:

1. Normalna udaljenost, udaljenost se može konfigurirati pomoću promjenjivog otpornika spojenog na A0. Udaljenost je također prikazana na OLED -u. Kad se udaljenost poveća za 25% od one koja je postavljena, počet će odbrojavanje

2. Timeout (odbrojavanje). Vrijeme čekanja u sekundama također se može konfigurirati s otpornika spojenog na A1. Kad istekne vremensko ograničenje, naredba za zaključavanje bit će poslana

3. Kombinacija zaključavanja tipki. Zadana kombinacija ključeva za zaključavanje postavljena je tako da radi za Ubuntu Linux 18 (CTRL+ALT+L). Da biste promijenili kombinaciju, morate izmijeniti svoju skicu u skladu s operativnim sustavom:

4. Zaštita isteka vremena i udaljenosti. Budući da se radi o uređaju koji oponaša tipkovnicu, dobro je imati mehanizam za deaktiviranje funkcije tipkovnice. Na mojoj skici sam odabrao da vrijeme čekanja i udaljenost moraju biti veći od "1". (to možete izmijeniti u kodu ako želite)

Pronađite i promijenite funkciju "lockScreen ()"

void lockScreen () {Serial.println ("pritiskanje"); Tipkovnica.pritisnite (KEY_LEFT_CTRL); kašnjenje (10); Tipkovnica.pritisnite (KEY_LEFT_ALT); kašnjenje (10); Keyboard.write ('l'); kašnjenje (10); Keyboard.releaseAll (); }

Za potpuni popis arduino posebnih ključeva provjerite ovdje:

Korak 4: Ostali pristupi

Prije ove implementacije razmotrio sam i neke druge implementacije:

1. Infracrveni termometar (MLX90614 https://www.sparkfun.com/products/10740). Infracrveni termometar je uređaj koji mjeri temperaturu analiziranjem infracrvenog zračenja koje objekt odašilje na daljinu. Jedan je ležao i mislio sam da bih mogao otkriti razliku u temperaturi ispred računala.

Priključio sam ga, ali razlika u temperaturi je bila vrlo mala (kad sam bio ispred ili ne) 1-2 stupnja i mislio sam da ne može biti tako pouzdan

2. PIR senzor. (https://www.sparkfun.com/products/13285) Ovi jeftini senzori plasiraju se na tržište kao "senzori pokreta", ali stvarno otkrivaju promjene u infracrvenom zračenju pa bi teoretski moglo funkcionirati, kada osoba napusti računalo, senzor bi otkrio to.. Također ti senzori imaju ugrađeno vremensko ograničenje i gumbe za osjetljivost. Pa spojio sam jedan i igrao se s njim, ali čini se da senzor nije napravljen za bliski raspon (ima široki kut), davao je sve vrste lažnih upozorenja.

3. Prepoznavanje lica pomoću web kamere. Ova se opcija činila vrlo zanimljivom jer sam se igrao s ovim računalnim poljem u drugim projektima poput: https://github.com/danionescu0/robot-camera-platfo… i https://github.com/danionescu0/image-processing- pr…

Ovo je bio dio kolača! No, postojali su neki nedostaci: kamera prijenosnog računala nije se mogla koristiti u druge svrhe za vrijeme izvođenja programa, a za to bi bili potrebni neki računalni resursi. Pa sam i ja odustao od ove ideje.

Podijelite ih ako imate više ideja o tome kako se to može učiniti, hvala!

Preporučeni: