Kazalo:

Računalniški sistem samodejnega zaklepanja: 4 koraki
Računalniški sistem samodejnega zaklepanja: 4 koraki

Video: Računalniški sistem samodejnega zaklepanja: 4 koraki

Video: Računalniški sistem samodejnega zaklepanja: 4 koraki
Video: Карл Фристон: «Мета» принцип свободной энергии [ЧАСТЬ 1!] 2024, Julij
Anonim
Image
Image
Montaža in nalaganje
Montaža in nalaganje

V tej vadnici bomo raziskali varnost zaklepanja zaslona računalnika. Operacijski sistemi imajo nastavljivo časovno omejitev, ki zaklene vaš zaslon, če se uporabnik ni dotaknil miške ali tipkovnice.

Običajno je privzeta vrednost približno ena minuta. Če sledite tej privzeti nastavitvi in pustite računalnik v zasedenem okolju, lahko nekdo v tistem trenutku dostopa do vašega računalnika, dokler se zaslon ne zaklene. Če ga nastavite na nekaj sekund, boste zelo pogosto dobili zaklenjen zaslon, ko se ne dotaknete tipkovnice, kar je nadležno …

Nekega dne me je sodelavec vprašal, ali lahko to težavo "odpravim" z nekakšno napravo, ki zaklene računalnik, ko ga ni, in sprejel sem izziv:)

V glavi sem raziskal več možnosti, kot je uporaba arduinosa in senzorja infrardečega termometra, senzorja PIR ali morda uporaba zaznavanja obrazov v računalniku, vendar sem se odločil za enostavnejšo metodo:

Združili bomo funkcijo Arduino Leonardo HID (posnemanje tipkovnice) z ultrazvočnim senzorjem razdalje, da bi ugotovili, ali oseba uporablja računalnik, če ne, bo naprava poslala kombinacijo tipk prek USB -ja za zaklepanje računalnika.

1. korak: Komponente

Ker je to dokaz koncepta, bomo napravo zgradili na podlagi

Potrebovali boste:

1. Arduino Leonardo (pomembno je, da uporabite Leonarda, ker lahko posnema tipkovnico)

2. HC-SR04 ultrazvočni senzor razdalje

3. 2 x 10 K spremenljivi upori

4. omarica, žice za mizo

5. Kabel USB

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

2. korak: Montaža in nalaganje

Montaža in nalaganje
Montaža in nalaganje

Najprej preverite, ali imate vse potrebne komponente in Arduino IDE. Na kratko bom šel na korake povezovanja in vedno si lahko ogledate priloženo shemo fritovanja

Montaža

1. Leonarda položite na mizo in ga pritrdite z gumijastim trakom

2. Na mizo postavite dva spremenljiva upora, zaslon OLED in ultrazvočni senzor

3. povežite podlago in vcc

4. priključite srednje zatiče uporov na arduino A0 in A1

5. povežite SDA in SCL zaslona s SDA in SCL, označenimi na Leonardu

6. priključite sprožilec in odmevni zatič ultrazvočnega senzorja na 12, 13 digitalnih nožic Leonarda

7. priključite USB na računalnik

Naloži

Najprej boste morali prenesti in namestiti potrebne knjižnice arduino:

1. Knjižnica GOFi2cOLED:

2. Ultrazvočna knjižnica-HC-SR04:

Če ne veste, kako namestiti arduino knjižnice, si oglejte to vadnico.

Ko prenesete in namestite zgornje knjižnice, lahko klonirate ali naložite moje skladišče arduino, ki se nahaja tukaj: https://github.com/danionescu0/arduino, mi pa bomo uporabili to skico: https://github.com/danionescu0 /arduino/drevo/mojster …

Lahko pa kopirate in prilepite spodnjo kodo:

/ * * Knjižnice, ki jih uporablja ta projekt: * * 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;

Ultrazvočni ultrazvočni (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int dejanska razdalja; nepodpisano dolgo maxDistanceDetectionTime; bool lockTimerStarted = false;

void setup ()

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

void loop ()

{clearDisplay (); dejanska razdalja = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("začetek zaklepanja"); } else if (! shouldEnableLockTimer ()) {Serial.println ("merilnik zaklepanja onemogočen"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Zaklenjen zaslon"); } zamuda (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 sporočilo = ""; if (shouldLockScreen ()) {message = "zaklepanje poslano"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {message = "ne"; } setDisplayText (1, "Zaklepanje:", sporočilo); }

void initializeDisplay ()

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

void setDisplayText (velikost bajtov font, oznaka niza, podatki niza)

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

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+= ultrazvok. Ranging (CM); }

povratna razdaljaSum / 10;

}

int getDistance ()

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

int getTimer ()

{povratni zemljevid (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("pritiskanje"); Keyboard.press (KEY_LEFT_CTRL); zamuda (10); Keyboard.press (KEY_LEFT_ALT); zamuda (10); Keyboard.write ('l'); zamuda (10); Keyboard.releaseAll (); }

Končno povežite računalnik arduino s kablom USB in naložite skico v arduino.

3. korak: Uporaba naprave

Uporaba naprave
Uporaba naprave

Ko je arduino povezan z računalnikom, bo neprestano spremljal razdaljo pred senzorjem in računalniku poslal kombinacijo tipk za zaklepanje zaslona, če se razdalja poveča.

Naprava ima nekaj konfiguracij:

1. Normalna razdalja, razdaljo je mogoče konfigurirati s spremenljivim uporom, priključenim na A0. Razdalja je prikazana tudi na OLED. Ko se razdalja poveča za 25% od tiste, ki je nastavljena, se bo začelo odštevanje

2. Časovna omejitev (odštevanje). Časovna omejitev v sekundah je nastavljiva tudi z uporom, priključenim na A1. Ko poteče časovna omejitev, bo poslan ukaz za zaklepanje

3. Kombinacija ključavnic. Privzeta kombinacija tipk za zaklepanje je nastavljena tako, da deluje za Ubuntu Linux 18 (CTRL+ALT+L). Če želite spremeniti kombinacijo, morate skico spremeniti glede na operacijski sistem:

4. Časovna omejitev in zaščita razdalje. Ker gre za napravo, ki posnema tipkovnico, je dobro imeti mehanizem za izklop funkcije tipkovnice. V svoji skici sem izbral, da morata biti časovna omejitev in razdalja večji od "1". (če želite, lahko to spremenite v kodi)

Poiščite in spremenite funkcijo "lockScreen ()"

void lockScreen () {Serial.println ("pritiskanje"); Keyboard.press (KEY_LEFT_CTRL); zamuda (10); Keyboard.press (KEY_LEFT_ALT); zamuda (10); Keyboard.write ('l'); zamuda (10); Keyboard.releaseAll (); }

Za celoten seznam posebnih ključev arduino preverite tukaj:

4. korak: Drugi pristopi

Pred to izvedbo sem razmišljal tudi o nekaterih drugih izvedbah:

1. Infrardeči termometer (MLX90614 https://www.sparkfun.com/products/10740). Infrardeči termometer je naprava, ki meri temperaturo z analizo infrardečih sevanj, ki jih oddaja predmet na daljavo. Imel sem enega, ki je ležal naokoli, in mislil sem, da bi lahko odkril temperaturno razliko pred računalnikom.

Priključil sem ga, vendar je bila temperaturna razlika zelo majhna (ko sem bil spredaj ali ne) 1-2 stopinji in sem mislil, da ne more biti tako zanesljiv

2. PIR senzor. (https://www.sparkfun.com/products/13285) Ti poceni senzorji se tržijo kot "senzorji gibanja", vendar resnično zaznajo spremembe v infrardečem sevanju, tako da bi teoretično lahko delovalo, ko bi oseba zapustila računalnik, bi senzor zaznal da.. Tudi ti senzorji imajo vgrajeno časovno omejitev in gumbe za občutljivost. Tako sem priključil enega in se igral z njim, vendar se zdi, da senzor ni narejen za bližino (ima širok kot), dajal je vse vrste lažnih opozoril.

3. Zaznavanje obrazov s spletno kamero. Ta možnost se mi je zdela zelo zanimiva, saj sem se s tem računalniškim poljem igral tudi v drugih projektih, kot so: https://github.com/danionescu0/robot-camera-platfo… in https://github.com/danionescu0/image-processing- pr…

To je bil kos pogače! Vendar je bilo nekaj pomanjkljivosti: fotoaparata prenosnega računalnika med izvajanjem programa ni bilo mogoče uporabiti za druge namene, za to pa bi bili potrebni nekateri računalniški viri. Zato sem tudi jaz opustil to idejo.

Če imate več idej o tem, kako bi to lahko naredili, jih delite, hvala!

Priporočena: