Turinys:

Automatiškai užrakinti kompiuterio sistemą: 4 žingsniai
Automatiškai užrakinti kompiuterio sistemą: 4 žingsniai

Video: Automatiškai užrakinti kompiuterio sistemą: 4 žingsniai

Video: Automatiškai užrakinti kompiuterio sistemą: 4 žingsniai
Video: Автоматический календарь-планировщик смен в Excel 2024, Liepa
Anonim
Image
Image
Surinkimas ir įkėlimas
Surinkimas ir įkėlimas

Šioje pamokoje mes išnagrinėsime kompiuterio ekrano užrakto saugumą. Operacinės sistemos turi sukonfigūruojamą skirtąjį laiką, kuris užrakins jūsų ekraną, jei vartotojas nelies pelės ar klaviatūros.

Paprastai numatytasis laikas yra maždaug viena minutė. Jei laikysitės šios numatytosios nuostatos ir paliksite kompiuterį užimtoje aplinkoje, tą minutę kažkas gali pasiekti jūsų kompiuterį, kol ekranas užrakins. Jei nustatysite kelias sekundes, užrakto ekranas bus rodomas labai dažnai, kai neliesite klaviatūros, ir tai erzina …

Vieną dieną darbo kolega manęs paklausė, ar galiu „išspręsti“šią problemą kokiu nors prietaisu, kuris užrakina kompiuterį, kai jo nėra, ir aš priėmiau iššūkį:)

Galvoje ištyriau keletą variantų, pavyzdžiui, naudoti „arduinos“ir infraraudonųjų spindulių termometro jutiklį, PIR jutiklį ar galbūt naudojant veido aptikimą kompiuteryje, tačiau nusprendžiau naudoti paprastesnį metodą:

Mes sujungsime „Arduino Leonardo HID“funkciją (imituoti klaviatūrą) su ultragarso atstumo jutikliu, kad nustatytume, ar žmogus naudojasi kompiuteriu, jei ne, įrenginys išsiųs klavišų kombinaciją per USB, kad užrakintų kompiuterį.

1 žingsnis: komponentai

Kadangi tai yra koncepcijos įrodymas, mes pastatysime įrenginį ant duonos lentos

Jums reikės:

1. „Arduino Leonardo“(svarbu naudoti „Leonardo“, nes jis gali imituoti klaviatūrą)

2. Ultragarsinis atstumo jutiklis HC-SR04

3. 2 x 10 K kintamieji rezistoriai

4. duonos lenta, duonos lentos laidai

5. USB kabelis

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

2 žingsnis: Surinkimas ir įkėlimas

Surinkimas ir įkėlimas
Surinkimas ir įkėlimas

Pirmiausia patikrinkite, ar turite visus reikalingus komponentus ir „Arduino IDE“. Trumpai pereisiu prie prijungimo žingsnių, ir jūs visada galite pažvelgti į pridedamą „fritzing“schemą

Surinkimas

1. Padėkite „Leonardo“ant duonos lentos ir laikykite ją gumine juostele

2. uždėkite du kintamus rezistorius, OLED ekraną ir ultragarsinį jutiklį

3. sujungti pagrindus ir vcc

4. prijunkite vidurinius rezistorių kaiščius prie arduino A0 ir A1

5. prijunkite ekrano SDA ir SCL prie „Leonardo“pažymėtų SDA ir SCL

6. prijunkite ultragarso jutiklio gaiduką ir aido kaištį prie 12, 13 skaitmeninių „Leonardo“kaiščių

7. prijunkite USB prie kompiuterio

Įkelti

Pirmiausia turėsite atsisiųsti ir įdiegti reikalingas „arduino“bibliotekas:

1. „GOFi2cOLED“biblioteka:

2. Ultragarso-HC-SR04 biblioteka:

Jei nežinote, kaip įdiegti „arduino“bibliotekas, peržiūrėkite šią mokymo programą.

Atsisiuntę ir įdiegę aukščiau esančias bibliotekas, galite klonuoti arba atsisiųsti mano arduino saugyklą, esančią čia: https://github.com/danionescu0/arduino, ir mes naudosime šį eskizą: https://github.com/danionescu0 /arduino/tree/master…

Arba galite nukopijuoti ir įklijuoti žemiau esantį kodą:

/ * * Šiame projekte naudojamos bibliotekos: * * 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;

Ultragarsinis ultragarsas (12, 13);

const baitų atstumasPot = A0;

const baitų laikmatisPot = A1; const float percentMaxDistanceChangedAllowed = 25; int faktinis atstumas; nepasirašytas ilgas maxDistanceDetectionTime; bool lockTimerStarted = klaidinga;

negaliojanti sąranka ()

{Serial.begin (9600); Klaviatūra.begin (); initializeDisplay (); }

tuštumos kilpa ()

{clearDisplay (); faktinis atstumas = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = milis (); Serial.println („prasideda užrakto laikmatis“); } else if (! shouldEnableLockTimer ()) {Serial.println ("užrakto laikmatis išjungtas"); lockTimerStarted = klaidinga; } if (shouldLockScreen ()) {lockScreen (); Serial.println („Užrakinimo ekranas“); } uždelsimas (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int lubatudDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); return getTimer ()> 1 && getDistance ()> 1 && faktinis atstumas - getDistance ()> leistinas atstumas; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Laikmatis:", eilutė (getTimer ())); setDisplayText (1, "ActualDistance:", String (faktinis atstumas)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Styginių pranešimas = ""; if (shouldLockScreen ()) {message = "spyna išsiųsta"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + Styga (countDown); } else {message = "ne"; } setDisplayText (1, "Užrakinimas:", pranešimas); }

void initializeDisplay ()

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

void setDisplayText (baitų šrifto dydis, eilutės etiketė, eilutės duomenys)

{GOFoled.setTextSize (fontSize); GOFoled.println (etiketė + ":" + duomenys); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; už (baitas i = 0; i <10; i ++) {distanceSum+= ultragarsas. Ranging (CM); }

grįžimo atstumasSum / 10;

}

int getDistance ()

{grįžimo žemėlapis (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{grįžimo žemėlapis (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println („spaudimas“); Keyboard.press (KEY_LEFT_CTRL); vėlavimas (10); Keyboard.press (KEY_LEFT_ALT); vėlavimas (10); Keyboard.write ('l'); vėlavimas (10); Keyboard.releaseAll (); }

Galiausiai prijunkite arduino prie kompiuterio naudodami USB kabelį ir įkelkite eskizą į arduino.

3 žingsnis: Įrenginio naudojimas

Prietaiso naudojimas
Prietaiso naudojimas

Kai „arduino“yra prijungtas prie kompiuterio, jis nuolat stebės atstumą prieš jutiklį ir, jei atstumas padidės, nusiųs „užrakto“ekrano klavišų kombinaciją į kompiuterį.

Įrenginys turi keletą konfigūracijų:

1. Normalus atstumas, atstumą galima sukonfigūruoti naudojant kintamą rezistorių, prijungtą prie A0. Atstumas taip pat rodomas OLED. Kai atstumas nuo nustatyto padidės 25%, prasidės atgalinis skaičiavimas

2. Laikas (atgalinis laikas). Laiko pertrauką sekundėmis taip pat galima konfigūruoti iš rezistoriaus, prijungto prie A1. Pasibaigus laikui, užrakto komanda bus išsiųsta

3. Užrakinti klavišų kombinaciją. Numatytasis užrakto klavišų derinys nustatytas veikti „Ubuntu Linux 18“(CTRL+ALT+L). Norėdami pakeisti derinį, turite pakeisti eskizą pagal operacinę sistemą:

4. Laiko ir atstumo apsauga. Kadangi tai yra klaviatūrą imituojantis įrenginys, verta turėti klaviatūros funkcijų išjungimo mechanizmą. Savo eskize pasirinkau, kad laikas ir atstumas turi būti didesni nei „1“. (jei norite, galite pakeisti kodą)

Raskite ir pakeiskite funkciją „lockScreen ()“

void lockScreen () {Serial.println ("spaudimas"); Keyboard.press (KEY_LEFT_CTRL); vėlavimas (10); Keyboard.press (KEY_LEFT_ALT); vėlavimas (10); Keyboard.write ('l'); vėlavimas (10); Keyboard.releaseAll (); }

Visą specialių arduino raktų sąrašą rasite čia:

4 žingsnis: kiti metodai

Prieš diegdamas taip pat apsvarstiau keletą kitų įgyvendinimo būdų:

1. Infraraudonųjų spindulių termometras (MLX90614 https://www.sparkfun.com/products/10740). Infraraudonųjų spindulių termometras yra prietaisas, kuris matuoja temperatūrą, analizuodamas infraraudonųjų spindulių spindulius, kuriuos skleidžia objektas per atstumą. Turėjau vieną gulintį ir galvojau, kad galbūt galiu aptikti temperatūros skirtumą priešais kompiuterį.

Aš jį prijungiau, bet temperatūros skirtumas buvo labai mažas (kai buvau priešais ar ne) 1–2 laipsniai ir maniau, kad tai negali būti tokia patikima

2. PIR jutiklis. (https://www.sparkfun.com/products/13285) Šie pigūs jutikliai parduodami kaip „judesio jutikliai“, tačiau jie tikrai aptinka infraraudonosios spinduliuotės pokyčius, todėl teoriškai tai gali veikti, kai žmogus palieka kompiuterį, kurį jutiklis aptiks kad.. Taip pat šie jutikliai turi įmontuotą skirtojo laiko ir jautrumo rankenėles. Taigi aš vieną užkabinau ir žaidžiau su juo, bet atrodo, kad jutiklis nėra skirtas artimam diapazonui (jis turi platų kampą), jis davė visų rūšių klaidingus įspėjimus.

3. Veido aptikimas naudojant internetinę kamerą. Ši parinktis atrodė labai įdomi, nes aš žaidžiau su šiuo kompiuterių lauku kituose savo projektuose, tokiuose kaip: https://github.com/danionescu0/robot-camera-platfo… ir https://github.com/danionescu0/image-processing- pr…

Tai buvo pyragas! Tačiau buvo keletas trūkumų: nešiojamojo kompiuterio fotoaparatas negalėjo būti naudojamas kitiems tikslams, kai programa veikė, ir tam reikės tam tikrų kompiuterio išteklių. Taigi aš taip pat atsisakiau šios idėjos.

Jei turite daugiau idėjų, kaip tai padaryti, pasidalykite jais, ačiū!

Rekomenduojamas: