Sisällysluettelo:

Automaattinen tietokoneen lukitus: 4 vaihetta
Automaattinen tietokoneen lukitus: 4 vaihetta

Video: Automaattinen tietokoneen lukitus: 4 vaihetta

Video: Automaattinen tietokoneen lukitus: 4 vaihetta
Video: Näin yhdistelet ja erottelet tietoa Excelissä automaattisesti 2024, Heinäkuu
Anonim
Image
Image
Kokoonpano ja lataus
Kokoonpano ja lataus

Tässä opetusohjelmassa aiomme tutkia tietokoneen näytön lukituksen turvallisuutta. Käyttöjärjestelmissä on määritettävissä oleva aikakatkaisu, joka lukitsee näytön, jos käyttäjä ei ole koskettanut hiirtä tai näppäimistöä.

Yleensä oletusarvo on noin minuutti. Jos noudatat tätä oletusarvoa ja jätät tietokoneen kiireiseen ympäristöön, joku saattaa käyttää tietokonettasi sillä hetkellä, kunnes näyttö lukittuu. Jos asetat sen muutamaan sekuntiin, saat lukitusnäytön hyvin usein, kun et kosketa näppäimistöä, ja se on ärsyttävää …

Eräänä päivänä työtoverini kysyi minulta, voinko "korjata" tämän ongelman jollakin laitteella, joka lukitsee tietokoneen, kun hän ei ole paikalla, ja otin haasteen vastaan :)

Olen tutkinut päässäni useita vaihtoehtoja, kuten arduinojen ja infrapunalämpömittarin, PIR -anturin tai ehkä kasvojentunnistuksen käyttämistä tietokoneella, mutta olen päätynyt yksinkertaisempaan menetelmään:

Yhdistämme Arduino Leonardo HID -toiminnon (emuloi näppäimistö) ultraääni -etäisyysanturiin havaitaksemme, käyttääkö henkilö tietokonetta, ellei laite lähettää näppäinyhdistelmää USB: n kautta tietokoneen lukitsemiseksi.

Vaihe 1: Komponentit

Koska tämä on todiste konseptista, aiomme rakentaa laitteen leipälevylle

Sinä tulet tarvitsemaan:

1. Arduino Leonardo (on tärkeää käyttää Leonardoa, koska se voi jäljitellä näppäimistöä)

2. HC-SR04-ultraääni-etäisyysanturi

3. 2 x 10 K: n vaihtelevia vastuksia

4. leipälauta, leipälauta johdot

5. USB -kaapeli

6. OLED -näyttö (https://www.adafruit.com/product/931)

Vaihe 2: Kokoaminen ja lataaminen

Kokoonpano ja lataus
Kokoonpano ja lataus

Tarkista ensin, onko sinulla kaikki tarvittavat komponentit ja Arduino IDE. Menen lyhyesti yhteysvaiheisiin, ja voit aina katsoa liitteenä olevaa fritzing -kaaviota

Kokoonpano

1. Aseta Leonardo leipälevylle ja pidä se paikallaan kuminauhalla

2. aseta kaksi muuttuvaa vastusta, OLED -näyttö ja ultraäänianturi leipälevylle

3. yhdistä perusteet ja vcc: t

4. Kytke vastusten keskitapit arduino A0 ja A1

5. kytke näytön SDA ja SCL Leonardo -laitteeseen merkittyihin SDA- ja SCL -liitäntöihin

6. liitä ultraäänianturin liipaisin ja kaiku -nasta Leonardo -laitteen 12, 13 digitaaliseen nastaan

7. liitä USB tietokoneeseen

Lataa

Ensinnäkin sinun on ladattava ja asennettava tarvittavat arduino -kirjastot:

1. GOFi2cOLED -kirjasto:

2. Ultraääni-HC-SR04-kirjasto:

Jos et tiedä kuinka asentaa arduino -kirjastoja, tutustu tähän opetusohjelmaan.

Kun olet ladannut ja asentanut yllä olevat kirjastot, voit kloonata tai ladata arduino -arkistoni, joka sijaitsee täällä: https://github.com/danionescu0/arduino, ja käytämme tätä luonnosta: https://github.com/danionescu0 /arduino/tree/master…

Tai voit kopioida ja liittää alla olevan koodin:

/ * * Tämän projektin käyttämät kirjastot: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Näppäimistö.h" #Sisällytä "Wire.h" #Sisällytä "GOFi2cOLED.h" #Sisällytä "Ultraääni.h"

GOFi2cOLED GOFoled;

Ultraääni ultraääni (12, 13);

const tavu etäisyysPot = A0;

const tavu ajastinPot = A1; const float percentMaxDistanceChangedAllowed = 25; int todellinen etäisyys; allekirjoittamaton pitkä maxDistanceDetectionTime; bool lockTimerStarted = epätosi;

mitätön asennus ()

{Serial.begin (9600); Näppäimistö.begin (); initializeDisplay (); }

tyhjä silmukka ()

{clearDisplay (); todellinen etäisyys = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("lukituksen ajastin alkaa"); } else if (! shouldEnableLockTimer ()) {Serial.println ("lukitusajastin pois käytöstä"); lockTimerStarted = epätosi; } if (pitäisiLockScreen ()) {lockScreen (); Serial.println ("Lukitusnäyttö"); } viive (100); }

bool shouldLockScreen ()

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

bool pitäisiEnableLockTimer ()

{int sallittu etäisyys = percentMaxDistanceChangedAllowed / 100 * getDistance (); return getTimer ()> 1 && getDistance ()> 1 && factDistance - getDistance ()> sallittu etäisyys; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Ajastin:", Jono (getTimer ())); setDisplayText (1, "Todellinen etäisyys:", Jono (todellinen etäisyys)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Merkkijonoviesti = ""; if (shouldLockScreen ()) {message = "lukko lähetetty"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + Jono (countDown); } else {message = "ei"; } setDisplayText (1, "Lukitus:", viesti); }

void initializeDisplay ()

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

void setDisplayText (tavu fonttikoko, merkkijonotarra, merkkijonotiedot)

{GOFoled.setTextSize (fontSize); GOFoled.println (label + ":" + data); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int etäisyysSum = 0; for (tavu i = 0; i <10; i ++) {distanceSum+= ultraääni. Alue (CM); }

paluumatkaSum / 10;

}

int getDistance ()

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

int getTimer ()

{paluukartta (analoginenluku (etäisyysPot), 0, 1024, 0, 20); }

tyhjä lukitus Näyttö ()

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

Liitä lopuksi arduino tietokoneeseen USB -kaapelilla ja lataa luonnos arduinoon.

Vaihe 3: Laitteen käyttö

Laitteen käyttäminen
Laitteen käyttäminen

Kun arduino on kytketty tietokoneeseen, se seuraa jatkuvasti etäisyyttä anturin edessä ja lähettää "lukitus" -näppäinyhdistelmän tietokoneelle, jos etäisyys kasvaa.

Laitteessa on joitain kokoonpanoja:

1. Normaali etäisyys, etäisyys voidaan konfiguroida A0: een kytketyn muuttuvan vastuksen avulla. Etäisyys näkyy myös OLED -näytössä. Kun etäisyys kasvaa 25% asetetusta etäisyydestä, lähtölaskenta alkaa

2. Aikakatkaisu (lähtölaskenta). Aikakatkaisu sekunneissa on konfiguroitavissa myös A1: een kytketystä vastuksesta. Kun aikakatkaisu päättyy, lukituskomento lähetetään

3. Lukitse näppäinyhdistelmä. Oletuslukonäppäinyhdistelmä on määritetty toimimaan Ubuntu Linux 18: ssa (CTRL+ALT+L). Jos haluat muuttaa yhdistelmää, sinun on muokattava luonnostasi käyttöjärjestelmän mukaan:

4. Aikakatkaisu ja etäisyyssuoja. Koska tämä on laite, joka emuloi näppäimistöä, on hyvä olla mekanismi näppäimistön toimintojen poistamiseksi käytöstä. Luonnoksessani olen valinnut, että aikakatkaisun ja etäisyyden on oltava suurempi kuin "1". (voit muokata sitä koodissa, jos haluat)

Etsi ja muuta "lockScreen ()" -toimintoa

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

Katso täydellinen luettelo arduino -erikoisavaimista täältä:

Vaihe 4: Muut lähestymistavat

Ennen tätä toteutusta olen harkinnut myös muita toteutuksia:

1. Infrapunalämpömittari (MLX90614 https://www.sparkfun.com/products/10740). Infrapunalämpömittari on laite, joka mittaa lämpötilaa analysoimalla etäisen kohteen lähettämiä infrapunasäteilyjä. Minulla oli yksi makaamassa ja ajattelin, että ehkä voin havaita lämpötilaeron tietokoneen edessä.

Olen kytkenyt sen, mutta lämpötilaero oli hyvin pieni (kun olin edessä tai ei) 1-2 astetta ja ajattelin, että se ei voi olla niin luotettava

2. PIR -anturi. (https://www.sparkfun.com/products/13285) Tätä halpaa anturia markkinoidaan "liikeanturina", mutta se todella havaitsee muutokset infrapunasäteilyssä, joten teoriassa se voisi toimia, kun henkilö poistuu tietokoneesta, jonka anturi havaitsisi että.. Myös näissä antureissa on sisäänrakennettu aikakatkaisu ja herkkyysnupit. Joten olen kytkenyt yhden ja pelannut sen kanssa, mutta näyttää siltä, että anturia ei ole tehty lähelle (sillä on laajakulma), se antoi kaikenlaisia vääriä hälytyksiä.

3. Kasvontunnistus verkkokameran avulla. Tämä vaihtoehto vaikutti erittäin mielenkiintoiselta, koska pelasin tällä tietokonekentällä muissa projekteissani, kuten: https://github.com/danionescu0/robot-camera-platfo… ja https://github.com/danionescu0/image-processing- PR…

Tämä oli kakkupala! Mutta oli joitain haittoja: kannettavan tietokoneen kameraa ei voitu käyttää muihin tarkoituksiin ohjelman ollessa käynnissä, ja siihen tarvittiin joitakin tietokoneresursseja. Joten olen myös hylännyt tämän ajatuksen.

Jos sinulla on enemmän ideoita siitä, miten tämä voitaisiin tehdä, jaa ne, kiitos!

Suositeltava: