Përmbajtje:

Sistemi kompjuterik i kyçjes automatike: 4 hapa
Sistemi kompjuterik i kyçjes automatike: 4 hapa

Video: Sistemi kompjuterik i kyçjes automatike: 4 hapa

Video: Sistemi kompjuterik i kyçjes automatike: 4 hapa
Video: Новинка от DeWALT - многофункциональный мини шуруповерт DCD703L2T с бесщёточным двигателем! 2024, Korrik
Anonim
Image
Image
Montimi & Ngarkimi
Montimi & Ngarkimi

Në këtë tutorial ne do të eksplorojmë sigurinë e kyçjes së ekranit të kompjuterit. Sistemet operative kanë një afat kohor të konfigurueshëm që do të bllokojë ekranin tuaj nëse përdoruesi nuk e ka prekur miun ose tastierën.

Zakonisht parazgjedhja është rreth një minutë. Nëse ndiqni këtë parazgjedhje dhe e lini kompjuterin tuaj në një mjedis të zënë, dikush mund të hyjë në kompjuterin tuaj në atë minutë derisa ekrani të kyçet. Nëse e vendosni në disa sekonda do të merrni ekranin e kyçjes shumë shpesh kur nuk prekni tastierën dhe kjo është e bezdisshme …

Një ditë një koleg pune më pyeti nëse mund ta "rregulloj" këtë çështje me një lloj pajisjeje që kyç kompjuterin kur ai nuk është atje, dhe unë e mora sfidën:)

Unë kam eksploruar disa opsione në kokën time si përdorimi i arduinos dhe një sensori termometri me rreze infra të kuqe, sensori PIR ose ndoshta përdorimi i zbulimit të fytyrës në kompjuter, por jam vendosur në një metodë më të thjeshtë:

Ne do të kombinojmë funksionalitetin Arduino Leonardo HID (emuloni tastierën) me një sensor distancë tejzanor për të zbuluar nëse një person po përdor kompjuterin, nëse jo pajisja do të dërgojë një kombinim kyç përmes USB për të kyçur kompjuterin.

Hapi 1: Përbërësit

Për shkak se kjo është një dëshmi e konceptit, ne do ta ndërtojmë pajisjen në një dërrasë buke

Do t'ju duhet:

1. Arduino Leonardo (është e rëndësishme të përdorni Leonardo sepse mund të imitojë tastierën)

2. Sensori i distancës tejzanor HC-SR04

3. Rezistenca të ndryshueshme 2 x 10 K

4. bordi i bukës, telat e bukës

5. Kabllo USB

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

Hapi 2: Montimi dhe Ngarkimi

Montimi & Ngarkimi
Montimi & Ngarkimi

Së pari kontrolloni nëse keni të gjithë përbërësit e nevojshëm dhe një Arduino IDE. Unë do të shkoj shkurtimisht në hapat e lidhjes, dhe ju gjithmonë mund t'i hidhni një sy skemës së bashkangjitur

Kuvendi

1. Vendoseni Leonardon në pjatën e bukës dhe mbajeni në vend me një shirit gome

2. vendosni dy rezistorë të ndryshueshëm, ekranin OLED dhe sensorin tejzanor në dërrasën e bukës

3. lidhni bazat dhe vcc -të

4. lidhni kunjat e mesme të rezistorëve me arduino A0 dhe A1

5. lidhni SDA dhe SCL të ekranit me SDA dhe SCL të shënuara në Leonardo

6. lidhni këmbëzën e këmbëzës dhe ekon e sensorit tejzanor me 12, 13 kunjat dixhitale të Leonardo

7. lidheni USB -në me kompjuterin

Ngarkoni

Para së gjithash do t'ju duhet të shkarkoni dhe instaloni bibliotekat e nevojshme arduino:

1. Biblioteka GOFi2cOLED:

2. Biblioteka tejzanor-HC-SR04:

Nëse nuk dini si të instaloni bibliotekat arduino shikoni këtë tutorial.

Pasi të keni shkarkuar dhe instaluar bibliotekat e mësipërme, mund të klononi ose shkarkoni depon time arduino të vendosur këtu: https://github.com/danionescu0/arduino, dhe ne do ta përdorim këtë skicë: https://github.com/danionescu0 /arduino/pemë/master…

Ose mund të kopjoni dhe ngjisni kodin më poshtë:

/ * * Bibliotekat e përdorura nga ky 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;

Tejzanor tejzanor (12, 13);

const byte distancePot = A0;

konte byte timerPot = A1; const float përqindMaxDistanceChangedAllowed = 25; int Distanca aktuale; e panënshkruar e gjatë maxDistanceDetectionTime; bool lockTimerStarted = false;

void setup ()

{Serial.fillo (9600); Tastiera.filloj (); initializeDisplay (); }

lak void ()

{clearDisplay (); aktualeDistanca = getActualDistance (); writeStatusData (); doDisplay (); nëse (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = e vërtetë; maxDistanceDetectionTime = milis (); Serial.println ("fillon kohëmatësi i kyçjes"); } tjetër nëse (! shouldEnableLockTimer ()) {Serial.println ("kohëmatësi i kyçjes është i çaktivizuar"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Kyçja e ekranit"); } vonesë (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int lejuarDistanca = përqindMaxDistanceChangedAllowed / 100 * getDistance (); kthehu getTimer ()> 1 && getDistance ()> 1 && aktualeDistance - getDistance ()> lejohetDistanca; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Kohëmatësi:", String (getTimer ())); setDisplayText (1, "Distanca aktuale:", String (distanca aktuale)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Mesazh vargu = ""; if (shouldLockScreen ()) {mesazh = "bllokimi u dërgua"; } tjetër nëse (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {mesazh = "jo"; } setDisplayText (1, "Bllokimi:", mesazh); }

void initializeDisplay ()

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

i pavlefshëmDisplayText (madhësia e bajtit, Madhësia e etiketës, String data)

{GOFoled.setTextSize (fontSize); GOFoled.println (etiketa + ":" + të dhëna); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; për (byte i = 0; i <10; i ++) {distanceSum+= tejzanor. Varg (CM); }

distanca e kthimitSum / 10;

}

int getDistance ()

{harta e kthimit (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{harta e kthimit (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

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

Më në fund lidhni kompjuterin arduino duke përdorur kabllon usb dhe ngarkoni skicën në arduino.

Hapi 3: Përdorimi i pajisjes

Duke përdorur Pajisjen
Duke përdorur Pajisjen

Kur arduino është e lidhur me kompjuterin ai do të monitorojë vazhdimisht distancën para sensorit dhe do të dërgojë një kombinim të tastit të ekranit "lock" në kompjuter nëse distanca rritet.

Pajisja ka disa konfigurime:

1. Distanca normale, distanca mund të konfigurohet duke përdorur rezistencën e ndryshueshme të lidhur me A0. Distanca shfaqet gjithashtu në OLED. Kur distanca do të rritet me 25% nga ajo që është vendosur do të fillojë një numërim mbrapsht

2. Timeout (numërimi mbrapsht). Koha në sekonda është gjithashtu e konfigurueshme nga rezistenca e lidhur me A1. Kur skadon afati kohor, komanda e kyçjes do të dërgohet

3. Kyç kombinimin e çelësave. Kombinimi i parazgjedhur i çelësave të kyçjes është krijuar për të punuar për Ubuntu Linux 18 (CTRL+ALT+L). Për të ndryshuar kombinimin, duhet të modifikoni skicën tuaj sipas sistemit tuaj të funksionimit:

4. Timeout dhe mbrojtja në distancë. Për shkak se kjo është një pajisje që imiton tastierën, është një ide e mirë të keni një mekanizëm të çaktivizimit të funksionimit të tastierës. Në skicën time kam zgjedhur që afati kohor dhe distanca duhet të jenë më të mëdha se "1". (mund ta modifikoni në kod nëse dëshironi)

Gjeni dhe ndryshoni funksionin "lockScreen ()"

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

Për një listë të plotë të çelësave special arduino, shikoni këtu:

Hapi 4: Qasje të tjera

Para këtij zbatimi, unë kam marrë parasysh edhe disa zbatime të tjera:

1. Termometër infra të kuqe (MLX90614 https://www.sparkfun.com/products/10740). Një termometër infra të kuqe është një pajisje që mat temperaturën duke analizuar rrezatimet infra të kuqe të emetuara nga një objekt në distancë. Unë kisha një të shtrirë përreth dhe mendova se ndoshta mund ta zbuloj ndryshimin e temperaturës para kompjuterit.

E kam lidhur, por diferenca e temperaturës ishte shumë e vogël (kur isha përpara apo jo) 1-2 gradë dhe mendova se nuk mund të ishte aq e besueshme

2. sensor PIR. (https://www.sparkfun.com/products/13285) Këta sensorë të lirë tregtohen si "sensorë lëvizjeje", por ata vërtet zbulojnë ndryshimet në rrezatimin infra të kuqe, kështu që në teori mund të funksionojë, kur një person largohet nga kompjuteri, sensori do të zbulonte që.. Gjithashtu këta sensorë kanë çelësa të ngritur në kohë dhe ndjeshmëri. Kështu që unë e kam lidhur dhe kam luajtur me të, por duket se sensori nuk është bërë për një distancë të afërt (ka një kënd të gjerë), ai dha të gjitha llojet e paralajmërimeve të rreme.

3. Zbulimi i fytyrës duke përdorur kamerën në internet. Ky opsion dukej shumë interesant, pasi luaja me këtë fushë kompjuteri në projektet e mia të tjera si: https://github.com/danionescu0/robot-camera-platfo… dhe https://github.com/danionescu0/image-processing- pr…

Kjo ishte një copë tortë! Por kishte disa të meta: kamera e laptopit nuk mund të përdoret për qëllime të tjera kur programi po funksiononte, dhe disa burime kompjuteri do të kërkoheshin për këtë. Kështu që edhe unë e kam hequr dorë nga kjo ide.

Nëse keni më shumë ide se si mund të bëhet kjo, ju lutemi ndani ato, faleminderit!

Recommended: